From 664322c5a3708cc0324513e9d13404aa7ff2d800 Mon Sep 17 00:00:00 2001 From: ikusteu Date: Tue, 30 May 2023 09:36:01 +0200 Subject: [PATCH 01/13] Create a matrix to run client unit tests in CI --- .github/workflow.templates/vitest-matrix.yml | 37 ++++++++++++++ .github/workflows/vitest-matrix.yml | 54 ++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 .github/workflow.templates/vitest-matrix.yml create mode 100644 .github/workflows/vitest-matrix.yml diff --git a/.github/workflow.templates/vitest-matrix.yml b/.github/workflow.templates/vitest-matrix.yml new file mode 100644 index 000000000..a56f3fe94 --- /dev/null +++ b/.github/workflow.templates/vitest-matrix.yml @@ -0,0 +1,37 @@ +#! YAML library files must be named *.lib.yml +#@ load("setup.lib.yml", "checkout") +#@ load("cache.lib.yml", "cache_node") +#@ load("rush.lib.yml", "rush_add_path", "rush_update", "rush_build") + +#! You can run this workflow bu pushing to a branch with the name +#! cypress-matrix/ + +name: VitestMatrix + +"on": + push: + branches: + - "vitest-matrix/**" + schedule: + - cron: "30 5 * * 1,3" + +jobs: + test-v18: + name: Run tests + runs-on: ubuntu-20.04 + strategy: + fail-fast: false + matrix: + dummy1: [1, 2, 3, 4, 5, 6] + dummy2: [1, 2, 3, 4, 5, 6] + steps: + - #@ checkout() + - uses: actions/setup-node@v2 + with: + node-version: "18" + - #@ cache_node() + - #@ rush_add_path() + - #@ rush_update() + - #@ rush_build() + - name: Run tests + run: cd packages/client && rushx test:emulators:ci diff --git a/.github/workflows/vitest-matrix.yml b/.github/workflows/vitest-matrix.yml new file mode 100644 index 000000000..d34cb926e --- /dev/null +++ b/.github/workflows/vitest-matrix.yml @@ -0,0 +1,54 @@ +name: VitestMatrix +"on": + push: + branches: + - vitest-matrix/** + schedule: + - cron: 30 5 * * 1,3 +jobs: + test-v18: + name: Run tests + runs-on: ubuntu-20.04 + strategy: + fail-fast: false + matrix: + dummy1: + - 1 + - 2 + - 3 + - 4 + - 5 + - 6 + dummy2: + - 1 + - 2 + - 3 + - 4 + - 5 + - 6 + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive + fetch-depth: 1 + - uses: actions/setup-node@v2 + with: + node-version: "18" + - name: Cache node modules and firebase emulators + uses: actions/cache@v2 + with: + path: | + ~/.rush + ~/.pnpm-store + common/temp + **/node_modules + ~/.cache/firebase/emulators + key: ${{ runner.os }}-modules-emulators-node18-v1-${{ hashFiles('**/pnpm-lock.yaml') }} + - name: Add rush directory to PATH + run: echo PATH=$PWD/common/scripts/:$PATH >> $GITHUB_ENV + - name: Install and build packages + run: rush update + - name: Build packages + run: rush build + - name: Run tests + run: cd packages/client && rushx test:emulators:ci From 2d92487209adb3054f4d2310d96b92245c19f6b2 Mon Sep 17 00:00:00 2001 From: ikusteu Date: Thu, 6 Jul 2023 17:20:35 +0200 Subject: [PATCH 02/13] Emphasise 'sign in with phone' and 'sign with email link' as main sign in methods: * Make the 'sign in with google' and 'sign in with email and password' buttons smaller (icon only) on login screen * Add Key and Google icons to 'svg' package * Update english translation for email signin to 'sign in with email and password' * Update related e2e tests --- .../ui/AuthDialog.tsx | 48 ++++++++++++++----- .../e2e/integration/athlete_self_register.ts | 2 +- packages/e2e/integration/login_flow_spec.ts | 10 ++-- packages/svg/src/assets/google.svg | 1 + packages/svg/src/assets/key.svg | 3 ++ packages/svg/src/index.ts | 2 + packages/translations/src/dict/en.json | 2 +- 7 files changed, 48 insertions(+), 20 deletions(-) create mode 100644 packages/svg/src/assets/google.svg create mode 100644 packages/svg/src/assets/key.svg diff --git a/packages/client/src/react-redux-firebase-auth/ui/AuthDialog.tsx b/packages/client/src/react-redux-firebase-auth/ui/AuthDialog.tsx index fc6ad4b2d..95b7addd3 100644 --- a/packages/client/src/react-redux-firebase-auth/ui/AuthDialog.tsx +++ b/packages/client/src/react-redux-firebase-auth/ui/AuthDialog.tsx @@ -7,6 +7,8 @@ import { } from "@firebase/auth"; import { useTranslation, AuthTitle } from "@eisbuk/translations"; +import { Google, Key } from "@eisbuk/svg"; +import { HoverText, IconButton, IconButtonSize } from "@eisbuk/ui"; import AuthButton from "./atoms/AuthButton"; import AuthContainer from "./atoms/AuthContainer"; @@ -56,8 +58,8 @@ const AuthDialog: React.FC = () => { {({ Content }) => ( -
    - {buttons.map(({ authFlow, label, ...button }) => ( +
      + {mainButtons.map(({ authFlow, label, ...button }) => ( { /> ))}
    + +
      + + {additionalButtons.map(({ authFlow, label, Icon }) => ( +
    • setAuthFlow(authFlow)} + aria-label={t(label)} + > + + + + + +
    • + ))} +
    )} @@ -73,7 +92,7 @@ const AuthDialog: React.FC = () => { } }; -export const buttons = [ +export const mainButtons = [ { color: "#ffff", backgroundColor: "#02bd7e", @@ -81,27 +100,30 @@ export const buttons = [ icon: "https://www.gstatic.com/firebasejs/ui/2.0.0/images/auth/phone.svg", authFlow: AuthFlow.Phone, }, + { + color: "#ffff", + backgroundColor: "#db4437", + label: `${AuthTitle.SignInWithEmailLink}`, + icon: "https://www.gstatic.com/firebasejs/ui/2.0.0/images/auth/mail.svg", + authFlow: AuthFlow.EmailLink, + }, +]; + +export const additionalButtons = [ { color: "#757575", backgroundColor: "#ffffff", label: AuthTitle.SignInWithGoogle, - icon: "https://www.gstatic.com/firebasejs/ui/2.0.0/images/auth/google.svg", + Icon: Google, authFlow: AuthFlow.Google, }, { color: "#ffff", - backgroundColor: "#db4437", + backgroundColor: "rgba(0,0,0,0.8)", label: AuthTitle.SignInWithEmail, - icon: "https://www.gstatic.com/firebasejs/ui/2.0.0/images/auth/mail.svg", + Icon: Key, authFlow: AuthFlow.Email, }, - { - color: "#ffff", - backgroundColor: "rgba(0,0,0,0.8)", - label: `${AuthTitle.SignInWithEmailLink}`, - icon: "https://www.gstatic.com/firebasejs/ui/2.0.0/images/auth/mail.svg", - authFlow: AuthFlow.EmailLink, - }, ]; export default AuthDialog; diff --git a/packages/e2e/integration/athlete_self_register.ts b/packages/e2e/integration/athlete_self_register.ts index 24fd5d9c7..8e686617d 100644 --- a/packages/e2e/integration/athlete_self_register.ts +++ b/packages/e2e/integration/athlete_self_register.ts @@ -47,7 +47,7 @@ describe("Athlete self registration", () => { }); it("creates a new account with not-yet-registered email and allows for self registration using the form", () => { - cy.clickButton(t(AuthTitle.SignInWithEmail)); + cy.getAttrWith("aria-label", t(AuthTitle.SignInWithEmail)).click(); // since auth service is shared amongst all organizations // we're creating a new email each time to ensure the current email // is not yet registered (by any previous tests) diff --git a/packages/e2e/integration/login_flow_spec.ts b/packages/e2e/integration/login_flow_spec.ts index 03ccd47f1..bc0eeacbf 100644 --- a/packages/e2e/integration/login_flow_spec.ts +++ b/packages/e2e/integration/login_flow_spec.ts @@ -45,7 +45,7 @@ describe("login", () => { cy.clearCookies(); cy.visit(PrivateRoutes.Root); // start email auth flow - cy.clickButton(t(AuthTitle.SignInWithEmail)); + cy.getAttrWith("aria-label", t(AuthTitle.SignInWithEmail)).click(); }); it("logs in with existing email", () => { @@ -131,7 +131,7 @@ describe("login", () => { cy.clickButton(t(ActionButton.Cancel)); // check mismatched password - cy.clickButton(t(AuthTitle.SignInWithEmail)); + cy.getAttrWith("aria-label", t(AuthTitle.SignInWithEmail)).click(); cy.getAttrWith("type", "email").type(defaultUser.email); cy.clickButton(t(ActionButton.Next)); cy.getAttrWith("type", "password").type("invalid-password"); @@ -166,7 +166,7 @@ describe("login", () => { cy.clickButton(t(ActionButton.Cancel)); // check sign in flow - cy.clickButton(t(AuthTitle.SignInWithEmail)); + cy.getAttrWith("aria-label", t(AuthTitle.SignInWithEmail)).click(); cy.getAttrWith("type", "email").type(defaultUser.email); cy.clickButton(t(ActionButton.Next)); // password is required @@ -415,7 +415,7 @@ describe("login", () => { const password = "password"; cy.addAuthUser({ email: saul.email, password }); // log in saul, who is not an admin, but exists in customers collection - cy.clickButton(t(AuthTitle.SignInWithEmail)); + cy.getAttrWith("aria-label", t(AuthTitle.SignInWithEmail)).click(); cy.getAttrWith("type", "email").type(saul.email); cy.clickButton(t(ActionButton.Next)); cy.contains(t(AuthTitle.SignIn)); @@ -431,7 +431,7 @@ describe("login", () => { const password = "password"; cy.addAuthUser({ email, password }); // log in saul, who is not an admin, but exists in customers collection - cy.clickButton(t(AuthTitle.SignInWithEmail)); + cy.getAttrWith("aria-label", t(AuthTitle.SignInWithEmail)).click(); cy.getAttrWith("type", "email").type(email); cy.clickButton(t(ActionButton.Next)); cy.contains(t(AuthTitle.SignIn)); diff --git a/packages/svg/src/assets/google.svg b/packages/svg/src/assets/google.svg new file mode 100644 index 000000000..4cf163bfe --- /dev/null +++ b/packages/svg/src/assets/google.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/svg/src/assets/key.svg b/packages/svg/src/assets/key.svg new file mode 100644 index 000000000..17ab14209 --- /dev/null +++ b/packages/svg/src/assets/key.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/svg/src/index.ts b/packages/svg/src/index.ts index 943c42d2e..2c88a8644 100644 --- a/packages/svg/src/index.ts +++ b/packages/svg/src/index.ts @@ -33,6 +33,8 @@ export { default as Identification } from "./assets/identification.svg"; export { default as FolderOpen } from "./assets/folder-open.svg"; export { default as Plus } from "./assets/plus.svg"; export { default as Minus } from "./assets/minus.svg"; +export { default as Google } from "./assets/google.svg"; +export { default as Key } from "./assets/key.svg"; // Export a standard type for SVG component, to be used throughout the app import type { SVGComponent } from "./types"; diff --git a/packages/translations/src/dict/en.json b/packages/translations/src/dict/en.json index fa393a084..cc2ac68cb 100644 --- a/packages/translations/src/dict/en.json +++ b/packages/translations/src/dict/en.json @@ -50,7 +50,7 @@ "Unknown": "Unknown error" }, "AuthTitle": { - "SignInWithEmail": "Sign in with email", + "SignInWithEmail": "Sign in with email and password", "SignInWithEmailLink": "Sign in with email link", "SignInWithPhone": "Sign in with phone", "SignInWithGoogle": "Sign in with Google", From 273fd179ffa5d74774e7ef932c7f58a88614ed1e Mon Sep 17 00:00:00 2001 From: Fadwa Date: Thu, 6 Jul 2023 21:47:26 +0300 Subject: [PATCH 03/13] Fix 0.5 slot --- packages/client/src/utils/__tests__/utils.test.ts | 3 +++ packages/client/src/utils/helpers.ts | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/client/src/utils/__tests__/utils.test.ts b/packages/client/src/utils/__tests__/utils.test.ts index fb74bab9c..c31823026 100644 --- a/packages/client/src/utils/__tests__/utils.test.ts +++ b/packages/client/src/utils/__tests__/utils.test.ts @@ -38,6 +38,7 @@ describe("Helpers", () => { }); test("should convert string to number", () => { + const halfStr = "21:00 - 21:20"; const oneStr = "16:00 - 17:00"; const oneHalfStr = "22:00 - 23:30"; const twoStr = "22:00 - 24:00"; @@ -46,9 +47,11 @@ describe("Helpers", () => { // const morningResult = convertIntervalToNum(morningStr); const oneResult = calculateIntervalDuration(oneStr); const oneHalfResult = calculateIntervalDuration(oneHalfStr); + const halfResult = calculateIntervalDuration(halfStr); const twoResult = calculateIntervalDuration(twoStr); const nonStdResult = calculateIntervalDuration(nonStdStr); + expect(halfResult).toBe(0.5); expect(oneResult).toBe(1); expect(oneHalfResult).toBe(1.5); expect(twoResult).toBe(2); diff --git a/packages/client/src/utils/helpers.ts b/packages/client/src/utils/helpers.ts index 53dd2b8f5..a4fc30082 100644 --- a/packages/client/src/utils/helpers.ts +++ b/packages/client/src/utils/helpers.ts @@ -102,6 +102,7 @@ const getMillisFromMidnight = (time: string) => * @param {string | null} interval - String slot interval * Converts a string slot interval to a number e.g: * `null => 0`; + * `"21:00 - 21:20" => 0.5`; * `"16:00 - 17:00" => 1.0`; * `"22:00 - 23:30" => 1.5`; * `"22:00 - 24:00" => 2`; @@ -118,7 +119,9 @@ export const calculateIntervalDuration = (interval: string | null) => { const diffMillis = getMillisFromMidnight(endTime) - getMillisFromMidnight(startTime); - return diffMillis <= hourInMillis + return diffMillis <= hourInMillis * 0.5 + ? 0.5 + : diffMillis <= hourInMillis ? 1 : diffMillis <= hourInMillis * 1.5 ? 1.5 From 70a428b70b66317aa53f73ec7d228fc6f22bfd87 Mon Sep 17 00:00:00 2001 From: Fadwa Date: Thu, 6 Jul 2023 23:22:30 +0300 Subject: [PATCH 04/13] Fix 0.5 slot --- packages/client/src/utils/helpers.ts | 8 +------- packages/ui/src/IntervalCard/BookingCardContainer.tsx | 1 + packages/ui/src/IntervalCard/CardContent.tsx | 1 + .../src/IntervalCard/__tests__/intervalCardUtils.test.ts | 4 ++++ packages/ui/src/IntervalCard/types.ts | 1 + packages/ui/src/IntervalCard/utils.ts | 7 ++----- 6 files changed, 10 insertions(+), 12 deletions(-) diff --git a/packages/client/src/utils/helpers.ts b/packages/client/src/utils/helpers.ts index a4fc30082..372bf5f27 100644 --- a/packages/client/src/utils/helpers.ts +++ b/packages/client/src/utils/helpers.ts @@ -119,13 +119,7 @@ export const calculateIntervalDuration = (interval: string | null) => { const diffMillis = getMillisFromMidnight(endTime) - getMillisFromMidnight(startTime); - return diffMillis <= hourInMillis * 0.5 - ? 0.5 - : diffMillis <= hourInMillis - ? 1 - : diffMillis <= hourInMillis * 1.5 - ? 1.5 - : 2; + return Math.ceil((diffMillis / hourInMillis) * 2) * 0.5; }; /** * interpolate text including

    diff --git a/packages/ui/src/IntervalCard/BookingCardContainer.tsx b/packages/ui/src/IntervalCard/BookingCardContainer.tsx index 26d8ea2b7..9f9f25309 100644 --- a/packages/ui/src/IntervalCard/BookingCardContainer.tsx +++ b/packages/ui/src/IntervalCard/BookingCardContainer.tsx @@ -29,6 +29,7 @@ const BookingCardContainer: React.FC = ({ }; const containerSizeLookup = { + [IntervalDuration["0.5h"]]: ["w-[200px]", "min-h-[110px]", "px-4", "py-2.5"], [IntervalDuration["1h"]]: ["w-[220px]", "min-h-[110px]", "px-4", "py-2.5"], [IntervalDuration["1.5h"]]: ["w-[320px]", "h-[128px]", "px-4", "py-3"], [IntervalDuration["2h"]]: ["w-[401px]", "h-[146px]", "px-4", "py-3"], diff --git a/packages/ui/src/IntervalCard/CardContent.tsx b/packages/ui/src/IntervalCard/CardContent.tsx index 055590aac..28b1adf61 100644 --- a/packages/ui/src/IntervalCard/CardContent.tsx +++ b/packages/ui/src/IntervalCard/CardContent.tsx @@ -80,6 +80,7 @@ const getTimestringClasses = ( ].join(" "); const timestringBookingSizeLookup = { + [IntervalDuration["0.5h"]]: ["mb-2", "text-md", "leading-8", "font-semibold"], [IntervalDuration["1h"]]: ["mb-2", "text-lg", "leading-8", "font-semibold"], [IntervalDuration["1.5h"]]: [ "mb-2", diff --git a/packages/ui/src/IntervalCard/__tests__/intervalCardUtils.test.ts b/packages/ui/src/IntervalCard/__tests__/intervalCardUtils.test.ts index e2445fe09..63418b3bf 100644 --- a/packages/ui/src/IntervalCard/__tests__/intervalCardUtils.test.ts +++ b/packages/ui/src/IntervalCard/__tests__/intervalCardUtils.test.ts @@ -21,6 +21,10 @@ const runCalculateDurationTableTests = (tests: TestParams[]) => { describe("IntervalCard", () => { describe("calculateDuration util", () => { runCalculateDurationTableTests([ + { startTime: "09:00", endTime: "09:15", want: IntervalDuration["0.5h"] }, + { startTime: "09:00", endTime: "09:20", want: IntervalDuration["0.5h"] }, + { startTime: "09:00", endTime: "09:30", want: IntervalDuration["0.5h"] }, + { startTime: "09:00", endTime: "09:40", want: IntervalDuration["1h"] }, { startTime: "09:00", endTime: "09:50", want: IntervalDuration["1h"] }, { startTime: "09:00", endTime: "10:00", want: IntervalDuration["1h"] }, diff --git a/packages/ui/src/IntervalCard/types.ts b/packages/ui/src/IntervalCard/types.ts index 19cf9888e..2435ab0ef 100644 --- a/packages/ui/src/IntervalCard/types.ts +++ b/packages/ui/src/IntervalCard/types.ts @@ -17,6 +17,7 @@ export enum IntervalCardVariant { } export enum IntervalDuration { + "0.5h", "1h", "1.5h", "2h", diff --git a/packages/ui/src/IntervalCard/utils.ts b/packages/ui/src/IntervalCard/utils.ts index 1a192a701..bdf275587 100644 --- a/packages/ui/src/IntervalCard/utils.ts +++ b/packages/ui/src/IntervalCard/utils.ts @@ -17,9 +17,6 @@ export const calculateDuration = (startTime: string, endTime: string) => { const diffMillis = getMillisFromMidnight(endTime) - getMillisFromMidnight(startTime); - return diffMillis <= hourInMillis - ? IntervalDuration["1h"] - : diffMillis <= hourInMillis * 1.5 - ? IntervalDuration["1.5h"] - : IntervalDuration["2h"]; + const duration = `${Math.ceil((diffMillis / hourInMillis) * 2) * 0.5}h`; + return IntervalDuration[duration]; }; From 9aab6dc8f02a55eb6c5d21d34cfa3a9347de08a6 Mon Sep 17 00:00:00 2001 From: ikusteu Date: Sat, 8 Jul 2023 09:53:30 +0200 Subject: [PATCH 05/13] Auto focus particular fields for each login step (for all flows) --- .../src/react-redux-firebase-auth/ui/flows/EmailFlow.tsx | 6 +++--- .../react-redux-firebase-auth/ui/flows/EmailLinkFlow.tsx | 4 +++- .../src/react-redux-firebase-auth/ui/flows/PhoneFlow.tsx | 2 ++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/client/src/react-redux-firebase-auth/ui/flows/EmailFlow.tsx b/packages/client/src/react-redux-firebase-auth/ui/flows/EmailFlow.tsx index e3e2b0230..8c33136fb 100644 --- a/packages/client/src/react-redux-firebase-auth/ui/flows/EmailFlow.tsx +++ b/packages/client/src/react-redux-firebase-auth/ui/flows/EmailFlow.tsx @@ -203,15 +203,15 @@ const titleLookup = { */ const fieldsLookup: AuthTextFieldLookup = { [EmailAuthStep.SignInWithEmail]: [ - { name: "email", label: "Email", type: "email" }, + { name: "email", label: "Email", type: "email", autoFocus: true }, ], [EmailAuthStep.SignInWithEmailPassword]: [ { name: "email", label: "Email", type: "email" }, - { name: "password", label: "Password", type: "password" }, + { name: "password", label: "Password", type: "password", autoFocus: true }, ], [EmailAuthStep.CreateAccountEmailPassword]: [ { name: "email", label: "Email", type: "email" }, - { name: "password", label: "Password", type: "password" }, + { name: "password", label: "Password", type: "password", autoFocus: true }, ], [EmailAuthStep.RecoverEmailPassword]: [ { name: "email", label: "Email", type: "email" }, diff --git a/packages/client/src/react-redux-firebase-auth/ui/flows/EmailLinkFlow.tsx b/packages/client/src/react-redux-firebase-auth/ui/flows/EmailLinkFlow.tsx index 79679396c..1e007f766 100644 --- a/packages/client/src/react-redux-firebase-auth/ui/flows/EmailLinkFlow.tsx +++ b/packages/client/src/react-redux-firebase-auth/ui/flows/EmailLinkFlow.tsx @@ -205,7 +205,9 @@ const fieldsLookup: AuthTextFieldLookup = Object.values( ? { ...acc, // all auth steps except for `EmailLinkAuthStep.CheckSignInEmail` have the same (email) input field - [authStep]: [{ name: "email", label: "Email", type: "email" }], + [authStep]: [ + { name: "email", label: "Email", type: "email", autoFocus: true }, + ], } : acc, {} diff --git a/packages/client/src/react-redux-firebase-auth/ui/flows/PhoneFlow.tsx b/packages/client/src/react-redux-firebase-auth/ui/flows/PhoneFlow.tsx index 0013ab373..6412f5a68 100644 --- a/packages/client/src/react-redux-firebase-auth/ui/flows/PhoneFlow.tsx +++ b/packages/client/src/react-redux-firebase-auth/ui/flows/PhoneFlow.tsx @@ -200,6 +200,7 @@ const fieldsLookup: AuthTextFieldLookup = { label: "Phone", type: "tel", inputMode: "tel", + autoFocus: true, }, ], [PhoneAuthStep.EnterSMSCode]: [ @@ -209,6 +210,7 @@ const fieldsLookup: AuthTextFieldLookup = { label: "SMS Code", type: "text", inputMode: "numeric", + autoFocus: true, }, ], }; From 60cf185ffd902e0ab6f807d0ba576b65a5c6f89a Mon Sep 17 00:00:00 2001 From: ikusteu Date: Sat, 8 Jul 2023 21:41:16 +0200 Subject: [PATCH 06/13] Add 'Fredoka One' font to the client app (for organization display name) --- .../public/fonts/fredoka/fredoka_variable.ttf | Bin 0 -> 158400 bytes packages/client/src/main.css | 8 ++++++++ packages/client/tailwind.config.js | 3 +++ 3 files changed, 11 insertions(+) create mode 100644 packages/client/public/fonts/fredoka/fredoka_variable.ttf diff --git a/packages/client/public/fonts/fredoka/fredoka_variable.ttf b/packages/client/public/fonts/fredoka/fredoka_variable.ttf new file mode 100644 index 0000000000000000000000000000000000000000..cf4a46fb8f35c5b3dbf22710630422533324ef7f GIT binary patch literal 158400 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�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 literal 0 HcmV?d00001 diff --git a/packages/client/src/main.css b/packages/client/src/main.css index c5a9ad1f8..2d2860c04 100644 --- a/packages/client/src/main.css +++ b/packages/client/src/main.css @@ -5,6 +5,14 @@ @import "tailwindcss/utilities"; @import "../../ui/dist/style.css"; +@font-face { + font-family: "Fredoka One"; + src: url("/fonts/fredoka/fredoka_variable.ttf") format("truetype"); + font-weight: 300 700; + font-style: normal; + font-display: swap; +} + .center-absolute { @apply absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2; } diff --git a/packages/client/tailwind.config.js b/packages/client/tailwind.config.js index 4bf28fbc3..080f6ff98 100644 --- a/packages/client/tailwind.config.js +++ b/packages/client/tailwind.config.js @@ -5,6 +5,9 @@ module.exports = { theme: { ...baseConfig.theme, extend: { + fontFamily: { + fredoka: ["Fredoka One", "sans-serif"], + }, ...baseConfig.theme.extend, keyframes: { ...baseConfig.theme.extend.keyframes, From 7b336bd3a90b2bdee886f4decf9191f9c74c2636 Mon Sep 17 00:00:00 2001 From: ikusteu Date: Sat, 8 Jul 2023 23:23:06 +0200 Subject: [PATCH 07/13] Create 'LayoutController' component: * Create the componenent in 'client' package (as a single source of truth for the app layout * Use the controller on each page (passing in only the page-specific content) instead of the 'Layout' from the UI --- packages/client/src/controllers/Layout.tsx | 57 +++++++++++++++++++ packages/client/src/data/navigation.ts | 27 --------- .../src/pages/admin_preferences/index.tsx | 16 +----- .../src/pages/athlete_profile/index.tsx | 16 +----- .../client/src/pages/attendance/index.tsx | 23 +------- .../src/pages/attendance_printable/index.tsx | 15 +---- .../client/src/pages/customer_area/index.tsx | 21 +------ packages/client/src/pages/customers/index.tsx | 16 +----- packages/client/src/pages/debug/index.tsx | 23 +------- .../client/src/pages/self_register/index.tsx | 6 +- packages/client/src/pages/slots/index.tsx | 15 +---- 11 files changed, 83 insertions(+), 152 deletions(-) create mode 100644 packages/client/src/controllers/Layout.tsx delete mode 100644 packages/client/src/data/navigation.ts diff --git a/packages/client/src/controllers/Layout.tsx b/packages/client/src/controllers/Layout.tsx new file mode 100644 index 000000000..942ef0601 --- /dev/null +++ b/packages/client/src/controllers/Layout.tsx @@ -0,0 +1,57 @@ +import React from "react"; +import { useSelector } from "react-redux"; + +import { LinkItem, Layout, UserAvatarProps } from "@eisbuk/ui"; +import { PrivateRoutes } from "@eisbuk/shared/ui"; +import i18n, { NavigationLabel } from "@eisbuk/translations"; +import { ClipboardList, Users, DocumentDuplicate, Cog } from "@eisbuk/svg"; + +import BirthdayMenu from "@/controllers/BirthdayMenu"; +import { NotificationsContainer } from "@/features/notifications/components/index"; + +import { getIsAdmin } from "@/store/selectors/auth"; + +interface Props { + user?: UserAvatarProps; + additionalButtons?: JSX.Element; + children?: React.ReactNode[] | React.ReactNode; +} + +const LayoutController: React.FC = (params) => { + const isAdmin = useSelector(getIsAdmin); + + return ( + } + /> + ); +}; + +const adminLinks: LinkItem[] = [ + { + Icon: ClipboardList, + label: i18n.t(NavigationLabel.Attendance), + slug: PrivateRoutes.Root, + }, + { + Icon: DocumentDuplicate, + label: i18n.t(NavigationLabel.Slots), + slug: PrivateRoutes.Slots, + }, + { + Icon: Users, + label: i18n.t(NavigationLabel.Athletes), + slug: PrivateRoutes.Athletes, + }, + { + Icon: Cog, + label: i18n.t(NavigationLabel.OrganizationSettings), + slug: PrivateRoutes.AdminPreferences, + }, +]; + +export default LayoutController; diff --git a/packages/client/src/data/navigation.ts b/packages/client/src/data/navigation.ts deleted file mode 100644 index 9e1cd3a7f..000000000 --- a/packages/client/src/data/navigation.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { LinkItem } from "@eisbuk/ui"; -import { PrivateRoutes } from "@eisbuk/shared/ui"; -import i18n, { NavigationLabel } from "@eisbuk/translations"; -import { ClipboardList, Users, DocumentDuplicate, Cog } from "@eisbuk/svg"; - -export const adminLinks: LinkItem[] = [ - { - Icon: ClipboardList, - label: i18n.t(NavigationLabel.Attendance), - slug: PrivateRoutes.Root, - }, - { - Icon: DocumentDuplicate, - label: i18n.t(NavigationLabel.Slots), - slug: PrivateRoutes.Slots, - }, - { - Icon: Users, - label: i18n.t(NavigationLabel.Athletes), - slug: PrivateRoutes.Athletes, - }, - { - Icon: Cog, - label: i18n.t(NavigationLabel.OrganizationSettings), - slug: PrivateRoutes.AdminPreferences, - }, -]; diff --git a/packages/client/src/pages/admin_preferences/index.tsx b/packages/client/src/pages/admin_preferences/index.tsx index 8b229901b..9ae927637 100644 --- a/packages/client/src/pages/admin_preferences/index.tsx +++ b/packages/client/src/pages/admin_preferences/index.tsx @@ -9,12 +9,11 @@ import i18n, { ValidationMessage, useTranslation, } from "@eisbuk/translations"; -import { Layout, Button, ButtonColor, ButtonSize, TabItem } from "@eisbuk/ui"; +import { Button, ButtonColor, ButtonSize, TabItem } from "@eisbuk/ui"; import { Cog, Mail } from "@eisbuk/svg"; +import Layout from "@/controllers/Layout"; import AdminsField from "./AdminsField"; -import BirthdayMenu from "@/controllers/BirthdayMenu"; -import { NotificationsContainer } from "@/features/notifications/components"; import { updateOrganization } from "@/store/actions/organizationOperations"; import { getOrganizationSettings } from "@/store/selectors/app"; @@ -22,8 +21,6 @@ import { getLocalAuth } from "@/store/selectors/auth"; import { isEmpty } from "@/utils/helpers"; -import { adminLinks } from "@/data/navigation"; - import EmailTemplateSettings from "./views/EmailTemplateSettings"; import GeneralSettings from "./views/GeneralSettings"; @@ -55,7 +52,6 @@ const OrganizationSettings: React.FC = () => { const organization = useSelector(getOrganizationSettings); const userAuthInfo = useSelector(getLocalAuth); - const additionalAdminContent = ; const { t } = useTranslation(); @@ -99,13 +95,7 @@ const OrganizationSettings: React.FC = () => { ); return ( - +

    { useFirestoreSubscribe(getOrganization(), [ @@ -37,9 +34,7 @@ const AthleteProfilePage: React.FC = () => { const { openWithProps: openDeleteCustomerDialog } = useDeleteCustomer(); const { openWithProps: openExtendDateDialog } = useExtendDateModal(); - // Layout content const customers = useSelector(getCustomersList()); - const additionalAdminContent = ; // Get customer (if exists) const { athlete } = useParams<{ athlete?: string }>(); @@ -60,12 +55,7 @@ const AthleteProfilePage: React.FC = () => { }; return ( - +
    { ) : undefined; - const additionalAdminContent = ; - const additionalButtons = ( <> { ); return ( - + { @@ -37,8 +35,6 @@ const DashboardPage: React.FC = () => { const organizationName = useSelector(getOrgDisplayName); const attendanceSlots = useSelector(getSlotsWithAttendance); - const additionalAdminContent = ; - /** * This button, unlike the one in attendance page doesn't link * but initiates `window.print` which is very similar (99%) to @@ -60,12 +56,7 @@ const DashboardPage: React.FC = () => { ); return ( - + dispatch(changeCalendarDate(date))} diff --git a/packages/client/src/pages/customer_area/index.tsx b/packages/client/src/pages/customer_area/index.tsx index 5251b8e10..23a4c1555 100644 --- a/packages/client/src/pages/customer_area/index.tsx +++ b/packages/client/src/pages/customer_area/index.tsx @@ -2,7 +2,7 @@ import React, { useState } from "react"; import { useSelector } from "react-redux"; import i18n, { CustomerNavigationLabel } from "@eisbuk/translations"; -import { CalendarNav, Layout, TabItem } from "@eisbuk/ui"; +import { CalendarNav, TabItem } from "@eisbuk/ui"; import { Calendar, AccountCircle, ClipboardList } from "@eisbuk/svg"; import { BookingSubCollection, @@ -18,15 +18,11 @@ import CalendarView from "./views/Calendar"; import ProfileView from "./views/Profile"; import { useSecretKey, useDate } from "./hooks"; -import { NotificationsContainer } from "@/features/notifications/components"; import AddToCalendar from "@/components/atoms/AddToCalendar"; -import BirthdayMenu from "@/controllers/BirthdayMenu"; +import Layout from "@/controllers/Layout"; import { getBookingsCustomer } from "@/store/selectors/bookings"; -import { getIsAdmin } from "@/store/selectors/auth"; - -import { adminLinks } from "@/data/navigation"; enum Views { Book = "BookView", @@ -47,10 +43,6 @@ const viewsLookup = { const CustomerArea: React.FC = () => { const secretKey = useSecretKey(); - const isAdmin = useSelector(getIsAdmin); - - const additionalAdminContent = ; - // Subscribe to necessary collections useFirestoreSubscribe(getOrganization(), [ { collection: OrgSubCollection.SlotsByDay }, @@ -96,14 +88,7 @@ const CustomerArea: React.FC = () => { ); return ( - + {view !== "ProfileView" && ( { const { t } = useTranslation(); const history = useHistory(); @@ -37,8 +34,6 @@ const AthletesPage: React.FC = () => { useTitle(t(NavigationLabel.Athletes)); - const additionalAdminContent = ; - const customers = useSelector(getCustomersList(true)); // Search logic @@ -50,12 +45,7 @@ const AthletesPage: React.FC = () => { /** @TODO update below when we create `isEmpty` and `isLoaded` helpers */ return ( - +
    {!isEmpty(customers) && ( <> diff --git a/packages/client/src/pages/debug/index.tsx b/packages/client/src/pages/debug/index.tsx index cc379fc7d..a574e99fd 100644 --- a/packages/client/src/pages/debug/index.tsx +++ b/packages/client/src/pages/debug/index.tsx @@ -5,27 +5,17 @@ import { signInWithEmailAndPassword, } from "@firebase/auth"; -import { - Button, - ButtonColor, - ButtonProps, - ButtonSize, - Layout, -} from "@eisbuk/ui"; +import { Button, ButtonColor, ButtonProps, ButtonSize } from "@eisbuk/ui"; import { CloudFunction } from "@eisbuk/shared/ui"; import { functions } from "@/setup"; -import BirthdayMenu from "@/controllers/BirthdayMenu"; - -import { NotificationsContainer } from "@/features/notifications/components"; +import Layout from "@/controllers/Layout"; import useTitle from "@/hooks/useTitle"; import { createFunctionCaller } from "@/utils/firebase"; -import { adminLinks } from "@/data/navigation"; - const auth = getAuth(); /** @@ -58,15 +48,8 @@ const DebugPageButton: React.FC> = ({ const DebugPage: React.FC = () => { useTitle("Debug"); - const additionalAdminContent = ; - return ( - +
    { } return ( - +
    diff --git a/packages/client/src/pages/slots/index.tsx b/packages/client/src/pages/slots/index.tsx index 5847cfcf2..69d870717 100644 --- a/packages/client/src/pages/slots/index.tsx +++ b/packages/client/src/pages/slots/index.tsx @@ -11,7 +11,6 @@ import { Button, ButtonColor, CalendarNav, - Layout, SlotsDayContainer, } from "@eisbuk/ui"; @@ -24,14 +23,13 @@ import { LocalStore, SlotsWeek } from "@/types/store"; import { getOrganization } from "@/lib/getters"; +import Layout from "@/controllers/Layout"; import SlotOperationButtons, { CopyButton, PasteButton, NewSlotButton, } from "@/components/atoms/SlotOperationButtons"; import SlotCard from "@/controllers/SlotCard"; -import BirthdayMenu from "@/controllers/BirthdayMenu"; -import { NotificationsContainer } from "@/features/notifications/components"; import { getAdminSlots } from "@/store/selectors/slots"; import { getCalendarDay } from "@/store/selectors/app"; @@ -48,8 +46,6 @@ import { changeCalendarDate } from "@/store/actions/appActions"; import { comparePeriods } from "@/utils/sort"; -import { adminLinks } from "@/data/navigation"; - const SlotsPage: React.FC = () => { const dispatch = useDispatch(); @@ -71,8 +67,6 @@ const SlotsPage: React.FC = () => { (state: LocalStore) => state.firestore.data.attendance || {} ); - const additionalAdminContent = ; - const { t } = useTranslation(); // We're using this to disable the slot buttons when we're pasting a week @@ -130,12 +124,7 @@ const SlotsPage: React.FC = () => { }; return ( - + dispatch(changeCalendarDate(date))} From ff575e320d27fdc157d22a42610df1324d5c08f9 Mon Sep 17 00:00:00 2001 From: ikusteu Date: Sat, 8 Jul 2023 23:26:21 +0200 Subject: [PATCH 08/13] * Make the Layout component in 'ui' package accept 'logo' as JSX.Element (instead of a component) * Use EisbukAvatar in stories, but not in production --- packages/ui/src/Layout/Layout.stories.tsx | 14 +++++++++++--- packages/ui/src/Layout/Layout.tsx | 9 ++++----- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/packages/ui/src/Layout/Layout.stories.tsx b/packages/ui/src/Layout/Layout.stories.tsx index fc16303b8..04b6b2904 100644 --- a/packages/ui/src/Layout/Layout.stories.tsx +++ b/packages/ui/src/Layout/Layout.stories.tsx @@ -2,7 +2,7 @@ import React from "react"; import { ComponentMeta } from "@storybook/react"; import { MemoryRouter as Router } from "react-router-dom"; -import { AccountCircle, Calendar } from "@eisbuk/svg"; +import { EisbukLogo, AccountCircle, Calendar } from "@eisbuk/svg"; import Layout from "./Layout"; import TabItem from "../TabItem"; @@ -70,7 +70,12 @@ const user = { }; export const Admin = (): JSX.Element => ( - + } + adminLinks={adminLinks} + isAdmin={true} + {...{ user }} + > {dummyContent} @@ -78,7 +83,10 @@ export const Admin = (): JSX.Element => ( export const CustomerArea = (): JSX.Element => ( - + } + {...{ additionalButtons, Notifications, user }} + > {dummyContent} diff --git a/packages/ui/src/Layout/Layout.tsx b/packages/ui/src/Layout/Layout.tsx index 3ad73ee05..532989d94 100644 --- a/packages/ui/src/Layout/Layout.tsx +++ b/packages/ui/src/Layout/Layout.tsx @@ -1,12 +1,12 @@ import React from "react"; -import { EisbukLogo, SVGComponent } from "@eisbuk/svg"; +import { SVGComponent } from "@eisbuk/svg"; import { UserAvatar, UserAvatarProps } from "../UserAvatar"; import AdminBar from "./AdminBar"; interface LayoutProps { - Logo?: React.FC; + logo?: JSX.Element | null; user?: UserAvatarProps; additionalButtons?: JSX.Element; additionalAdminContent?: JSX.Element; @@ -16,14 +16,13 @@ interface LayoutProps { adminLinks?: LinkItem[]; } export interface LinkItem { - /** @TODO This should be an SVG component */ Icon: SVGComponent; label: string; slug: string; } const Layout: React.FC = ({ - Logo = EisbukLogo, + logo = null, additionalButtons, additionalAdminContent, user = {}, @@ -45,7 +44,7 @@ const Layout: React.FC = ({ )}
    -
    {}
    +
    {logo}
    {(user.name || user.surname || user.photoURL) && ( )} From af75a32a74608e0894b52a74b0d2a6e65b834543 Mon Sep 17 00:00:00 2001 From: ikusteu Date: Sat, 8 Jul 2023 23:27:27 +0200 Subject: [PATCH 09/13] * Update 'createOrganization' function to accept (optional) 'displayName' and add it to the organization * Update '/debug' page to create organization with default display name ("EisBuk Dev") --- packages/client/src/pages/debug/index.tsx | 4 +- packages/functions/src/testData.ts | 45 +++++++++++++++-------- 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/packages/client/src/pages/debug/index.tsx b/packages/client/src/pages/debug/index.tsx index a574e99fd..901aaaab6 100644 --- a/packages/client/src/pages/debug/index.tsx +++ b/packages/client/src/pages/debug/index.tsx @@ -24,7 +24,9 @@ const auth = getAuth(); * @returns */ export const createAdminTestUsers = async (): Promise => { - await createFunctionCaller(functions, CloudFunction.CreateOrganization)(); + await createFunctionCaller(functions, CloudFunction.CreateOrganization, { + displayName: "EisBuk Dev", + })(); // Auth emulator is not currently accessible from within the functions try { await createUserWithEmailAndPassword(auth, "test@eisbuk.it", "test00"); diff --git a/packages/functions/src/testData.ts b/packages/functions/src/testData.ts index 00e263047..979ac25b2 100644 --- a/packages/functions/src/testData.ts +++ b/packages/functions/src/testData.ts @@ -21,26 +21,33 @@ import { checkUser, throwUnauth } from "./utils"; const uuidv4 = v4; -interface Payload { +interface CreateTestDataPayload { numUsers: number; organization: string; } +interface CreateOrganizationPayload { + organization: string; + displayName?: string; +} + /** * Creates users for provided organization */ export const createTestData = functions .region(__functionsZone__) - .https.onCall(async ({ numUsers = 1, organization }: Payload, context) => { - if (!(await checkUser(organization, context.auth))) throwUnauth(); + .https.onCall( + async ({ numUsers = 1, organization }: CreateTestDataPayload, context) => { + if (!(await checkUser(organization, context.auth))) throwUnauth(); - functions.logger.info(`Creating ${numUsers} test users`); - functions.logger.error(`Creating ${numUsers} test users`); + functions.logger.info(`Creating ${numUsers} test users`); + functions.logger.error(`Creating ${numUsers} test users`); - await createUsers(numUsers, organization); + await createUsers(numUsers, organization); - return { success: true }; - }); + return { success: true }; + } + ); /** * Ping endpoint function @@ -55,16 +62,22 @@ export const ping = functions.region(__functionsZone__).https.onCall((data) => { */ export const createOrganization = functions .region(__functionsZone__) - .https.onCall(({ organization }: Pick) => { - const db = admin.firestore(); + .https.onCall( + ({ organization, displayName: dn }: CreateOrganizationPayload) => { + const db = admin.firestore(); - const orgRef = db.collection(Collection.Organizations).doc(organization); + const orgRef = db.collection(Collection.Organizations).doc(organization); - return orgRef.set({ - admins: ["test@eisbuk.it", "+3912345678"], - emailTemplates, - }); - }); + const displayName = + dn || organization.replace(/^[a-z]/, (c) => c.toUpperCase()); + + return orgRef.set({ + displayName, + admins: ["test@eisbuk.it", "+3912345678"], + emailTemplates, + }); + } + ); // #region createAuthUser From 24b08d6853788ad7fa55cb3b5db86e23e152e61d Mon Sep 17 00:00:00 2001 From: ikusteu Date: Sat, 8 Jul 2023 23:36:19 +0200 Subject: [PATCH 10/13] Update client app to use organization name in place of eisbuk "logo" --- packages/client/src/controllers/Layout.tsx | 9 +++++++++ packages/client/src/pages/login/index.tsx | 12 +++++++----- packages/ui/src/Layout/Layout.stories.tsx | 18 ++++++++---------- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/packages/client/src/controllers/Layout.tsx b/packages/client/src/controllers/Layout.tsx index 942ef0601..a059e6d1c 100644 --- a/packages/client/src/controllers/Layout.tsx +++ b/packages/client/src/controllers/Layout.tsx @@ -10,6 +10,7 @@ import BirthdayMenu from "@/controllers/BirthdayMenu"; import { NotificationsContainer } from "@/features/notifications/components/index"; import { getIsAdmin } from "@/store/selectors/auth"; +import { getOrgDisplayName } from "@/store/selectors/orgInfo"; interface Props { user?: UserAvatarProps; @@ -20,9 +21,17 @@ interface Props { const LayoutController: React.FC = (params) => { const isAdmin = useSelector(getIsAdmin); + const displayName = useSelector(getOrgDisplayName); + const logo = displayName ? ( +

    + {displayName} +

    + ) : null; + return ( , @@ -22,15 +22,17 @@ const loginBackgrounds = [ const LoginImage = () => _.sample(loginBackgrounds) || null; const SignInSide: React.FC = () => { + const displayName = useSelector(getOrgDisplayName); + return (
    -
    - -
    +

    + {displayName} +

    diff --git a/packages/ui/src/Layout/Layout.stories.tsx b/packages/ui/src/Layout/Layout.stories.tsx index 04b6b2904..d0f69d24d 100644 --- a/packages/ui/src/Layout/Layout.stories.tsx +++ b/packages/ui/src/Layout/Layout.stories.tsx @@ -15,6 +15,12 @@ export default { component: Layout, } as ComponentMeta; +const logo = ( +
    + +
    +); + const additionalButtons = ( <> @@ -70,12 +76,7 @@ const user = { }; export const Admin = (): JSX.Element => ( - } - adminLinks={adminLinks} - isAdmin={true} - {...{ user }} - > + {dummyContent} @@ -83,10 +84,7 @@ export const Admin = (): JSX.Element => ( export const CustomerArea = (): JSX.Element => ( - } - {...{ additionalButtons, Notifications, user }} - > + {dummyContent} From 747732a52099f30ad7bd90908f2b4748e34e1bb0 Mon Sep 17 00:00:00 2001 From: ikusteu Date: Sun, 9 Jul 2023 00:24:24 +0200 Subject: [PATCH 11/13] Extract LayoutContent as a separate component: * LayoutContent is scrollable 'main' element * This allows us to render the CalendarNav outside the scrollable container (i.e. keep it fixed as we scroll) * LayoutContent also applies 'content-container' by default (use 'wide=true' to override) * Apply said updates to all pages in the client app --- .../src/pages/admin_preferences/index.tsx | 92 ++++---- .../src/pages/athlete_profile/index.tsx | 47 ++-- .../client/src/pages/attendance/index.tsx | 30 ++- .../src/pages/attendance/views/ByDay.tsx | 16 +- .../src/pages/attendance/views/ByMonth.tsx | 8 +- .../src/pages/attendance_printable/index.tsx | 11 +- .../client/src/pages/customer_area/index.tsx | 6 +- packages/client/src/pages/customers/index.tsx | 56 ++--- packages/client/src/pages/debug/index.tsx | 220 +++++++++--------- .../client/src/pages/self_register/index.tsx | 36 +-- packages/client/src/pages/slots/index.tsx | 5 +- packages/ui/src/Layout/Layout.stories.tsx | 24 +- packages/ui/src/Layout/Layout.tsx | 11 +- packages/ui/src/Layout/index.ts | 3 +- 14 files changed, 312 insertions(+), 253 deletions(-) diff --git a/packages/client/src/pages/admin_preferences/index.tsx b/packages/client/src/pages/admin_preferences/index.tsx index 9ae927637..3856c2812 100644 --- a/packages/client/src/pages/admin_preferences/index.tsx +++ b/packages/client/src/pages/admin_preferences/index.tsx @@ -9,7 +9,13 @@ import i18n, { ValidationMessage, useTranslation, } from "@eisbuk/translations"; -import { Button, ButtonColor, ButtonSize, TabItem } from "@eisbuk/ui"; +import { + Button, + ButtonColor, + ButtonSize, + TabItem, + LayoutContent, +} from "@eisbuk/ui"; import { Cog, Mail } from "@eisbuk/svg"; import Layout from "@/controllers/Layout"; @@ -96,49 +102,51 @@ const OrganizationSettings: React.FC = () => { return ( -
    - handleSubmit(values, actions)} - validationSchema={OrganizationValidation} - > - {({ isSubmitting, isValidating, handleReset }) => ( -
    - {view === Views.GeneralSettings && ( - - )} - -
    - {view === Views.EmailTemplates ? ( - - ) : ( - + +
    + handleSubmit(values, actions)} + validationSchema={OrganizationValidation} + > + {({ isSubmitting, isValidating, handleReset }) => ( +
    + {view === Views.GeneralSettings && ( + )} -
    - - -
    - -
    - )} -
    -
    +
    + {view === Views.EmailTemplates ? ( + + ) : ( + + )} + +
    + + +
    + +
    + )} +
    +
    +
    ); }; diff --git a/packages/client/src/pages/athlete_profile/index.tsx b/packages/client/src/pages/athlete_profile/index.tsx index 16210475c..111897c68 100644 --- a/packages/client/src/pages/athlete_profile/index.tsx +++ b/packages/client/src/pages/athlete_profile/index.tsx @@ -2,7 +2,12 @@ import React from "react"; import { useDispatch, useSelector } from "react-redux"; import { useParams, Link, useHistory, Redirect } from "react-router-dom"; -import { CustomerForm, FormButton, FormButtonColor } from "@eisbuk/ui"; +import { + CustomerForm, + FormButton, + FormButtonColor, + LayoutContent, +} from "@eisbuk/ui"; import { Customer, CustomerLoose, OrgSubCollection } from "@eisbuk/shared"; import { PrivateRoutes, Routes } from "@eisbuk/shared/ui"; import { useFirestoreSubscribe } from "@eisbuk/react-redux-firebase-firestore"; @@ -56,25 +61,29 @@ const AthleteProfilePage: React.FC = () => { return ( -
    - history.goBack()} - onDelete={() => { - if (customer) { - openDeleteCustomerDialog(customer); + +
    + history.goBack()} + onDelete={() => { + if (customer) { + openDeleteCustomerDialog(customer); + } + }} + onBookingDateExtended={(extendedDate) => { + if (customer) { + openExtendDateDialog({ ...customer, extendedDate }); + } + }} + customer={customer} + additionalActions={ + customer && } - }} - onBookingDateExtended={(extendedDate) => { - if (customer) { - openExtendDateDialog({ ...customer, extendedDate }); - } - }} - customer={customer} - additionalActions={customer && } - subscriptionNumber={subscriptionNumber} - /> -
    + subscriptionNumber={subscriptionNumber} + /> +
    +
    ); }; diff --git a/packages/client/src/pages/attendance/index.tsx b/packages/client/src/pages/attendance/index.tsx index c3cc023e0..3ede3a295 100644 --- a/packages/client/src/pages/attendance/index.tsx +++ b/packages/client/src/pages/attendance/index.tsx @@ -4,7 +4,13 @@ import { Link } from "react-router-dom"; import { DateTime } from "luxon"; import { useDispatch, useSelector } from "react-redux"; -import { CalendarNav, TabItem, CalendarNavProps, Button } from "@eisbuk/ui"; +import { + CalendarNav, + TabItem, + CalendarNavProps, + Button, + LayoutContent, +} from "@eisbuk/ui"; import { Calendar, Printer } from "@eisbuk/svg"; import { OrgSubCollection } from "@eisbuk/shared"; import i18n, { AttendanceNavigationLabel } from "@eisbuk/translations"; @@ -28,8 +34,18 @@ enum Views { // Get appropriate view to render const viewsLookup = { - [Views.ByDay]: ByDayView, - [Views.ByMonth]: ByMonthView, + [Views.ByDay]: () => ( + + + + ), + [Views.ByMonth]: () => ( + + + + + + ), }; // TODO: This is duplicated in `customer_area` local hooks file => lift out @@ -98,13 +114,7 @@ const AttendancePage: React.FC = () => { jump={calendarJump} additionalContent={calendarAdditionalContent} /> - {view === Views.ByDay ? ( - - ) : ( - - - - )} +
    ); }; diff --git a/packages/client/src/pages/attendance/views/ByDay.tsx b/packages/client/src/pages/attendance/views/ByDay.tsx index 7968a1d33..72779b305 100644 --- a/packages/client/src/pages/attendance/views/ByDay.tsx +++ b/packages/client/src/pages/attendance/views/ByDay.tsx @@ -11,15 +11,13 @@ const AttendanceByDayView: React.FC = () => { const allCustomers = useSelector(getCustomersList(true)); return ( -
    -
    - {attendanceCards.map((attendanceCard) => ( - - ))} -
    +
    + {attendanceCards.map((attendanceCard) => ( + + ))}
    ); }; diff --git a/packages/client/src/pages/attendance/views/ByMonth.tsx b/packages/client/src/pages/attendance/views/ByMonth.tsx index 46e33604d..56664d4a7 100644 --- a/packages/client/src/pages/attendance/views/ByMonth.tsx +++ b/packages/client/src/pages/attendance/views/ByMonth.tsx @@ -20,9 +20,11 @@ const AttendanceByDayView: React.FC = () => { const dates = Array.from(generateDatesInRange(startDate, endDate)); return !data.length ? ( - - {t(Alerts.NoAttendance, { currentDate: calendarDay })} - +
    + + {t(Alerts.NoAttendance, { currentDate: calendarDay })} + +
    ) : ( ); diff --git a/packages/client/src/pages/attendance_printable/index.tsx b/packages/client/src/pages/attendance_printable/index.tsx index 25043fe29..2c54790e1 100644 --- a/packages/client/src/pages/attendance_printable/index.tsx +++ b/packages/client/src/pages/attendance_printable/index.tsx @@ -2,7 +2,12 @@ import React from "react"; import { useSelector, useDispatch } from "react-redux"; import { luxon2ISODate, OrgSubCollection } from "@eisbuk/shared"; -import { AttendanceSheet, Button, CalendarNav } from "@eisbuk/ui"; +import { + AttendanceSheet, + Button, + CalendarNav, + LayoutContent, +} from "@eisbuk/ui"; import { useTranslation, NavigationLabel } from "@eisbuk/translations"; import { Printer } from "@eisbuk/svg"; @@ -64,13 +69,13 @@ const DashboardPage: React.FC = () => { jump="day" additionalContent={printButton} /> -
    + -
    + ); }; diff --git a/packages/client/src/pages/customer_area/index.tsx b/packages/client/src/pages/customer_area/index.tsx index 23a4c1555..9e54db7df 100644 --- a/packages/client/src/pages/customer_area/index.tsx +++ b/packages/client/src/pages/customer_area/index.tsx @@ -2,7 +2,7 @@ import React, { useState } from "react"; import { useSelector } from "react-redux"; import i18n, { CustomerNavigationLabel } from "@eisbuk/translations"; -import { CalendarNav, TabItem } from "@eisbuk/ui"; +import { CalendarNav, LayoutContent, TabItem } from "@eisbuk/ui"; import { Calendar, AccountCircle, ClipboardList } from "@eisbuk/svg"; import { BookingSubCollection, @@ -96,11 +96,11 @@ const CustomerArea: React.FC = () => { jump="month" /> )} -
    +
    -
    + ); }; diff --git a/packages/client/src/pages/customers/index.tsx b/packages/client/src/pages/customers/index.tsx index 0e8f99471..a9a69bc35 100644 --- a/packages/client/src/pages/customers/index.tsx +++ b/packages/client/src/pages/customers/index.tsx @@ -4,7 +4,7 @@ import { Link, useHistory } from "react-router-dom"; import { OrgSubCollection, Customer } from "@eisbuk/shared"; import { PrivateRoutes } from "@eisbuk/shared/ui"; -import { CustomerGrid, SearchBar } from "@eisbuk/ui"; +import { CustomerGrid, SearchBar, LayoutContent } from "@eisbuk/ui"; import { useTranslation, NavigationLabel, @@ -46,32 +46,34 @@ const AthletesPage: React.FC = () => { /** @TODO update below when we create `isEmpty` and `isLoaded` helpers */ return ( -
    - {!isEmpty(customers) && ( - <> - setFilterString(e.target.value)} - /> - - - - )} - - - - -
    + +
    + {!isEmpty(customers) && ( + <> + setFilterString(e.target.value)} + /> + + + + )} + + + + +
    +
    ); }; diff --git a/packages/client/src/pages/debug/index.tsx b/packages/client/src/pages/debug/index.tsx index 901aaaab6..636fe45f0 100644 --- a/packages/client/src/pages/debug/index.tsx +++ b/packages/client/src/pages/debug/index.tsx @@ -5,7 +5,13 @@ import { signInWithEmailAndPassword, } from "@firebase/auth"; -import { Button, ButtonColor, ButtonProps, ButtonSize } from "@eisbuk/ui"; +import { + Button, + ButtonColor, + ButtonProps, + ButtonSize, + LayoutContent, +} from "@eisbuk/ui"; import { CloudFunction } from "@eisbuk/shared/ui"; import { functions } from "@/setup"; @@ -52,112 +58,114 @@ const DebugPage: React.FC = () => { return ( -
    -
    - - Create admin test users - -
    - -
    - - Create test users - -
    - -
    - - Create test slots - -
    - -
    - - Prune slots by day - -
    - -
    - - Delete orphaned bookings - -
    - -
    - - Migrate categories to explicit minors - -
    -
    - - Migrate categories to array - -
    -
    - - Populate Default Email Templates - -
    -
    - - Remove Invalid Customer Phones - + +
    +
    + + Create admin test users + +
    + +
    + + Create test users + +
    + +
    + + Create test slots + +
    + +
    + + Prune slots by day + +
    + +
    + + Delete orphaned bookings + +
    + +
    + + Migrate categories to explicit minors + +
    +
    + + Migrate categories to array + +
    +
    + + Populate Default Email Templates + +
    +
    + + Remove Invalid Customer Phones + +
    -
    + ); }; diff --git a/packages/client/src/pages/self_register/index.tsx b/packages/client/src/pages/self_register/index.tsx index 062ad60cc..e3bb44631 100644 --- a/packages/client/src/pages/self_register/index.tsx +++ b/packages/client/src/pages/self_register/index.tsx @@ -8,7 +8,7 @@ import { useTranslation, ValidationMessage, } from "@eisbuk/translations"; -import { CustomerForm } from "@eisbuk/ui"; +import { CustomerForm, LayoutContent } from "@eisbuk/ui"; import { functions } from "@/setup"; @@ -95,24 +95,26 @@ const SelfRegisterPage: React.FC = () => { return ( -
    -
    -
    -

    - {t(CustomerLabel.Welcome, { - displayName: orgDisplayName || organization, - })} -

    -

    {t(CustomerLabel.FillTheForm)}

    + +
    +
    +
    +

    + {t(CustomerLabel.Welcome, { + displayName: orgDisplayName || organization, + })} +

    +

    {t(CustomerLabel.FillTheForm)}

    +
    +
    -
    -
    + ); }; diff --git a/packages/client/src/pages/slots/index.tsx b/packages/client/src/pages/slots/index.tsx index 69d870717..b71c08d6d 100644 --- a/packages/client/src/pages/slots/index.tsx +++ b/packages/client/src/pages/slots/index.tsx @@ -12,6 +12,7 @@ import { ButtonColor, CalendarNav, SlotsDayContainer, + LayoutContent, } from "@eisbuk/ui"; import { SlotsAria, useTranslation } from "@eisbuk/translations"; @@ -131,7 +132,7 @@ const SlotsPage: React.FC = () => { jump="week" additionalContent={extraButtons} /> -
    + {daysToShow.map((dateISO) => { const date = DateTime.fromISO(dateISO); @@ -194,7 +195,7 @@ const SlotsPage: React.FC = () => { ); })} -
    + ); }; diff --git a/packages/ui/src/Layout/Layout.stories.tsx b/packages/ui/src/Layout/Layout.stories.tsx index d0f69d24d..52d29b585 100644 --- a/packages/ui/src/Layout/Layout.stories.tsx +++ b/packages/ui/src/Layout/Layout.stories.tsx @@ -1,26 +1,22 @@ import React from "react"; import { ComponentMeta } from "@storybook/react"; import { MemoryRouter as Router } from "react-router-dom"; +import { DateTime } from "luxon"; import { EisbukLogo, AccountCircle, Calendar } from "@eisbuk/svg"; -import Layout from "./Layout"; +import Layout, { LayoutContent } from "./Layout"; import TabItem from "../TabItem"; import NotificationToast, { NotificationToastVariant, } from "../NotificationToast"; +import CalendarNav from "../CalendarNav"; export default { title: "Layout", component: Layout, } as ComponentMeta; -const logo = ( -
    - -
    -); - const additionalButtons = ( <> @@ -37,6 +33,12 @@ const Notifications: React.FC<{ className?: string }> = ({ className }) => ( ); +const logo = ( +
    + +
    +); + const dummyContent = (
    @@ -69,15 +71,18 @@ const adminLinks = [ slug: "/athletes", }, ]; + const user = { displayName: "Salvo Simonetti", photoURL: "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80", }; + export const Admin = (): JSX.Element => ( - {dummyContent} + + {dummyContent} ); @@ -85,7 +90,8 @@ export const Admin = (): JSX.Element => ( export const CustomerArea = (): JSX.Element => ( - {dummyContent} + + {dummyContent} ); diff --git a/packages/ui/src/Layout/Layout.tsx b/packages/ui/src/Layout/Layout.tsx index 532989d94..4999619e8 100644 --- a/packages/ui/src/Layout/Layout.tsx +++ b/packages/ui/src/Layout/Layout.tsx @@ -68,11 +68,20 @@ const Layout: React.FC = ({
    -
    {children}
    + {children}
    ); }; +export const LayoutContent: React.FC<{ wide?: boolean }> = ({ + children, + wide = false, +}) => ( +
    + {children} +
    +); + /** Get styles for top / botton row of the header */ const getHeaderRowClasses = ( row: "top" | "bottom", diff --git a/packages/ui/src/Layout/index.ts b/packages/ui/src/Layout/index.ts index c0ecb59bb..f746b692e 100644 --- a/packages/ui/src/Layout/index.ts +++ b/packages/ui/src/Layout/index.ts @@ -1,6 +1,5 @@ import Layout from "./Layout"; -import type { LinkItem } from "./Layout"; -export { LinkItem }; +export { type LinkItem, LayoutContent } from "./Layout"; export default Layout; From 06539837bd92452a6ac8ebd7fcba54d76f8cc5a8 Mon Sep 17 00:00:00 2001 From: ikusteu Date: Sun, 9 Jul 2023 00:48:01 +0200 Subject: [PATCH 12/13] Remove all remaining mentions of eisbuk inside the app --- packages/client/public/index.html | 2 +- packages/client/src/pages/admin_preferences/PreviewField.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/client/public/index.html b/packages/client/public/index.html index cbde943c7..dee049bb7 100644 --- a/packages/client/public/index.html +++ b/packages/client/public/index.html @@ -13,7 +13,7 @@ /> - EisBuk + Booking App diff --git a/packages/client/src/pages/admin_preferences/PreviewField.tsx b/packages/client/src/pages/admin_preferences/PreviewField.tsx index 0027e947f..0150ba200 100644 --- a/packages/client/src/pages/admin_preferences/PreviewField.tsx +++ b/packages/client/src/pages/admin_preferences/PreviewField.tsx @@ -21,7 +21,7 @@ const PreviewField: React.FC = ({ name, ...props }) => { organizationName: "Organization Name", name: "Saul", surname: "Goodman", - bookingsLink: "https://eisbuk.it/saul", + bookingsLink: "https://ice.it/saul", bookingsMonth: "April", extendedBookingsDate: "06/04", icsFile: "icsFile.ics", From 7ce5076c17a2615a5ea87328844062a9171248e9 Mon Sep 17 00:00:00 2001 From: ikusteu Date: Sun, 9 Jul 2023 10:22:00 +0200 Subject: [PATCH 13/13] Fix TS/lint errors --- packages/functions/src/testData.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/functions/src/testData.ts b/packages/functions/src/testData.ts index 979ac25b2..4b3319469 100644 --- a/packages/functions/src/testData.ts +++ b/packages/functions/src/testData.ts @@ -134,7 +134,7 @@ export const createUser = functions export const createDefaultUser = functions .region(__functionsZone__) - .https.onCall(async ({ organization }: Pick) => { + .https.onCall(async ({ organization }: { organization: string }) => { const defaultEmail = "test@eisbuk.it"; const defaultPhone = "+3912345678";