From 766b9e0122536ef8d77b0557217cdef7355eac56 Mon Sep 17 00:00:00 2001 From: frankiefab100 <46662771+frankiefab100@users.noreply.github.com> Date: Wed, 29 Jun 2022 12:39:57 +0100 Subject: [PATCH 01/39] create react-play PWA --- package.json | 1 + public/index.html | 31 ++++++- public/logo.png | Bin 0 -> 22459 bytes public/manifest.json | 20 ++--- public/worker.js | 45 ++++++++++ src/ServiceWorkerRegistration.js | 141 +++++++++++++++++++++++++++++++ src/index.js | 3 + src/serviceWorker.js | 71 ++++++++++++++++ 8 files changed, 294 insertions(+), 18 deletions(-) create mode 100644 public/logo.png create mode 100644 public/worker.js create mode 100644 src/ServiceWorkerRegistration.js create mode 100644 src/serviceWorker.js diff --git a/package.json b/package.json index 3c222d764..f841e5dc8 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "@types/lodash": "^4.14.182", "@types/react": "^18.0.6", "@types/react-dom": "^18.0.2", + "cra-template-pwa": "^2.0.0", "date-fns": "^2.28.0", "firebase": "^9.8.2", "graphql": "^16.5.0", diff --git a/public/index.html b/public/index.html index 634bf5205..a18c69e76 100644 --- a/public/index.html +++ b/public/index.html @@ -2,9 +2,9 @@ - + - + @@ -14,7 +14,7 @@ manifest.json provides metadata used when your web app is installed on a user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/ --> - + + + diff --git a/public/logo.png b/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..60ca2c73c3074477031e81a8c9d95502ad551dc6 GIT binary patch literal 22459 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 { + // Perform install steps + event.waitUntil( + caches.open(CACHE_NAME).then(function (cache) { + console.log("Opened cache"); + return cache.addAll(urlsToCache); + }) + ); +}); + +// Cache and return requests +self.addEventListener("fetch", (event) => { + event.respondWith( + caches.match(event.request).then(function (response) { + // Cache hit - return response + if (response) { + return response; + } + return fetch(event.request); + }) + ); +}); + +// Update a service worker +self.addEventListener("activate", (event) => { + var cacheWhitelist = ["react-play"]; + event.waitUntil( + caches.keys().then((cacheNames) => { + return Promise.all( + cacheNames.map((cacheName) => { + if (cacheWhitelist.indexOf(cacheName) === -1) { + return caches.delete(cacheName); + } + }) + ); + }) + ); +}); diff --git a/src/ServiceWorkerRegistration.js b/src/ServiceWorkerRegistration.js new file mode 100644 index 000000000..fd0e8c5a6 --- /dev/null +++ b/src/ServiceWorkerRegistration.js @@ -0,0 +1,141 @@ +// This optional code is used to register a service worker. +// register() is not called by default. + +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on subsequent visits to a page, after all the +// existing tabs open on the page have been closed, since previously cached +// resources are updated in the background. + +// To learn more about the benefits of this model and instructions on how to +// opt-in, read https://cra.link/PWA + +const isLocalhost = Boolean( + window.location.hostname === "localhost" || + // [::1] is the IPv6 localhost address. + window.location.hostname === "[::1]" || + // 127.0.0.0/8 are considered localhost for IPv4. + window.location.hostname.match( + /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ + ) +); + +export function register(config) { + if (process.env.NODE_ENV === "production" && "serviceWorker" in navigator) { + // The URL constructor is available in all browsers that support SW. + const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); + if (publicUrl.origin !== window.location.origin) { + // Our service worker won't work if PUBLIC_URL is on a different origin + // from what our page is served on. This might happen if a CDN is used to + // serve assets; see https://github.com/facebook/create-react-app/issues/2374 + return; + } + + window.addEventListener("load", () => { + const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; + + if (isLocalhost) { + // This is running on localhost. Let's check if a service worker still exists or not. + checkValidServiceWorker(swUrl, config); + + // Add some additional logging to localhost, pointing developers to the + // service worker/PWA documentation. + navigator.serviceWorker.ready.then(() => { + console.log( + "This web app is being served cache-first by a service " + + "worker. To learn more, visit https://cra.link/PWA" + ); + }); + } else { + // Is not localhost. Just register service worker + registerValidSW(swUrl, config); + } + }); + } +} + +function registerValidSW(swUrl, config) { + navigator.serviceWorker + .register(swUrl) + .then((registration) => { + registration.onupdatefound = () => { + const installingWorker = registration.installing; + if (installingWorker == null) { + return; + } + installingWorker.onstatechange = () => { + if (installingWorker.state === "installed") { + if (navigator.serviceWorker.controller) { + // At this point, the updated precached content has been fetched, + // but the previous service worker will still serve the older + // content until all client tabs are closed. + console.log( + "New content is available and will be used when all " + + "tabs for this page are closed. See https://cra.link/PWA." + ); + + // Execute callback + if (config && config.onUpdate) { + config.onUpdate(registration); + } + } else { + // At this point, everything has been precached. + // It's the perfect time to display a + // "Content is cached for offline use." message. + console.log("Content is cached for offline use."); + + // Execute callback + if (config && config.onSuccess) { + config.onSuccess(registration); + } + } + } + }; + }; + }) + .catch((error) => { + console.error("Error during service worker registration:", error); + }); +} + +function checkValidServiceWorker(swUrl, config) { + // Check if the service worker can be found. If it can't reload the page. + fetch(swUrl, { + headers: { "Service-Worker": "script" }, + }) + .then((response) => { + // Ensure service worker exists, and that we really are getting a JS file. + const contentType = response.headers.get("content-type"); + if ( + response.status === 404 || + (contentType != null && contentType.indexOf("javascript") === -1) + ) { + // No service worker found. Probably a different app. Reload the page. + navigator.serviceWorker.ready.then((registration) => { + registration.unregister().then(() => { + window.location.reload(); + }); + }); + } else { + // Service worker found. Proceed as normal. + registerValidSW(swUrl, config); + } + }) + .catch(() => { + console.log( + "No internet connection found. App is running in offline mode." + ); + }); +} + +export function unregister() { + if ("serviceWorker" in navigator) { + navigator.serviceWorker.ready + .then((registration) => { + registration.unregister(); + }) + .catch((error) => { + console.error(error.message); + }); + } +} diff --git a/src/index.js b/src/index.js index 5ff033731..1d67371ff 100644 --- a/src/index.js +++ b/src/index.js @@ -4,6 +4,7 @@ import "index.css"; import React, { useState } from "react"; import { createRoot } from "react-dom/client"; import reportWebVitals from "reportWebVitals"; +import * as ServiceWorkerRegistration from "./ServiceWorkerRegistration"; /** removing console statement in react prod build */ if (process.env.NODE_ENV !== "development") { @@ -34,6 +35,8 @@ const Index = () => { const container = document.getElementById("root"); createRoot(container).render(); +ServiceWorkerRegistration.register(); + // If you want to start measuring performance in your app, pass a function // to log results (for example: reportWebVitals(console.log)) // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals diff --git a/src/serviceWorker.js b/src/serviceWorker.js new file mode 100644 index 000000000..dbbf1776d --- /dev/null +++ b/src/serviceWorker.js @@ -0,0 +1,71 @@ +/* eslint-disable no-restricted-globals */ + +// This service worker can be customized! +// See https://developers.google.com/web/tools/workbox/modules +// for the list of available Workbox modules, or add any other +// code you'd like. +// You can also remove this file if you'd prefer not to use a +// service worker, and the Workbox build step will be skipped. + +import { clientsClaim } from "workbox-core"; +import { ExpirationPlugin } from "workbox-expiration"; +import { precacheAndRoute, createHandlerBoundToURL } from "workbox-precaching"; +import { registerRoute } from "workbox-routing"; +import { StaleWhileRevalidate } from "workbox-strategies"; + +clientsClaim(); + +// Precache all of the assets generated by your build process. +// Their URLs are injected into the manifest variable below. +// This variable must be present somewhere in your service worker file, +// even if you decide not to use precaching. See https://cra.link/PWA +precacheAndRoute(self.__WB_MANIFEST); + +// Set up App Shell-style routing, so that all navigation requests +// are fulfilled with your index.html shell. Learn more at +// https://developers.google.com/web/fundamentals/architecture/app-shell +const fileExtensionRegexp = new RegExp("/[^/?]+\\.[^/]+$"); +registerRoute( + // Return false to exempt requests from being fulfilled by index.html. + ({ request, url }) => { + // If this isn't a navigation, skip. + if (request.mode !== "navigate") { + return false; + } // If this is a URL that starts with /_, skip. + + if (url.pathname.startsWith("/_")) { + return false; + } // If this looks like a URL for a resource, because it contains // a file extension, skip. + + if (url.pathname.match(fileExtensionRegexp)) { + return false; + } // Return true to signal that we want to use the handler. + + return true; + }, + createHandlerBoundToURL(process.env.PUBLIC_URL + "/index.html") +); + +// An example runtime caching route for requests that aren't handled by the +// precache, in this case same-origin .png requests like those from in public/ +registerRoute( + // Add in any other file extensions or routing criteria as needed. + ({ url }) => + url.origin === self.location.origin && url.pathname.endsWith(".png"), // Customize this strategy as needed, e.g., by changing to CacheFirst. + new StaleWhileRevalidate({ + cacheName: "images", + plugins: [ + // Ensure that once this runtime cache reaches a maximum size the + // least-recently used images are removed. + new ExpirationPlugin({ maxEntries: 50 }), + ], + }) +); + +// This allows the web app to trigger skipWaiting via +// registration.waiting.postMessage({type: 'SKIP_WAITING'}) +self.addEventListener("message", (event) => { + if (event.data && event.data.type === "SKIP_WAITING") { + self.skipWaiting(); + } +}); From f2b62e2e8c7ea26849b4cd15ed9d151eba8350ae Mon Sep 17 00:00:00 2001 From: "Franklin U.O. Ohaegbulam" <46662771+frankiefab100@users.noreply.github.com> Date: Thu, 30 Jun 2022 10:09:09 +0100 Subject: [PATCH 02/39] Update cache name --- public/worker.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/worker.js b/public/worker.js index 75b51edf5..74f18a509 100644 --- a/public/worker.js +++ b/public/worker.js @@ -1,4 +1,4 @@ -const CACHE_NAME = "react play"; +const CACHE_NAME = "reactplay"; const urlsToCache = ["/", "/completed"]; From a2928d69c430ff28938b78fa1a4f9ff1f1647248 Mon Sep 17 00:00:00 2001 From: "Franklin U.O. Ohaegbulam" <46662771+frankiefab100@users.noreply.github.com> Date: Thu, 30 Jun 2022 10:10:22 +0100 Subject: [PATCH 03/39] Update manifest short name and name --- public/manifest.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/manifest.json b/public/manifest.json index 79b792b01..1e8b0660e 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -1,6 +1,6 @@ { - "short_name": "React Play", - "name": "React Play PWA", + "short_name": "ReactPlay", + "name": "ReactPlay", "icons": [ { "src": "./logo.png", From 491b5f66b693ae55174b56b301f7d859e71f32cb Mon Sep 17 00:00:00 2001 From: frankiefab100 <46662771+frankiefab100@users.noreply.github.com> Date: Mon, 4 Jul 2022 11:49:57 +0100 Subject: [PATCH 04/39] optimize pwa --- package.json | 1 - public/logo512x512.png | Bin 0 -> 30830 bytes public/manifest.json | 22 +++++++++++++++++++--- public/maskable_icon.png | Bin 0 -> 30738 bytes 4 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 public/logo512x512.png create mode 100644 public/maskable_icon.png diff --git a/package.json b/package.json index f841e5dc8..3c222d764 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,6 @@ "@types/lodash": "^4.14.182", "@types/react": "^18.0.6", "@types/react-dom": "^18.0.2", - "cra-template-pwa": "^2.0.0", "date-fns": "^2.28.0", "firebase": "^9.8.2", "graphql": "^16.5.0", diff --git a/public/logo512x512.png b/public/logo512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..8d1fa803b2fdaeedd679b1acf06dbf434e365adf GIT binary patch literal 30830 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 literal 0 HcmV?d00001 diff --git a/public/manifest.json b/public/manifest.json index 79b792b01..4c2a8259f 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -3,9 +3,25 @@ "name": "React Play PWA", "icons": [ { - "src": "./logo.png", - "sizes": "any", - "type": "image/png" + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "maskable_icon.png", + "sizes": "64x64 32x32 24x24 16x16 512x512 192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512x512.png", + "type": "image/png", + "sizes": "512x512" } ], "start_url": ".", diff --git a/public/maskable_icon.png b/public/maskable_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3112957584f4a71d777fbf4af0da5e810b1063ae GIT binary patch literal 30738 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 XIc=>f{RsS%UqJc3s={YE^T7WFx Date: Tue, 12 Jul 2022 10:47:08 +0530 Subject: [PATCH 05/39] auth minimal work --- package.json | 1 + src/common/components/Like/Like.jsx | 82 +++++++++ src/common/components/Like/Like.scss | 233 ++++++++++++++++++++++++ src/common/playlists/PlayHeaderInfo.jsx | 27 ++- src/common/routing/RouteDefs.jsx | 2 +- 5 files changed, 341 insertions(+), 4 deletions(-) create mode 100644 src/common/components/Like/Like.jsx create mode 100644 src/common/components/Like/Like.scss diff --git a/package.json b/package.json index c3caacc4e..5b823d290 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "private": true, "dependencies": { "@giscus/react": "^2.0.3", + "@nhost/nhost-js": "^1.4.5", "@nhost/react": "^0.9.0", "@types/lodash": "^4.14.182", "@types/react": "^18.0.6", diff --git a/src/common/components/Like/Like.jsx b/src/common/components/Like/Like.jsx new file mode 100644 index 000000000..11d04718e --- /dev/null +++ b/src/common/components/Like/Like.jsx @@ -0,0 +1,82 @@ +import "./Like.scss"; + +const Like = ({ onLikeClick }) => { + return ( +
+
+
+ + +
+
+
+ ); +}; + +Like.defaultProps = { + onLikeClick: () => {} +} + +export default Like; diff --git a/src/common/components/Like/Like.scss b/src/common/components/Like/Like.scss new file mode 100644 index 000000000..c2e8541bf --- /dev/null +++ b/src/common/components/Like/Like.scss @@ -0,0 +1,233 @@ +.like-main { + margin: 0; + padding: 0; + -webkit-font-smoothing: antialiased; + font-family: arial; +} + +#main-content { + display: flex; + background: white; + align-items: center; + justify-content: center; + text-align: center; +} + +svg { + cursor: pointer; + overflow: visible; + width: 40px; + #heart { + transform-origin: center; + animation: animateHeartOut 0.3s linear forwards; + } + #main-circ { + transform-origin: 29.5px 29.5px; + } +} + +#checkbox { + display: none; +} + +#checkbox:checked + label svg { + #heart { + transform: scale(0.2); + fill: #e2264d; + animation: animateHeart 0.3s linear forwards 0.25s; + } + #main-circ { + transition: all 2s; + animation: animateCircle 0.3s linear forwards; + opacity: 1; + } + #grp1 { + opacity: 1; + transition: 0.1s all 0.3s; + #oval1 { + transform: scale(0) translate(0, -30px); + transform-origin: 0 0 0; + transition: 0.5s transform 0.3s; + } + #oval2 { + transform: scale(0) translate(10px, -50px); + transform-origin: 0 0 0; + transition: 1.5s transform 0.3s; + } + } + #grp2 { + opacity: 1; + transition: 0.1s all 0.3s; + #oval1 { + transform: scale(0) translate(30px, -15px); + transform-origin: 0 0 0; + transition: 0.5s transform 0.3s; + } + #oval2 { + transform: scale(0) translate(60px, -15px); + transform-origin: 0 0 0; + transition: 1.5s transform 0.3s; + } + } + #grp3 { + opacity: 1; + transition: 0.1s all 0.3s; + #oval1 { + transform: scale(0) translate(30px, 0px); + transform-origin: 0 0 0; + transition: 0.5s transform 0.3s; + } + #oval2 { + transform: scale(0) translate(60px, 10px); + transform-origin: 0 0 0; + transition: 1.5s transform 0.3s; + } + } + #grp4 { + opacity: 1; + transition: 0.1s all 0.3s; + #oval1 { + transform: scale(0) translate(30px, 15px); + transform-origin: 0 0 0; + transition: 0.5s transform 0.3s; + } + #oval2 { + transform: scale(0) translate(40px, 50px); + transform-origin: 0 0 0; + transition: 1.5s transform 0.3s; + } + } + #grp5 { + opacity: 1; + transition: 0.1s all 0.3s; + #oval1 { + transform: scale(0) translate(-10px, 20px); + transform-origin: 0 0 0; + transition: 0.5s transform 0.3s; + } + #oval2 { + transform: scale(0) translate(-60px, 30px); + transform-origin: 0 0 0; + transition: 1.5s transform 0.3s; + } + } + #grp6 { + opacity: 1; + transition: 0.1s all 0.3s; + #oval1 { + transform: scale(0) translate(-30px, 0px); + transform-origin: 0 0 0; + transition: 0.5s transform 0.3s; + } + #oval2 { + transform: scale(0) translate(-60px, -5px); + transform-origin: 0 0 0; + transition: 1.5s transform 0.3s; + } + } + #grp7 { + opacity: 1; + transition: 0.1s all 0.3s; + #oval1 { + transform: scale(0) translate(-30px, -15px); + transform-origin: 0 0 0; + transition: 0.5s transform 0.3s; + } + #oval2 { + transform: scale(0) translate(-55px, -30px); + transform-origin: 0 0 0; + transition: 1.5s transform 0.3s; + } + } + #grp2 { + opacity: 1; + transition: 0.1s opacity 0.3s; + } + #grp3 { + opacity: 1; + transition: 0.1s opacity 0.3s; + } + #grp4 { + opacity: 1; + transition: 0.1s opacity 0.3s; + } + #grp5 { + opacity: 1; + transition: 0.1s opacity 0.3s; + } + #grp6 { + opacity: 1; + transition: 0.1s opacity 0.3s; + } + #grp7 { + opacity: 1; + transition: 0.1s opacity 0.3s; + } +} + +@keyframes animateCircle { + 40% { + transform: scale(10); + opacity: 1; + fill: #dd4688; + } + 55% { + transform: scale(11); + opacity: 1; + fill: #d46abf; + } + 65% { + transform: scale(12); + opacity: 1; + fill: #cc8ef5; + } + 75% { + transform: scale(13); + opacity: 1; + fill: transparent; + stroke: #cc8ef5; + stroke-width: 0.5; + } + 85% { + transform: scale(17); + opacity: 1; + fill: transparent; + stroke: #cc8ef5; + stroke-width: 0.2; + } + 95% { + transform: scale(18); + opacity: 1; + fill: transparent; + stroke: #cc8ef5; + stroke-width: 0.1; + } + 100% { + transform: scale(19); + opacity: 1; + fill: transparent; + stroke: #cc8ef5; + stroke-width: 0; + } +} + +@keyframes animateHeart { + 0% { + transform: scale(0.2); + } + 40% { + transform: scale(1.2); + } + 100% { + transform: scale(1); + } +} + +@keyframes animateHeartOut { + 0% { + transform: scale(1.4); + } + 100% { + transform: scale(1); + } +} diff --git a/src/common/playlists/PlayHeaderInfo.jsx b/src/common/playlists/PlayHeaderInfo.jsx index 8d46ddb8e..a60fdbb76 100644 --- a/src/common/playlists/PlayHeaderInfo.jsx +++ b/src/common/playlists/PlayHeaderInfo.jsx @@ -1,11 +1,24 @@ import { IoMdArrowBack } from "react-icons/io"; import { Link } from "react-router-dom"; import LevelBadge from "common/components/LevelBadge"; +import Like from "common/components/Like/Like"; +import { NhostClient } from "@nhost/nhost-js"; + +const nhost = new NhostClient({ + subdomain: "eotczmyygmencxertmeq", + region: "eu-central-1" +}); const Author = ({ user, githubUsername }) => { return (
); }; diff --git a/src/common/routing/RouteDefs.jsx b/src/common/routing/RouteDefs.jsx index c52efd877..d6894ab1b 100644 --- a/src/common/routing/RouteDefs.jsx +++ b/src/common/routing/RouteDefs.jsx @@ -14,7 +14,7 @@ import { NhostClient, NhostReactProvider } from "@nhost/react"; import useGetPlays from "common/hooks/useGetPlays"; const nhost = new NhostClient({ - backendUrl: process.env.REACT_APP_NHOST_BACKEND_URL || "", + backendUrl: "https://dbfthfvixtwizmlpusmu.nhost.run" || "", }); const RouteDefs = () => { From a331cbac59aad1f9f1aba75e5a10ce04db93fccb Mon Sep 17 00:00:00 2001 From: Angryman18 Date: Mon, 18 Jul 2022 12:39:48 +0530 Subject: [PATCH 06/39] minimal work --- package.json | 3 +++ src/common/components/Like/Like.jsx | 27 ++++++++++++++++--- src/common/modal/MuiModal.jsx | 30 +++++++++++++++++++++ src/common/playlists/PlayHeaderInfo.jsx | 34 ++++++++++++++++++----- src/common/playlists/SignInMethods.jsx | 36 +++++++++++++++++++++++++ src/common/routing/RouteDefs.jsx | 1 + 6 files changed, 121 insertions(+), 10 deletions(-) create mode 100644 src/common/modal/MuiModal.jsx create mode 100644 src/common/playlists/SignInMethods.jsx diff --git a/package.json b/package.json index 5b823d290..3c870e899 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,10 @@ "version": "1.0.0", "private": true, "dependencies": { + "@emotion/react": "^11.9.3", + "@emotion/styled": "^11.9.3", "@giscus/react": "^2.0.3", + "@mui/material": "^5.9.0", "@nhost/nhost-js": "^1.4.5", "@nhost/react": "^0.9.0", "@types/lodash": "^4.14.182", diff --git a/src/common/components/Like/Like.jsx b/src/common/components/Like/Like.jsx index 11d04718e..1180ba43a 100644 --- a/src/common/components/Like/Like.jsx +++ b/src/common/components/Like/Like.jsx @@ -1,11 +1,30 @@ import "./Like.scss"; +import { useState, useEffect } from "react"; +import { useAuthenticated } from "@nhost/react"; const Like = ({ onLikeClick }) => { + const [liked, setLiked] = useState(false); + const isAuthenticated = useAuthenticated(); + + const likeClickHandler = (e) => { + if (onLikeClick) { + if (isAuthenticated) { + setLiked(e.target.checked); + } + onLikeClick(); + } + }; + return ( -
+
- +
); }; diff --git a/src/common/playlists/SignInMethods.jsx b/src/common/playlists/SignInMethods.jsx new file mode 100644 index 000000000..00cff9326 --- /dev/null +++ b/src/common/playlists/SignInMethods.jsx @@ -0,0 +1,36 @@ +import { Typography, Box, Stack, Button } from "@mui/material"; +import { FcGoogle } from "react-icons/fc"; +import { FaGithub } from "react-icons/fa"; + +const SignInMethods = ({ loginHandler }) => { + return ( + + Sign In + + + + + + ); +}; + +const ButtonBuilder = ({ Icon, text, onClick }) => { + return ( +
+ {text} +
+ ); +}; + +export default SignInMethods; diff --git a/src/common/routing/RouteDefs.jsx b/src/common/routing/RouteDefs.jsx index d6894ab1b..5db1793a1 100644 --- a/src/common/routing/RouteDefs.jsx +++ b/src/common/routing/RouteDefs.jsx @@ -20,6 +20,7 @@ const nhost = new NhostClient({ const RouteDefs = () => { const [loading, error, plays] = useGetPlays(); const success = !loading && !error && !!plays.length; + return ( From 7dd436687d97c3a7fe49f9901c1ebd1f1025fcc3 Mon Sep 17 00:00:00 2001 From: Angryman18 Date: Mon, 18 Jul 2022 20:40:56 +0530 Subject: [PATCH 07/39] env vars added --- src/common/playlists/PlayHeaderInfo.jsx | 10 ++++++---- src/common/routing/RouteDefs.jsx | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/common/playlists/PlayHeaderInfo.jsx b/src/common/playlists/PlayHeaderInfo.jsx index 8f19ede09..6c93bc961 100644 --- a/src/common/playlists/PlayHeaderInfo.jsx +++ b/src/common/playlists/PlayHeaderInfo.jsx @@ -9,8 +9,8 @@ import SignInMethods from "./SignInMethods"; import { useState } from "react"; const nhost = new NhostClient({ - subdomain: "dbfthfvixtwizmlpusmu", - region: "eu-central-1", + subdomain: process.env.REACT_APP_NHOST_SUBDOMAIN, + region: process.env.REACT_APP_NHOST_REGION }); const Author = ({ user, githubUsername }) => { @@ -51,14 +51,16 @@ const PlayHeaderInfo = ({ play }) => { const [showSignInMethods, setShowSignInMethods] = useState(false); const isAuthenticated = useAuthenticated(); + const handleLogin = async (value) => { return await nhost.auth.signIn({ provider: value, + options: { + redirectTo: window.location.href + } }); }; - console.log(isAuthenticated); - const modalHandler = (e) => { if (!isAuthenticated) { return setShowSignInMethods(!showSignInMethods); diff --git a/src/common/routing/RouteDefs.jsx b/src/common/routing/RouteDefs.jsx index aca46dcf0..a29879814 100644 --- a/src/common/routing/RouteDefs.jsx +++ b/src/common/routing/RouteDefs.jsx @@ -15,7 +15,7 @@ import { NhostClient, NhostReactProvider } from "@nhost/react"; import useGetPlays from "common/hooks/useGetPlays"; const nhost = new NhostClient({ - backendUrl: "https://dbfthfvixtwizmlpusmu.nhost.run" || "", + backendUrl: process.env.REACT_APP_NHOST_BACKEND_URL || "", }); const RouteDefs = () => { From d19a516410386551f9a831b1723fe0da205fe3cb Mon Sep 17 00:00:00 2001 From: Deepak8717 Date: Wed, 20 Jul 2022 11:51:45 +0530 Subject: [PATCH 08/39] liked button design and animation --- src/common/components/Like/Like.jsx | 110 +++------ src/common/components/Like/Like.scss | 271 ++++----------------- src/common/playlists/PlayHeaderActions.jsx | 15 +- src/common/playlists/PlayHeaderInfo.jsx | 49 ++-- src/common/playlists/PlayThumbnail.jsx | 34 +-- 5 files changed, 124 insertions(+), 355 deletions(-) diff --git a/src/common/components/Like/Like.jsx b/src/common/components/Like/Like.jsx index 1180ba43a..0697e234a 100644 --- a/src/common/components/Like/Like.jsx +++ b/src/common/components/Like/Like.jsx @@ -6,90 +6,40 @@ const Like = ({ onLikeClick }) => { const [liked, setLiked] = useState(false); const isAuthenticated = useAuthenticated(); - const likeClickHandler = (e) => { - if (onLikeClick) { - if (isAuthenticated) { - setLiked(e.target.checked); - } - onLikeClick(); - } + // const likeClickHandler = (e) => { + // if (onLikeClick) { + // if (isAuthenticated) { + // setLiked(e.target.checked); + // } + // onLikeClick(); + // } + // }; + const clickHandler = () => { + setLiked(!liked); }; - return ( -
-
-
- +
+ + - -
+ + + +
+
10
); }; diff --git a/src/common/components/Like/Like.scss b/src/common/components/Like/Like.scss index c2e8541bf..350ae2063 100644 --- a/src/common/components/Like/Like.scss +++ b/src/common/components/Like/Like.scss @@ -1,233 +1,50 @@ -.like-main { - margin: 0; - padding: 0; - -webkit-font-smoothing: antialiased; - font-family: arial; +*, +*::before, +*::after { + box-sizing: border-box; + position: relative; } -#main-content { - display: flex; - background: white; - align-items: center; - justify-content: center; - text-align: center; -} - -svg { +.like-container { + width: 45px; + height: 30px; cursor: pointer; - overflow: visible; - width: 40px; - #heart { - transform-origin: center; - animation: animateHeartOut 0.3s linear forwards; - } - #main-circ { - transform-origin: 29.5px 29.5px; - } -} - -#checkbox { - display: none; -} - -#checkbox:checked + label svg { - #heart { - transform: scale(0.2); - fill: #e2264d; - animation: animateHeart 0.3s linear forwards 0.25s; - } - #main-circ { - transition: all 2s; - animation: animateCircle 0.3s linear forwards; - opacity: 1; - } - #grp1 { - opacity: 1; - transition: 0.1s all 0.3s; - #oval1 { - transform: scale(0) translate(0, -30px); - transform-origin: 0 0 0; - transition: 0.5s transform 0.3s; - } - #oval2 { - transform: scale(0) translate(10px, -50px); - transform-origin: 0 0 0; - transition: 1.5s transform 0.3s; - } - } - #grp2 { - opacity: 1; - transition: 0.1s all 0.3s; - #oval1 { - transform: scale(0) translate(30px, -15px); - transform-origin: 0 0 0; - transition: 0.5s transform 0.3s; - } - #oval2 { - transform: scale(0) translate(60px, -15px); - transform-origin: 0 0 0; - transition: 1.5s transform 0.3s; - } - } - #grp3 { - opacity: 1; - transition: 0.1s all 0.3s; - #oval1 { - transform: scale(0) translate(30px, 0px); - transform-origin: 0 0 0; - transition: 0.5s transform 0.3s; - } - #oval2 { - transform: scale(0) translate(60px, 10px); - transform-origin: 0 0 0; - transition: 1.5s transform 0.3s; - } - } - #grp4 { - opacity: 1; - transition: 0.1s all 0.3s; - #oval1 { - transform: scale(0) translate(30px, 15px); - transform-origin: 0 0 0; - transition: 0.5s transform 0.3s; - } - #oval2 { - transform: scale(0) translate(40px, 50px); - transform-origin: 0 0 0; - transition: 1.5s transform 0.3s; - } - } - #grp5 { - opacity: 1; - transition: 0.1s all 0.3s; - #oval1 { - transform: scale(0) translate(-10px, 20px); - transform-origin: 0 0 0; - transition: 0.5s transform 0.3s; - } - #oval2 { - transform: scale(0) translate(-60px, 30px); - transform-origin: 0 0 0; - transition: 1.5s transform 0.3s; - } - } - #grp6 { - opacity: 1; - transition: 0.1s all 0.3s; - #oval1 { - transform: scale(0) translate(-30px, 0px); - transform-origin: 0 0 0; - transition: 0.5s transform 0.3s; - } - #oval2 { - transform: scale(0) translate(-60px, -5px); - transform-origin: 0 0 0; - transition: 1.5s transform 0.3s; - } - } - #grp7 { - opacity: 1; - transition: 0.1s all 0.3s; - #oval1 { - transform: scale(0) translate(-30px, -15px); - transform-origin: 0 0 0; - transition: 0.5s transform 0.3s; - } - #oval2 { - transform: scale(0) translate(-55px, -30px); - transform-origin: 0 0 0; - transition: 1.5s transform 0.3s; + display: flex; + justify-content: space-between; + .like-icon { + width: 25px; + height: 25px; + transition: transform 0.5s ease; + border-radius: 50%; + svg { + width: 25px; + position: absolute; + z-index: 10; + transition: background-color 0.2s ease, transform 0.2s ease, + opacity 0.4s ease; + path { + stroke: #646464; + stroke-width: 2px; + fill: none; + } + } + } + .like-count { + font-size: 14px; + line-height: 2; + } + .liked.front { + path { + fill: red; + stroke: none; + } + } + .liked.back { + opacity: 0; + transform: scale(1.6); + path { + fill: red; + stroke: none; } } - #grp2 { - opacity: 1; - transition: 0.1s opacity 0.3s; - } - #grp3 { - opacity: 1; - transition: 0.1s opacity 0.3s; - } - #grp4 { - opacity: 1; - transition: 0.1s opacity 0.3s; - } - #grp5 { - opacity: 1; - transition: 0.1s opacity 0.3s; - } - #grp6 { - opacity: 1; - transition: 0.1s opacity 0.3s; - } - #grp7 { - opacity: 1; - transition: 0.1s opacity 0.3s; - } -} - -@keyframes animateCircle { - 40% { - transform: scale(10); - opacity: 1; - fill: #dd4688; - } - 55% { - transform: scale(11); - opacity: 1; - fill: #d46abf; - } - 65% { - transform: scale(12); - opacity: 1; - fill: #cc8ef5; - } - 75% { - transform: scale(13); - opacity: 1; - fill: transparent; - stroke: #cc8ef5; - stroke-width: 0.5; - } - 85% { - transform: scale(17); - opacity: 1; - fill: transparent; - stroke: #cc8ef5; - stroke-width: 0.2; - } - 95% { - transform: scale(18); - opacity: 1; - fill: transparent; - stroke: #cc8ef5; - stroke-width: 0.1; - } - 100% { - transform: scale(19); - opacity: 1; - fill: transparent; - stroke: #cc8ef5; - stroke-width: 0; - } -} - -@keyframes animateHeart { - 0% { - transform: scale(0.2); - } - 40% { - transform: scale(1.2); - } - 100% { - transform: scale(1); - } -} - -@keyframes animateHeartOut { - 0% { - transform: scale(1.4); - } - 100% { - transform: scale(1); - } } diff --git a/src/common/playlists/PlayHeaderActions.jsx b/src/common/playlists/PlayHeaderActions.jsx index 5725e4f7a..82c21e227 100644 --- a/src/common/playlists/PlayHeaderActions.jsx +++ b/src/common/playlists/PlayHeaderActions.jsx @@ -4,6 +4,7 @@ import { IoLogoYoutube } from "react-icons/io"; import { AiOutlineRead } from "react-icons/ai"; import { BiComment } from "react-icons/bi"; import { MdClose } from "react-icons/md"; +import Like from "common/components/Like/Like"; import Comment from "common/components/Comment"; @@ -13,13 +14,13 @@ const PlayHeaderActions = ({ play }) => { return ( <> - { - - } + + + {play.path && (
{ return ( -
+
avatar {user?.displayName} @@ -37,10 +36,10 @@ const Author = ({ user, githubUsername }) => { const Tags = ({ tags }) => { return ( -