From 23c1bae69ecc3a6e29ad4349928924559c9fcf21 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Wed, 17 Apr 2024 10:28:23 -0400 Subject: [PATCH 001/251] feat(error): handle network connection errors (#1030) --- src/components/Oops.test.tsx | 2 +- src/components/Oops.tsx | 9 +- .../__snapshots__/Oops.test.tsx.snap | 4 +- src/hooks/useNotifications.test.ts | 273 +++++++++++++----- src/hooks/useNotifications.ts | 12 +- .../__snapshots__/Notifications.test.tsx.snap | 20 +- src/types.ts | 3 +- src/utils/constants.ts | 16 +- 8 files changed, 259 insertions(+), 80 deletions(-) diff --git a/src/components/Oops.test.tsx b/src/components/Oops.test.tsx index 601f9ef0f..3d500f024 100644 --- a/src/components/Oops.test.tsx +++ b/src/components/Oops.test.tsx @@ -6,7 +6,7 @@ describe('components/Oops.tsx', () => { it('should render itself & its children', () => { const mockError = { title: 'Error title', - description: 'Error description', + descriptions: ['Error description'], emojis: ['🔥'], }; const tree = TestRenderer.create(); diff --git a/src/components/Oops.tsx b/src/components/Oops.tsx index 2b6676464..e7a0201ab 100644 --- a/src/components/Oops.tsx +++ b/src/components/Oops.tsx @@ -19,7 +19,14 @@ export const Oops: FC = ({ error }) => {

{error.title}

-
{error.description}
+ {error.descriptions.map((description, i) => { + return ( + // biome-ignore lint/suspicious/noArrayIndexKey: using index for key to keep the error constants clean +
+ {description} +
+ ); + })} ); }; diff --git a/src/components/__snapshots__/Oops.test.tsx.snap b/src/components/__snapshots__/Oops.test.tsx.snap index 4d777f8f1..614aca51f 100644 --- a/src/components/__snapshots__/Oops.test.tsx.snap +++ b/src/components/__snapshots__/Oops.test.tsx.snap @@ -14,7 +14,9 @@ exports[`components/Oops.tsx should render itself & its children 1`] = ` > Error title -
+
Error description
diff --git a/src/hooks/useNotifications.test.ts b/src/hooks/useNotifications.test.ts index 2a41d9185..f4cd786ed 100644 --- a/src/hooks/useNotifications.test.ts +++ b/src/hooks/useNotifications.test.ts @@ -1,5 +1,5 @@ import { act, renderHook, waitFor } from '@testing-library/react'; -import axios from 'axios'; +import axios, { AxiosError } from 'axios'; import nock from 'nock'; import { mockAccounts, mockSettings } from '../__mocks__/mock-state'; @@ -50,17 +50,20 @@ describe('hooks/useNotifications.ts', () => { }); describe('should fetch notifications with failures - github.com & enterprise', () => { - it('bad credentials', async () => { - const status = 401; - const message = 'Bad credentials'; + it('network error', async () => { + const code = AxiosError.ERR_NETWORK; nock('https://api.github.com/') .get('/notifications?participating=false') - .reply(status, { message }); + .replyWithError({ + code: code, + }); nock('https://github.gitify.io/api/v3/') .get('/notifications?participating=false') - .reply(status, { message }); + .replyWithError({ + code: code, + }); const { result } = renderHook(() => useNotifications()); @@ -70,93 +73,234 @@ describe('hooks/useNotifications.ts', () => { await waitFor(() => { expect(result.current.requestFailed).toBe(true); - expect(result.current.errorDetails).toBe(Errors.BAD_CREDENTIALS); + expect(result.current.errorDetails).toBe(Errors.NETWORK); }); }); - it('missing scopes', async () => { - const status = 403; - const message = "Missing the 'notifications' scope"; - - nock('https://api.github.com/') - .get('/notifications?participating=false') - .reply(status, { message }); + describe('bad request errors', () => { + it('bad credentials', async () => { + const code = AxiosError.ERR_BAD_REQUEST; + const status = 401; + const message = 'Bad credentials'; + + nock('https://api.github.com/') + .get('/notifications?participating=false') + .replyWithError({ + code, + response: { + status, + data: { + message, + }, + }, + }); + + nock('https://github.gitify.io/api/v3/') + .get('/notifications?participating=false') + .replyWithError({ + code, + response: { + status, + data: { + message, + }, + }, + }); - nock('https://github.gitify.io/api/v3/') - .get('/notifications?participating=false') - .reply(status, { message }); + const { result } = renderHook(() => useNotifications()); - const { result } = renderHook(() => useNotifications()); + act(() => { + result.current.fetchNotifications(mockAccounts, mockSettings); + }); - act(() => { - result.current.fetchNotifications(mockAccounts, mockSettings); + await waitFor(() => { + expect(result.current.requestFailed).toBe(true); + expect(result.current.errorDetails).toBe(Errors.BAD_CREDENTIALS); + }); }); - await waitFor(() => { - expect(result.current.requestFailed).toBe(true); - expect(result.current.errorDetails).toBe(Errors.MISSING_SCOPES); - }); - }); + it('missing scopes', async () => { + const code = AxiosError.ERR_BAD_REQUEST; + const status = 403; + const message = "Missing the 'notifications' scope"; + + nock('https://api.github.com/') + .get('/notifications?participating=false') + .replyWithError({ + code, + response: { + status, + data: { + message, + }, + }, + }); + + nock('https://github.gitify.io/api/v3/') + .get('/notifications?participating=false') + .replyWithError({ + code, + response: { + status, + data: { + message, + }, + }, + }); - it('rate limited - primary', async () => { - const status = 403; - const message = 'API rate limit exceeded'; + const { result } = renderHook(() => useNotifications()); - nock('https://api.github.com/') - .get('/notifications?participating=false') - .reply(status, { message }); + act(() => { + result.current.fetchNotifications(mockAccounts, mockSettings); + }); - nock('https://github.gitify.io/api/v3/') - .get('/notifications?participating=false') - .reply(status, { message }); + await waitFor(() => { + expect(result.current.requestFailed).toBe(true); + expect(result.current.errorDetails).toBe(Errors.MISSING_SCOPES); + }); + }); - const { result } = renderHook(() => useNotifications()); + it('rate limited - primary', async () => { + const code = AxiosError.ERR_BAD_REQUEST; + const status = 403; + const message = 'API rate limit exceeded'; + + nock('https://api.github.com/') + .get('/notifications?participating=false') + .replyWithError({ + code, + response: { + status, + data: { + message, + }, + }, + }); + + nock('https://github.gitify.io/api/v3/') + .get('/notifications?participating=false') + .replyWithError({ + code, + response: { + status, + data: { + message, + }, + }, + }); - act(() => { - result.current.fetchNotifications(mockAccounts, mockSettings); + const { result } = renderHook(() => useNotifications()); + + act(() => { + result.current.fetchNotifications(mockAccounts, mockSettings); + }); + + await waitFor(() => { + expect(result.current.requestFailed).toBe(true); + expect(result.current.errorDetails).toBe(Errors.RATE_LIMITED); + }); }); - await waitFor(() => { - expect(result.current.requestFailed).toBe(true); - expect(result.current.errorDetails).toBe(Errors.RATE_LIMITED); + it('rate limited - secondary', async () => { + const code = AxiosError.ERR_BAD_REQUEST; + const status = 403; + const message = 'You have exceeded a secondary rate limit'; + + nock('https://api.github.com/') + .get('/notifications?participating=false') + .replyWithError({ + code, + response: { + status, + data: { + message, + }, + }, + }); + + nock('https://github.gitify.io/api/v3/') + .get('/notifications?participating=false') + .replyWithError({ + code, + response: { + status, + data: { + message, + }, + }, + }); + + const { result } = renderHook(() => useNotifications()); + + act(() => { + result.current.fetchNotifications(mockAccounts, mockSettings); + }); + + await waitFor(() => { + expect(result.current.requestFailed).toBe(true); + expect(result.current.errorDetails).toBe(Errors.RATE_LIMITED); + }); }); - }); - it('rate limited - secondary', async () => { - const status = 403; - const message = 'You have exceeded a secondary rate limit'; + it('unhandled bad request error', async () => { + const code = AxiosError.ERR_BAD_REQUEST; + const status = 400; + const message = 'Oops! Something went wrong.'; + + nock('https://api.github.com/') + .get('/notifications?participating=false') + .replyWithError({ + code, + response: { + status, + data: { + message, + }, + }, + }); + + nock('https://github.gitify.io/api/v3/') + .get('/notifications?participating=false') + .replyWithError({ + code, + response: { + status, + data: { + message, + }, + }, + }); - nock('https://api.github.com/') - .get('/notifications?participating=false') - .reply(status, { message }); + const { result } = renderHook(() => useNotifications()); - nock('https://github.gitify.io/api/v3/') - .get('/notifications?participating=false') - .reply(status, { message }); + act(() => { + result.current.fetchNotifications(mockAccounts, mockSettings); + }); - const { result } = renderHook(() => useNotifications()); + expect(result.current.isFetching).toBe(true); - act(() => { - result.current.fetchNotifications(mockAccounts, mockSettings); - }); + await waitFor(() => { + expect(result.current.isFetching).toBe(false); + }); - await waitFor(() => { expect(result.current.requestFailed).toBe(true); - expect(result.current.errorDetails).toBe(Errors.RATE_LIMITED); }); }); - it('default error', async () => { - const status = 400; - const message = 'Oops! Something went wrong.'; + it('unknown error', async () => { + const code = 'anything'; nock('https://api.github.com/') .get('/notifications?participating=false') - .reply(status, { message }); + .replyWithError({ + code: code, + }); nock('https://github.gitify.io/api/v3/') .get('/notifications?participating=false') - .reply(status, { message }); + .replyWithError({ + code: code, + }); const { result } = renderHook(() => useNotifications()); @@ -164,13 +308,10 @@ describe('hooks/useNotifications.ts', () => { result.current.fetchNotifications(mockAccounts, mockSettings); }); - expect(result.current.isFetching).toBe(true); - await waitFor(() => { - expect(result.current.isFetching).toBe(false); + expect(result.current.requestFailed).toBe(true); + expect(result.current.errorDetails).toBe(Errors.UNKNOWN); }); - - expect(result.current.requestFailed).toBe(true); }); }); }); diff --git a/src/hooks/useNotifications.ts b/src/hooks/useNotifications.ts index 6fd6f7089..6489147fe 100644 --- a/src/hooks/useNotifications.ts +++ b/src/hooks/useNotifications.ts @@ -1,4 +1,4 @@ -import axios, { type AxiosError, type AxiosPromise } from 'axios'; +import axios, { AxiosError, type AxiosPromise } from 'axios'; import { useCallback, useState } from 'react'; import type { @@ -405,6 +405,16 @@ export const useNotifications = (): NotificationsState => { }; function determineFailureType(err: AxiosError): GitifyError { + const code = err.code; + + if (code === AxiosError.ERR_NETWORK) { + return Errors.NETWORK; + } + + if (code !== AxiosError.ERR_BAD_REQUEST) { + return Errors.UNKNOWN; + } + const status = err.response.status; const message = err.response.data.message; diff --git a/src/routes/__snapshots__/Notifications.test.tsx.snap b/src/routes/__snapshots__/Notifications.test.tsx.snap index 6dd25e226..343e755d2 100644 --- a/src/routes/__snapshots__/Notifications.test.tsx.snap +++ b/src/routes/__snapshots__/Notifications.test.tsx.snap @@ -6,7 +6,9 @@ exports[`routes/Notifications.tsx should render itself & its children (error con = { BAD_CREDENTIALS: { title: 'Bad Credentials', - description: 'Your credentials are either invalid or expired.', + descriptions: ['Your credentials are either invalid or expired.'], emojis: ['🔓'], }, MISSING_SCOPES: { title: 'Missing Scopes', - description: 'Your credentials are missing a required API scope.', + descriptions: ['Your credentials are missing a required API scope.'], emojis: ['🙃'], }, + NETWORK: { + title: 'Network Error', + descriptions: [ + 'Unable to connect to one or more of your GitHub environments.', + 'Please check your network connection, including whether you require a VPN, and try again.', + ], + emojis: ['🛜'], + }, RATE_LIMITED: { title: 'Rate Limited', - description: 'Please wait a while before trying again.', + descriptions: ['Please wait a while before trying again.'], emojis: ['😮‍💨'], }, UNKNOWN: { title: 'Oops! Something went wrong', - description: 'Please try again later.', + descriptions: ['Please try again later.'], emojis: ['🤔', '😞', '😤', '😱', '😭'], }, }; From e7dc36e89e2d0e5b8a688003cc4959772cceedfb Mon Sep 17 00:00:00 2001 From: Arthur Date: Wed, 17 Apr 2024 19:28:55 +0200 Subject: [PATCH 002/251] fix: preserve `zoomFactor` on restarts (#1035) fix: set window zommFactor to previous zoomFactor --- main.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/main.js b/main.js index ddf8ab0b7..a9e12ffa9 100644 --- a/main.js +++ b/main.js @@ -43,6 +43,11 @@ const menubarApp = menubar({ }); menubarApp.on('ready', () => { + // Force the window to retrieve its previous zoom factor + menubarApp.window.webContents.setZoomFactor( + menubarApp.window.webContents.getZoomFactor(), + ); + menubarApp.tray.setIgnoreDoubleClickEvents(true); autoUpdater.checkForUpdatesAndNotify(); From 8ce79fe290fdc7b2ef9dbc1ffa6bcd2ed28712eb Mon Sep 17 00:00:00 2001 From: Arthur Date: Wed, 17 Apr 2024 23:09:05 +0200 Subject: [PATCH 003/251] fix: only show `showNotificationsCountInTray` setting on MacOS (#1031) --- src/routes/Settings.tsx | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/routes/Settings.tsx b/src/routes/Settings.tsx index 0e0de767d..77c0e00e4 100644 --- a/src/routes/Settings.tsx +++ b/src/routes/Settings.tsx @@ -36,6 +36,7 @@ export const SettingsRoute: FC = () => { const navigate = useNavigate(); const [isLinux, setIsLinux] = useState(false); + const [isMacOS, setIsMacOS] = useState(false); const [appVersion, setAppVersion] = useState(null); const [repoScope, setRepoScope] = useState(false); @@ -57,6 +58,7 @@ export const SettingsRoute: FC = () => { useEffect(() => { ipcRenderer.invoke('get-platform').then((result: string) => { setIsLinux(result === 'linux'); + setIsMacOS(result === 'darwin'); }); ipcRenderer.invoke('get-app-version').then((result: string) => { @@ -240,14 +242,19 @@ export const SettingsRoute: FC = () => { System - - updateSetting('showNotificationsCountInTray', evt.target.checked) - } - /> + {isMacOS && ( + + updateSetting( + 'showNotificationsCountInTray', + evt.target.checked, + ) + } + /> + )} Date: Wed, 17 Apr 2024 18:13:13 -0400 Subject: [PATCH 004/251] fix: inconsistent notification state (#1037) --- src/components/NotificationRow.tsx | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/components/NotificationRow.tsx b/src/components/NotificationRow.tsx index 79b2449b8..609dee277 100644 --- a/src/components/NotificationRow.tsx +++ b/src/components/NotificationRow.tsx @@ -36,10 +36,11 @@ export const NotificationRow: FC = ({ notification, hostname }) => { markNotificationRead, markNotificationDone, unsubscribeNotification, + notifications, } = useContext(AppContext); - const pressTitle = useCallback(() => { - openBrowser(); + const openNotification = useCallback(() => { + openInBrowser(notification, accounts); if (settings.markAsDoneOnOpen) { markNotificationDone(notification.id, hostname); @@ -47,12 +48,7 @@ export const NotificationRow: FC = ({ notification, hostname }) => { // no need to mark as read, github does it by default when opening it removeNotificationFromState(notification.id, hostname); } - }, [settings]); - - const openBrowser = useCallback( - () => openInBrowser(notification, accounts), - [notification], - ); + }, [notifications, notification, accounts, settings]); // notifications required here to prevent weird state issues const unsubscribe = (event: MouseEvent) => { // Don't trigger onClick of parent element. @@ -96,8 +92,8 @@ export const NotificationRow: FC = ({ notification, hostname }) => {
pressTitle()} - onKeyDown={() => pressTitle()} + onClick={() => openNotification()} + onKeyDown={() => openNotification()} >
Date: Wed, 17 Apr 2024 18:14:13 -0400 Subject: [PATCH 005/251] refactor(reason): separate into own file and use Record for mappings (#1036) --- src/components/NotificationRow.tsx | 4 +- src/types.ts | 5 + .../__snapshots__/github-api.test.ts.snap | 112 ----------------- src/utils/__snapshots__/reason.test.ts.snap | 113 ++++++++++++++++++ src/utils/github-api.test.ts | 22 +--- src/utils/github-api.ts | 94 +-------------- src/utils/reason.test.ts | 23 ++++ src/utils/reason.ts | 79 ++++++++++++ 8 files changed, 224 insertions(+), 228 deletions(-) create mode 100644 src/utils/__snapshots__/reason.test.ts.snap create mode 100644 src/utils/reason.test.ts create mode 100644 src/utils/reason.ts diff --git a/src/components/NotificationRow.tsx b/src/components/NotificationRow.tsx index 609dee277..ed5b3f543 100644 --- a/src/components/NotificationRow.tsx +++ b/src/components/NotificationRow.tsx @@ -17,11 +17,11 @@ import { AppContext } from '../context/App'; import type { Notification } from '../typesGithub'; import { openExternalLink } from '../utils/comms'; import { - formatReason, getNotificationTypeIcon, getNotificationTypeIconColor, } from '../utils/github-api'; import { formatForDisplay, openInBrowser } from '../utils/helpers'; +import { formatReason } from '../utils/reason'; interface IProps { hostname: string; @@ -128,7 +128,7 @@ export const NotificationRow: FC = ({ notification, hostname }) => { )} - {reason.type} + {reason.title} {updatedAt} diff --git a/src/types.ts b/src/types.ts index 77c9e77c2..1b318fb84 100644 --- a/src/types.ts +++ b/src/types.ts @@ -88,3 +88,8 @@ export type ErrorType = | 'NETWORK' | 'RATE_LIMITED' | 'UNKNOWN'; + +export interface FormattedReason { + title: string; + description: string; +} diff --git a/src/utils/__snapshots__/github-api.test.ts.snap b/src/utils/__snapshots__/github-api.test.ts.snap index 146e409fd..2c5335a0f 100644 --- a/src/utils/__snapshots__/github-api.test.ts.snap +++ b/src/utils/__snapshots__/github-api.test.ts.snap @@ -1,117 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`utils/github-api.ts formatReason - should format the notification reason 1`] = ` -{ - "description": "You were requested to review and approve a deployment.", - "type": "Approval Requested", -} -`; - -exports[`utils/github-api.ts formatReason - should format the notification reason 2`] = ` -{ - "description": "You were assigned to the issue.", - "type": "Assigned", -} -`; - -exports[`utils/github-api.ts formatReason - should format the notification reason 3`] = ` -{ - "description": "You created the thread.", - "type": "Authored", -} -`; - -exports[`utils/github-api.ts formatReason - should format the notification reason 4`] = ` -{ - "description": "A GitHub Actions workflow run was triggered for your repository", - "type": "Workflow Run Completed", -} -`; - -exports[`utils/github-api.ts formatReason - should format the notification reason 5`] = ` -{ - "description": "You commented on the thread.", - "type": "Commented", -} -`; - -exports[`utils/github-api.ts formatReason - should format the notification reason 6`] = ` -{ - "description": "You accepted an invitation to contribute to the repository.", - "type": "Invitation Received", -} -`; - -exports[`utils/github-api.ts formatReason - should format the notification reason 7`] = ` -{ - "description": "You subscribed to the thread (via an issue or pull request).", - "type": "Updated", -} -`; - -exports[`utils/github-api.ts formatReason - should format the notification reason 8`] = ` -{ - "description": "Organization members have requested to enable a feature such as Draft Pull Requests or CoPilot.", - "type": "Member Feature Requested", -} -`; - -exports[`utils/github-api.ts formatReason - should format the notification reason 9`] = ` -{ - "description": "You were specifically @mentioned in the content.", - "type": "Mentioned", -} -`; - -exports[`utils/github-api.ts formatReason - should format the notification reason 10`] = ` -{ - "description": "You, or a team you're a member of, were requested to review a pull request.", - "type": "Review Requested", -} -`; - -exports[`utils/github-api.ts formatReason - should format the notification reason 11`] = ` -{ - "description": "You were credited for contributing to a security advisory.", - "type": "Security Advisory Credit Recevied", -} -`; - -exports[`utils/github-api.ts formatReason - should format the notification reason 12`] = ` -{ - "description": "GitHub discovered a security vulnerability in your repository.", - "type": "Security Alert Received", -} -`; - -exports[`utils/github-api.ts formatReason - should format the notification reason 13`] = ` -{ - "description": "You changed the thread state (for example, closing an issue or merging a pull request).", - "type": "State Changed", -} -`; - -exports[`utils/github-api.ts formatReason - should format the notification reason 14`] = ` -{ - "description": "You're watching the repository.", - "type": "Updated", -} -`; - -exports[`utils/github-api.ts formatReason - should format the notification reason 15`] = ` -{ - "description": "You were on a team that was mentioned.", - "type": "Team Mentioned", -} -`; - -exports[`utils/github-api.ts formatReason - should format the notification reason 16`] = ` -{ - "description": "The reason for this notification is not supported by the app.", - "type": "Unknown", -} -`; - exports[`utils/github-api.ts getNotificationTypeIconColor should format the notification color for check suite 1`] = `"text-gray-500 dark:text-gray-300"`; exports[`utils/github-api.ts getNotificationTypeIconColor should format the notification color for check suite 2`] = `"text-red-500"`; diff --git a/src/utils/__snapshots__/reason.test.ts.snap b/src/utils/__snapshots__/reason.test.ts.snap new file mode 100644 index 000000000..2bda4473a --- /dev/null +++ b/src/utils/__snapshots__/reason.test.ts.snap @@ -0,0 +1,113 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`utils/reason.ts formatReason - should format the notification reason 1`] = ` +{ + "description": "You were requested to review and approve a deployment.", + "title": "Approval Requested", +} +`; + +exports[`utils/reason.ts formatReason - should format the notification reason 2`] = ` +{ + "description": "You were assigned to the issue.", + "title": "Assigned", +} +`; + +exports[`utils/reason.ts formatReason - should format the notification reason 3`] = ` +{ + "description": "You created the thread.", + "title": "Authored", +} +`; + +exports[`utils/reason.ts formatReason - should format the notification reason 4`] = ` +{ + "description": "A GitHub Actions workflow run was triggered for your repository.", + "title": "Workflow Run Completed", +} +`; + +exports[`utils/reason.ts formatReason - should format the notification reason 5`] = ` +{ + "description": "You commented on the thread.", + "title": "Commented", +} +`; + +exports[`utils/reason.ts formatReason - should format the notification reason 6`] = ` +{ + "description": "You accepted an invitation to contribute to the repository.", + "title": "Invitation Received", +} +`; + +exports[`utils/reason.ts formatReason - should format the notification reason 7`] = ` +{ + "description": "You subscribed to the thread (via an issue or pull request).", + "title": "Updated", +} +`; + +exports[`utils/reason.ts formatReason - should format the notification reason 8`] = ` +{ + "description": "Organization members have requested to enable a feature such as Draft Pull Requests or Copilot.", + "title": "Member Feature Requested", +} +`; + +exports[`utils/reason.ts formatReason - should format the notification reason 9`] = ` +{ + "description": "You were specifically @mentioned in the content.", + "title": "Mentioned", +} +`; + +exports[`utils/reason.ts formatReason - should format the notification reason 10`] = ` +{ + "description": "You, or a team you're a member of, were requested to review a pull request.", + "title": "Review Requested", +} +`; + +exports[`utils/reason.ts formatReason - should format the notification reason 11`] = ` +{ + "description": "You were credited for contributing to a security advisory.", + "title": "Security Advisory Credit Received", +} +`; + +exports[`utils/reason.ts formatReason - should format the notification reason 12`] = ` +{ + "description": "GitHub discovered a security vulnerability in your repository.", + "title": "Security Alert Received", +} +`; + +exports[`utils/reason.ts formatReason - should format the notification reason 13`] = ` +{ + "description": "You changed the thread state (for example, closing an issue or merging a pull request).", + "title": "State Changed", +} +`; + +exports[`utils/reason.ts formatReason - should format the notification reason 14`] = ` +{ + "description": "You're watching the repository.", + "title": "Updated", +} +`; + +exports[`utils/reason.ts formatReason - should format the notification reason 15`] = ` +{ + "description": "You were on a team that was mentioned.", + "title": "Team Mentioned", +} +`; + +exports[`utils/reason.ts formatReason - should format the notification reason 16`] = ` +{ + "description": "The reason for this notification is not supported by the app.", + "title": "Unknown", +} +`; diff --git a/src/utils/github-api.test.ts b/src/utils/github-api.test.ts index 588e36c58..70ebd6b3a 100644 --- a/src/utils/github-api.test.ts +++ b/src/utils/github-api.test.ts @@ -1,30 +1,10 @@ -import type { Reason, StateType, Subject, SubjectType } from '../typesGithub'; +import type { StateType, Subject, SubjectType } from '../typesGithub'; import { - formatReason, getNotificationTypeIcon, getNotificationTypeIconColor, } from './github-api'; describe('utils/github-api.ts', () => { - it('formatReason - should format the notification reason', () => { - expect(formatReason('approval_requested')).toMatchSnapshot(); - expect(formatReason('assign')).toMatchSnapshot(); - expect(formatReason('author')).toMatchSnapshot(); - expect(formatReason('ci_activity')).toMatchSnapshot(); - expect(formatReason('comment')).toMatchSnapshot(); - expect(formatReason('invitation')).toMatchSnapshot(); - expect(formatReason('manual')).toMatchSnapshot(); - expect(formatReason('member_feature_requested')).toMatchSnapshot(); - expect(formatReason('mention')).toMatchSnapshot(); - expect(formatReason('review_requested')).toMatchSnapshot(); - expect(formatReason('security_advisory_credit')).toMatchSnapshot(); - expect(formatReason('security_alert')).toMatchSnapshot(); - expect(formatReason('state_change')).toMatchSnapshot(); - expect(formatReason('subscribed')).toMatchSnapshot(); - expect(formatReason('team_mention')).toMatchSnapshot(); - expect(formatReason('something_else_unknown' as Reason)).toMatchSnapshot(); - }); - describe('getNotificationTypeIcon - should get the notification type icon', () => { expect( getNotificationTypeIcon( diff --git a/src/utils/github-api.ts b/src/utils/github-api.ts index 9898080e6..f392fdfe4 100644 --- a/src/utils/github-api.ts +++ b/src/utils/github-api.ts @@ -24,99 +24,7 @@ import { XIcon, } from '@primer/octicons-react'; import type { FC } from 'react'; -import type { Reason, Subject } from '../typesGithub'; - -const DESCRIPTIONS = { - APPROVAL_REQUESTED: 'You were requested to review and approve a deployment.', - ASSIGN: 'You were assigned to the issue.', - AUTHOR: 'You created the thread.', - CI_ACTIVITY: - 'A GitHub Actions workflow run was triggered for your repository', - COMMENT: 'You commented on the thread.', - INVITATION: 'You accepted an invitation to contribute to the repository.', - MANUAL: 'You subscribed to the thread (via an issue or pull request).', - MEMBER_FEATURE_REQUESTED: - 'Organization members have requested to enable a feature such as Draft Pull Requests or CoPilot.', - MENTION: 'You were specifically @mentioned in the content.', - REVIEW_REQUESTED: - "You, or a team you're a member of, were requested to review a pull request.", - SECURITY_ADVISORY_CREDIT: - 'You were credited for contributing to a security advisory.', - SECURITY_ALERT: - 'GitHub discovered a security vulnerability in your repository.', - STATE_CHANGE: - 'You changed the thread state (for example, closing an issue or merging a pull request).', - SUBSCRIBED: "You're watching the repository.", - TEAM_MENTION: 'You were on a team that was mentioned.', - UNKNOWN: 'The reason for this notification is not supported by the app.', -}; - -export function formatReason(reason: Reason): { - type: string; - description: string; -} { - switch (reason) { - case 'approval_requested': - return { - type: 'Approval Requested', - description: DESCRIPTIONS.APPROVAL_REQUESTED, - }; - case 'assign': - return { type: 'Assigned', description: DESCRIPTIONS.ASSIGN }; - case 'author': - return { type: 'Authored', description: DESCRIPTIONS.AUTHOR }; - case 'ci_activity': - return { - type: 'Workflow Run Completed', - description: DESCRIPTIONS.CI_ACTIVITY, - }; - case 'comment': - return { type: 'Commented', description: DESCRIPTIONS.COMMENT }; - case 'invitation': - return { - type: 'Invitation Received', - description: DESCRIPTIONS.INVITATION, - }; - case 'manual': - return { type: 'Updated', description: DESCRIPTIONS.MANUAL }; - case 'member_feature_requested': - return { - type: 'Member Feature Requested', - description: DESCRIPTIONS.MEMBER_FEATURE_REQUESTED, - }; - case 'mention': - return { type: 'Mentioned', description: DESCRIPTIONS.MENTION }; - case 'review_requested': - return { - type: 'Review Requested', - description: DESCRIPTIONS.REVIEW_REQUESTED, - }; - case 'security_advisory_credit': - return { - type: 'Security Advisory Credit Recevied', - description: DESCRIPTIONS.SECURITY_ADVISORY_CREDIT, - }; - case 'security_alert': - return { - type: 'Security Alert Received', - description: DESCRIPTIONS.SECURITY_ALERT, - }; - case 'state_change': - return { - type: 'State Changed', - description: DESCRIPTIONS.STATE_CHANGE, - }; - case 'subscribed': - return { type: 'Updated', description: DESCRIPTIONS.SUBSCRIBED }; - case 'team_mention': - return { - type: 'Team Mentioned', - description: DESCRIPTIONS.TEAM_MENTION, - }; - default: - return { type: 'Unknown', description: DESCRIPTIONS.UNKNOWN }; - } -} +import type { Subject } from '../typesGithub'; export function getNotificationTypeIcon(subject: Subject): FC { switch (subject.type) { diff --git a/src/utils/reason.test.ts b/src/utils/reason.test.ts new file mode 100644 index 000000000..10ed1c505 --- /dev/null +++ b/src/utils/reason.test.ts @@ -0,0 +1,23 @@ +import type { Reason } from '../typesGithub'; +import { formatReason } from './reason'; + +describe('utils/reason.ts', () => { + it('formatReason - should format the notification reason', () => { + expect(formatReason('approval_requested')).toMatchSnapshot(); + expect(formatReason('assign')).toMatchSnapshot(); + expect(formatReason('author')).toMatchSnapshot(); + expect(formatReason('ci_activity')).toMatchSnapshot(); + expect(formatReason('comment')).toMatchSnapshot(); + expect(formatReason('invitation')).toMatchSnapshot(); + expect(formatReason('manual')).toMatchSnapshot(); + expect(formatReason('member_feature_requested')).toMatchSnapshot(); + expect(formatReason('mention')).toMatchSnapshot(); + expect(formatReason('review_requested')).toMatchSnapshot(); + expect(formatReason('security_advisory_credit')).toMatchSnapshot(); + expect(formatReason('security_alert')).toMatchSnapshot(); + expect(formatReason('state_change')).toMatchSnapshot(); + expect(formatReason('subscribed')).toMatchSnapshot(); + expect(formatReason('team_mention')).toMatchSnapshot(); + expect(formatReason('something_else_unknown' as Reason)).toMatchSnapshot(); + }); +}); diff --git a/src/utils/reason.ts b/src/utils/reason.ts new file mode 100644 index 000000000..1eab54916 --- /dev/null +++ b/src/utils/reason.ts @@ -0,0 +1,79 @@ +import type { FormattedReason } from '../types'; +import type { Reason } from '../typesGithub'; + +const FORMATTED_REASONS: Record = { + approval_requested: { + title: 'Approval Requested', + description: 'You were requested to review and approve a deployment.', + }, + assign: { + title: 'Assigned', + description: 'You were assigned to the issue.', + }, + author: { + title: 'Authored', + description: 'You created the thread.', + }, + ci_activity: { + title: 'Workflow Run Completed', + description: + 'A GitHub Actions workflow run was triggered for your repository.', + }, + comment: { + title: 'Commented', + description: 'You commented on the thread.', + }, + invitation: { + title: 'Invitation Received', + description: 'You accepted an invitation to contribute to the repository.', + }, + manual: { + title: 'Updated', + description: 'You subscribed to the thread (via an issue or pull request).', + }, + member_feature_requested: { + title: 'Member Feature Requested', + description: + 'Organization members have requested to enable a feature such as Draft Pull Requests or Copilot.', + }, + mention: { + title: 'Mentioned', + description: 'You were specifically @mentioned in the content.', + }, + review_requested: { + title: 'Review Requested', + description: + "You, or a team you're a member of, were requested to review a pull request.", + }, + security_advisory_credit: { + title: 'Security Advisory Credit Received', + description: 'You were credited for contributing to a security advisory.', + }, + security_alert: { + title: 'Security Alert Received', + description: + 'GitHub discovered a security vulnerability in your repository.', + }, + state_change: { + title: 'State Changed', + description: + 'You changed the thread state (for example, closing an issue or merging a pull request).', + }, + subscribed: { + title: 'Updated', + description: "You're watching the repository.", + }, + team_mention: { + title: 'Team Mentioned', + description: 'You were on a team that was mentioned.', + }, +}; + +const UNKNOWN_REASON: FormattedReason = { + title: 'Unknown', + description: 'The reason for this notification is not supported by the app.', +}; + +export function formatReason(reason: Reason): FormattedReason { + return FORMATTED_REASONS[reason] || UNKNOWN_REASON; +} From 8d8341dc9296571d2a42fba513f8570dacc00538 Mon Sep 17 00:00:00 2001 From: Afonso Jorge Ramos Date: Wed, 17 Apr 2024 23:14:27 +0100 Subject: [PATCH 006/251] chore: update biome schema (#1039) --- biome.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/biome.json b/biome.json index 20771d458..1cf48ce0d 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/1.6.4/schema.json", + "$schema": "https://biomejs.dev/schemas/1.7.0/schema.json", "organizeImports": { "enabled": true }, From 75d892af8ade0dbabafbf9e3a9881ffaa30374e9 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Wed, 17 Apr 2024 18:14:48 -0400 Subject: [PATCH 007/251] fix: duplicate system notifications (#1038) --- src/components/Sidebar.test.tsx | 49 ++------------------------------- src/components/Sidebar.tsx | 42 +--------------------------- src/context/App.test.tsx | 31 +++++++++++++++++++++ src/context/App.tsx | 5 ++++ 4 files changed, 39 insertions(+), 88 deletions(-) diff --git a/src/components/Sidebar.test.tsx b/src/components/Sidebar.test.tsx index 270cdbb3d..281ea73c0 100644 --- a/src/components/Sidebar.test.tsx +++ b/src/components/Sidebar.test.tsx @@ -1,11 +1,10 @@ -import { act, fireEvent, render, screen } from '@testing-library/react'; +import { fireEvent, render, screen } from '@testing-library/react'; import { MemoryRouter } from 'react-router-dom'; import * as TestRenderer from 'react-test-renderer'; const { shell, ipcRenderer } = require('electron'); import { mockSettings } from '../__mocks__/mock-state'; import { mockedAccountNotifications } from '../__mocks__/mockedData'; import { AppContext } from '../context/App'; -import Constants from '../utils/constants'; import { Sidebar } from './Sidebar'; const mockNavigate = jest.fn(); @@ -20,15 +19,12 @@ describe('components/Sidebar.tsx', () => { beforeEach(() => { fetchNotifications.mockReset(); - jest.useFakeTimers(); - jest.spyOn(ipcRenderer, 'send'); jest.spyOn(shell, 'openExternal'); jest.spyOn(window, 'clearInterval'); }); afterEach(() => { - jest.clearAllTimers(); jest.clearAllMocks(); }); @@ -61,37 +57,6 @@ describe('components/Sidebar.tsx', () => { expect(tree).toMatchSnapshot(); }); - it('should fetch notifications every minute', async () => { - render( - - - - - , - ); - fetchNotifications.mockReset(); - - act(() => { - jest.advanceTimersByTime(Constants.FETCH_INTERVAL); - return; - }); - expect(fetchNotifications).toHaveBeenCalledTimes(1); - - act(() => { - jest.advanceTimersByTime(Constants.FETCH_INTERVAL); - return; - }); - expect(fetchNotifications).toHaveBeenCalledTimes(2); - - act(() => { - jest.advanceTimersByTime(Constants.FETCH_INTERVAL); - return; - }); - expect(fetchNotifications).toHaveBeenCalledTimes(3); - }); - it('should refresh the notifications', () => { render( { , ); fetchNotifications.mockReset(); - - const enabledRefreshButton = 'Refresh Notifications'; - - fireEvent.click(screen.getByTitle(enabledRefreshButton)); + fireEvent.click(screen.getByTitle('Refresh Notifications')); expect(fetchNotifications).toHaveBeenCalledTimes(1); - - act(() => { - jest.advanceTimersByTime(Constants.FETCH_INTERVAL); - return; - }); - - expect(fetchNotifications).toHaveBeenCalledTimes(2); }); it('go to the settings route', () => { diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx index 896c33a7d..216e5b2a4 100644 --- a/src/components/Sidebar.tsx +++ b/src/components/Sidebar.tsx @@ -6,14 +6,7 @@ import { } from '@primer/octicons-react'; import { ipcRenderer } from 'electron'; -import { - type FC, - useCallback, - useContext, - useEffect, - useMemo, - useRef, -} from 'react'; +import { type FC, useCallback, useContext, useMemo } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; import { Logo } from '../components/Logo'; @@ -29,38 +22,6 @@ export const Sidebar: FC = () => { const { notifications, fetchNotifications, isLoggedIn, isFetching } = useContext(AppContext); - const useFetchInterval = (callback, delay: number) => { - const savedCallback = useRef(callback); - const intervalRef = useRef(null); - - useEffect(() => { - savedCallback.current = callback; - }, [callback]); - - useEffect(() => { - if (delay !== null) { - const id = setInterval(savedCallback.current, delay); - intervalRef.current = id; - return () => clearInterval(id); - } - }, [delay]); - - const resetFetchInterval = useCallback(() => { - if (intervalRef.current !== null) { - clearInterval(intervalRef.current); - intervalRef.current = setInterval(savedCallback.current, delay); - } - }, [delay]); - - return { resetFetchInterval }; - }; - - const { resetFetchInterval } = useFetchInterval(() => { - if (isLoggedIn) { - fetchNotifications(); - } - }, Constants.FETCH_INTERVAL); - const onOpenBrowser = useCallback(() => { openExternalLink(`https://github.com/${Constants.REPO_SLUG}`); }, []); @@ -119,7 +80,6 @@ export const Sidebar: FC = () => { onClick={() => { navigate('/', { replace: true }); fetchNotifications(); - resetFetchInterval(); }} disabled={isFetching} > diff --git a/src/context/App.test.tsx b/src/context/App.test.tsx index dde505054..3280d5773 100644 --- a/src/context/App.test.tsx +++ b/src/context/App.test.tsx @@ -6,6 +6,7 @@ import { useNotifications } from '../hooks/useNotifications'; import type { AuthState, SettingsState } from '../types'; import * as apiRequests from '../utils/api-requests'; import * as comms from '../utils/comms'; +import Constants from '../utils/constants'; import * as notifications from '../utils/notifications'; import * as storage from '../utils/storage'; import { AppContext, AppProvider } from './App'; @@ -58,6 +59,36 @@ describe('context/App.tsx', () => { }); }); + it('fetch notifications every minute', async () => { + customRender(null); + + // Wait for the useEffects, for settings.participating and accounts, to run. + // Those aren't what we're testing + await waitFor(() => + expect(fetchNotificationsMock).toHaveBeenCalledTimes(1), + ); + + fetchNotificationsMock.mockReset(); + + act(() => { + jest.advanceTimersByTime(Constants.FETCH_INTERVAL); + return; + }); + expect(fetchNotificationsMock).toHaveBeenCalledTimes(1); + + act(() => { + jest.advanceTimersByTime(Constants.FETCH_INTERVAL); + return; + }); + expect(fetchNotificationsMock).toHaveBeenCalledTimes(2); + + act(() => { + jest.advanceTimersByTime(Constants.FETCH_INTERVAL); + return; + }); + expect(fetchNotificationsMock).toHaveBeenCalledTimes(3); + }); + it('should call fetchNotifications', async () => { const TestComponent = () => { const { fetchNotifications } = useContext(AppContext); diff --git a/src/context/App.tsx b/src/context/App.tsx index 48d811a2d..3907fb975 100644 --- a/src/context/App.tsx +++ b/src/context/App.tsx @@ -7,6 +7,7 @@ import { useState, } from 'react'; +import { useInterval } from '../hooks/useInterval'; import { useNotifications } from '../hooks/useNotifications'; import { type AccountNotifications, @@ -110,6 +111,10 @@ export const AppProvider = ({ children }: { children: ReactNode }) => { accounts.enterpriseAccounts.length, ]); + useInterval(() => { + fetchNotifications(accounts, settings); + }, Constants.FETCH_INTERVAL); + // biome-ignore lint/correctness/useExhaustiveDependencies: We need to update tray title when settings or notifications changes. useEffect(() => { const count = getNotificationCount(notifications); From 3ed4cf77479b624b5a4a6652842b4e1e81d1e6f0 Mon Sep 17 00:00:00 2001 From: Afonso Jorge Ramos Date: Wed, 17 Apr 2024 23:22:48 +0100 Subject: [PATCH 008/251] chore: bump package version to `5.4.0` (#1040) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4b487a962..ee7a33256 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gitify", - "version": "5.3.0", + "version": "5.4.0", "description": "GitHub Notifications on your menu bar.", "main": "main.js", "scripts": { From 250211d5c3f96c251d8da1399628b98d36699640 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Apr 2024 19:02:20 -0400 Subject: [PATCH 009/251] chore(deps): update pnpm to v9.0.2 (#1045) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ee7a33256..5b5f3a302 100644 --- a/package.json +++ b/package.json @@ -154,7 +154,7 @@ "webpack-cli": "5.1.4", "webpack-merge": "5.10.0" }, - "packageManager": "pnpm@9.0.1", + "packageManager": "pnpm@9.0.2", "lint-staged": { "*.{html,js,json,md,ts,tsx}": "biome format --write" } From 8b835ca53a81ef5692128a5f9f63bca16cb1fa45 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Wed, 17 Apr 2024 19:40:00 -0400 Subject: [PATCH 010/251] docs: update press image to match 5.3.0+ design (#1044) --- assets/images/press.png | Bin 497368 -> 439809 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/images/press.png b/assets/images/press.png index 6de0e13b38dd7b1bdbc8df3873ffc661a8ba29eb..12a86b184e18bf3d8e8e7c4f219f48ff7c6a68d2 100644 GIT binary patch literal 439809 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 rXDkelFyUJyuCvM*;K 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 &>f*aY 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

gZ^V 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

hELnu-I3tT*ubYU;Z}ykn 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

UD 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

FW{2~ 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 kiNnbN-R8d~?{ zbOf&&z33k|v2+Uh*hG^c9Yf(u5v^n@@%Eykut9-I!C}2)^e^drDYOd2-47R#vhHC2 zt?1{M|Mu`LORKoZG?7o*T@QEA%nS{ymF9%B<)5^+*41ennUuAzyy;h&U069WX}NFg z<-H95vw^a7zO@Gq93Xn*2*tE-?gZm#ak1_D_asv<6-C9|(oz6Lukav33J^mmB(Xw@ z!g;goExmvM^^>}o=kV6$7ZyH+#aw>A`ptfH>!<@Tq?b$9Ts#h#!Se&Dl%-|%Y99mI zql}C}D17)41VR7XYC;6lV5RUB-&x1 zL>vBpP;*cdB_O$fP24&Ea8d)}<6H4P@x#AGls3UOfeIex5BWTJ$B#&CE*k+#MM(rD zh#xo^0CF5_6mc9%=D*Z^CYh!a^5&;`1F!EpIDVOwm;h&T6o0p$pIJ7cE0W_UiH!xx&idO_t5_*E(|)v|gX;;~y=N<2d@ox1PeI@&z3U zRq?4+M`f#?{k{7thpQK-`^2>7pM0^~nBFWnc{(bFk1o1!&JljB zN2(B2%}l>~Qh|27DlSbkv46Mv{ckz3>vCorIXAOk#j<|e)MS4d^2ynSIcV`&X8DfH zmI#w`*+rYTbtwurH0}w=?cdIMZwtYRV^bW;xyP_eC{`r-86RzGWk{XKf2iyBaV8!1 zyu)V4#IKyAXFIAw7eyPurX6Tx73SfKN5?=YI`2nj#0#0z(XtKn&4E+}CH306RQ%Pa z-}@bk{lxd_mP0uwZ^oam^)Ih#4JfJ^Qfp33WyNQgbcV80CtkRl!|gp&&+c7&3l=;8 zqR=1{oc8c=xLCd`Cz-&46u;2EDG9`hpWnU9A_el1_^tJk!=i-}n}-e^8VpvENO=9) z0~7=dXBgOt;PShj*#I^%;SVC{_{8DebN+7YPlyU#(&ON=xK-Jp(fZ@IP!J9QX11MD ztn@Xvg>Icbz{$l$2x_rAB8V8kV&QT|m{Xy0Vu*kd0ZuyDdWqd@sh7B@0fcy>x@TuA z-!v=e0>=)x1nh6QPM$=Mh<$=DB%)a*{kLFE0Y)oNGeA~i5+;ZepFh_b3#8R-0R_{0 z_=}=Q*Zt?_=>x1g4}_YNHhv~azx4RPy&dE|-nOlRH_RSqImb~ydw=KD{JxOs!?m0G z_dD+kF`apB?58RfJjQn-r&`}3raOpqHPiX>&#Vm{=C_@qG)Xq@-)P9^Uq7x8c{gb~ z^F}IHZBvruznquKE}O%hk*OQTrjyU!S1~U7k(crvuc@V%i@w3rbD}ZM{{CVo|Fw<{C^LZi!72ncU>R)v~ES;o5t6XP)Vj zPQiSZ_Iii?Y-Ot!ZQDuu(-kC{f2aaV7L((wNODDYN1WOaY|h*sedp4(_QQc5d9kL} z+f>_ycI?=(^hkta=~Y%yD8R=vcev>l)USVi8l_0*|J2*_66X!FRHfGq8G_YxQYv>| zvCWA5)zA!02n(n4tM&RgNbcb)ZJS%sHyR`@5K0;CXDq6G`mnLRp?lX)vVt8uSg&%m zjS1ODKk@N7d3g6oRLlpbE1h<2=B|%!+DzW88J7)`hHkYydvN98x|Mpdc->k5QwADZ54nd*ot#XMboT!=wFdBmsG`l*H zV*`8>vWw?^mS%t-uvZAjfkkn=eg8g@Fk~yLcFnGxq$u>kxtNxS0oil0&08Y?%BG!1 z#E5*~hvLfcHt~54%{ZC{xcUiBz#{33)YYrs(kDN+w3xWT5+k4NF~${4upo33QSZAw zzY6UFr&2Wb51vK^MI$phbqit zwreSqAzNE;0U!IHcU2bVt)ib-d1@BTojaVCPVVKPvtW2if>uuah?mnI+Gl~k3@zvN z^z(GXSgU5&6_(B$o}lw`Q^0{*-YJn0?EGmrNk@}BZ6djpy?$8c%XW63%*f*zCXaf# z6+T*gi_b|S5g}dg-N|6{Sn^SfWB$KSMb36Nw<|b4Za3HBy`O<-DXj`ykL^ize)(H_ zXQ*z7%4=)0Me*+SW|Nb?H0n*axP06v>Y{vO2xGXq=5;Tnt7=~Y*{e$tC-E_hxNV9<)Q68#m$&oz`jkSDG^kn_D&NhX=ZjR#ztT>>jv`>YHYz$D!AAduOOrX zXB-c&qM{-on4oe4Ks4p(HIUt1@Q-(Qt4+5c%!pr&z2@ z()?TY68S4Q9gx+On`FhAQ9hTMHEkU!YQ1uWLooHO-Hy}SXIh&5?6al|j99cOgCn|o zUv{ZY>fMXh*J&oZewkwBWi!v8;-gOnbk2za{k2b%r~7l6tCUs-hPu}wv6mR*m}98V&bsrv$n;k4}RVG2K32Ea# zZ6tMOm6d0Y{_~-k{gsoIoK<9})a`TG<44iycDCKW<)jo6f682CP0}DcOJB>zd$PHi zigTN&56=0dj6dvqHd^k}GyJr$ zDfPq?4XyUJygOpb;g3F)l4L&L{U+*pR8GHT@l^JUh_#ma6A)e!_NWt`IdhfMF8)AZ zF$fme4P<0w5DQ00_do<58e&Blxxr~*>uQ?oS$CK)2p~WOR78U64(J{`Pr^%^7)W7Q zlfSrd*0R?C4I8BUU%r2Tnx3v(X8nxtDF)VuASO9@d%!>V7hJmzi$8=p%xjBkXJWkE z+L)e$1D}?$U-apzyXe}&^_;vRbtSCr1SBQhT7SA74{V^^f~k|u-z}ARi5Bb^;BgE0 zJCmE_X!Ibx2GW89b`ja50M=$^tbo=8nnc1QHIu}^(vmlNW1y=mawB>xXKSJQi(Rb7 z$;$$fgsUq?<;|b8n~&keSAa~JN0fIl8<*T40P{p%Uj9vX_WptGJDw*7y?%T|F`ML| z`|D%7kxe||$u}!*V|L5>j$+`!ER#Bp<_oSiUv7pC#T-lKY5rkRyl;@X@p!(Ve z#>v!{i;u4r=TXkKe75}a%B@PBL?+(!)DeS_{iml}-_p+UQ;{D!NEBBwP3~b{y57Ba zHG4(h1g|Awznb%QRY}irA=-aUm0X2Iv)=scf7>OqfYz4VvEt3*FF)jVFX-@lZ2svE z%(Ym!y{kBy!zW}ysuUl|Xs9{IYu8BoU7X)^ zKh64LN%f@29dUXDocSX)7nZGWvE+vl50(zU3(Hhhy{_Eq zjg2xjeiJ|IGk!+IKh^sM%k8rM>@IbOtcgj9JAmNfO`dEX^E$^yXda-TF(IXpZpRM$|pmc zd}v^7g!Dg5xRl$sul%BQlZCixwRn<2BGC7mPdi|$-;jJ{uRLaA~_|6@@HIUL+)mLe0(Z=gSkln-eDjLQcfj| zf+aWWw;J%6MaISsqxU6HJ=|NgqF7`==3&|Yw(;Xfa=d$>9b!X@MXniYFVROjjS-7f z+&K7J|NDA{`D!g90GkVD6na1Did!p zUOi87egD5VrfQEl8Ch_gjt)7p@Ao&;KUDMouyh^ZSnu!qB|{W!a zB3qOdak5KAwve4!8CfACk{wbhBc#kk3KcTm|NZUvKi9d=xsH=}e#Z0M>sikC9kgf= zQPY(&9==qa##7bfZj~vdb}}k<7xyKHq-F;<&QEf)ZIhpDI2x=6jQ(CO?Vk^6D3~^C zr@!A@7EVPQ7Ur_s@5g+b7%?4{vGhc`LDB z@aPsnYjucz=_<3#?%-RUk=oZSAtBR#S!!PhcZ@1|e}8fQ;mZXD4hAZ6jEQvO!+BOl z2McUx;?xdCzI7g$dB)73q;(_bhJ|J-ziL&@ueInoPm?1x9E?-U2!dgjNqJPI&6mJg zV0-Ba@93eIZS;(cJf|A2UfynT?MTm;VOsdwrsA|e`aI$|1fqXluY5s|w%R4{JFW+0Xv46~i%4x?UoNHp=> zd?6>X?m#6V29EfWaXrESjCd=FW5+t>*GJ`X#C0L52*q z;zErY?b@|#JtY^4LO)1(9VV;2oLr!KgPf0DBy?||osZyVKf|Xe$8m56JuJdNE%-uS z0+vS9J7DR-E7zn}hKne4C4VRYs{2c}g=ApL2od@WIz0m}WbpfVonY08JPyJNg{vQg z|2Z}a-XXY}G1wOkixoh{aYRgBGjnb8Zq*Ym_q}`;j&<qL8M*4tkEG6Qn4}gU&wFh={_Cg3Erpcsh=k-s-W2Vf^uoFZMz6{XOj|=vk{KaU zxD`-ee^7Y`ry65{!@afrVKfXvuW!Vi?3HAklC;<2DX{-q%y;EjSog$>Ljruao;9|X zH*O0F6>k4pB6djNOHup1I2N(p;h&58`J9j3xy0~Bl5ENor@AvD`#js%mM=Tvded$v z|5t5u-PGQYxo9WvT?9(ue1fFcI^o;5*el4cWx@i3NEqKS5ne(#1pe12Kh_ID#$Y(` z-BJKH=u0rM1-alhN;LRCirn=e1%MtSQg18L-@x``{xoDdIB;+~B2@@#{vNFtQ&-gUc2;Wde%4gkjrxSt+iCzW6j#+l^jv^o0=k0q2htOO16g0n%hi)EB>H52^ z_x<~yz?R>>e}8Z5>;}NcKeI)A2=*2mhG3Kd{&B~u6QX2mjpJaEk)jKfz>vy6gAd8O zfC|sU@l#BRw@v`z{A3!7mC!b#uY-GFX1Fd5YC&SAD%2y0aQZP95fQOanzj}SLcpAc(>y@kQAbN%|M#V5YUPkL$?DdQW=gTl z=HXSIcGpjuKBGP!%h95oEm!t$WjIv$rsG?UP5DBFY>}Z^k`i@ud5?=>t*f)mxias` zi#|d-9IgJ9jpuJKqy!$Mb-0HKC~{H;)9p&b!o-SvG3fH7l#vvXK`FNpFcSK^@F7z2 zlkv2=(ZP_=-~Kf*r}FxhjTUWR&)go@CE3gc=GY6YTQ&3cSQc+$?MO>FIN)wNiaKP` zZEr7)T6ABn`{pER_oB-KEMOkt=x#JKz7ZbY^1c2_#aT16+fSx{EpB&4ZrkxnkCgN; z7j0}OIr@u_^IdkZqwF`@!bmTip(;N2RGT|H#^A8-+>ti(9ck_1okCpGve7x2d>X^Y z#LIINpQKN-RtaZLN2)(8ZhOGTSZsH{>3sB~Co#HLO|(7{&(zjtIaVUjI|Ex=2|cMiiC>-au z-_N<*Asl7mP5LRsF-ROfjO6uE=y=i2pPqU=(t z```NIw=y}{CBDp2+~d7pBQ9bhlyUT0Ed!fd`E4(s26cHeb~Q^^ftHXo6RLXK4|h6t z=l2>OSGIiFA@?}W{`z?FzJ5xH;N(3HQBjdz$&~i^!okr^PlUdMo~)?QIX5{;S$@4A z4YyjhE|Bg_dsdM1>j5Va!Ux|3vb~3{dR(#jF>9J!wi!Y*0?FB9Bm)p&tB1)D2n<+m6c;o8G0F4(E&(IUlTe3;{ozW8@LuI?g*TmIE4|G?+#+7FQGAwDW0a@w29$1u)KeZ&35%8y5MIs5MXDp&Y!@X@C*NJE zR`}Vs^NBDhY3Kdt)2w?EGT&x0x{Q~uNY}lV4zNs>6z2^N{Ta z6q*y6DtZRwaXsoG%xdwGe_B?auclm) zn@huTBg>t^^oAm9^r2WqZY??113R@ucQKS6ITqA%@nLNhYg%tuMr&5LY)R*>q3`wM zbLQ9jqOOKr1sK41(M3#AGL@4#*kbWn(Ezh!bZFMpBUy5{+NIoSfQ1guN;HeyOrLed zHqG+$p7VeB+{AyU)mG^7cJDrGXb5D7fRc1{ick6?B{IkU;N6hzckD)+ez(5O?t}Wd>~H$%|f*U4HwKA#J~s;IiNBL z8u|!ZR=2&Ql$g?{gt~`Z&j1c#S`y9=B1aASFI3h4id?feYc!JR#ej(6n1i(Q(nT4&nGN=!9@;Vm61`R&;bc=Is#r5^|I*UKG)ji=HrbB@u7X9- z(dd(+zsI*t77*`4;Oteo;&0%<0hpMKa5OI$zVX)bS?lA>pz_j5toul`qu zDPwRW&$0CnfNGvTx%h|TEvl*>qq;#&iyLvbmM&IAD`R1tY{|8U_klxew08PH7`IyE z2m^EczKX62E2r5eE}6HIfW0-H#Z-?lDt*v1k)plbd5haN$IP1DQG0i1=Vb?1jzGFo zA0)*;P`}Tv<*U&17i^Oga_hu5N95fDZj{t&|5##7D><>3srBa_24?@m}+7>m* z$lBuYLo9DF*33#=vFe087S1shbVyTI6RpI9(fdIFf;g8_>vk3r*7j>8Aum54UO9%N z5~b47 zk-AlJSa~x4r!Yy@=E@a=eJH*?_W3n0ISwhOPaTMX2-gAYcayhCyLF zq3fl7(bkwD~{!h$wN!MerxAYn5$;%5}^TD#wpNo6XwVaKKzG|(&yID++5U1#KcrW zdw?Qt|7%)b^;UXn=6jBn{^N{P?I)GRm~f5@HXrW{-AO)6@-3s=nUY=H`R>2|ch(vM ztVvT<;rV>+qx^9*lyf_+_ni!wxqdhD`r&HIhrs0?mn6e8=JbdXsPpoPS{B(c#tk`} z`we;)hS|*yL{a4ja5{~pYJylZW%L@UdYa32DmW1BC84^0;JR-!W(3{bB_QEeK`orHFZQT54 zxT94wvKeVusL7W-Lew>|#?L(65#M{m@hrUx4{ShITQ?1H403FbPA<-fznXF{xBJaI zWy^(+^m}R2(n7oMgy*u3%Zam88tA-;!I*_papU?z{pT_2o^Y zCX~wnIj;;=1z~nPN(t~-h|na)N`omt*LA^ndEAlL7o`iz7L;8OUjwWF1BD?XuYfY) zr*(hx>M(xdF7^nqu;kae<#mjW??T28z6xyCPXhJ&oM*PiKfKf|jlK@&WGKRuZa}*9 zZfGcM_=g!2)r*%esY$59PX}FIy+n0S^UXQptYnkDdIyUP+y#E^0eDx~*>HD&o3N8q z=VKm0YlJPs)h>=CG}B%+-WW{n?47oTO!=zp^KZq3@de>3NcseYjE;%ZO@tksGNdh^ zQERU@nXS^UEdF>1&Kdg6GKb!!7Qa;$(0q7&V#Xuz;hGgunk~3`P|dvg^l80GWMm_E z_YWcYy9uULTU`DJq_KZdB_E8ua-?5XW0ZfP@0H*-(fHF65ouZ3j=ncSpV!^A;`g(X zV>;h*ZkdK!<_UG2*nKhKl72@oiN6aB4GS_<=X=FAlTybfMUmh}m{%-Y{w^Klprc(R zr)kZ~Ch+a1ml9v5F**4Lxfe8fk%c$z38o!uwoPjJ5I>o;Di(Jrq=egCSWVYsq&4xa zQ>tBgPt4Pgl)|DA$ujE{6Y==nqCJPJX$2{fYeH&_RXNt*CcY(FFN}XLh_TO2v~hG? z-E7)T$CaQt->`q}=H}hUai52UXQ!>L{F$Gw_;lg;h0TD4XS< z*QZQYpWUupURLqgmiPAK$CD|;b-b55X>XAA8MNrsjOGI)cd>cURu8Bds_l%<*BJ}u zZr3KO@y2bkJV%CTk^aD0zC>j*vyBuZPp)k;rV4Os-`?Qo!gaC#mfmOOnD-rvI^B_H z`8zucmZn*I$K+@nZs$zdJyI_7H?j54KlLI;!rb)rjOn5Ls@?75JH_j712V-G?{EF~ zEP_mkv^XzJ4_qc%PDhW*u1SPhVs>EiWhX?{LE{Fml@4=|Dmn1Uv|^?X&T6DG;CJf2 zh*0K5h=>pr9t1&w5ekIu5Xr2BwGqk`Lg4$ftn7cw;M=1xfG2tf=OUpy*i(;eT%?Z1)^gQP$3nG4=?N*EUk`JY1bu?HxQiQ>6tWwx4- zIcc6gjoPbiY3T@I;z8U!F(?!U3jIYfaq*X6>PqVUPLYUa6HibN3edRR@e9mXL~RBD zGP;e7+8M#;1d@yeP2`B58&ZM51vf)Wy~5AswqLZQSGq-AVi1InR;ivn{q5N z))`CoulVrM>;hx{s~l3D*zEb*uEH%}_Z=Y3(+;{d+iP?^uIdl=A6$9(`*>nk$?%?s zhVcpUNyWm_H@9*B{QtAKC48BMlVgo$QRz4x$#W)V95`?@YX##PAtfH%uuvN6UU|=U znWvfUmtWsnX>rdN9XatsLC=Fj)b9=vBgut<~&n@`wv3Sy>g2y?zCD8%t>G~BQ z#j3B_di`jm<2-Td)UjQ=#vKPfHepm8$J?mkr1HZhl!yb29kjdErXS>d(Cn!ob4{6_ z&UWFAJ~DcU+;*$M_)eE`XjUuvU67qo^i}>K305VoJUf4_-a|$GcXHnGMJu}L%ed2W zTYH)%_GS6x^y>-9&h{i%Zlm-J(n+y#tDa_tkH$*RK_30#$3*f`xiB?<2?Iz5=YV1&rC34&O5 ze(i@}8juJ#42JMNKK${*`-3#qL$ARoxWyfolypW_0;Y>#PW&i8C}Hj6#1tLxaRIY0 zC~X0LA27beyObmrE8sxP?^M@Q{WC3g>vQ~>wp}?k< zn>(?qV$b+y6yZdsJqocG^AeEg^cVT{im3CxxzC_Sog+?FNg#A- zQTP{weP)QiCipWZ#X*Cgl~D#>La4T7GDL_np)1&G`T2=fBi)mq7tyLjf8axML_}%(3(Qa*5Ev()`@i!!!)9dx~WLwzXtd-ak!(C4wkYiDMW1GogKf zKsu5f3=$ezsvyVy+uo?4p=`gM!AFj1bNnN(0ADL(uqbGf-r7H9`3oeg^+lYR0L3xG zhmb<>F~16->mV}*=dTg01w>^1U9i9cgy?>FngBYWR7B)92E^*OGtke5;VTHC){qVL zwjgOe+khL_)pn}i`>;@YzwdDCYVYB#YB~n@=tT1=2h?62+Rv%c9_Zk(SMt0mv$>Dc zw%MfNLSE{M@WRl!B*&fm#+azE%3=XKd@i=o`osdujtsj{S}%rvd*;)(`$0h9N$Sv6 zo>n{&TbSH_YT#Vz1Fu@yC>tvOovjt+QKxs9Kk>3p*<&OWqgcTff4H5Tl-)HiwzqyQ zxyzkhjr(Y@keaRyxA8&SV_MxM!W(Q@It&5rwP~4V?&}jASp7jSmV#<4Z4!e==C!|}-|N5;@_|EqMw<+yRr7QJIXvD;?SC*elv6=TpNm$on%ZiRyv5~3cc@^y0QH!! zMsPTIJxq+mSwKjPfQ+HR2_5)8fddDCl-oqdUX%?m8bTK3y7K2TwCE~;O0^#{AuCgK zPZlzt2avBbhLkXrgw~}s=a@)DLNNiDVJZHbbTD@WJsz+uMz!c8u4D9A=p_7E9jp;N z5&&xl@1|4^XdU{W+MmtQE+a!_h--S0xgJ~^X)l)oXf(!P)L`J7k*I_N62~}N#u!cB z(qW;7!-PE!4qWK-;eo`tnBRw+w^f!zL}vrfa_pfDIMsDR*#jh?9wBA2vS2oddICWW zp}+|tmzaNXK!T=yEN-*;V?~80die;GIBLHttzm9^BYb z*!d%DZEwBbLM@j4Cc2KEc!Mvb$RR0PZjHFNaV6h718?Z@t8qu2cM;xx_rJQdDp~oj zvTkl}CNooBpQWJcy>cb>yr4FjwP|$jP0zBNsbVnU{ zV@($_(BjCawB^kK1~r2>S83G@?Choc~`1D1g7`Z`Wz*uTI|_U0=5h*0X>anOZeP1zr|}c>wl*SbM^b)USj?X+8}5K z5Uqv3pmbJ@|I6L_>kE`GAhrk}^7`26bs9A2=SUBxWkD6RjJvwv$Kd609}>DN0`vt( z<$`NhQj36yQCs3x1RnwO4muB5EfzZ*hwWNRYPeU{eH)>~yMexnm~3!_Z368+PH#+c zRl}=nvx-K^3siz5!j_hVM|k}B5K(nPthu840&(UJ)s&w zn$|m1dKZ5S^}SHcc)P2AvAOS*m^xLF-1-|yp_u+ISC-nSw`rGKqNkkLE%#0*u8>W; z#a~nB%q13wA9nC7t92}Mb!?VNU>})}-5@GjU3>ZI@w1#uf{ihca6+b}8sA=c5cs=U zw*4Lxy_D>P>xYQk3r|rz${o&cuuW8%q9)}H%oG}I<4n^hkA+Z^)m{}ZR$Q@kXN2i8 z)V$W6()>4?T(4`Bc=(yqF%C-?o22Y5yS2L7eo4n4DvCS0B-g)ac5@`!0>AiPE{;qv zWY4zp80&UR0yM;Cm&xAEvD+bbt!~E_@xv0QWMg;Qw3Y;t143_QIP{%Wd#acGERJ`t zMxgMhOLbA@_eYP&?_?h`4hMk z)XxsQso|Zx2n7usU!#be0-Tx4pVv27i7(@0*QfJ8-?XlFksfKp%(g!vl{}rJp#tWp zr>BTE0^uAU)fiT^9pOh5TOxG=rwAdF)6&vf{jz_Z3&AQmh!sYJER?12*?^qImx>KV zoR;gWULQYx1joNDUV&U0JQ$c!jB`P})$+0z{@h-6_Ux=I6oA^YDK?PlVNqg%F9EnJ z4fulPM|kK_iTc+0omv~}!IWh2{C#hSv488c7FKqZXV^m%7#0rA3&*~Z zInAFzJK(c5H|6@L2=pY)_vgqF{rUKaMFE5T1sl^Y*(ocU*v>yu%WU|cOGy=_v%?`= zV!t@|LF$gy|3U6{mKu>? z%L=!vOG}YBEq?UqN@V!bx}BrlgR(Mft&c|Z8|iPKvYTSI*EcP9j8}+#5vv_Q9{t1e z*+4fdgP-<_h;T#<5}g&PQD8Q`G~aO4UKcEw`oVnln^s5buOO|4zXYU{;~(oiJa2azrA&c5j_g(H~rLYC=a|=o&s-1I}JV%!YxFo;oOCO5%2(v z!-Q*wV2%kpAfO0Tp!-)p)8P>j$c<){&{GoV!r=4k@i68Q8boq1;lYDoHUaWkpeX;D z)jx*#5Oj9KcKIww#RCHaYsMv{SQC7m44+zh(7q8osS)tmer$FydFp7Y!1;}?w4`?> zM_z<*?GTM9?U>P%Cz$C41PO<%U+x)Mx!iK z%q8O(XcmK(HF##HsOv3N`qqhHiVe{}3@60oyYFA4JYpl|dqnn-p1Z$mP2_SKI&OB| zCLka;SAe%9KVk8|RJG9$ywUDj?N)!6gQ3NWqGX z4~K5$2JO?K3pnFe;^>sAfqjqjuNfts3WHuSwGgC zF{fL~hMc0vuVw_9MPy`@&KXDT#E(@!3!^qD5Z*P5z%)u4rJ?EWZtz4{2Rlq}CnVUz zGkZ-V?&I%gL$i)?2Ha6Eu2c-4d(pq-$Mk2?;cm{fUG62l&8-3(Bc)p#E68g73U;=( zlOYU#n4WGXP zgQVw^z-V#yeTwWK+DiU?F%C6SN-`UAsoYF6zOv|cjSm$YSe`8zm6AX7$6=*ht=(1vl zBp|V{5cZ{`J%6q6ZF!}p|8KX2|CYlKUzcN9L?ld6=$YHl#K+uA%FQi0`nwLND94f=rD&C+ zR3Gek_nj|lk5v4IBn{p}2hK2~k=pvO`!-`taFcjKO50O)-5U=kI0a=?`J@=9XmWG8 z?PW{u?PTE0etg-k@%!A9HZKsJ!lt!~r@LD84D^fLrwvl&*NK=m!0OKP@6~EJLi}N62Kv$Ot-bd-+wYW1_5!nN_e`ZagBjXbg>H2teb5D59ICYkZ z&WmpE&IQB8efQ$y7e?-il(J z`VL$WsGYDog@lCu5d_8Ox4_>u@ZAQuaoYN?heQq?q@1us5=2SW6Q+L-{!s{wK`lcR z4$o>VC-%+$& zI-ZeW1OD}Ow^~_tdGq#Uj99PlsbeGVf@CL3EzA+t}u% zB(cENiLM_9$f9?t=3|+_C~9?`?VaaX@z0*F{H5uT>M7w=ZPFkmQGXb79v1&Qrnzae z4@^N~M`|p%qD<+$UrUGP3op3{`Zj*rfI)cHbU3lzD!047XMwjYrbfFv%&qL|m)#$2kLd>D`?5LAT%mN7l6~T=+61H5b#uw}X^}9aH zjT5Wx?yVuAfGICs0#w@ssEKf~Hf+}xg%AwK7lb7cK+X@ksT}eAdPZswzZ%lF0{i=` zO=_H@YHJ7Bj(KdUZaAT&)RdTV!~8(ME0xvXsC-UyL}K)Fj#K9oss`ekMqdb*A%Xa# za!tp)<(DsC)-1*ojxLD5kim>Y6I~ggf%G#tSWkegLRuWc8eutn`SmLwaYMjffro=* z3W?%SA-MehrjNaeXeB-325zo*N>CoUE*|$1FR?j#j{CgQ;@_7#vL&Ly{ME8HDMDz1O>@FZNOPZ6hV- z5DYIK932nyu3eB!8vMElb0)@$j5r^OD{(o1TK;(2c2xS9#RHCz2v~>B7v3PEbA;zn zs~ge@Z;V_ZVpvcC5h;;qA<>6Spb7$h=!Un2;2z9|s2`nkY^8h=2_&oaG1JCb+)UKp z^1#-2GtKEu4VjiCnS_NRxn|MXMsHs6=naBpU*aff!2V!N`xPmrjw z(IL@}$r&5=(+P`p^PX|EgEm}&?t?ZQqX~xZF&e7I&X}aGF{Y(1_3&z^n#Nv!4s%CfnlBQd6r@As&qx2&z=~3?AJ6%=?3H+ag zO~^3r(9i$u9WHS*Z*v>}=&pQAgR9wFNm2 zrru$?tE`sO{Wbb#=NFp7&Hb~Ssex9qLAg_{C0iM`no^raKeo4f@NxKOKb=<^1m+iY zcCxc4A+kua>Pd`twx`XoFH%L8AX1QGWCYK3@0{Mx^}5y27&KubzH_{>vHHjp2H*L5 zaFA`kw==cV30{Q>k7_J?0k;wr!%;<8ixEsrbUx z|ML{bnWPQe&CeluIUX!Ws270NOjsnZ)`b;(WkK19iY!B+xiLy_=Y5 zH9BX-POGQi^xZ>3R#qJnW~eezOv_`K>wTAK~u@=NvGOIQ{$BAdVt zu}~om`ZqliiRS^KH*QBUIN9JAhu3DWVQF^v_d~Zal&i|}L=a|crX zDcPm^I)X@_@Y$r<)xW`P#E#3UV29`_@4fH z{B3mmQ!G3@gnxM8qF5a$9L~sdkXTtf*0Ao=Mf&OIx9m_0rL7-|+vBggThj~5V6MnH z>~I<`3EJa{)BDcfH#09s)N73@;%bmK9 zC25a~XvZ^Ew+A&$9=PnbBO+V%u?F{MwUcqodZsEWnI%mZ58~A6c54jEW=} zx2sog5=j8i9=^?NAry;XYU2kwL0m1@)p^E%|M)h&&vQKX9PBiTI?TSyd1kJo6I&tM zX;NxJWrcRrYoRmEZGF%Sg$0(#7iA|AtuQTMb$(AQx7}`_*+2zw2&+OyYA|r+Ak$}~ z*}^SU{@fz*TRamFVxrODRZ~KRKs3}?yuN?C(_A3~Lb0w2|9*z!YV2hC85ibpBBq|dYjGG1k-e2eE*E8XRt$>^kajaYjOyTcjT#iw;Cf1G^-=K>pl}A4+vai3%zM0 zT1qFVN&5QuB!Hd)qw2{wc^w0Ij=PO7=f&5O9p;A2oD)ZBri1ikFK=2h9(*IY_3|On z?Uj~Xd3Le~^M>yQY)_c++bi=>q)hg{S|q#5-j~#FqMugfE_$aHjwQ%=I+@y(Emmw? z?`&86X~y|X8VYI8tn>Sm6@RK0@lShZAkppX`BFtCvw!kv^OTR-=Orj%))67zzsa3c zzMQtYD*7LG^+fjk7d;`hCI94xycLDx#r|)@#VWH)s{{hLctwx5x1D_ZyTc_ZU(#(x zu)tyiLq_q}8)hAcVI7&()SP$evQA{(C*xg|)O_o|#H7T^|Gu*_F~xLri4+wTDF|}V znXi-=I8F^}DtURm&Kg7oV!3twR5O*iP!yRVVxTjpTq>8J-_F4?<44csE5lVveiRaf znW|N{hSDL)jXDtQET=4*V{y*W(>viaxZR8wlbJ5zqk5~_ zM#E@@xJS89Ofxkvq*#fo39|4&>)i9Hx%hp&%<@~6P9XGt#YIIg zuw4j&GbBl%!@FUON5K=>##;#I9CC4B@x#g|G)um|si?X@K|L<$r1uAxjz*Yp+<-&u z{_vp*-8m5u(+sK;ThZ|Pau>qfAlt_rnSBO=Bx0Ti5Y!8WyY=-UE2MsafUt8Hyn^6G zB`QO(#s~^PCFTOGmH_b)by|Jx2QsxoaeX4+{}gTu#8os-{~mFzgqaL4-kK7RoWnzW zeCGJvz#b5SS%?OQ|Mpby2?-ql+yLBx00K~U9#0cl@o}pj%1c$jcgPU|r9DRAqm@enQc^wsr&r9CaKNYB@$cYZLU+iN3JZ`+64T$WN{_$dO&fb(Z*8e#d|oT8O%fF z1sxS`r`M;i)I>X+HqwXJa+FdtM=8BF(RDf5HkI;uBYiX{LnMttV3y}eW+mMWRYSVV zY98L9BS$=5x$?(q@wVmg#tcE{S3YmK?yq$@RzSa0Urj$(JjsQ3Z$F1X!o8MqW{r}9 zB-sv)8o{5u^no<=BjoTkD#g;bG}diViiY31L`bYdPIW^HWzv zpW5=_%7-^zA7dwlBBWJT{8eK?*ZBnZ^sUbhX$oidK2|-z1Ux|R60K3e#uS6wpUlZ! zc8&MbR6bcm-WzT&cudhky3ZN6A_%^==w9@n~ihi?!6phHqlV8tijyLaP-buSo%iw&!S z+z{z{fwMo|c~4B+O^EFtJV317sqBUmuyp_ToCAs3Y|~RSHqyRnL?GIwazaC$Tsll} zQJ5qNG--YP`f%OBm6N zXlzj}2KIf$-GE!|!G}w@fTgJjxfA3E#6bcwxx+?cQxJ9LTY6B+CmwcVAM^3?LB@#? zqt^L(@c;#XWFEYF^=@1O$)NAD4Q|~QOX@^t_I6-EfF@?wCfd4{p&!_mY{$KiJf!E} zvtl(AAIqddk;u zf%(^kqZdjWk8ZkYD=@cwbRjurXO&e>fU0MhMZ-ekPsbd+93@(r^_3Cb4I|cENAHNZ z)3wI76&mD~)($xO&P^WO75A!D?n)~)DS zRe7q(!IshlXm~}ul~}f6=iRIoaK*}JGE3l zyVF}u2v%%_TE09Y!wD`Y{_1BdU#Xkh)!8Wk9%7q)!e^50XV!vlHwp64<;mKyk?cie5($$Ni4 zMBVO@!;1?#UZ?-w*W_im&9k~5=9i8*zy_7n3FI3P_!M>;TAsaZdtMy-(OmsiDgBJ7 zRF&{p(SX1mW$r;XwyeeO({syl&wSTdv#qTK>EaIYwYFICXOxx2)~$}q69$G^V$#`} zDQ67$1L%blW*!l5VuxkgaN9uz2#y1=n38Sp1;SG-tbLaXWbod78g$Y~N?2ZB^m9J_ zC#d7QT8=K6iQ#;nu7Z*naI)h@y9wX%JFaZ)Vb|NBYO-+UJ zMfPkV!YP0Kl0@Dv5hsSH0b=2W$qq!q1g4b}?ot*O*G(iMXk^-q@(MH}`ZM&N*myuz z0EfiH$E)zia&tt$WQc1J_MuEYeoTOjc)CL&RQGYCMe)x9Cm%wVOh_(aR>C#@!d#RH z2!n%C3LZrb4Gl;&5d;7%2%M+Kk55~nCTg-0ClYyZkfo`Sz4~7wySoJ0X%!g7` zY|j>)0O1XR&(@tgA|21KWuH1O1QJcD=)So$iYvdo5!CRib^{>RsE-)&r`goX~ z4J@O4R805wzdvTwQ}^_j0tQ`-&JDh;tr^zT>JmMCtf6c=&2{~y5_~iE`GqZZl8lJe zediWS@uqCB$jcKHp+h5+4se9>Tb=^NU~>AGD539uKBg(=%Btb4KJY`X4avE92yw;c#>967JPU~lIPT=uEG&FT>H zzTQm#ep>P4<*4E3`EiZF@vGcXpI2|t+jU&x)Ke61I_K>yfD+HS?3R$|hQCBZuGne+rl3HuC@4$M8ycp!O=Y!B)!?R^m~Fkc z*`H?W74xgD8U89>KYdCsmkxXnJVrr?IZ?(z{)<%ycUT93eIphY9}lh(B#;pSwv!7C zR6T$R@1yQBICpMpW`^)PFDxUY`=y;ESWnt4zZ(D>u)zqWzm!zQ89to$usWHS8F}F< zCB%A|&WMziWS`WuG$M&7qQ%h22#Y!y5+>x|nzQfUveD4gl$b7qk^||dM9yqx=BY<# zDbF4l2oViHr88z` zT>$YBcX}XJ9XB#$SgHn}g%dPUDx**vhiAllbl)(ih=>#RmUsf0v$n$x)OpL~jUv>5gr;{~@M8g@_62u$JK(?wuaT0M)=11s$EJ$S{Ez zWg}ruH@}3)cG}j#gD<06Z;@&wOU+g<%xvM@MPzW;S+*&UDXC~bJjCu^3< zhT_Lj<;{e@4-6zy-C2I#7rHA}k(H3jn{^(HSC@THeOx%KUv`k$F8#&0)= z1uzlJ)D*Ey?M=o`&)ZPBN<2Jm$uBO3F9fD+cUu8ssF}SzgIjO{j1;v8|IB6XU&}l* zI{4iK0aLf%-dEArKg`a49rYLDc32<^dDgD9Sbrr%Q>jmYAF1(>y)V4&mmu0k#mt>h z0s41dc~~>}3M!ZTd#<@mbQtmrbca)69l-gGG7M>w^)_W0x`*b3gmm=0ofLP9UpviD z8>| z{^jECzU%pg(;$W9SHEmuhDo;-4s?G`D-xdJ3vx05@52dr0*H=LLEJyl|NJX~lS3;l zwAs42HBX?{*n!IdJ6G4t z?6kiAE+`m@kRM=R_pt8?Oh!B*3sxZ%n0oxX2;mN)zX2u#GpHj!ZFjgrh3Vr~BfN=py{y8a1YHM1;SCj2Ns@LV z+uq&nP1ATI#Nweb)Sb1)vMA7fMY&IC=s5O;yA_px$A*gnGfLLAV{$idj6*%#FZXr9 zi$6AFv3p;#H${GG`gwg|3u0&=G&+8%9$qPwTbOa%{!9gbQap+C`Bbd(K*iF!@;B1Y z2d%sA4|lAau?lv5i1YMUWlP>|o1w~1)mXm1ms$Nlf^+OM`O2QcGkot7MDo|N9H{op z{W;|S?2(Cr!O`ew()6&v*Xex_1Pr)Bh19?^9rrWAXK%3LO?#)hg@aeC1_MIqf`)7| zkKg|NyCJa0O4&i3u1mL#{NE2YmCdXP35$#>YCb;fQpPd|nwl1CQtfqI#D-2E55}rS zsLDQRLJ;%v-N;Cy>92G4mmMCKmxre(N!vSKLY|7oVAb!v4^R8GhO-Mn!h(Q5B6ZKk zW@CzW3yx0upm)?-@$E`*Ai^vU&&L)A>dv=OI|)(P*ci>xYvuFX<^QUH&c)C|^bGSo zNiEA?GfOd)r+bXZJx@qYG%7v07(=~2+T}-};`rWKS@!{BLCETa(`#*?_YTR!ry;Tm zRzz5c+qx;!2EGy{stDOlK_}@M1(-v&p6CV`1U)zeN+?D}i20#7Y$3kI)E}fH#9~MX zaulFC!1aVa1Hd69JTO#31c@vpf;xpq{@*m~-@jcjzZ5+Uz|pV2|0esqx056UI_9Ex zhJUE!eL#q31WLIp6@_bY|2*{AJqTPU!VTf8d52vLa*yyxK7MSE3uB_H`sq_eESRO^ z$t~r91GMqzf}p9yj{o_q`?T9=^H#tl=;=;I%Cp?nIeYd74rv-1j48sP69S>coBHp0 zD)?wZn*_Wc@bE4gQf2GlDJ$O}kQ@P*0W^vPJ_%9L7a$ivQKP1{#O3%ePbG{Hq(K@F zD>P-bixPUF&=wgM?eQWDD9v#bpMqitM~v$q%5F{{4m~P<-N^AxoR}7|%-vBri3ah} z2mX3@6_cJ*tVJs6{(76TzaBmG&i;_@$tnL|RqyxBhA}76mo~kodN(Qjm{Y-oT3EtV zkh=AQ{FKCq&1DpHj*7J*?St2{Jl=|nU%PpPU8^>{y;V-~&JCq=!e(O~xBU)qL~JO! zHtbtfop#ba{sv9J3vs9Qf&KTdRa2or80(X+3+mTRJUskaLB0@Lna;6B&z@hgFT@|e zzfsz^(ks2bpJ{a3XGvsu?bETmE&(2%g*%*D1%C8DY|BqRNOJh8%(_}PZ#B7-s>yOY~w6j9?pNR$KSN_!>`D`ZojfrX+@Z_ z<@RR>`=R60rRn4RXg!G<$3nh%mDm;;t7h`2AQVq^v@@!_4qKs1GU@FYbp^4 zt_CTIh7Oc!(RuZ^80apOa`o!W7jW|V`7|=_^WVi zzvQif0NQ^8ueZkV(aVaKTZp1j~mtY$Kd8@2zA9SDPrV|Tl zbd^2r*>^N(AKeRqjo7ch-*G^abt}XMgrD}DnNKXbC@j%4kM)4Z=)#6?Q~+L=1{cc_ zHjK9*3=uGoRbn6?c%>%Di)Z@85aAH;l!WnJ=*14c53ggtRK^;EAhAXo1VjS#M5lwJ z0wNXkB(E^@lHjS4P>~6YKc-C)5jyfK{aw$HaAvmhv6o26MXKJZ73hoq=ZZx3E#YCC zuk*SU+I^nYrUC;ETz&WnI6ML$!MnmvB5FWvEm7%68 z$!CBdeD}bdQ)~3@;H;qKGgd-8+ln-Lxl#`f4Jzy0U8+<`{vxt2_*}~SQ)$LitK{Tm z5uSx*0=iha)n}xqJn>`)#U*PK<8qZSPw9a%b*q#;*XDZ9?%#1&nM%}HknPBu&Y=lU zMIIgDRQZ-ZyQ&M$hF&s$iz6C_)c)rMUqSwDb;;GDVg6Ft#+a%4t?&PsRCa_poD1qQ zTlw2wLQ+sx=1nqL6tDDNte|%}$1(Q2%2UC%v?^j`SviwEfuPl(@UEF_-se5vb`YQj-+wf zI;WMXbh5qt_RHIVeF;pYq+Qo~8-Y@sgY(Wq;%UaGkQL>?pVH5$K%n(m#1w zqJo5S&5k}l5N%M9+1Ckgdzav4 zuWJTA<7+G1=idnozi=!+qdUL!KK))))G}k_tGRWqV#+YTxcffo(*C$@9BQS<#CsYO zq+Bbh?i5g(+HEGPhyIgLy|IvFsG(lh^*7n;w8t&V_ra}$4#G#o{f>rh-I_Md%T;=z z^hocoEkZ&^#gc?(9Q)g1Qw30Xi;K$zcG`?0BtJ9Tsn z+kU-g{-SyllS3i(I?SPxuG*Ui)#7VbW`oCi;3IX6lZ1yNHF+yNzr0LbqlhD$VUzs2 z6Xh6tO=3#+yDy)^{Fd37m_~p7{(~BeL4}y>&Wb6tYAy_aLN!8Dj%UBUh+uJULWaPUpE{86VACVuNEo0Rk3 z_~nDzL4IxOH1R!SwPI`ng2y*1SXyRsl8~W+!U}!A5~5HUJBGr~3qrES8>Naw2S9~4 zdj<~^x@Z7_gdW?b)Ue2Jd(cTh7EzkKa3i!IGI(VYf$Ux)ai#G2pG4;&-{hs5@16Iw z2o(iN*<&DfVP+}DCIF4a5kVKzMy4mZraWBpl}BbYvB;5+P6Qa@GNN6)1AQ|zP`ChK zcs`L8duZ<*=-VLt2f_oz{xvRO(g24E3JDQj7+lC&P;;lGqyUe@CLrcSKs*R`3>PrE zKHP=x`uaRu0tFHr{~^^@C443Av{|aECb?D|^35hsww|Dv{NPGyN@M8Jh}yW?qF`|*W;I8s&nZjRo zGRk)U&+qg8j{kGK$ML@JlWy+Y_w%`~>%7jfUm{dKDLMAis^6^mP*H8s`jDq~A7g@z zQ=leI{`FwN?$86E4dP}MiivitzvdggOWx9y%FW6BDc6vvdC8TDSO3yaIPYQqW%upd zb@OLt1zkJKB^A_YhZ5=FVT$%<_1}yQ;H<{*%^{Duk(Ibt-sJl5=L?6@y6jx#iiaPi z5X)5QQ}#$6;UJ^90=}X|e*qEE*07pjl#L%(f+#os zgaxYSbiC%!>?z{hy_+e-7W>eUtr(jLL;hzw1WIH*?h#hM9eKx}=YDf947(?wlve6P z3)Bg_4e%te=&yk?mgPX3rmsx-VuJ9KdPFHrjSdyN+~wVRHCp zuOs1=Mwsg0r)(a5KeOnLKuQm}hukCr^l~l+eg#VB(}IHeyVNAuK|mF#z*&DOkFH*o z|9J(ttB=)=-^5&x$1K(VANEp;HpbU9uA?)775WYk4_NI_H#^qa7ZMKKbDvM^JvI~q zB84=;Ck9!d{)5b6C7XE*h#0Qk8!!U{s{LOKkF70tj3zP=u|>6o znQxWoyvDMrMBT?T+5@AFM3sjaxd+=7%tb_(r7X$9-IUWqmrpWkMR0t|-%EM+>Odn? zTzg5UBY%IaoVr!X!xH(>H~m50y?v$BBW}zM3u1}$!FTSoX#D@MfUAD&6aM35PRUr3 zN(hPl%e!wW`)~j9=W{BqGw_^pN3^WH_;TOA~7KKnD}vBvWOl?#+MNPwY9uWp(5YaSP- zB{fut^;>!ACiw;zI`8R4gXP|nU#fV2H?v#p$XPdip^K0!ci}OX$L@*@VC@oVm9G$yg@*rtnGZ}MGcC}gD zU#>j{16ilf=`hb(?>=Z?LvGD4)(~2geepkVH%4+VQcef>E=T-&; zw+hVlQ*LyrP&^JqHFua6E(n0w?|`U~YL?-xxw1|Jdc||*i)N1vX(ZM*si5v^9QjA% z5I%m&)SzV&PMJ^^AOgpx{hR+!kJbA#7HNlq#n!dxtEl5198`mj&WPZ+o_^0PQ812GUe3Et_KRs+o?iBZ9m&T^7$uw zm;_zJC%6XZT|N%mHMPg5q8~o2e0ooJteZ}Z^_@0J+56PH^-Dj`WEnom@PpZ02sa_Z zLRLqeue_900)}BC?Fnwn8Zd*4QkbJdl$7-EKI?+RM~?7WlWi<5v4|qXhFElgjB&lo z_iFh7-WgC{z`b>rw_jC^{bweZURk*}wE7*M^JjXgA1>uVOYSzfHaM_lPo&1SSYU+8 zjMP94aI9hKntg5;e}*%2vQ2SO5t>pU2r6|uqr$L9eq-Wvw(%Bp;rRsx$T%`TlKANU zea2!|;P4PgI6I4C!Alt4Alj(2uTRIzOA6d0g2#%55a@x#2n7rqGF{R~nBZeO1CAx|i z*12Bm6-%PF+f}8?eCx`(%#U@QL|&t~3}$kt&*KHQP7$)E73Fdz53jrX2#J)mNN*Q@ zT9!?D?5SFJ9X;dpS|SyNrRB6-e!hD{)7!jYyQ3K0PMxV5P58H2U0`sty|iN)Z#@F& zOOHq2HRGYJxq3xp-dVe}U-wC)y0#Tpy4Fbzxv^t?86Vm-cL&&&e=O4U(VQq%+q#FY z5Uk=MslbL{E-S7o@`_u=d*$b;wu8JLy1I#{+s4XHvas%YVsN9GFU)X%oc5{E{Sl(3 z`;^B%XzmT^xD^>`1!QIa?rr#tI=^*m#CB+!nsR7oGDq+wwj#Z5`?f1KGo9FVloozc4O1o+(`DVG)JAT^+$URtQ7HP;4s#SkkP2~pJ5q* z-)>{mZO*mdi>vgfsW+qW;f9TZ`-ON8u`CX^zy z8k-aZ5E27Fv=P7re<0?2n8Z@w9w3XZg+E5Ll^_~B6IVvVT zzOJ*AdGqGYj{PMuQ2iY8+?@267tgm6|Fft2bzK{MRbutIk|wxreG&D15jLh~pdQ>n z3b9T4`*^g_@ruFm0J@0>LgFRLFK+HKpby{1cFW7pj{TgSnufK1gNtcWpRT0Rt2-@a z(Q?aYGSB$G8|QJ?%PT2)_kJy;#1Wdqi2IVOeu_XM0#X^M@o4R^I(`h)28d7p_=M7s zVWxWN(j`bySo`+x=TGYi(@UTVCT%a@i*0KVzecDryE#?+`21mc`OxMG$`FmuGC8}- z{h7$xdr#!(>Rftqu`BKCkJrPlzNAxGUA6V~xpEut*A%?U_mWihT{t1mT;Arm9}LB{ zH4a{0V-4dG<4>PjM@G&b;(L~6DC8<4`{$a1x4$AYb4U+v$$~>lV%vZJy>@ivIyKro zsXmzkiBA`I5MkCD$2D$+hpRkh)D%y~yD*Cpdca(jZm=_s+b}ES=2%Au6Th+eZdGcB zGk4QZ2{KWi%KE&trZ{UN6t5k7=fjc63lN(0ChhKbE-n%6xNz3fDIE)YY_*sZPaB-Z zwE6O@j{+x<()$nY6BqhK)`6kn;ln8sS~_~X9no)oaT3!KBjdrYjqOpFrx%tKO#C&n z@&wc}VvH$g5<$`gGqw6cJuoX z2IvMRCZ~?2cc&R-0Zu|dDmoo~y6QWASdN1yjr9uVnMXSGiT58ST?Ew+u9+9b`96LA zQVVL_ >&m-YNO3VK^mV7(znWn=q!Jkx-QD|g)f^bP=Yq1A9J&B!fgeW)v7Jv1P4 zNOkNV)G>dSDVK~ttaLI{bfyKZ(gPENGfld+u|^I2)ej%uNAuLm+M0)s60d-k89Hm6 zv+@B^xyQ#fG%$kHV&J)0Lj#(r@n8090Y!y{APnLgsbv|?t~g<4=hr4v*s-AR6lLVKWoTlMf`8 z*Iy5LM0xbm!OM`jG-b~I?K-upRpcLv#!1 zaWzH2Ld}eXl2VlFsn@W;;UxduanT9(kxQw8D}%sqslUIY3j0##FF>Bxs}e0*UJ`ip zqc~u-`QobVL*2LQIaMF53n)$*m^LNye7zGDIa@`ZYqxcNyG7aVoUEST+JTLY@W4X(Ep`%E_EQfO*weh>5;7Q^#e z+8B?tUA}LMUU3#x8+(o(HM^+m1;o{C-Pl8JuT##!6DM_H4e>4!KaRre$R`e;Vb8Z@ zhQKJ_y4@QK?x`c6QkUs9G_w6>r4=i+?@qT&+yep zGe3pEKVjtfDfz4F57`#HuFh9&46$#cr^$7I+o;9*x{@V1I8^$f=2~6q`hhd-xwo1J z*V+b88=D^xh4Sq~y@ssMkQ0znl{3fdg~ANcP3H7neLeF|rKw5S*;@ffj&F21_prrn z$+vU5_bD>(`eYqbO76c*XQy#1?&C&`F1c{!oWs#9Q!fJIffb*p%Tlv7< zv{T^E?&%J6(PMxF7L-IcH<6LCQD#=w7~Pb;i?FeZ~SZcCm2Fh|Kw*%1_R&?N4!r^duk5cEg6 zhj-yN3kDRN%Rw_DC=#F|dV8bg;kEWY&K#TN?BGDydVvfSi!K4nE6~U)*5;at6mlSY ztWot?M_mAe1oI)Fnz{>*pxOnVGP-Tn^FrR)hNh;WKR;>+b|9!(D5dZvw6wMshdu^z zieKL1xR;d3pc~fG)Kq@9m0#rg2Oik=B2F7=v+ABCTqclxqO++EI{54!mQwEM=h5&$ zNB@Jcqu9S6xFL~7Jn9Cv(;br>YhbrnFd{)p4RT=I$`RL6SJnd{4a19ov!`aH9$hL+ z+$!}$Py7paSUgr{nkwa@ZJ@flmrh&exf%bYr&i?&-&fZU@ zO3Rv^doir1`$Y!FphN4Zl=%CCRKI;9F9M(x%$wEcmbuc})buo9Qp$W~G~yCT8P6E1 z(M1Z<*7^H#H#md5SduXYZ?91s*_LG|>%9lDEkA$Wdfsql zV#w!Lv9o&4c4>oUKSh(|TyaGyp;ygff*BbZ3q>dP-=v{k3Y!TC`yfoO-+mMXMJcH! z9r6ZGBD?79+B3!0Z|e*V=NQGsx%j6Ic4y0bYRCNL$_&(@SASe&AW-V@&|*l9!C$*4 zM?GVNY(kT%xhd%5riiD8R|bCYG$x$u?U|g{Sf4h?7?+TgtQae8&Q2YAqADWWJChZ4 zf$>(5LFpwKdNsE8(QD%uidK3b9i_W_!BT}H0CSi&oH(I-1tMRN`v{dHgTfz@ z)#xa8NhT)eWdeS)aYiNXmA`6mrg%5nUT{Y+hp4~oLOY)I>Jv= zziHH3=+<$Rz~g{12w@f~DOrn*ZU^kHz~a*{An%i@`ZYC`2?Jo9L{8t|hjD22h2qg% zoBRJYqE_KnROCbkFJ6*RpusVMAc>&$>2(B4DU2{N183_5|Biqv3on{M(hXG=RaHtj zUt3}Qh8ICwL^z;9djLp`TV}?^&TgN){P~tY3`{~V#T67z*xL(%GIEI&q@78aOTps` zFNRh5egOdl4c<>lxr~2{H6s>)I3|lrG;>~VJ+TTmQGB7JP&6T(J z{Z4A0y~~e1AA7~j7ue>n@B161IsSHm&7rlvcAmvJ(f=Oj8Gxx60}PTD1ybk>>TSAjAp)n5L zP{b~gq@}?tn_!B{3vbKO99|a^4C6~ndtcvqir}T|ve))*r!{-H*U>!7fvbs*L3X9f z{z#_PD4PBPyVFOfoN`ECKGfe&e!y)sbiu{3LPU;Cp};AfC}uYD=NLo8BuKE>2C*bc zJH9xdxJJ&pC$Q8tnR}}(5X0yO?e>_YB&d>jS=&tlmg3MaI`SgODLgn_JP@t>}b= zn*i1T;Gs9cRpm1hbNqeCcdL-aBJE67kha=CVzdVz`8g~h`eZq_!`e^}yAo`1P(KJy zZ!8ZnKw?`%+zXO>k}M8LoIQVD2N*N}=i|9O7(%MCM+bQt7XaoAFmkyM9Dvzj+5pV) zZzDG0HIVCBnGS8$O@XR(SB)}Q0vhbZF>8`%O?H3e@T=-?yfal7BUWbozc1ac=4BskVEHs z=D0AuNHmS7PW)iTByanXHzEh+xp{frF9Weck0`GrIUe}tYpJ-nv@%NU>2j5Aq$}l! z=Xg_)`~>+HGLQF!PqmZx#kw z1Ve9lMlOT}gX{9BaMjb|;xL!>R*Uf1^*X*xzhz+yUJ2o?Ds)EYSd|Yn$%r4`c2uaNw;&zn5LEZzekJJjK|bf@qD?bFobmG!GN|Jv*e>wQq!6)qQXwEiecR-PgYDoQO__ z7mf`kP~pfk4J|E%Da?yslf%Y9_GOJI{JDda6493B4<{|+*}c) z60pTIG>+d2kF36Mh>?pcK&YqEBH_<&AR(rvCrHUywDC|PeHIz}V^`FPF zK_oPI;9|mggOCV$|9l(<1fG@Zcjooa?r=TR)YX0Z<_!ya@U|RCWdXJ;to^AWve7)` z5bVPvEF3{ZWnmTk#^fMc_`ucTz+u9&16v*p=%816|Lr<6fz-kFrWqNJ7IgiX-T_&1 zwQMSHF74nr3X=>mzaLxCyZ|c)&J|W)TT7VT5=c3$c|f7WFOv#WOs}K0hX*pxkAZfH z8wk)i2(*OhD((w>D;$4NI>Fe(2YC$azFj)rL&|T)FW6Q9e^mp*hZAnNjf8bBsC@H; ze=mA-#rdT6w4O=mgun*CjqXy@RZfnsm$<6Ln|^s{Nku3^EW4sAV?MEPWHx<$?=MI+ z*(6_!_W&2}iDLRHcDvxHhv?&Bt<6*A#=dst4V@IysxP>?2NT7`i*Is}xaZ$;E8Vto zzHO_{S7v3RF}CZJAPY;bWgn0oTx@%%oGy{x)m}g8!4U?Zg9}$)b3vhNkm`IpuY-w1 zt)k*}_r^#Z3#mz1NK;!JkPrR4x~=22q#(F1eeL`De&ye_%7wpP1#d=_Uv~YNrKVz5 z&B#p28=)yk!c(ZFqhsTzaDU>PcV_Uo;_~|@S<%jK-^zZidU+KQKtlBeQreFpAJ>!) z%O}}S+`1HFPJH>Wo4uU#&naVL6(99XnLoxa4LM}IZ;`#12VL7+h&$%jFUy$?s@mFq z@7SCU+mE)AwY7CO*B_vVn7y`s@MLGaHs4D8o*UYY87f$WMD#q?)1-4C_oLe;FAkDZ zeqQjIQZh%}x#Aw{5%0+c_9s}JT)cP~8l6eSXNBm&|6MpMk59+L=%C-Trz@G18qnXQbumxXsn%V5#sg z64X5D9oJQ}P~~<()?<*hf8ase^wDy(2KWHnVB(>hs;KUJo_*)ec*j?RA$76B|CD58 zg0O-GhuGABlDghKg!_=9qK1Ww7(nTf(Q$Z6?*mw#^tzYuRGXNX9)r<-2DQf* zf~N>rmJp!{vQX|G+cq~huM|BgxZ~k>m(R4+yp(awM(|2EeP;qzI}z`RT^11zgE<=W zD^M=bFCE%`;JyT72Adot!T~Cv-tG9lz0sGV3pgn?VlNR3k^ z3w8s%kOWz(2lHF4)8V;=f&K7zh#zQmde@igaVz{usaj6K_=OSkJx9IxOMO9>i@{v` zIy*ZF^bXWb*qv}9{0qikn6lGQqY-fM@#|M@2M1wTzW~ODnh3jglyhnoVV;SSJutc!r}3jMfFa z0YiEH^A)D@sNw-wulqo>M<~fZYu-YLoXhxLf?P)$6U<-f{2Oy_&0!O>nsda1^cx=( zV(P;^{^*QbblQ0SoGBc;6XX7Bb$0JT-g)Q$AUk%0!qc)O?4PK4HWCI0#AjkYf0oR5 z7kN{>Ng(s+fY}pw^6%bHPu2nh0x10bE72-}XLLp8_kR98_h0v_OfG*Ly4&_P|Q*=cB1O3l*@Wsez$Cc4g@R??Ax$&yySW@W@E#A*0k7Z z@IZILX`%SvUkXzK182uc9&d`ngQ<=VJQNWXAyq&3S9yHF*(-ssp84TkC&%8hy`U+$ z&mYN~SvlDE(e^#xOnTm%H~Y28!Yo@(Jhj9oaOucN9RX3@W)YRfm86LSe&$@Y*}tY= zU2N`lVu_FI?B(3n#I`rj4HLK5OfM~A%^{%2!O%DU_&DdWbe|cE7g@975fNL5+*B?e zX5dh$c=3>%&d|{4^f{x*Rw-Q={y94*6ea9>;ULv;kATcD<}5Q@t^eYelfC}YMl$r? z=Zl;NCDiOKZyTGuD~|nj;E3RjTX8b<64{$o@82`;*KIJW6{0faW-NIn$mm*_>BJjK z@>8rbrTi`h!xK%n{E54djy2G|WEu6Ox^yM{&A(SI<@JtI^I*;Fg#A>_4{l-Mt#li0 zpE^6wnwx*Pa0q_adIko}w4B~S*vx`q>RM`w5Al=t=oT<6Sk0FtaZv7`s9ya)KTqU# z5RgSgMBQ+isVEjmkP)RLpa&FbJ(po@B7p0%DZulPqit25R^8N{294P4z z9uTL#mUN#To}>S_HiORo@*%d`(pPXENKX&Nmtg4?ly>YY=HO7;8Y4v;?%dX9!TzV7!8MeD=P$^ap%$gn22z zdjRxI)D#hQs+jh%p@TOQngT*63}ZdMefxqTC=$K ze7V|k%huTw%HpqL>Lq4`x7T;RSVl&Y^1h@LO}@X!)M&O*_vB<-B<;}Z%TAurOkLEc z%sw{0&+~Wgk@oXD1zSC711-M?d-&T1PUNXhb_;DqTV5dLb~dBM>6l58na0>nx>&vC zhX>tL0OT=Acw>^^u|osB*QY&A;bS z<%AGZojm4$Xl4t&;06ip@y;8nm~@_WJP(iTU}R6yy7_q~>u3#HG4g9AiOE8ao23JQzkKw0GH&xWq%Fry$$ z6m@jA1J^wux?P9_6AYY9|H?{bLbGn~ARYba(RS+b&0trsZKH9UpF6ZC65$S5l%jlX zt6ExaU+xAa@AB|YZno>bpw5~HOe9L0I>VAwbl^zu;r zf&WxzU-+u2n-eG%aw+2CSg@Olnz11PJum#Q8$q-X~aFs{8Y*pyyj*o{&wdYVQAZ!adfG)39b2>WvJ> z2vNoSazQblJZ?;iE55KU6>wuyt`@T5W0<+dtsAD-i|+KBddRS0VogzZ0W2&Scul z0;-^q5tgPVp+6-9+ZKp`--dS=l=>>=ORsD^_;SYB>#pFLJv;*Ss@B%KczLUXf}2^z zKny+U;=+Lb;^c{Kh3rzy&$`^Ef7=1B299pk_~W}<&8EE6xH!Wt-F77D zJ(|s4t^Qivi4D#1s-8)+LfzYjMdF`xKL_!7epE|frJLe9sHrR|$MkNT;pzhQEoZ-2 zYjRi<&GomrY;277To)zF-A0=tMN?bk8Vg7I<0(inYB|O1v0vyL{(2441J=UQRpMg7 zVM&GBE{8K6&$|raYD#RGK!nOPKxrzy_E$(?&?hV-V?Vg4tshRNyw_H1J<$$!KwjTo zG`08g4Yr6FGGjT!0J{Zi>x2^ecT-+W?5tq})2KY8(0xo*gU5B;w?a#y2N;ClZ^Nf7 zy{isJ;j-@kwmD5rm6$rC3)RvVf6`@-*)yZKm?7~~BN*Ea&FzV!Ei;D#0!d1W`jq@9 zb}Jjwm25R%xq9o=yLZsUE-$wSw%w#>e{Z=YFDD0b;rL~)RW^*PcwaF8!xe$v72ZA= zAc3%jInK4Y>cqrZ6&wpD-8-0E4ga_;int$Gk*U~aRc}{)P=FQ<83JZ(^ zcexPt`|-*IkJaeTCk1R51~;f)uIQrml&|NZAz?8T>nt_=nzmr(Q>(Q|X(=x7jlVWZ zn-kc6{$rZ{I!@s zoxYnzT1uJz*Y6m0I8t@rnh5QM)dpI}W810E(&pvm5nvp0cbVAPBWix&Dnm;S zxSx>O%g8{mS#2u`3kBz|&+vU<`qtg8fepOeL*15*ur#?#&;X$7DlB~uecomNKm8i; zFHri4F8w_MGV5`2v7W|d6tIxaby!ZW35Mn;Kux>m|M6yLSC=|qFNofty~9Ea){b%U z@i7Sr{{qb4G91K0dA)k--}OzyYTCnL-J5hit1%>O-((}m(nIykWq*$tyzqm#uWu?* zr!mUiX-R*pi4m)UjN4Z_16&rq#nI69yUd)~ozxdh;8%~Lzsk(;_&#f?3}T!u_M>X- zrlY&aj%hs*ky=(ira@*p2^y7>Ty8tX$5{$qrR}58d_< zX_wxz7cPYw$9&Xxx>PRHfbbFCxHlm3 z$JRf)=@1ij$1<0Bn41wF1vRz)CT@cp+~P}kjvA9hio>x;ely8I?#~gV-gm#3ue;C8 zNnx>hQHKqlCxCH)-eSLsn)IY=f)FF32Yf=k{Mqnhhxh25720cLs;6gUNM?%xExlXE zBe#gKC_CGd>*l$~8L3yUtrBfZ%}si?NUi;Rd=#+73mR|+0hu~pTm5dGs-q)Vsh*h25EDc#O?v(f&%RV%;G{6O6oDmzpQ#9(^=g$qG znSGoX>a8e!gyH(_q=QYN36h3E%e^3#5^k1m8Q&7QS*U^fkLyw8gDli(ae~zSE}DbI zTzLGS=jIB4E{$Oj9TZ{ER9>FKd;Bg=s*0}ec5spbR-^YPh$yJv@DuKUhxs;s$(kY?E2~+7z&QcD1%mcHO$yrB2*66KE?@L9iKw(- zV zo_O44kI#v)y&__lkn3zA&x^{=c0|j6=5G#E#cgf-`1s;+Vbn>|=TYu8 z^JA@4LWaZZ?%Tio5&tfvWbEfn=&v~9z;hf+qzI)IL_A&%T-AYf(`!u3&3u{%1VzRq zQdbqUv}O(t3(9n?Uiiksmubb47$+`w3D@4oE+&yK#^gh&W_hls2M(I$rsx}+hpRqj zkvJ!2MzC!w&f2Rq{rNK={V=*}Ev*CaI>kZw&|E0p0J&{0Ex}S!~x`S9J0C3w7+c_sRu+b`NC&O%$A^5)chct+uWXF;g%kCkBO-)(@}%wnZRx*0V>`X(?pvAeuF0>Ll9Q+dl!HB-ek+0lXfX z)G1?Ouv&2woZ}lZLyzwK@Y@E3ez!%-gGB0+VVllweK~$CSXsH{9mBe*%g9fLRx`C5 zBo*c8>_nO^x3<^>ck%Ue-+o~dXXB7DQnk?kB`a-FeBAS7WJ!hZU_ij!FcLpnKq-=S4Vy8y!yO;tEP8ABs?)QS-G(;F5b|xt(^sT<4}BJV0g_%)*k=09eS4! zQ5PhvVIj76s-$0(1kSep%Oguv0nj>>EqNEsd}%CbuL}BS#-EIp8Z;Wdh=JFqUx?2Gg$5}V`IyYvo zRi41roT?wq7RyJO>1k%)nwXmm{fvsAVq&y}tacwbR%-kq(Dr2>^IdxClKJeG+lFBc~d8O0mnvP1cSk^IGL*2&q~BH)xwOpLuAMj|Y( zDB!K2{@ja=ZIT!G&+Q-l4!%sjCox^Lxo6HLkzC*Z?{5_tkGHxAen?RPNE^I8AfLkL7*<3J}j zAulfvf+#jeLfP5Lu!)2-ILFazSPR!cp8>oWfX^KbUP2P$qn;1_3|=3TwrROnB*1Ox zxv^t={QUXPw}w|s20(csOec}jULVEv3_%*uhNF9e)B85KL*T`3&~o`j<7d;~sKWn& zeF8o^ey!J)+;q5Sh*FMM-xGNguMEB^{Jj9{&A;C&Ml8-q1U&|$1bIP^T#J1PICJ<# z5I+%k=Yz{_SFwi}L$D&S#mE2omGUbok#)`TefRh%6ey0d?lK0Ppt0#QL!qqa+03KgHmPt6)Q8CO z?wI@&{Y4Z#STemsv)$OpS*+h|-dk@yU*&pwZ+LhQ-*oKB#<;kIj<1~}uTH=0Vqr~u zb)dsVGWqpcH@h-7*%mExBeT6vHKU`Wl?TQSJ~-;GZTbv_zNw9$?|nlt=r(~B3o|El zb#F~_$}FU@k&yjfJLtbkwrTu9x-j|g;qPw+44K;M=yE5<(kR9Tw&&lwcly+eS2hdm~=Ecn4*B3wWZ`l&@euImf?RB2(Cu?TrCtQ7U3N2L| z3-!cOiYZEQqa$UH4@BV>YdM2I*vZ3_up6YfGFR*R`=7ek)HfZ2*qG5wJ~_FsGXJ`n z4jmr5}6U5trAghf+B|LOkBPV&{s5(Ps84f~dGNlps=hf|M>AnwW7-~}evMNQ3E zu*^FuwCP8gUzPWRouQWAyR?@!V$SJwlEO$YL%CI(Q5R-bOqxuel{}Ar@;*e~e-D>n z^)?Z$O0)2cSD#V$nVjyRBhu22|dd;zi%gS$4t4*y$muiE5x>$ki$&DE)YNv=X~;96>)6acM~tSI8>`XY z_$)7@%Y8$SQiEaC~jKb1fBwLr{(gQwSzS^$MDcY zhK4j6UYET;N^MekvFpZlfm;BTjF^PG?6G4Ac{J^e9G}s$9xm?cLH;0@x*u+4JC*nK z2U1YLdKC!g`VAd4Gkcxq~q1X#0m+0mgpDy;%Ia~f_!2?^x8cLE#sn7mr*$L#te+5~u z6h&TgeZQbKb_WXD$dq62IokP8i_0eTA9>h-)+V-7oRHo0<=Xt78Mu1EsE>+)W6M?& z7MgJhM%S(6v%_xO@Tp*~*E~JEa~JEbhCEywdN$YWV;6RgUOzv@9?~PBXddOC8CMNq z*&zAbAZ8t{lRD$Yfr~HW1dIpVswUOb!+#`=TYQfq|73XI4L2==GgVfRmEYJ4*`;S& z=2M3RlvXJ2#=pBQOrKcN{rQ$IYt*Mwgw|~7vvFVF#ThW-TDtM#PD`cQ8#j%sOjk|f zxRXySCa>HGxcAZT2FdEI;!g*2=gJX3K-~}?AWZ=Eg2lbSePo>Vl)iZ|;7b&iL#tI8u$Jq5JrCL~u|ygjwYnXlgAex^ zV7~O@gF_H9Yn_n1mER3417$Gl^s_6a4{*xLah5#tMqb=n}K-Y!oS>{aPZQUfqRMpzKizQYC+ zYdDn2#+DWqD#Df)C_e3n!K^NOY{`k< z8;RUlnd3`|tTuSw;4>zSkg&mq&bG!o4J6nUfOzs+Py|v9bVOoq&{Lgv0GqE(5$F0|N7R_F|002(m zC91E$^cz?GG0q|D-EMQfrejk16^3}DV$R@47N^ue!p2BOf(q-<5m}X*%&mYaW>bw{rbD&y$nV!V z@q+HuOk_VVHIY|W*JcBk_3%-XAXCA@%U|`6LIc-)$HqgnN#?m{3^zs3{T${R1*YJn|4`!{{Je+JFtLUC1|MS83F>tAp2(e8KRv0BZf5u_8^#eMkB4e=P3Eh-*g zs7EDg!bRA*JvYMIvh?P3V|^AOtqk}%N*<(te63t4j%lteIR0z-qD7@yq=x(XU(z~V zRG`13f+)}tZpX*%9b!=qvkhb1!TQ661gHv^xAJ$C2EE1ToBTX~}t zw4r{IP2j+jE$jb_1;&0=aHs|%!IBEA*qtxCZVx!ak&l^u2dF-0&;)0ur76cPM(&TJ zXJ=*C!SqZM`s3KlgN?LVTFNE=x2Fn&o>!A@uYO!cT#hpI_*~?rdTisdyN6HNad4n9 zZR3H#wu&%p#Te~qdIgH4wns;GApgd@$B>YUZxTcVB@}o)@23YV#2A9q z**GfNkVXdZ#hwf`0;odYjdMtV=D_4J)nIf78%7Jo65o)JqoclpflWAK&5yMLFmhd6 zaz($6m}W57Uypm+nm+wB0Uh(R{QOwlF_=7vuy43dgFu3dOa;?4njqM&>9$2q$%z+- zt-2~mSQfr=+X&MpsacN-8+Y$B6+5`Y>2Ag;p_<~nYn=QKsrDsZ)mq%Tci6heRBrM1 z(>DHttNZ~~@ya0|r6vyZ#?ungDSCp@Wj6ccT4j?Tx8`5l^mvNsn9@jOI~f?8@6+y6 zTKjTYzhLW&7Y+vw3fn+hhYr=qvo)D{eIJ;o$fUr~^HXxL=<*rE<6g$bQtXpb5?=F3H!;#6*|KajU%il;^u>z9-j|hMQM-YXsj_Bl&m(Eo)=1 z`|jtG8@Zl!&6QiM@3B~ZCEx8<-Q@k8HWFF;dF3T$`5MDSwKGIH#Sa+7)$Z7@ z5<+{6y)rO}{z!6~NN<9s*7|cp?mZT;;JWv7fLa03yX|%7om~1S4+j#8#5Y!-SCcs!v|3ZVQvJIr)JQ=c`=QcZY?0%NI%tL=NYF4jG@qI6X zL&8+m()A@x=xIV@Ui`9u{`NhhD)G}0}QqHNR`4U}r4S7{p06TIDM z65r&pJSn>rfAg6Klb}JlM;70{i>G3hCP#)XoE}IW8QqhTSYa8I|0bBHIcQ-X$Zf$` ziO^NOlb-R(6yGnOy=Q(VZg;y?uFzHdroZgn{z%S`4gP$wl8)nJW1SyAHXwp@`A_KL z?DANtTW0Dh!Rzhg#JU*F%YQR{sVA%|D=KP{F684Q3aWIh6_vATRa>MH1>xRzr0@ua zB*I*y@P`8!F!2HmdqE24PtqQ^ly^v8zBzmc*QElJJWH#Xcq=Om>v?(l=rzz=z~pzX zrs^kQ1ZZfgcK*D4Yil2}mriWqADWe+qT-reiQ$E`;@7W96yw_G_sK8(iZTwea%bG8 zuKL=BEkV6I#cW_P>f5oEe8xf+aL$Fm#P`K=2>v6d-JE1K#jyf^blX)F3ip zHzTNtGWf_)nzuq5)>lN75kjlsT#6NVV{>yl=wkr#FBJC?nJb{VBQt7tJaA(i;Yq{T zql0JCU+NClDxBs~r-w2V&EGp0!>CuWYvv%^HlEu&xF6r%nwSxQ^Tm|?bvI;a!(#|8{J=_in4*Ds;&ae)hN7+X|1;?=e?J-->o)G@wz}@i4V`T=TH{=h4u_spXhZ1xw zEv9$4y+GeHtqK5HGKqym(90DR?(|KK_1dIbO?Kx1fEQ@q{+#mpYLuHI@9nH43eJS( zJAr(!R~F+H=gg*S6L~Eh`kA+9C(xbZ;N2CK8AlQQuc~V?CtbM5qm!-E%J8)HPDXX6 zhq}cY+tON=_zM#kQ^h%dba;QudfqQ=ND*gx51$otMah>Zed6ld0gQfWF!m5$3g2K7q z88-d|2K>&8<5=zzLwZl+q8^7|tiqWMr$xKojwXxspEKR-YlG{nWRK(Zq6ZF)UJaZn zU;C%D%DOZ*PT16-l>By-PskSOx{~%}E{*48ko4nd*MgSTcsq{xyZ+%GO#9tx?91Zf zn*1{w7_FMffB)$}O^G9XaqGPE^|VN73Sy;s!V_z(pEhrDwxW$ry(+Q`)&%^mMyE^9 z+rM}zC?fdf=S786w$v1n##>(&^@BMu+wrn^_1r$zr%*!y+c% z#cayTibRH_)D#$K!}`cOlqmcP>kFS`9>_}ig|u82N_}8iN^(A`x-r6v9Y_)&d!D# zK6FB$WrL;%gMCD4Wn3B8y${y4C4JQrGTrk*6%&J+F}9juBzulhm%X%z_I_pJg)*rHJT3 zai#Im_sh-!E5G#UsEz-uCd#g~^+`${8SI*U^HnXbN<4YPJpc9g;eq186K|zcTKy(& zu+H?&@-hFt9C6BwMM#KYb5m&x|ASACBMN4AzqJy7S%h0YH|Wk}`6TlrK8bpNddz3% zN;>Alt>c}m*9#O2`;|?{G^3v_oY5%C5awl!s^3w6FO!_OAtoaFZC%|+OUKh_RDXTF87X552uzApLu>vudvX< z#>CFnR!v^R$(4@rgbqx~DLi$T{F`~!xnXjHy_FcI)CD@@`R zJ`kgHM$OMkp)E&K~do{+{1;{m*sIb)8Cid*9FZ^E}V}+(R_F zu}FUzKpRnl-Zwc@9fci~A9=}TJMkMN8 zmzA5Ec?Q3@wam3Tn^rv<;*WZ)(%M}A`)=`#n`Pl-d%W28wOOmWb^6d2@idlB=|a7l z;AGM3$%2PDq@K?&{PX;>=VI~ht=qP?|0BnX`jW1m^1IBNS!{Z&!cDdG{x9NSBwXA0-e;SPl*b4<2L^*SmeOt;_+Weeh6|lrUh8HHZ+rh0Brmad_)$ zYX|t`muUx$jbX!;Z9X-4(@6%wBzN!LMOcrpVR_X#!!wWa<2+Zk!QjV4H-mA{o4N5I z?wKE@^SvQdq^pe?p%lRhgK!;w2O%$p@=aPsPc>WeT=pZf-7gbA*$kfB*%9)-O0z3=(PdP~~8~0#jXx zjMk82W`6VLBg}*_Y{d8ppRnh}#nM!#VD)SKBlI4oV4_UG84|E2VtwAHcG~1(V8L1x zPuz{%E?g_1Q5M+rYoelpvH>S@p}l9CM0GA-{yOG}n3q5}pK8X*sv+ovxZ1aGhgS#Q zee{wh|0=>M2-yL6l>gk;6=H7;-WWO++w78J{`Dr6;!NbTz@8*>)QgqY69x>be3PsG z5`lRdPcy0gC4%iUc*rbK9n$p@jc!kt=RG5vUBeSLEkD844~MIFozq@h@*~$zm7DS;Kl971QL*E9rgRgngKLcOzKTj6kLit! zuUIzjg1=|#xj5ChL};9+%GWItWG~{M$w!WFb#BDQOL;dQtdBVUyX`KoiuLx;<3k9) zXkFrxu1hMg-}F>$)&NjtyW#qgE@e;Iy6I#~FBL6vjzd7Tkwt=W$3MXjJvJ5YQc)L8 z51@UyNb%u>vaXHPEm(b3V2dl|u632OWKGOIAEqeBuX+%Bb%$w^_krGdL(@4R**^lI>OfnJRx zZ1-;BhP*Ooj4j9045`zI;sneRu+%a_-V#Y%&Z2g{^0 z;`>dn4{-Il%^l9WxKrnmU~@Z5He}7T#uDYbTa(vyj*?!#wq!o|G$uyHT2q*?Z?tvPgiD*ou-|fk}X;$(vQv+Me1Vzfdi8Mg2DC zc@BXdB`t1Nx?MraQ%f>^7F)N@)-~2~?hmqea10+dB`fb7dxA~JN3&e3e@EB^7&NQ& zBut039J80YzwAGB2i8ML<>iD?Px(rImZ+@wJ)6p!_I5@fN-rkb<`SU9M%V}*| z+IpWr{5S?_A2Ow$upd_j^9Wz1f2_X|U+>P||FCWB!&VTxu%;f}5?KAQDYnFAaJ~~^g*bdU;D%xje$#Wg2K(cXoA=H{tRc|CJcn&lnZ(qyo;`Kk#HOV_@VCtZN~Q49QmXm8j7!E%m!}4-MiV2D|j3o*GBy3_ORAw?oKxKQMb3b@=k|S9ETbf)ka;Syo4io z&M$CzX%tqJYRHIIy4^k0Y4>)=Ii=yYS6fLJCz-!3XU+PbA4&XCHE)0EBHJFSmr(Ow zD_NZW9O8w|`9SpZp;7r&0p2iLzZL|Vb288&!ZB>OEwWmo3_bi0SRG(-r({%ITR8kTWW%A&N1% zC^>C2s;78E-moiCRmj@&>_2mCMB=K|=_5~>ZCju5N>4_Na%3`zCLP;M`K3N*tXBl@ z+rE9uAAhROvH~TDHamI%1{j5tA0{$y)DON&O%2|is(Do0V@HLTLm)-_Z*mY{eqW|g zS?1C}d(V%vG`>&IN|a?}(jh*Ig9Z^+*fJ1NhmKdla{X^Q`vqlxp6#ED(p;U-eU zNIh6+$;&@%h&Wf?fD9N|+>0S`8g0c-+j~}eg~_b$D8H}?F_Mh2`+k6tX-`Jv?km3# zrj9iTO7ikArg&q$YX^X6z>?}!=NNjim*uYrNKKZ_e5hNZ&vX3n`{wx6yrg?J9)mIA z5m8X2gf7m^zsNeY7+1v45L|s-g5(**d|g7}L*iLeQyzlgiDf1n1%1%kVq;0n=!kpK z(Sa10pkY8|3r53K=^Py*KydjVMHb;hc2Cv+#aiPpkCK5d1BU!aP`nTEB?f%>`4L=; zGIuHHA_$h1m{`Z-y1^NU$^j=qBkKwE()47>R47zVaVOltS0Q*Bul72q-Xh<~C=x#q z>hh1sQhV}*XnL`(A-s%`8jouj-y3l^sbys+q&r#I*m#+@^Cprbj2u5l4DHM#|@&=donRz>l|tBR12U?3&ph#5-L4{AS6D^4{opp#vO&E9dw!l?9H` zcg9t;3W(fk7o1X<%~6?cj?isur7elrx1A{TZ2xN>1l`{z*z2|KtC8~0)>j(VQl=7$ z-dnybQW5mcY|uQbO#KKm71A-Gi0=41=r}T+uj3h`@G!pbUtlj53}}pb4;(1?YuPR1 zoX}=9X_tmO-bnI>G*@z_ed6edJy)n$tHO$Y7h8uEr9h854@Il=bZ6i}wa!$r0Nx*? zzusQq$hW!BbeNMtbxkj;xqZ`zuH0+v4twPFa;zlL!@*1zp74A3GNBJhe*Mn7`}yti zwPX>auj4bT>+M!Q)RlCB7%E@BOsRih|NAWCGM2Y#hb~ck;8ln=&|y?EvU7F2rt7>t z!bz=TEdnz=rVcF)f zOrs>hO+2F~*8cI&pPZj-K7$t<9;I{MK#Ss}7kN*n{up*yF*qRg^$j38aqSI6bN+SA z361S9$72BTfaVcn*D8By^YmAGJeA09W6YG{jf#wP8E=$=AwKOxQ@iZv2d?{t)Ki}n z`su(3s3m#2o=Cagt1N}C8DqD#7MIeFK3y@GJPfFMCzc(%T z_(m&Vj|0aA$(mFFRqvwyL3!(SjDIQ}hoY<~oy*K>xE5~{6&ZD;dn&KSI zd$CXs`^;5bsVZivhF0Tj3ZRV~)v00S(jj-Pvs+2l-|`qARsRw=NadrLXQKZ&l}#rk zDZBAwE6QGX)OP zX+4W=Jk?6#5|Xy>=Y;Tux2Sz$eEz&Wga<;(jrmX^To4?)|BX2f=ij+BN#M=LSW|N6 zwgd85SfG=Uac+g0WY+#P>k(P;v)l}o5%IxoV~|3@Rk0D*C7QLrH?68O=tS@*kD~crS;{GiAsT zPrO{oW1l0xUpng=;TdVp^Ylr^x7*qsj7W`-mJ9i@1lIxp<=Xs`dy3{b6yQ_va|Bm2m+4i>5vLsK$csE9F7@pqO6)&8l z5b!5zDoco#W1_^sgzVO`R_95@DM0y@{mhE)+e88XEk+P(k?+}w#I=t8i5V)m_fsU! z=u3cL4kJD=N}q_;P`Ybi>|eYBq4_q$V{44ci6Q7^S)Gq_ado=>Y-k>=Z#Z)d@%jjRt&|I0sd{T7}wQPF2PUgY=K}2{sZfG1ngp)smS56Yg2NSXE zoSf6x;VUQZ3ag_cQY{h_6LDEwKwvuFPsFXi%E}79BJ|lf_=K{n>+BmEc}mB_<-p_JZeR@Hw-!w~_nCf@0XT4uO4%b!!rV{fYxFl+u@AL;5@+IQg*gdq{ zF!__$ZjFElglri3(Vq=(=f-KN?R%4Dnd&&nx8vKb?W(Pw_M@J&5<#Ns z<Q_WJZkdP4()%EIz_E6=$R8+6hGQ59=Eb8}uA*4A`DCvbOw*N~B6 zMcC{G*SMw^M@K~LVb$ad+7Tphmu}}ytPEc~+Q4jO^o>Fq$S>Lzm`LK25|o!WWyQ^S zlRKaxBDm&gb=43RJQcyfeM0zWVTGc?z5|ke=$=OHo1r;yM>HzDtf^tEsKS2j=R^55 zPC#vF-_Dw5`PnMEdYSN`_ew#Ld_(kupcysC|pNPoR(e(qe z_1xw0g>lrg7bvc}HvW0YiVg!JP^dbfU*^pvAzRB1y^gR!>7!3SU%q)m3&aOa6E>xU zwaG|~4dHJ9Yz7PsViyIKakfpr-2VOhL!&8%aP0#}#6g3W^1PlNOtV!Ol|U0K!c|Wg z>Z9ib#~KheUNLsr7-1*~ZU-b?ad8AcbGdJ^Tt!2p(W==2QRfJ{n+D?l2y;XEY(&=i zD_5Q|Ql8)k!we1&Ac;@(z!@V?@fa%%)8YTs^3&t7MW+sZi?l8&wNXtk3;*?ezFST9Q1jkB5$^YI|IpE8 zD$a7w{ln60^ z#%>{;k?Ch_jIo(>akT7S56u$oaj`} z9Mqc*xz)r?Pcsl5XLjSpO!A(9>o9~=Gd^)ffgm->&UJ@fRA>2yk` zOS1GpmlS;#5DMW1i^Y*;Q`JN!OgEBWoH@cg1U3_^yypwuDWUuT%PoiE5BpE?eaNV7 zYu`>`p{*mo9UihkQ{a+r)+iE_{`MB{26c-+0MjtvGY0Uq}t`n9jV=h^i+g2 z>535Hc@pQf;fh>6&?2D$#*iyz-FqF0Ul^=WXlGpXcjUO#E+@@JS10r6?#tDC;&qC1 ztEw4Ki1h3*&sT={)JZPG-D-=*s0I2Jwbj)2Ek5`14AgZZPcocH{delm^D*b~)2@c~ zPO-8jm7kVawX}-kU!P-(aMBgI?w%MFcqrzD$`cM@{O&QA@ae?N4mk~hA=vcTO< zMu9FVxHl@*|16V+h?IWv_|e$8b>|5LNY~G3f94M0NN&{s!4{OFTppN1~3Cm=9d07?;AZc zIXZXvt7~Rp|H|y#TE{lS1SgekVcOa_S;{q^T^E1PXmFAEMFfBRzVW(O;eV)BYM=F4 zyDXRX|FKA)$FRe!8~Ho_cRJ8cb2QxM>M{HD(-9n%&PT6UpXAS1v+QSC{$b-4Gm|a4 zKj!&`?Gs?XqanrmQ*QqfjkzWrI$G2gj(~$G*lnrja^DRo!21Py8{`2Sj|vk$$2bhc z@~6swCt=(wA`(@zC`T}4h-EgcRjLL>4VG6rF<4g_)e*66#wx+HE8{9hm>;8nPFL-Y zH#eeo-{3L^n1FK0VN z>-Z;c4jTAL%>4=!A@U`N*aJvbuu?~p2BVHx$H+69LdZiHl_$G`8|VTLCsaKc&0fGD zqN1WACa5gKP4R(niE^2~ZtpI%_tW4EOn6k4l&H~|;HD+g=8)EiM}^=6i0>!7*Rawe zNI1A9xEm;w6d0ADh50Xb0)O;Paoz@cLOEB`@22{ug`Ib_u$A*xVb5~!s9aPp+t&NX zYzIg%ZiA55%4$M+ySAxcaoF$iZcu`jNoMD7}Q({Tga-N=!h^=10EdP7(WI|7Gv3L;jtB6mOCUf=5eCe|dKf$@n)@(0q> z!k?Z1hUacFREnZRtz z9G*4u-nO`X%yD`Sfn;#XZ&2Cfr(fjgZ(P&QhXHWqEMJ6P!TC#<)Yc2EfQ9|aK9+su zMVf-b;)H(dD`m30TT(mj>CQbi`&!r~PI&_<<>QNb@j@T4F8C*q9f2nWZ34T6M-=EC zaG}6`iY27#jvPJyX?3bX#VUg(s^PvtDpy13eGVF+X}@g0*EKl6Xs_}~ z$7NLWh7D6z=Pjw{Vu!wGCtk6VEU>Y8^(xyRNMKX!i3Vs#jyvb&m^T|hOGT_kGc)6C z`M)gB{eUCD5iv1eSRdeoOtdH(JPq9q^ksYLQVk<} zYdkvsNNJYccdqm?oqgX#8WV^5ryQ-qO{qH^Mg)86f;kO!PQ9hkFJ8Z~>&ctfmfWD5 zC@Bs1J=LTFC(a^a^={1(8CNu{laG9&u&#L5dL9nc>pR z53zs)6XEdu(Kk3J#~za&vFmJr`{w;QHPL%L6Pn6`4?o@5zWGz?d$~jLPulG%(zlW> zC{gTu?st)%3OfL-CSV|_oLG4~zi&Yn`vGL!XfcMZ_B}y!Ychm1T)5JP!!v6)t}eS@ zRDckXUcsHXqQScxgE*Y8aZUjha_$X8o>MK{ijaw3X0?@!sf}Pm0~mp=&j=WnNoi?; z07X#avBIyLYK>J~2u!GjH8r+e;1t*meDHaAf%J~emm{fH=h8*)q~$Nazq`~+j$MlT zC_na9MKyhs={Q|+m>e6E&!tq?=d0)6J8mR!dmE@cjh*!5WzuWtyfnKp{AXyhP5{XRyTQ=sv(iNS$YGTAwMAAQbp?5KsLCvb&;BDxc{5s*DiOggx z6_xLzcWur({(I;?6}2J0cv}7vwx^+2*Vu) z?jo>|y{WQC)=89SlTJol?7lMMdXSN{yEbf#z<^2I+(uu&AQj1X%Rx#dUlrbK1!P{` zBTO^}hyH|qGdjyeL*@I>B&@H&GSr$|OJpfYq3qe*%XD(k-_`uUbKRD^oj#n1PG%3R zre?TxkBa5Mxk%Fli(!iP)jBZ&Q&Ol^^@Uj4yqXJM9SAl)GEwaM{QCrTcx1S3;^^Lt z!-tQtYO{XtYz$NhKCgeVs;rW;X%P@nMntbZ3(^KnZkpVy{JHC3$Pw$pEmH|m^#NPe z3#=01D->~ZAli#gVuzEHxUA_G63^yPRmqi(r?mlXJQGe4Cg;^B=s8>*fxROz598I0 zANvM1B3~0*R8a?eC;Nft-5~ZeN0_lj4twxf87_4+54ms$!G+6oFH;mh|GQiaSp?Ik z_T9iD(OKgX)HaO2y69nNw@Wt?O(04yPBW3P`CqVwvZtq9W8>lf;Ea0pHBa`4h)cCO zUmhQgTW82pbu^<6pw!|~zQ~iK$3&SPNGaK~ z-sI=f&N1~V-~a}kc|P`-Q){Xii1S{xJ|#vFq2pVM7nOD=ibr)cA zAo5Aawqs(1E1h}M3&J-DBZq9O>q^0#)$V+nxDyS6f)=Od+NJMl8n=j?vG1kk2-2t^ zqDz93sw)ny8tO5ev?6Ei+04C?9r9h~luzqWHS12x zT`BILlyA`#;(7Y6;I-myY z{GDu%r4+R|gjK%cMB&-8a7X*=elUFrSLwLz9}E?%PC) zr1U>qa!=^8M!7`QriU^N)OQjE=A8@8ioI)iL{o4Br9Pg)ZGq2t=6}==m8B9zV_!SUp>+ITOie@aZbp1BS-mcqrR_y)#r#ouVMl zk4i9`DJ1QHdWrJ_1|HxT0!D`96CHu~(p@!(UT{--z?&2+$vHpvHA46@?Bn#?IGefU zW;l=wyP01~_+rBFG%YO+ZTop$U4N`6ne{6+3=s>2ePQ|9>>0EX05plP55ks(Roea@ zlrzAUJuBFu`~jqlp8wqX3tFoFy&Zn!*6zEn57B3CEm!DuJsW!?o+i)2?@#Myc#Z}t8o^NyfpnbpMkoh4hB~!36M>F&I-|BX@s>EIz z$sK=~BbRiyQc+eaye!|>ha8bV)`-i{FFPL=dOzze-=h^ER4T#Pb|m`c z#>XNvbyuLk3ztEOg^3>upjiVNRmp10(p{Hhr})tJWn*X29*?%IneL(0OWJ4 zVFJ8S$b?NLf^!J!K9>mVE6nC$J>szs*Choj0uDfC=hEk=%aU!Zs|?vpNm$3!;;3}&$A zhzM_NLO|jKs}0{OboA5pBOr64S*V;^+#OgAaWImg14~Owcl03O6^sm9fE$^H6`J7B z!O0%7Y;;w`qvqx&Gxh>2%NmFmiX2Aiz)2&R;CSVeKT2u<@Iv-gV_nF1fb>FhR6!cp zm!7|myMjRUs(|ivfNwhOw8j0;Pg5AXo*%0(z&^-O?PRNTDFt;ehmSYm&zv! z)l1L)a5mChdO6YU+`bNLn&5}@Bvf6#hYQ_8ncpZYQ?4KF2-u6C(P-wSUE@2yg)9~J z@=UA`0W4W-o5SmpNTPb>X%jHw@&v8oV+G^QX|JI zqIRJCER(LXzw%TMc_p7E*iF4+mu_@4OkEv@rcb4JK#(~(J7zw*k0t(ODED@^6YJ}D zLQMVt!^Rm%drVE+FY4S7;pboo0(`Crbz<`{UR1vh=evV{QNXCW)OD63Aw^&B7a!n0%0p=&B@*+K90?wD)3Z~cDA=OCELu%L|`&ZD@iq=o6+ z7$`GVE8xRH%-DaIj_vB^En5h;owBkr81BZRqlR1|RWsJe!-KW3r_pe&+7Q%!Eynxk zNAabY^k3!Wg)`xza#lj8<2PZX@!_?(<}vCP;PKVYF&__8Q^FEe!v^F)-Qek!%^=o97! zqIR=9Wj@k&LXIylB0{pqCGJYC))u)uUEZ<32lBi4|46p)PL`FtNqaLQ zPySUg^K-{ z>paAS)>bjZ8c+!~2p(e%^ROS;jqU@)IKc9-mY^)3i;e0kB$GD# zg`B*8Kf6U#{Y(Rb06yK;Snq54@@2sG7y>D(M)iKpH8(q~E*u69>^kAK+VA@Fej=-^ zx<-ptAQ;E(JFZ#|@-?b7IpPoV+B7qbm-c`w;L*=&v0fZ5cIU#DUY?HJ^)~7rwWEAzN;7w~ri~u+-*|mL z?2q&XBe_)JouqMxBTnq!=xoPE+;K){=qX9380O!nbj)AmaN+nvZ8vj&7b?Dy5HaV} zD7rhWz4)H~UfpRkSvgSoHiIPD|BLa2TzAFpK=rYl3$61!)fCq!>=GqACMu*dX*22m zrrrJ6Hm|L9fNw^GaqEd(rS$9k_o|I<^b{DSq{iaLG!}b~*+Hm?={I{(VA)IW?mxG0 zTfCL__|384ODQ8$favqOe3la)8`V)j39~bbo)vUlj?}r#T;#qp)nO#s@J`$}IqZs&b#!(rS4?u?v?7 z088N6$S42W*SGQ5y`A83^^j9A-@ncbl-WmuSKw*GCz7WL9t^d;o5ft9V=VbOl zFz~si251SeamZC_>*|WL`hjT?ls$~D*sR||R%S*<5G<-wou5$q@-_PQgo(wgZeEhu zyF6nxQ<1+w9ydx|z1GUWt*CIdM%;lm0_o7NK|Ty+jXXc&Zq9N301Q9IZ1CGR;;rPy=tMKhK!4K$Ld_r?elNhci%kB z(Uu?PlDTIO_rf{aSwZ#gFJX!)|huc(DyXv&g_k?-Oi54;{we@Hg+^DU0b zytZiPRc!^I2A#~1C<|k9d0Ej2Q|*`10OQ*M5huN=3u6MKgtaf^1Rdz<*Mw#rE_2`3$@w?o&%~Km$a3KhAIgvti;-ihUp_P(?e_#_rm_ce?q| zJr%~&g7iE5x_Ec#Up!)_{#!~n=O;wC@N)@d5)nIcA%rE zhKw@FTM}RwKjn#5nmXtcu_uL<&Uv!84v8litZ-W!n|;POq9)d`c8bdH)a6ZxtF0+^ zpAxQEs)kw4-A$YQ;v&sG`x|Wly--GDn*zh(6NH(sc{3Y`dH0WdU)MfrYr`+ir~c&3 zt@QaDCj!|o_>GS{WX-SNxch|r%=qGwx&ri-s#NQptY4FMjF?{?-v}}|BgNDjX`oHk zZq8-sVeqBQU&VOq;sHp2gWkh|ZAhS8jj0(O1%5~)sW_fpK|5($zN7Hs)fiQ$jxx!C zcws;8nb&)Fy&hM7+jFrn(KFtyB&lsz&}SyHR8Htwp_Dg%Yb>U3Uo$1QXHp1cQr@cC zYUnXDtni|Y&rh*5^5(f_4MLCm0UaF1e25y3$ca{#Ro-awT-jH#+$nFHRv5hUUS@XI zQb?$1jJ>Gg>oiTvO~=Mpr?xOa7iRlwz7tA=8;+K1(RcSAo_9Le4AUzvosWIoxyRlN zum$`q-Nm!tcOc=ki&AADx3R#ZZB&xm{HOX6ruiA2Te02XW*{xL$G!k~B(_qxrG{1H zS9W0(g5(0AIoMplOxwPGoi3ICSQwxP@2D-C&lgixHBfO^p)Xd@VkB@OI`)y*8%id+ zW?fT!pNvk0a$nZb3E{Rqs|neOvaaqvSY9OBt=BO7E8^P2eikjva@rkoz{14DT0ePA zo&ZCW&oDuDmxQARG95SuXsR8ZCWd}hZ+juTJcWzjZff!xtX^(e-ZoKDDV2TDaf^dc zeBwN9GQh@zLzU=@KL5ez4jUE+R*ee53lj3ru(34 zh0`UDJtj*=CI7%{Y){n$)$DxwcY025!u}RdQ(2bKm-_mx@LDBg9uV^}ZwLEl7H?2X zUmwByI1c6}Hp(7wiu6D-6Ob<0q~32HH3mik!g}Vll2G3~Ocejw11~v?XU=2G6YakYT@J^16j}L<4jOh^O zydMyL4qMzUzj!tQRK#;}Zc6?Xhl}D~SvIgrWv<}Qx0&p&?hqb^76ZvFR?ZN=3*t6LAw8FIL&(@=O1$W`TC zn*J*LT6nV1gMo+MqeqJ@OFRYB^slFG<#k+Xo+&rWeKOpgz9ZvXxtovb>PD7@;I+sG zWviP^iJ?>e70>csw+la0GHwaqNI1;-vg#T+%*w)diT<+7SL`%U#2c_{Jva4)~6h)`h#bZ^jM@TL@4{ zKw*S9`jL076gQh}JH^c3?khsd7Y}cxAEsp6sunsaxbta5Y^;ZM_7#4Stbrd$?Vw|m zRlTdg1!I@tn+CLnC5?I>)K6dw4wFDR=CC zdfN=NtQSDduQuA%@wqvADPLDj=6G#R-etYxml&t56e3MArfl}()HNH^$}tZN2;e`Y zZusYPq$xC0fNhnv7@<%nhD1b!VMhl#^4Ra+*YQ_JZ$V(b7$SBM`Gds>2%T8MZy?Ey8ggR1wP;W(hwb5?2Cgy$va>&? zJfqN+gVsX`b=MdBN7t6;aJj>y%||nJaCW!>Pag4rz>y)x#M}ArE}FPKAcadyX*D|- zweZWt3Kt(1WqUI!;Xmly6mL9FRaotnLU4%VE_mq^ojqNZm|m=w6f>F;?9 zu>8#s>#B}1p}&F)8Rc?$ZLWD4j?pf2jZ%bTCK^Ee0)TW7r-+%)aAP(KLN(*U9%9MH zN(V6pK&D^p8$a2xqJ~@cJ1C*RaAB_(zG^E!Gr)QBAdB^nJsc@Cr#=img(jmVQG_yG zIy)(@2K60X0ak1&#mV<0J1%pp{lW?rPZqmf@rd-@6)q4S!0be!2Q>+3oO+?Qt01qViktC5kC3I-RfDSq`aY)kDO z=3ZxJ!U~8!NI9(2ueezEMbo~75SoRLr@=-mkDwTpXEGAK&#d)moI+w4oOg;Ci#0EL zyQomU;}2ra@}lb@%!N@t@MNJHK{H)S-dM$30lq#zKR@dIR|G}kbo-oyUV)%&WBR}- zvdOMyJ75%c_H&zm?XGBmMR=dboCdf&(5--N2SFn7KZ}dR$_A|p;flX=XIpRYSpx%u zR@%1^mG`fWNMZKGb(*732rJps#9c*zr9=WpJOmFFC!tZb|L`9im$ zHaM8Pb8FnEtI8W!7s{OtlHvk0q8Ois6jd~Ck>2roRLQ?M=zUq0-M5eT9anD!zljrh zBOiQu`&0V!w^y+hVq@nd(Q|iM1_tST{kJz*Wb(RRx0}%X6>UAQ%!!E?q&7$T8Tzz($KOxtDtGNn(Mol9Q%s2OZF$# zz3h7J=$*h1_P~iMU5{CzWe@zz{LhW?gNeAPm`wfTwQG#s+pgHUlfY~m_%_)8D!Dj1 zv*|$54>mJ1^EX*(JPiI%Epj20d-zFIiQ}C*Kcj~*F(r+@=_aS?zIdE1p3gh|RiSq0 zEbrroS?TGZn%97Y0^tau+-PcQO8Q|3r4mjRkPnb#@u*;v^g`2IEM^&eV_-Lvy~UrZ zs;K(O8;jCd%c94vwv-IK-&w;^{<@<49edkjfj`+w(>Ig0S%bnd8)Z|b;KLPpEHij5eVW3uE-$YDLPI*@Dy3sRrV7qG;7yzwMkbrY{QL-@g@0J~ zW41MRa*AN-%xY_M@Vk{7hFsf^KWSDMr;Mlith)M3%94(|Ij-FXm{v6kc0@rC_OoI?0+ecfL#c3S=nM=BF0G!5QI%8n4NWB zztRKZN7y65MC0w*cKH)=U9c=TRiIRRY& z9*wZH<-fVjgxCetA9Pr#wGfxPl=Yc(vBYXdF;+!4nw68+r*dJ83p{ZjGxGqUcfq;_ zoIClKctk8CRv(?57T>2E!|!jLohOL8mq8fOp(iCXt+$xi?3Q0MhO zi?>E^`!9a3DVZOrSYY1iRvwb3N136Z|K4@zGK)F2Z)#AHAY;wI4NmY2>=WRB<4ejQo%~_rt(_|8@;G;O>0T%6o{vB2 zE6>wgXwtnp|19bW+t0}|P)?j?2k-QoxwwR%lUsk>(qeb@>htgYWl=z5Gy97w+51=T zl$Y9uV79$} z!}nFay+Z6BwgDq4X1u(gm&qG5>_|ea9-n`A$3}|(X;f69^9diwr6Bx+>*LGp>|M0} zp`i@DlP(K0z7{@UXI#+IB3R4bOLDl1k@Ja-3A0V<%x3ua1_t6rneOS|co5v|LD;od zD^=r|6L#~U%Wd7d_snK$>V=`v?$;)oGN^gQZJjl@Z6kask0ZZOb@{+HwpbYBblksB zyUTl0PhWVz4qR0{&-Q=6i#}nM{s^WBwBywRa>`DZn0y z+4T5SsbA+f@s<(w3bbTmE-!OmT$<1FiWS;{=WnU*oM&hrIUZXbqio^{frX?J%xciD z)Lkdz_bXs+3FbGL_!ud$eI&5+!hX*fj0c!{(e)&PaSF5ncGE~28;M+#-y`epu`#?l zB1}8J?nv=3XhbKp>irP`jmw@18de>iv!acQcM}J1k^5AsGJY7Y%T4tAJ4@PIL+W#G zGjY-H`jkEp^1YVg`q8Y5+o<$NRs)8Qi9n%gQv2fJn7?dhxn>&*w~u&n@p%VTQTUJE zK2uxe-u5l_EFb09f&-|jtAaC9^51VW(3(zsQO|kIK$j}O#IZ{xOn|3H`^wI>RKZIx zo#{c}_FCG#!f5ASDpb^aEG4C`xp}a}rnIS1udpjSF}AqaHPfJ?Y1GiOIyF8vwJhWQ zND2`y{VeXenTzA&@lG3hf8}^RGRvPo{D%cx|J3+DxNdiWlgseqRo-3yP6;Ip90gmV>ah z+|}%<3`bwo1dLj^+?W2for92X1e#gaW43@{AQr8eaBl1AIWu*2vlE^l#3qPKN(PVy zrMRt%Nj#SrIrdgo>_c^_8-=4`>DsIvT5(`$xS|0Q?m(N26`b8!P5YI^HkV#D-%1WC zEFSHPkJ(Ohz(^P<9{?z6=fB7E3i5tA%7pD}6z-G_xhcMHO^5OR#_>Dvu3CXot*(Bi zR)n84Fwz)9>>j}eI&G}Lh2;-iGp1KP2wM&GN}P2J!=}Sn9U+d0!W)`zMAjGm=0U>^ zUEYwzRie<(S~)5}+WA3ovYp??(lu z53I&}Nx(0EyTTYrfRIkVqK8=&N-E@E;Amh9vi|X22{@G3;vFww?1bygV!u~B1d<>e zqPAB-posJsJn0y0QGqvBy^ytTYD!3H@B~1Q@)OKZTs*J`K*B1~5(X*Xvb5wz(GmEI zE&CcojGxSMMbYcyF?diR>NB90opYIich`r`&4b_O5{fqMQ!^)7byNs7%&aqfH2uU8W%5}kh@+7E;$@6ncS#)ut-Zl{F$c6whdX}q^1wSfJP9Dl&a)=&|viuf(i z0(KQkXX=-I){|f11jueFDG1VGbH!SKeCeXiS&idb;ml!SbiLL)Lxp}iHZcS$)87Bo zoKJ3U-SDy#Q#SKa^h|ur?PJ05`R@dC_L1~2g5Teoj(0$W`HvUV)>yL+Zxp3L>Rdkys#Hy^t*d6XFG;YV_svJK>EhE4ec^RpAF&&&v;*YHGJ~*qKBO1^@v;FJk-ex0dH@ zSp0?a=RXj!1U$)Wvr%Lb(3e3rJ)gttJiEG%lnoy|=6DMHItM}0LsOG~`RdEK-rmw7 zQRN2@Lr=$|T{L$JC={RRzs2}y+faKZNiSL7TQl_x?e{li>zg+Rzv}F$y)R zx=FH0W+N6yFEV7M=DM6U-}&b7&X*@LB{?FmC|=O}$G4$rez-X9((dL-ox*sUQXZ+a z)mLMoilya+1wnm%eXHlX9ZYVz-1~N&e)P-spdCcD6%!S$i%9DPCTAwW%+260Hg)xS zU%t0N7GKWg(*v$K8AVIc-Q-ns#`Ha6(aQ|Q`C=iLuEYiZDq=Lv6j5$*j`mfK2AQdn za&FVs%o5SkL{TAX25D1<`x#po%=T$7wCz*mR{Llv38bbA!EIq-VJO@1+Qcoy!Aggp zB}j3&9{eH$8BQ1RMvK9E_bn!NSZ8T9+NjVC74{ws|f$7!o82ECYeP)>*V7s3-KG z6zl-7n#J#i@(g@e@OzX&`q=zwPUe#D;i{p3j_TLt_nkL%zgBia&RVsu)r^*pWcA_N zk0)-&-%92ik>6C!cWX|_v#YDmf$59UP<+^{ zJpNrcCB*mP!E4io-^tskVkkvZh=r9x0-I2Tc#jlqjGd5<-j9ao_g_193HjGl8EL)$ zyMFJQi4nyatK)Cz1}u8c>T&5B+eF_K6rkhymT*CL+%Lz>A-?vt8k@oo$B)t{b-fhT z4sYX7W58z6)1GgQ7X2acG;_wPeq5Ei#xz+?ljYsDxy81ZlVj-NbiiqGMskmxz~_ZK^NjfoCPQ+u zm3W}QT2n)R1HMKANJk)V0E+;n36L8O8mOM9L%H#Z;NYVm16g| zAh3qRqX6DYgaQ^eA8Ql+8;2!hc0dJ!9T+jo60;nh10G};fUXHIFXR;NT!K}r`Nm2X z`8n*CFmYpFpw=^7^Hb~3E3)*ioot!rpLwWAE#KYhNLs=JEg{_g=5D`vz+EgtuL!)ky-w}hCZd(6Sbt?$~Cq^0W zcR8mYRL|yVfScxCj3M|DELsgu`FA$bNV$ z)GL5JAsI%SkNmD+d_q9P;z!@?vgEwHsWN<^m@#Y9)9tmXEG&#lYMaS$2Ae&eCCvHM zXgoOdh2qg&%7OFMQd~R=??b-j%_OXI(Z2m!e z>vm_oVaJBnK}l#6(b;fuSWT}<=S0`oW$a0oSv5Gk^?Zf=u18T91NG{J)+89VDfx?$ z#`Xra*XRUpY7e~lM~Qph=;FtK3qPJ{cI={iIN1=YCKSn|xXC|6 zazH?(G+!C}Ipa3tQr29;Vt7X3?g4O8-mocXaSUl+dGYv0fv1yT?FTMxv+@ISc_)}PE)gDApQRPyySU+`Vp%ylC{fg-`c zm*B*$uQ;J|2UXq_q+w`J(0nhgR*+XsUK+#n0H_((LKldGtzmXaQd}I;nQDl`3CjYQ zHo@)-Ym6 zR07Ye`|#(NFhtz!Zb)4@Luwy!WvY2HgUmk9B`} zW3$(W14LzqLFYI3y<;b^te>j4^LK;AzBzwsrFwn!t0IR(uP3&e=Wz4gZ=zlFuCfqV zO>exBHy7(Tk#=-B|MGfw@k_TSDW1*Bl%)LgC-oDld{aS3v^@vgWk z^l~z+Kz^n|ZF4J#r77tZ=O%<-@^1}LcOebfANFX|7Wn%0yy0ql@Xyk{pPWPt+-0P)7|vlk5E%E5CPOe{Y9{0eUA5}7^I-BQUM#u z1cp2spbpUgAsPhJzpJaOx(U!SV3sJWkmXZ=#$lEORRZ&=^xei4W8FqT3}H3J=LIeY zFbM*^07e37?1Q7P4`BnI{rkEP=Com<4{^TWBf*)5P47CK+z%gKg9!!3A(@3NC~Jw5 zYPfYf{&P1drNMF5|9YSO)~k=6D~eljQq*lns2Fw3tqa<4J#5K^Qyk}H-{m=|{;O*H@yYvRhsaqO zvVCXorqiBhSAdB{CW76r@6hR%4gieVDZ8@@Z+6n3(gT2hID)UrjzJy{iYWBU^Xco9 z2I2pqo4T2zmXBEy@Fd|yP5y+%Foc*#eE-U!b&VA<-wLyvP@P&e?bcsn1c@Vjwe zQ&DO2pYPfu;y2GQ84NeT5*J_HXvw&?NbJ$*_3z(SQ1zqB=Sl~ktTA3z%xK>)bFnkH z?bAqRzwcm2mwj)d;-9QF^uF7#%goRmjV-zM+ZOWB&i*Mu0sp!DB*K%}_tVG!GFQn~ zX#X|+GsExir0((rblZWtUY|XoemRrE!Jj(HKpQ3533RFIFD_GLXO~i`Pi&eAwrR55f zsH)Cx-QJg`7PrDI1UP*At_1oXsX7~SlV1Fa_T^(J3uJXM zjDhjz%Ih2B_wWEa>m4J@&A^x-o}dQ>l{CswenJXWedkv;HZ~wZ#?Z)!1jhg>M%6~} zEgBQ}6p05#_KA1{43H4|0Xx9PJF;p51&C+EhVOt0hz<%(0O-gFzXqfe{9T$K?HzL? zxgHlTaDidJe>i9cM*eEBwUHM;w&1k5{O*z^(NGZV5aX3q-v0A>ZVl0FVN{#MRjo@m zM>!d?WEq#=gXZ1u_Pe75D_L0Bl$4~P4W0*iOlQSDU#qes`DD=k4-IW>hXMslZOBY# zqIa{i7rf@pxjA=G`-t&UI(Q#J-{@g}I78R+^l2a;?T5%-;mwFt6B(f)jOz949pKl3 zRRqBrVZZj>q|0M1F&22q)m>dR@>`!;j)#e_ubeB3=-^Q#y2pVF&+ZIIBE$pM-Py~S zIEfMw>Wr^n&E;o*aC(p3v>^GhSFXsSdB=@`;;Mz=0~ih_Ns2jU8d%Ynu7SdaFcOQq z`7!kXY(*P_WwYNe3%CjIwe4^Htz$zyQ?|?aduNPzwu-%QSx2*Gh)gcumUT@FwqFvp zOrB`LGqdV@IwyPDzG4{%ixJag#OpB=~e*79{MFe;oJ)4C%h zf;{uDW*+cAO18vTNM%E0XFlyqXWDYo4J$_%5_1k&Ey(0z&>PNt5 zj`hlYN>3^8?~7)!5H}+9WxXV+$<}r~Fl&@^=HIKR8f@4Aod;TJQ{>pQA1C5NqM}Yw z)lOS^-a58dQ^Qpn%UeLvE2wST|n=tw8w8eIFI^k0l)T&?!9Of*h>eXhA6|49akhWN#!WA%~f z!Qig|;ebC8>8RK(O-6yh=%KnG{^~!lV|A4<+k!*0y+p-IKew~$lEKh#`w1F;_!zHRhE8^iE@Gm6|cPt=9WuUQhB0uF!ff^-_I+>Bd9_Q zwBS*%O9-%?#EXt_L~_T0;?eqi85#@RQs@n|w6suI;AXug-T?nT1S&wn@bSP<2MV9a zrO-7a2kOH=pNm&F688{yA%ix_k7gT!)nwBZCLye zNSu(c>Dsj*z|Dl(rGLH|x^2V?m&8X!DZ}RhSYOTI?=jIkQo?bX4{fGsn5z;K6A?H= z-7IDAFg!E#SQ3f`MD25|3gR1doh3Z`T2{83_uk*-@Z|hn@p1C4agmtfp-s6h^tPDr z2zh+i7q}0)7bpSn+M}UDJ;k_zlvQ=-562=)V?Hs9gGTgos0tx4;Wdp2u9990PC9D1 zZohtqcI|uA6|ZC(I*GKwgs=jG!}Ve zIi*;%L-#iz=LiYwqozr4Exaq)s!9bE*Ay6%aI5e}d;hKcs`18aGSZA6By}^oy=e~&&g+55%c1ULTAhnNFZJ^!?dG)XWi+1U(>ZLF5zQ)z8nCd* zrUf^FBN>aeHK4#7mEoiQnMP3!(-;5tjO}wLHLm-Uw1=3=t`#Vv5i7o}4KzG%mD;7K zcJ0Lm9;4N*QY>oAidpY=#f2m?+>;qxr@fMyf$$=G_H<9j0s6-n0D~1WN08bL&>2!J zplDd4?hN}99wKyX2$Ka#R(fe<14OX!hQt8%MLPiN_Co|ngHpJ|--nzE5YZq+W3g!i zt|{!k!^lmNRYpe<;6t|EKq(b59}*f$5IMjUZjjo6O5q0QT;FD3U;t%_p?LJ2CazUM zPcM)1(h!SJJTv57anN|)5>91FJbEbo<}!u|tN)lBw_V@q6B6!pTj7gNM+V<`qfYq5 zFMi%m(_bGxDUPvZC^IkuDO-KsK(^ z5We($Q7uWPY70BfkzT3o_p9Spl&wppE%axQajQ86QV>2$;uk&G-Y$l z3w}|Mq53c8?V_&?`RUf-I3&d|*m3M;aZ6|5A9S~uNa0knp|SC@tyx&VT!yK;c!drT z!#dgN=NKQX6fR9~zGO`>Vqdxadm|OX%W{f;bw8?2YgLyTgRWE8{NoLZ?z%@*7UjhI zIV``$>`a+Cs=PuHee%78%wwdVolZ=2J1}gs~CNz2>a^FC!~dSz@5{J5j`^lj zIyyEmc)mcEfB@S_VYOI2Rx-UxTAC1ni0?M09aJ{r;+z{21H%B(M<0|)#6bYT5rU3$ zDwgC_Qg@zdu7LU!0v`;#XifnL`#=r>4N!6+vLu(y;gs=g+NAj#asiS%03I09H)LM$ zqW43whZYgV0y>|rXBTfGlntYCMovyTcBB|Z6KMl@M&z^IwA*#VTr#?>{I(mrv)S(y ziM8w@XKIzJuBEa0B6|W$tq__VnnZp9co7e%#m?&vDcy|IGn@BN^Y)0ohaCMbnSXC^8V}#XQYfXNQ|T zkeP+U$|3vDzAv`z_WnYCJy-ZoA2Q)uvx{T@uA!7ddYH5ChnxcN0C#q~QWfn&)1ECI ziZm6rJwv`U6(>r^2a3Iz*W}K^mvk2?@=uefubL9y81eg^5D)vMEgrpMDSgUz(N#3q zyFlW!YGID3x+#BdYmD8lH?Lp6-XmY)e-YRBqbHf3_9OAx&d-;+Hry3Daw||EQ1zI= z2LCSmyD698#d3?LRVVKm@5*1|i@{P?V0n=~VmJI->>s422B7YYA-v%~U>vwC-0+}{ zaZS5IbAYl4>K{ELu4F1S{w*8z zLR5tmmvYtM1@r;9IY|x`CNZG#$G8Gvz(byyEOu?eH2|##kRn1+V~qkB6@Zh3AM*hemxqT({{EFUIpFYgZKS^R{}OQ9YlTn=hle7AHI)42 z#X=~x=ti8nN~_>Upar1SfqMN$${#G%mcsrfsPA-@exBd^54XFS{GcZsou*Q1UXh}g zCw<)8H*M{I&)Fod4*q+@>+!QFet#&$r5v-}h%-aeJ|p5)+P2`w`?pz84en)__F0{F8sDh*9}#+TRy^(jy$kPv_L*pWRPym)p#EMn~x89XH-}k6-;(nLfzo^}gS8 zblUq&I3?NcD&v&^+SAB09aDBq_n&RBYr~s-;Bz3Sr&xE!q7Sn}aE;h@sfULQV^zDo zE|pw$$k8;a{@pmCVG_G?2GY*W2xSc_O ziOi&*?rwVb&gIAJHDrq{CVHT_fV1$4VHhAPvzb5N&JGf!7kGdgm4mR^Sl&lDbFd0t z|0JI!*(C3|tq`D*R6;18iQN>y52lW;a<7g5rSh!ztFiShHw7n7-Mxx#NH!waAM?(?b*Ltj4X6b7)GyH8A$0k27&E<7C{kCQFPxNJ{{5oWQM@_j(CUP_& zzxtO8lmC~uH`j@BKu_nmC25kjs#lq#-|2X-4&UqdM^6t1^yQwAma^zku=siXlK+|1 zxUcFew~~`y`)kVFqDJcKZshg(;-Np?yx8>UGcA){QHP87fcu>iE&pttAr~Fm_SR2L z^v_LR8rxSEX$#9e2s1p9tFOux{kw9NRXmt3vc{$#S@2-k_ihr7Qire{A%K9QAco?` z1q_!FRuv}rCRTq_j6Q|VEh9Ud>@Y!lkA4)E3=qbDXU42?i<8KnuyR^mT^-cWhji|2 z(m9A&7GSqTGmW}LOiYBc7Zpau}pi#_IY&;cl&wnfS= zMv|Q)<<0G}t_je75(~R8C_$Z6l#!} z3Fj~N}HG~{Rt+MM39@1uG*Q-=&MBAK1#?B-M1)lXG9kSz4oTfJ`PW_FRPOfrr~RwX1GQ zJ`g>%kU7Ag^Vm0k$!+LqYmrX0PDJp0Cj8m;CPl$A|;W7wi4-iou%vcD1LP!74 z-O3H{2~g9i0vd!OI19EIk>dB9LkDok!h#Q=AUH3CnG*K}x?sV>BU|gYuUAx|gozP5 zN->heAENQy7<;uyQFA|UoxZU;4pU&D%!Z5fzDs@(3kYLsar2UYAIU6?XkDIR7IYJ?-?}A_9Y21x z*#>ETV}0u_c3=s2Km29)4z#$H$>T8Gv+Xyzxd#nC3QW`R4v zmZ#%;=Ft|P;X3nK^~y7KdN?-EF^*qalX9ZavSHxnhu^pR5dd^#%N)$Ca6(-gD0qAG z$3RNStxrcy4?6jpCp|s4gFD~v(#UXOq~dJ;;&_ojx6KEY5&dbkwjA>Y(}Rs^I)9g? zf2!YMBon4CthQBdr@#1?Gf(PXzWjbdGM#_*#f$Tg9*K5GyEa%|qDpRLs%<RBm>Bm`VSwm1_P0)aQ7YQ(gG z%$Ac#7!ebMJ&!VYcKDWupQVE;2RBtVUM=DGxT^+J+Wa?1rvWy_@?V!H$ISt3YWvJd z-`?yI(9*K@h55O6-v6Y6C~eSAnN)B3@NUzpBTzUDe%OEtrAob3Z$ zuu`}_e|*!=&l?mhk(H@Bh#@4Nx?dXV{=Mj(f!t^c>lIV4_soWsE40yf8XHi&YX3Ie zmZ>~bWK2gy4hjq3R;vj|0yP*pd#{ISOXk)!!fJOZ^TI~c_Lb%uC>zg+SR z^HYaD=2k|gOq0sf^uHQg2b;3bX_q@El#k5y`ovok=3VBxz;6k~q{{8J#{S#yU!-Ff zqTmiZY*B7J(TCPAm+8{`f?G?U=1z~;6h`iIpSUa7anb$0?-X~3CTE$V;+H4NlKkzD zw$Hv<{iy$)+zM*sXU!+O4<6d~Jk(vHh_OB_RG!uGtJ-jrcC9d2=xaf2^uZ| zFkUX$@4YnFR`Gp&79X2xL=BYQkn_D5tKFz5H*-&w3QG4I76DAezS756p6K!vOE|{8P0IbT~<%IhwHd;F&X95rL=?Bhd_11L$<}@KEfG zqMy2r2|}%njlDX@k1HVo$*E+1*7SAEtqa%gU#$vTpJn_JuCn=zGnGH;KRo=!fr!Q$QSP5=*1YV9{h{6{kk3;aioh=0yM}(tm6F z$6;yCHO{^=&s8k!xbCzElpjP3#a)62pPIhh7Dn6vVx{B(3P z5_;}6pK8(D}qvqr)f#wjn1KzQZ;FC>EOl~*& zVD}G%5b%zS!*saUL-KLtCx9KB&}E@VN$?ir4V9LYQ-{?MQzvB8K=VkIKn50AJ3^=t zE+2;lfwh)klOa@h0k-V@Cx9q+{j#Awb6vJ|`gfg^i!a1)6MSE6z2(~_c>@Ym3BN%3n)w!ctfkvhRg&VZI#KWe zIK~lve;Uy&TosM$TjjdrgUq1vaNA^YLptBjuxk*y!|yjmgcAVepDFxZ`Uy>36&F|xNRl9Ev6YHP)2GB-;Gu6 z3^X`?+-BIf&I*|>8W^S0bhm=`R;6-4*A3@(zBnY3h{Q*Ug%yLY62umCFkKZsWIH*8 z@m6`jj$zA27El6=9MJAV0!hsGccP*ojD5qm^k*4rez1~1*xuh?%NpRz%IA5va^=eZ z)=^N9L=CX-BPPT5?d__F1BuQdJI26pA<|c0zvanl`-cpI6#HQABF)M;QN`u-_iiIa zW0P}ZB%FQHpJ`|46wS<>rf5AqBtYaRl5~*bCD5Wq5@IH=Y!xs3>t>aJpzAjcVwml@ z_9c3LoLy;_n0PDXHWI`t#=iP2h%hmoUiWkTz|+p^Wfimopgjbm)SZ8KnIM!4N4?kD z8eA1X!fn#uco25G5^(joj;60(^H&d7%A|<02HS8*8EYF!GKYQ8fEzH+aQ~Jtov=cl zrMVSetvBgi0%*@Py|s*P--$5p=S^n*sbARrAU=xz{b;&blKO*uubkGO7Q=B5zgSo> zD|%^v_b}skE59!C(CpfP6;ph~D38~&qj7AE&o?*65G~@m_WMneZTlHaGA{lG?E<_-TrTcNv}!qRkUZ)YRV3=cM{FSF~Us&TxQ(v{k>`TdLT zEHB%iyMvWns(V@PCCquv=Q`MHv6=G%U{6lw@01*Hd?n!31e^$B{Yv=CA;rg_dgI22 z&lSM!5zCH7aOOv(_Fj)E@qaoKUU|>g$lJ$dVZ=6usT|NDqH?PdU7lwMmDT;nkJ(U` zp{>9K{$loLJf0`O%TfUH(Ch)x2TKa_fFumE1`c4gZhCqUMhWTz&NSHg55wK#or3Q1kRwxHx%Hwlj!1 zsC2QZ6Z-a#U%hX@(H#o30XnP8zb}ltSp^D-GG3hun&*4yPzP{NeBJAv0L5%p za$Wzl>-?qloSeOQ1mMKr(n077R*1b;SaK$C?h2K|&sMztE(q0k|Bw1TvKQxe;mOH< ze&|1PaQk|S8a4P9h2MaSe@?c_$;MrH#iQO$jR(T&Zu3c5*=t$)d}%*ymh?52hnA&~ zleO>K(th{*isfUmZ&ds#ljkO%8$UmgMA<*uPJ$@cU#0X2sl-<<3Lf3YT1;1FcJ)%? zjMKX1#VfspRyC)Sv%#6{bLsQJCMn6o7EhAen>+qK=HVN<8g|J=wUJ%Nrzq#+6FrM` z<)o7l1!kP31`M>hxVs(2DV#iZ4fJP!?oDmcE9blEE?*1T2 zIvK}rz=;T?0@%_2*h>gYFrE`J{P6G@N5@mNrNz(UK57yFbUlcEdmZXMu_dBD?X}HU zN)d0KfQf`+{nUtY5T&XhwbJT7;(()C) z>xDBzNoPo>S#X1XT;7zA(*8B+4~wI#gG_)eeD2-;wn^{1cooQe9i8B&eu$T#a0zL) ztFe(u6=f|dGT*R499wIU6N9YFK99ymqdJ`Cmjkbtt8$>VfBx0TdY=xL>b9*BalSoq z?3P+wxdFWOO#Y*{g1i>vDt1lLvV!lmNzLht_`dzB>vSfhP{K$h;uKe-p?c#&+v$ZI zvF3-O!&jM%3$34ZxjxBmi#Gdkqi9@~#jeev&a1<9cry`sUaq4t{EO}FkKAbMUgB|) zfpaI_N&3^i^|Cu7tvKq}3h9XHq@CDUDAra!H5XvI)YF?ey}y7tXA&#;mbQX9bh z-tFG}(w7R8tX;)Bw5=6%s;sH{RO91|Y>e8B86Ac=vVJ{usx558EU}$ui(H@OeK?$? z)Mlcv!Et`F-e+-Sj`8^oZ@$`X-d=sd&$PY1Tj+2ZK313hE#0!DSH|1BG#RR)txYqn z)5<+smP=b7X2*bA}&!!9`k{K@lx1%1s*b86n$6t%B8+z~`;4Cm@~y5mY&H z37<6)LnAC2`-WnGz9AyD6r1lW7WyRBG&EpZB04&3&}G0X=Gm&%-j(Bs~oa z44}pV_K#KvJb37Mn8I!uW(!dAT{#u=?NKdu8_X=evVnSX5mq;&8gM7jat;U^D$+tI9gXDHKtXeeSc zQ*^*V@Ke|;0qPKl7~))o*M$}!nQrQLr-mrkORKyc(!Hr=i=0ape6(0dU+|io-}?(( z6u|eHX}+a>4H^vz-o3ljO_5y^5b=Qn8r!1r>pjhQ6nU|S#G_-=2Td3UnCPIuw7KMD z?z*)(VF#5Z@M6#|)plA#M3&It$XmNI|nW!6|3Hk*Rg2^CA*Es(yjDjb~Dso zyyv{a{ov)yDW)NLoZ(a$w2DP*lfR!}-N9NesB5&SKu3p3Ja>{qne<9g)(Oiazt3%{ zeRQCmwSVF`i)-p~#co=2Y|S3#I2ks%!9WHT4|QdoLUr!RspCQbPw49YeYN_h^ieOf?DG^=7(aR;T4TURgVFn#p5AzA&_onj z!w&ixE~bRj%bqaTCmt1nt_Rn~HHWq*SW~6J&rXbPn8U%nV8g-q&$ws3g_4~e zY-5S9z`|-gT{sbu!%xCrFpUxCHy$^n=`FQF4N@3&kbk@eKJHmhIA%Uz0T#Jz-S!i| zDY1$|KzxMHtLF9V_3bZC={Y&8 z;~Q@)^dMI)rH0&z&`A9kgm2{O&4>DqvMD7cUH|5tFqTOjH^qke<-(D7VPJ-pL{(e6 z|7{RoK2(@LK5-cteFi$z-02Z&GBSePCbXk{mSN%FPI4)Kqs=JLBv);gqh58_UOrZO zD1kfc;?WN`DVl%XzeB{+fpsTXY@U|ssZYtRTJjmmbl&_xUOrD)P2A~}+97k!RiX}$ zdCJ%nGfy}SE!`Sulh4Rn3VAtleEvOK&Yt<-PQvUUYeQj#ZBM!WqoU`2v(GWzU^<*J z>w^gu5YP0u{$bpfUOaSXoBnDIuYAvfOt0SFkSd|wJrB-pPIltkBRq2IO27je^G-Sr zXCa-fnKiwlSt7KSk;zLRZafk4y?TesP>+dmXb}S4r2h9T7m(a^BiV-)%D`F++N1@z z1Kd~O%A&}YBF9b{d}2tL2=%ybu?@L`P-+onDZJPSbrjt0SoR80;LNZWq~E{qS6H|U z@ro>ghw$Q(b}6b_3IvG zX1?qnM~{b_vwdV0&`M0-u)ktWdIL@w*-F#&wG0gb(3?_3PffeK=Nh`;zpAA+kS*i! z-3xK`!7TpR_uab5@2t$e>EDy=%V)@MEhf!|;QgjO)tCd!%o5Ym)1{?*9~2kgMtUXu zQ@KC;p&jF${>FLs(D!*3b`7WX{Mq{$uRn#T%;tjUp%PxfGY8Vn={!79pUxpR+)1Gp zG7Jx|)|%0D2`uBa)-Qjil{peJJ-nS3lHH*jV&apbJ@a^2c5-KJ9=3$#@Zu!-Ur)&H zaSh+5=p>H3K5@UEJpOWbQkU4dIceIyxjM8@CR%BaSAXSxJknCBBfhSaegBQ&%&Cxr z{AC`#W8Qu8!QR$vbiKtLUcM1h0?D27YqC4}Prsjf>`?|q7YZ+8NcbjlSuUUkTpyxo zK?4OxB$5#>qHzbe+`TkaawjH+Y;XCCcm{+sYZ9;c@-+1bB@oTv4mJQ7#)(|1Zv|=$ z*B%ArTLg71any5}?=jKB);(XZg3`rjPJn0Z2PVl5h^K->5zB`V%=oT*@k_V!!i+Pz zFq9wS+$}AA^!ab*qihCH2RBk6M8^&tNn5bi7`Y@&OBE4*i!SHIWUC2813P!^N)w{B zD7ryz{rK_Cb6DbQyt`0t3Wfpbv@xC$F=O!bgfl-fONEO}6!WEhf3oMU_4eaCfMm|< zpd{PTuU=^n9zaT2AdvEuS6B8TTPR{jf z3UR#`p@sBvc3b=PGz&6POxVjjp1*8eF3!qJH}~j5=CI%thJkg(>iz^YDtDQP>^@#h z3w4&TPB3QT%=j(2dm_EBOdp|VZvT;cvu&MwI0!7;FZIf1W^cr159dr z!DZwy+^cq-)&sS&Gydbi=rDxX0i`MDA>BYH6`PpY_qR`jP}~R@B{geM{PZcI8YFn( z{-%^Ryum7RL9FXmP-sGfiXXLUuUi-rF8+48&g1vQKM2gq`nA%Z_WBgycg6kuBf+w$f zewX>!ahd1NbX~Es>H20*XXFF$7 zr;3k1wwheKrPep1F#4=Pz^TjtU;Cglh4+sq)p1`{w^z#*P!u{NlbFfDuQQS~lkSsv z~LN@zb(QS@E0caKaiGUp;aw(Envh*UaG#nGN47YB!u3E4u*`BaFFzl zS;CBmR(*8Z_2*k2Y`{cVswKgx?%ctRhT7vf{k$9g5)vE?oq=uBy;Fch4J^E(pdZ_Q zo;O$t7pE;yF3`L%HKDhfF}9c>fk6vRv{{8KeNhH8QzaEzSoQfZM=ZR(OD-k!NN}r! z@8k_-eMWZ95qjR( zOY4w&V3;ifKKaT>QQKb6nJZ{5XJ(sxYM;8=s%dMdKh3xco{`?q2sQ|qB5eAfnC+kL za)s&;_EK1IaAjhH$L&`U0oC7BXXT&~ig3LDxF8bh9hhI>)&0Oo!OtMx=F>905@PeF zb=#2h@E;Z{ASo%CksaJqrRKTET5$zSYam5V$5&N?^&TUx-;NE-A|ktMuX;rU(mHx4 zN18u16;ah*JB+gw%~^~-Dz572K6WuDr@TAslMhTC7rS-M=VCp6$TuS+&Sk(6`EhU zRy-r~=y4B?vQrh_9=m5N@;FW-h6?m+@GEPz-j?SZA6dH~zo57nZBF@}-WhR$Uo^ds z@I)ZY@m%?=FocuPXNE;bU!$rK+wuIABP63rQ8NtKr75~~>-~SWeX1II9{#b-)7U$* ze*HL>mkO*9=f?5-CtX1V z!ynb#y(g3w%XZx5UwPpPC0K?obFbo`KhQFOu*Ieesk+-3V@W}XTT&xhiI?ONs@VU9F z$iV=?_XuU{CaG6gUXH&Taq6~@T%DqP2nJqjsSMA3Irlk54llRvyFQ$BV*a`*p z>Vw<%q}G|v(yp%fCRWY;b|>?-iGxDcxm!1cIJI9YPz;y1J9UA1$BEbh2A#Q`nFqyF zt^Jn9ST+t6dC}dV3i%{V1Jsn^LJRKsbhu)B& z6~w>^<`p*|%f@j`nGiMOjw7%qZa!dWxL3bJx`OV9oI&&;dttHPym>QzsgW1t%KQEM zC%{|J-i_VZk?@d!j98?0?Y-JCQaj=T_g~Q{7E4syL>R3M;^E=_IhAb! zQzJC`WR95_+(XiFu;v(0F)Wx^rU2v@T4zdi^@#xXZd zpJk7FRSpTvJ{77i2l68m9|C>tcJG;LT4_@=`vA1S502s_l6?_%y^ukY1vXGkLVpHn zM<8fi_-)|(>VY8>R2#c5zrR`BqFO;n2l8U7O5?N5=tik7+{acNDI`!D7wC}@s*9#7}iy6$Z6An zxCL|$;5P9Fa@EAd9Dz{-vIGdDQ8@|RkC1_9&*a3{-HgtH5el2_&G3bEh)R^%JPKb4 zd@C^TeE>g%pvMo37!#9$vEjACjO+ZAV`O*n(EPN1q$)4{qbE|sPbkjH%jtRVTx~ey z^2$R?YdaQpj#tF-d%zi>rlH;YJ&+CCYWzM#=%PWaZ)~U@oz}zIg;E9!`(R{w|DN9| z=B928macd@cB3pJ-r{3>JN(_|oLaLG7ejOawZT^O5`!1O{(w<;OD}tk41Y-LN?W{d zf?ESei5G;gNx|nTc9Mh)w>^c;Au^H^Zd16+6#;R>sC^Pe^7wEK1(g9`6eSjeH`WUC z@6~F7F|UOi!F6lD*H}6l$8w`S+PwMchK0$gdWf@aH=dC0}1@ zUMxQLh3=DA#z=i(D`jiz9&SeZZSg|WAred(Q}IJ35>X9)&SvQqTot%)Q;ETZJ0;fS z&#|gh*wGaOWL@LBA=6(#8Ip((`M zecp4Do<3EzN_2(llj8>q+*@l)iWBp!PLEV=6qh$Kj+1qt5Jg;lvn}r)x=(E_mNfdP zA(OSCbpds~*vFFqRUMY-l03`v=Z_Usey#9PfbgF9!a*N;Po(mZTNyDxhz{#V&^L}9 zi2`&T`m_~A6uBYCM3qjR>U-FfEy@ZnwCCJlI#H`2lBM_j-r_8?NemY_?8q)94mcDH zG-}`+!tdR?E#83AxZMxCLZL@bM%+CVCB&m@_V4bMvpZ5M)jgEDJvo&AXZv^jj%Kx1lJkbSfb>w{z!mPJA}C zu*i|s@LY3GS)*IYO68@EF=xo2G2?(F)9O&F8YcO_T}z9wHdpfBf< ztlm;h_$rL>dalwac`H^5Emh2X*XX!xAhfUZkeS&5+2~CVAEw8~sV^kmi^G!o4;`)7 zFuWsu1%#G)c@(%37Z+DdLinSRC`%HN2yE>$ri|wp5WukT`^)9oCfb5F7NKLN6_=I8 zx!$pJ=R4dv=|_{`!Qnw3b>Jav82Z@V9a@lf6$v>mE;4dV%gc>9y0um9*IS-n?$-Lw z);|YZPXe!=H`M59urypoN4;`uu$6m`)zj;h{MLw}x#Cmq>2!-SbGwgk3)+>+;5*0N z>#jxPUhJ;D*m|0NtWl{4fZJnoEcstfS^POR(D0$=T%O{e8h)hD13&TI|IPL8@mfZ0 z=~}8=re)aJ=)BOkkhQd0^T@dotGw9g8SUNCjf{*#7lrP1F)ON_eQ`3YR)(S0@~)hD z;3v9b1B(NG^;FlXUr!rXr%@E!Y3Ka$F+(sHW9}Y|R5%px*n9Vc5x@=bA9yY@NXU9! zOMC?c@*nWWW9uhe^O!E2aa;hg9l_j-=*m0M(SM;l^9R~HX5cev07Y|pVQ{EQDjqqR zPRXhs67z}&sCJ%{QQ?VNDU1dz^#5=S_W}sRI(^$EzMYT&zs=*y> zzE|BUV+*_aKOE<3%of+rw+NMa$2Giru~*ktQ!H` zBFhKMhbm4n6lYFeM!4p>n|*%Dt1y?~+&~~gX5B`TUN$mv3J!em8t{B(6tR*10$nF+ zNj~UTyemk26ghBUv$77D+R8;on*Iy(9AOG{p7(L(4=w@v!x{?m%fZ_RH#%8uhBgw* zA|Pa2u1tcI(*YG?Tta}zD_G>-;tjU2<{r~l#y39n%AxhqmTV!reu@wul-3{pCg^l0 zR!?kc5Ka&hg5(U*1f_1@=yC1`i8)-Mg~-gu3$^LVMhT6&rUrz1uT1;;UZ! zKz4e#N2zLL(I{D#A|rE6yaB=@Ot@gG5XQF#UJR-lxnurAtA&9F5}E-86j}>BI3PhV z0O6l@T>e(QT7m34hvW?Dtk@iV5~hpPBcZycrY}xKMn_OdOzX*$0)PILojLVi#5|(p zkt*W!;p0c(YoL6?5ml2S3MiZ81p!Pal@;Q3w3iI36Fe1AEs}ise{FCgz&|a9A7Hd_ zEFh!BwAIl=!DgzIqHT~DK)i%s5Lyw4u*2iy8!*^IJ(mtH53X0jF=IN<&dvr@EtKeb z`2I2VnClqQNjf2kRRk!GCVKV7u6s;{m*}!+r=PIVeXk)TuhOOBKrHux^F;?*!hX3U zY7t7%-B$IT0=|x&aHeH0ftYAcdrE(5Z5eyXR)?nla0C?%3bdR8Pim0i#*Zlxbraex zXmhZ|7)}4vmL(PvR0N}F9N6sONRD*Q_{MkWbZNsri<^>~j<{;D(MBp3&qS0S{NtwP zsco(J@~-+QD}M*m^4~`=;&225Aqh+Sq4YG1lkSnjR-=e;t%oazISZ~>KRaq{vM*zx z?dV2Edfog#ieJpX)EYLQdm-5(r@EN4-u8?3CQD-vvy4ql|6fblO&ZOQ|5+QE`Pbs@ zNw94=p8L0ROaIbt->-5Gip&1~cq3V-6MZLF%so2z;JCin9Anv%x7Y3)I{eAGIv0|2 zel07!mjH|Xz}cmcR@yXMgb-7~il|*`2c^F!iy~`i>AU1ta=~N!3n+}4E30RtQ_G*6 z(74Ll3fh7YtlsmEAkaZ=Qo&tAYJ@XVbmJqKS}04A_X1cAgA=aRgrIGHxlC-~)FtxMcAV5q-`J?DH zlyrhuCL^^YYB*pr^VAhYt74=3NXKrFC6!R@lK~4DyQ1JMUx*5s8c+$9b-1!l40}Zm z0vJX*Ax7%mL3B|7s9}DJWW=@|EQn}=wiiX{#rV5@WYdVDAu+7-dH$iJA%smG0~da= z7fW-)=v_s*4xw_IJy$^&lP|6Zz!VFn{<*VBbcJiv0mR{GZRKF6rn1m$22X2t3o5Q< zs_8XxF8K~t|@E;I0dQnbU<&!VZkzP*HLP4#hG%rU5h)E^XmGm-kR@}o!OZtkknD{1}zM-pVfI-CjD%;x(kQ7*_KCXnR9!-O7LuA zpsIcNMGL9-*^<#}TU!zG-M6vzq>7Bj(8f03xy9h(4fIvLhhbK6nUL+u-eAh*$&{8~ z<3-QVPhVAVV{a0XQ88G(%~zm9)2Wx0eJB%6Cq;MLbDv3XueD`6xzm`hLwYdGITk;e z{At;}PtKLkJbYieZ=@(k6c*DBSx?5Oy`)q7@Kx2TQcKe6eJIj9sZ8JB%d1GgAm-vIibWbE^co~I;xWnTM#aT~ ztPYRjXU}ec=;anVs=sj$GEDLaKdd(Q!4emZ4Aa|1G^=UjJ3Fj&Jf;-evE%Nwz3{ zo~zlr?&g{KXdxbD_2TL~RJDTNx3EdRPQ5ec#lbry4Cis-9jNr6+FV>@n3(9YzHk;k z&6Xf%f?VcWJo{skzVUy9!hr0Y3|CcpEF7d1IOhpJh?-%f2l)qb9StZ%;oD~|jExCD zW1fROrT}U@kd)H$?iC_}fJNc^UH;uwbylXJv{V&WHV}?)|J(0(wzD_{kOE0I1y%rd zAibdW3qhDc%wNxS7vFl>N8Uo8_{syb0VrUX$rtXa;aM7&pyupLRXO)suLywm%+Dowyq})L-6b7cRI9 zYao8LcM%*=mf<(`TcUF;$0DkzUH9JIUL|4nLRICoaJbzabPTn1wY%=0!0uVeiU}#; zb3aVRGcul3-FYct`p53N80(m!=Eyq!pVCcxUB}0%+h~z(vUA<9R<2##YD)Q}pOzvj zn#V0%Ap10mM_t$7!YeE9L7exO)TN)964bY#e);J z+4iDQ51xUP1oVS$63^`w&MHyp96z25I|YQuvqT6DdovO|Y~9^Az*`l*<;X6R8T1n4 zO$sE{2nEa(RtfM!N0a2Wfc*jRL!1eEwk!RKmkpsi#9W5)+<9_HzkIrEl!WBMUsHt) zqyb>~nBa&armk+bnr}%FDq8fFutnL*R6XvPkGXT_59Av`n58zYs=Jn4D&BzC0DG6F z?k0_4Xu?O2fC0?lNOr|t3%rS(LIf2<_Jc?a9Vm8D4$)Tt=S0UVvmebKS-c8R9Z^@1 zBms{lJH?)lmfxhR5htxJdSs~4@?N}n3x}7U_tJP0&`y%Yi3*J2kt4JY-8M-Yd^I|4 zjdX#3lU|<#jxsrHrX6X~4<1MeRJy;VmM4XMlITHB>wYm*sYaedT7|=HibMNXw6;-) zI$n!ro#=$ben^>~O3Sw3Q;WD$$g5s-x^u=9rj1o+=lZ{79oRtK_b?;Jq@rA}&dyUF zhkpPATl%JN6n;0+TYaxo{)4;>*Bp|-$#+wosHcfs&6aq#TX?>u^HXK`8m~VMv9Gn) zE|)rSKaG{2XI{6~YG-?myOcit7rW6U`&;oW9LM|V%3|qs4dzr;Yp$Pbub4AbTYp`z zB=2+9ug;Q~10I(+O*A4VCnlt%MO=EbO@;hinC~@?e)p{6t5Q z19}3YxyAI4&lT_kjygf6Fs7q1M59aMRiQ5H583mTUs7^4v^Utbfg~`pbrm{t{KS{= zyJDKg5Djhz-bU!o;V(j=zVhf2opym)mUsiyJg}Et6>q@7NnhxCm_PF67EV0A9*8`Q zfJ7~J4ebQ7Gw=>v3}5NZ^5qP2%U7$u+B(?q#G7_0yDq7XXim zMK3_QiQ5a{95JD+UCTmO=@r)2b=vUb$FuDJg%0xaszsn@|Ix=O;x=2ug71X?hs6ha z^GobtC_J)XU$aVL@o|*G)pm!E=qgh zeSlw0H|0+qKi4t79KpeD3oRPf@pQfNw^B}*iFS&1$=ucm&D-ufx6#RT%ix#JTko6z zo{eo`q-e{U$d-!EMC?5A`oPJ5=-RiRf`qEA=iDFk`Az@ddHwos$?F#?Y&3biJhRk!UpV5}RaQt`ckl z!#*ZFp!3-MgeeP5`hWW%A@hYFP6uEfBCyEA9lQV;P}3Ol(sB4xj6Oa$mG}qe9yK&u zz2Xm|Eyv;a{X6YLnH6McV1ZxV zO6o4~LDJax(7a)^C~Cvr9GbzA33CPRrc=yEcI&e`&lbFn z=`RidtcK=ll>%))ZLFH_15{*)zgVZS%Fj0mlsX=(h`Bddk6N^WcrOv`;JWZCCinBN z_Oq7&P8Z2)=$~49dfffh5?);R7Uk#^554XkZ^SleOgfm(ozYZ+7)I4v@aBWlS%BA| z^y1@0kFx23GQwICp%!fAiFl`haf?JWhVryrJMa)r&hfk1HI;vI|BtBejthZ%-)@j( zrJ)eoiy~BLCzKXV(V~)uN?TiIr9CJmlG0wZC#BL>l!izHEosnxujBdtKJS0ekk&c( zx$kS;HU`;`m&7yg&U{!s`LR=Il#|M2F}F!@cDChWdZl<~|BM>NTc<~7JyI%+F2u9W zWf)oguw@jYT;t0}%|YSn|LI-Ti7MTDBF4hQAm~hLT(RiTku*TJwD=md=u&GB6o^QV z>qtHry?MlvzW&N|miqhT)Xi<{vSuiSJlT~hg0s@3D*OA)rgu82ww2a5t;R*AHu1|Mw^@1)d5!- zfme8W$$ra=7bzhrMcO;^x!@Xyku-PTbehq!KVA{sb(qb8aoeM1Lq~%xI!S1nFf8Gd zVz>qo#JB!1ZZhUr9LH~9i-m>3XVCkAL;Ei{>GimC_~XaTm@Ih=0GSz zAHG_H%?Ah*gGHI>*Sx(ec(t}lvW2bTReBpS)AQm=g@ENF<|>vqsOq}9>L*X~HecdH z2THyLJh9NHVZi!UdE;h>cn1am22jV>+C0|CQDwHFRg zo0~V|;mDB~!?g~Qw|11#Uoez}bd$ydYQS-F zWyUmbrPJf*jG4BvUR@59+piZUclKUw_@WhJC9A!=49swRU^Jfd$YBJW_d&g5+0FMeF>X|da|LzTUaekbztFY9CWoI+Jj|*=k;+i-8 zN!zySpKwM;=Pj`w;Q)s(=)1VMV5xmmLHVo@A#Y$Sf~W;LKQt6AC}X>WPc2UV+hz}G z3`jmq5vEQ~%q4wlP+5`4L}25XfdOOy^CcnPP&ER~z`2LQ$mGpAu25R(c=etvJOBV~ zK!oF#HDQ@6Q5vHC3+B~w)xjR*yiY3F%Y?=rdU|TS$?%1c{R{sBl+2Nc3EBs@3Cs>z zl#7N6e)_-I4Wxc}$B>oL;*PtUcfJ0ha?U?EFtDw)^-0__=pSYfG!D~$z~xn2u}2_> zkOk&TNGVH8hWeHpl<4y2r-HpzPMx~@akUV5I@$k;b&i-)h`$O2igb;}(2ycTjyvsQ z)tj6u)f3Fr{Pi#%ya|trItjT6l2|;JKj^;NwiBNyBC43Yu<+%<)_^6n#{Yjn*adaU z;cdsy4h&w%Kq<&<;$gxM+roDBR!WLes#U6hkP{}P(=IM#uLaFa!||`nSe^LvsYw0$lTkci;~Mca@#-a|m-;Rg zAM@8-vZ39*%Wsm`Cnnv~dE}7#PL$dRxLl5aQ1$d=2sSzRC_HRPR>R&T0#)de0LE;nulXn_AR!!=t@aFQ*TvTV73Kl-()f|C(}2LYQ8X10ju?jXE0yp%qV9 zz_#XuGZnrA`ecpI7RA)TRYvYBT4F`zkq3CwX0_+DbBaGdtZQ2rDyAGeTF}#|DjN@{ zDo@IS(W?H*v!HE`t@G<>i4^3>^7crLqKT02n;$M|*xW-ga~PO3~)JU5*&)?IXSmqb1>EiF<5%n=clQaw3Gp!va9 z+nD}L^gV;N4z&3<`y!ktwB|GjOhTi9Q~_Qgp-pKY2vkF6QfB617PzN8AOP}F-+s^49_l`gVU943G$v|@s4<8HM*^uSq|^fP0^CKmJR?mM-vsI| zUJG!j(3C*pLUDNAT|6CFd;9X|DqcspUI01avB8)?T(uC^{gav?jea9)H$Wxm>d?MH zY6ZFP>#ufpORlfqOMd;i)f}iNkRS-O4pSNpA zyw2YFc^!OOJ;U=b@Q57x21)|0AcM``=x7YYcuZhQeD<=V2CEuf(fh$5WD4ob;|Uw6 z5%9GtM0Jkv;C=emJTB2&>=`gL#KX(Si+sY7$2~1yN47Y8spP;qC53?rk#PDZ!Rkv^ z6Bk;#Jcccv*&5qj4SKA@wX!1|72u&RDGd&67=TCHod5`+-2y=!l5=Re|$^cOVH_4`jc| z*Vk+DyF_B~09I$iH3Uo*>yg!to)o>lYcr_rl&9DYgik^W8bAM+_|^G%(u%d9=e8-3 zcz*AT-rGs_8SX!e%O0Z_`Ul+m7k3k?7CDj_k|Fl+?HM0NT}C5k9$5LWa*1_(zTz!|d1HUjKTtf+{GCJg5i7X-ZvzDy7qU!b?aEDIP13>)Ap ztklIcQMx?WgMYyg5A@+H*3*)$_gDmuY3vlDjqoQVSC^*2Pdvh5+B9(YF4h)OT$#WI z<9ZvxcXy_r3u-W0H($QAceX%AT>Jt2L?hly!QN2D8W;2c>;g+?G4c_FFSNJS_I4zB z^O(dj026OwY-?-^vOcXY{%ZOQ(gU3^hBx)|ZpC5+KPG;X*A~M8$y3qOI|@y`;h<=3 zAbP!CVezNf!s;bc;r_>f1fnL#f4+!C!5tkRb9QWQ|MWo#a9dK6n#3eEmI#2>c{zRa z%M`sX(?HI{ZXv=Y9Ke*VnaOh?o$IAS`AeIgis&=4Wl1b<-#gDPL|r+#HOxz9p}Hbe zYgG8#td{(Z#BJ6z90k|nxW`u4`ql>1Q%IV9-%wB!q5mt|dYhluYpP+wa{Z+vo^a}f z_=fM}nvb&?f9S+L8x3E6JGvm-dRd8D^m<$>=Sf@9lnSYok>?ZFHHz0J(k5)bdA6HX zgj@V$*q;=`{oLz5%zUq939b!wtkU%~R@oV!`&nGm_Rn^F57lK#VmC^?8V}3eh<)L# z%e2;UQtq`J2M5)ef%J7dB4>S`{@f7~cNJ$d409_JPur@CspK`M(>X$W6y@ML9jlzL2*g@i1V*!NFe-kb{eI4rB)uH_0O1CGi%SF3Kw_ldF%3 zqATYd$vDK!L9*CLBA8wj*1XkR%E>M+eg|j?qIj_E;FM5MA^N|MrLDv&_E^fDpnfQj z0=3A0L0^NoBQPPEvsulJjn$?Hv4R?+l1mUPBF%(@q7{<|krpt~A?1`L%vg)HW92;x zFe*RDgafSAxDfS@C(d@kp=7kW&^g~0>{X4K{|F9028G@-_XlJMhENyc`@@T?cnG$3hzep$yJF3Tvgc7+_UIZ2)w@YjP@x?IOA%kW?5^08T7@KP7Vs zdVXAH(wg0U^S?c8VQ@V(3@yl0`G5;!r>`8HMV1>vqIt!||1=z1QfEFn6_LPS?Kq-5 ztMTg>;j2w*n-hCLC8nfi4g(4p!j?tEMYhAR3uGfSDykWMD5RL^uk4CWZ)amQz08Zq zh}BBDUNbX%e8vWf;*#v1U7%26)sp8*Ca32S0#5?(96E&|Lc%X(=-p5QnR}iiPhqlj zb{nF)sJQW%{QX+7Dsjkg|EFymyywilPhP#cD~wwNK2}-pJ@KE*0zO$oht}57p>pCx zjmeQzs>ng8D4NWwJ%+DsrMr9J5rcr(vfD}KChMqP@vw7~ib_3M5>)&TO*O*`k61j? zqFNIc*F7^~u`qHth=cj3$xO>twr9nCm#z2!%eoR+cH_05Op*r{z7!^u2$P${=bzEV zcb?eo9GTwmNQyW_XXwvoo!VsjJoVQZ+fLojJHzJ$-=5y;wCCrzWp34#XSOQxiI&WO z#0I1kw{~fy4eO2W$?89q`Yw`N*-J_OV6^P%nNRm?I&T_T2Hez=r)jz>8|Jq+hkI0Y z_FUz8xd#dCqi++6VHporAODsqBbK}G*+a)3xLiy+_Z*s?7uvQVFmU#8M<>ws=tqyt zT}>mRx9?GIXh@N!GNPM(g|*~KY71W49y&EvhZBnBU)*rm-hRk3D{U@P_v~5zOPyzDOZ2Cj49vfcBjq6CRTr;E5L=w7hM1Q!TGZv5g%N_n$+;R6W%pQCHb&qo{= z9R`uRIyvc&)3DCyl{2Lq=vTZcgvG;7=O`?V)kJ*AKZJ?`2r=&FVaiGbuiQgw0{~Vi zeu=gcW}NLicRs@-qAopu>%Tz)&)oaZowDpcPz!<(2M7T$0rVlsFCzfezimD+T0qo+ zJA<}_gejx0v|>gXpPWYLNgR6k8F7L#LQ}Tit*&5W823f7Xk%3wW^sSYi0bEGrjcfa z@B1k}L3mb$8rC#pi0`^8X46|*6}YprzTo_|qSK(P2j0%^1n<#A$&R%O5_>jp*^;rI zg29Gu!Qt^grz0wd#S2?@SY)I{$Oq!rNqSl3{M&FBL1zxZ%96O1GXeIRw0{`J` zm;Zj<;$8PeRt9)iW6S>Rm!;JJ+o2iw1_PKETFdfmuDf3Xp7PUc4pci%pIP?69Fk!c z_NBqx*(T`l^hxn(EurSaEELD(y_Q9eJ@rxJkA3(c=H;u~hFTfY!KJ)Z2XvOwdVY55 zb{`SjO2=B8=B@g6HmLYyyKS<|9Y#)gCJ1(m3EV7?VxIAw5Ffqd=skfPqU2#$e-aRC z=rF(U$(FyYX)~IAnH9Y%+{R36Si>jZ8Z&0gIX)@)ty`eIs*|SOQ5m@q+g&dHszxi! z*QDE%du%~d`_l_widRyV3oC=KMEEOW7_WN&=;krt_yPmvTHnPC(+C`?+{T04k798hNKnG(u46#jVT@YNWjV^@=xGnN?_ z_;3U+AG1J1os`isc-LVxvHhAFn}mr=?_Y+SZ4|q$*O_t&GZ=HwKWTWpC()qn{H^iA zAC!-l8(sG$ewav$eCgIdGB4e~PKhcH%bz1TpPL$`vBox7WQ43|?H(7i&Ogl_CmXxr z_WCuullHFf?2P}N;wr|iw9q}i8gIT)J=Il}SF`$?ADgm)$i4D*7%wiPZz1~+T>3p9 zAUg@oKe8C!Kx^c9j1nlwzwU?75yZ)347e82)liL)Wp^0e6*#Lfw*MF#>(w%T%A1Mv zjOG%VBi;~nUYVPM(1dW0dzQbS!dw9?4(|pY1iK&ad62q_i;5_x_nn=08-}{iUJ63T zf)R-Vtm9>PFuF}1eWFMUW@ce=faM#HEuI;eCEyr54i*ww+_;s1g3w12@C!E{cN+5x z1xOqHOvjdK{1->-l45)H;NcKX&eNWCC192ItM)dDpF!GK89w)gK}BajkyBtWp- zN&`ULKs!Qfhizxmnk|sTOOB3?{zuI?OzZ)E>{79~3kxmZ_wsBM3)}mclZ&E`c`a*w zToy$Bu9Ak5yZ7^kL$KUfS#=zQzyGUOqWDihW?-#=v9R0N3 zDIJU^)6Qt8%*f3@{d}SKzBwL)9~3fh4m{%V9=|I9s=-1i#=W{RKWZlSEJw6fc=lV5 z;XU}8TmfR*l9PZCnrSaRK!Due^EacTUD*`++?&q^E zztWGpH2%`6sQmmIF`Zc3kBet*+v6wae@a(ZMw}bx+)ZteV5mAVB6X7YMpoeQu-wUH zR=aSXu=-xvXg3d$qRsM=0TEZP8XtU~<^*!IxzKd``{JAW1r+N;4mm&VE^7DNbS78o zgf@rlv8~|@sa_O%Cr_Kz?xho$30ilQDp18P>!aTBjJ!Kqf;9^Z$26-fl6>1yvLp+5 zUbc)@71U5sNU5i}swRdd4*10i9us|7-ah7(@h@)@crOJ48ngs&xBpOxGJ{&3$k*XA zf@BWW7foES%*sO~%-zMGlx&ke&rAVKhG5D7qcMSylsf!op?4+$b;iaN4;pG9N+ zfQsQ>L5W4O!a;xIt3$toHDitQ<>if&20*>Q>%d8yU0%MTU*&=@I&^jZ3EBDiC%GBg z6t+Pxhan)Ryj%?^0|-E(5C+)@MILJY;OpBPJg_g1v|dObKZ6xf|46_sx8>PnydY|& zN!%O7$II*b>kB2!co37I4~EeXu9g2xD7d@_aLtsI>XS@@Yc3IIJfySzljfF|m~2R( zkunsvkaGY?0Cj^E=^hi)rR^cy2b6Mklw!Xnaq5e^bW47}4h%1#hRSs02=b)Wlca*W zlb$7`q1xB}_Op~b0#ZAMMG=<9Pj`gP8O}Qr?iynv%g>hZ>eVJAE32dv4U#A)P{Sba z3n1EMf#Pb2MsLUxt@N`~Tfh}^v2Dix!}exVFX={*LWErB3yL=$n_!JMEUm+`@E0y0 zzS&%B|InvO(*5GpZ}Nq&*j!$lg7ZJh!}Pe*W<=}5sD8zau<^p;`xdUgpL@AFT5aRi z>4nU0l`ec6>Qi&Mp#SEc@8z?yLUhSBA}?Cn3vTsT_n8|TXFIV{`LIxk%vUtgJ>Hlv zv0t%5pZaFpEmt93+nqNU$SqI}aV(g9mm(C?K3Ebp$z4qm@$gEgZbKU7^Tf%xi_@vS=4|7=K-QUU83A zvEdbElg%^#H63)`N?o!WlLYMF=E&}H=jBhP=`+=PYpM}P^`444y#D^az1-n`rE-c> zy;m}JaIX*lbf2?yKcc5xln<$v>_Cp$zO3|LzrHd#Jf#nN+B5+Hfvj z^%{b3g;;_SC_P|bbhzy`G%wJsK;X>vFV5k8n9Y8!7OSSK2cuv5c!N@faWy8KSPAAn zyO$Y4VM8SGyrc|G>^cpq1#GE!VrW{3H;|D-2tWVAsz2r3U3RLS+YM0`vjmE z#|@~&WZ}I$YDDy}2nRMjSP%V4iG?pms3NY#o7)>${t_(=Fxc*ur8X{L2S|&n9-Xy^ zJqO$-rl1xluZ?2GDffh^s;!c$!t4JWjWXMgH^^L6;`?!B(s;7m6P+<*pztA?J73x(`$WszTy^_YR`HhQ;!})t8x}u(;pDx)-acdXgos`F z$O~)wwIkQ)=|5SoWZ51^50L$e9Q-w9w3U@#qPx;1n<^`fl|?d#Af2RXsS9UVxgeSR zDWzF|p*mp2Hiz?^r~ZjOjtqO%W_pH{y8`l82OK&oqhr#U_nxm7x$th zr`Mi1Tl>(0i(N@E_kP%E4vwc!2FLoX#gZ9+$-lb)JuGDRqgx4syOll4ES0II*m%N~ zOqD)LI}VI03()zqXV*R6tF7>qy@7XJWO=?#f&OULu879POPo7hwfeJu=N_DUIp1|N z7{5(;+=7#QZ@orrxc2g?lW#_6OV8*$VK5F8Pjl5)M@#}q62udYb4F|; z+zekKIZ3XlFv_d*`umH+8^R@|f;_?G0NxImsKYgY5*A4!4dnHL>X4XjVMYPo zZGtfj-f%$NiwBj?Ocn5kDoUP>y_9_vdAWH-k4|g+9T)j)simbeydUf8*e30qlN z5oE2km8dgIT*Ni|TPs-#Y$(yWDH|EdGEbQY(wn*{a$x*^rnuRoX=0%ko|>`4r3~Is_DZlXPJ0*Djt8I zA9--`bdrWIEBm8}2iyWCY4Pu4X=dc9$6sBZi>|+!$oRMTaSZ-|Mya}F@Ib%Cg`wU~ zurck-3Mous>^`j<_-3MFbGgH{a(yX5j&X*z2BrD$WAJ-9UM9FEq>k=DbtfWkHs6hd zH{Hik!`V5=*e>SRlH`<1jfaIreSX%8_YTtTaBChNr>O z|CVXK42?0Hu)YK_PVR!i8@n8q>&QYApm? zRpZW@=g+6^Is~^oaIQV8e^22LU9qzI_Py;H$;15@dyVsahjjgYeUN_)pznrXV8@3H zbu!69a1V`QAh!~*B`|SknINk;>E!f^cL#Qq9ETK0S(#{~@IjyeO z{uf~rC$A>ix=HSaVjgqFTU-SwEuln5>wN#u>e2dZnpMvnU6T z?8`{shhU%(3Xq>xSlX6HSWBFG^lun_)*@9UBQI*<4h;h6ez}$w_U-=o@gruIw_okf z=vxo1lW`?!jTo6}RcH#`h6DpP1jHV5is@@=0?NTA7g7}vj1@6qN_DIkwoga%9a{NP zb?4O?!ANikEgX`u6)@0+H+xfWal$p{xh}5ZJwyuR;1|kCGTmR;Ch~A z)1m$Ddu^ImVU0rBij$y!nDfpMZf>6OBkamQ*b|BkG^F+v?~eWS#CWdIKfx!KnfJwJ z8s2aL^QDE##Gj`_rpwJ^sXN}WJ2ir!a?{f^bAOXo-PtgR+nZ zN&*!HOc0O3R-vEQJ9n;f$Q}YL*O~8I(T1b=5`tU2VqO*VCU7BG#6k)0iA)8&Tw^qqqm5b~jA|EDYkU;=>_R1ZFmuMbA6Ab}Wd{UG2GkH25< zqUncujHFiJivlx9A`+l)1Eh}>S*YKlkxy=ENrzJpXfcU71z!`kZ$kxw8`M1_A7ut< z1^yd4eRKs5W2?6P<$(}0Vqzsa4?sEA)}|QI-`w2-PU0>ii?8+fWNj#OJsr1>JJ6ZZ zTYSI?YSdUr)Hh)mak**h@I|&__{!AJ91|54HF^Uz31cP}@5XY^ad3`=0zIuX^--n_ zIuycoDh`Uk&JOq(@gMO9<&Dpk;}1$pH^Y2p>pkgSYCp&<=rpm0WY*+XDul-%L=E`Endit3l z(}h_@>8HQLKYGo7^hY~!;U0gIkXYsN* z|55v3JNFpVZ=O~05+UB+Svk&SXB1&+J>iK{Dhwn|#l(+UXuzS7*FjCYbcJ=m>%;}E zv-=QK#Cx#nY_7@sUW$%)o^jb60k^C*dNw55r{4039Z98>|Bz{PRVIY=R#Zo~!{@365>3EM`c%HahlX>ln+Ro;b?gZJWc4oD(TSZSO4sPBQbAaPe z6yC31p(cu@hKiM)uhjUKm)Bjfnmw!gX#B#`!CyGg3i_ThJma2WW=d8f+3l!#&`n|u z9^z8Ex?V`>AkhqoaW}U}KY{B@u|$_hoPb^szM&i^)9S<0Ph`p+he?i!j`+h-Hwkq{ z@`jLljzWzkLfFX{48H`)NH#QVhPLPLOuIU`2khoU7!Dn z#eM1H525doLW(^C&tFDS!jfWoPzhE6n*t(9)kt9?hJzt{i_S)fB>s!}M|u!k=F>qJ zfk(j94etV~Jr2xpp(?H*v^s%JQEGM*Jq2jPP_Ms2a7*A85}_de+4UxbAlM~Xte|_q_Z##HI>ysHXz+XdsWrNQf721hRId0=j&k_?a|WNx8DTbRBAJ zxvLrB#ofnZ-?|vrKH(41(%@cezMp`XL%Z^%{cFE-KsUeuwC z(nQtHoeNIBg1M2;dz~%j*HACKx?{MM?oTz-Y&PJf0J|>LE!9}c8LQ0LS79i#`M^%B zP44@910rb}<8ppy-B@Y-=&AbB&Q9ll2fDT8;_oJ-d^@#gw%>9Y*BZEOsA~$FT<{4m z%qT2lz4tz>_j>9tj-4;xxh#43QhSD2-8{$6bC1H_H^x$1%~$Jm{hGOhx0iiQe2UA; zPbJk`f2Qx%WL)|=s=0UcLv`ujhv&+k@t+QQCR<)ziqI@xMt{4N4({@LZaRU8#+=*l zyk{SVsrZkv)=cvpJ9H(3)lsgz$<5pUD*NTj=JQ#rD|;vawEZgVWBX2$@-%eLziW8i zE@&8D&ot%Axl{6iJ!Tm_g{w$0UJ&h4l8(==V*d6 zGvUXhBfHk1B``ghBIQN4uSrORn(2-5O+sO0WR#2z)+K#Nfi;H>7cd0aSv=6)PQ;b_ zr{6msJ0_q(z6f)#e*$3Y5VKF&Z@iFf75P7q@n5c%DmT`Aa3CPQmV~IIbp1E=VHX$V z08jt|r@#5;YhB4CGEsm>cHd4ce+>IhY^_NSE6x|czr4G<1SUMR&!kCMx5q;k^KHf7 zn*B(UL25B_hUVd4CmL34J{tfogC?BV&p`Vj<9QJ2RL}xh2~i`JVfE|CFEeh>U56=o zGyXUQ@mF49`PKWPq6RXPJaePkZ*z7_f7efJ+%)y2VO?W$W9w=lC9IxDP-ijbPwpA+ zoLt^<22|d@k>;`+&)!v4-MowNbGr6J?e_!w%%sZ8KkRQY-k=mstIsI7G zwLgm}l!~3IhDO!NW|6+!S zVDs&C$*>BRWu{D8|E&W1o+yqWr0dAz2e3O{z!}=Li}emR6bnMPXKibpXs=x3f4YD6 zUW-QQ9nnovO!+UqOQsI6M)Z9@qYbl2LgC~FI=a6TE)@;Hqrvr{@r4BDI#Mi(ptXRj zi;sij2H-|0t?#F%N-mD&-Fg#x4JXxX^kW9j;Q7oc;{%E)@VGOG6gq^58xH|#{tFAc z5`NoSS>^RABU5yGdRiYpYa~D#v(msO4hifTJ-r`Mo9wWwFiEJ$I?V`5L77GKReT!K zuB#&Nkf@eH<~1H_IdkEH)wSE%Cg{XL0pkHbqb;fyCv)_u#W86QU@GLRM2a~+4xj;9 z5^nt|mrzY1aOvS@0X~YAa*x7i|MmA<@F7rP@I4*zTsVw)MIi7Fa4G{NLSDl~I6GRyM_qhijdo3IQj02+kNva?;P)tnL zG@Ld>9Y`Q3{X#oREbjD@qlBA5zt}YtJJ6P{UmqM=t22L3Kb_}$@r@vw&>s_b;#+2B zx5PM5&S#JLE!I6~yDg@1_5PT$^==`aab~94T#Ie5Z@h7t8`-y*7bO{Az&A5Aa_qV% zW%7H2jZBui-^fm7d6~iRtQ<#bB}>nX;RX9vHNPOgi+e6GwSH3;piT4Q zvaH!3oW{=eaG9xL)A5MB+5?voDL16Zac;Z!=XH{nw0N%74VC*o_m~U6+S!n%!exbO zq}fQe)5+e!p)1c_+(}dv9jwiZ%A9o9wXN3vooDz}>h#r}Xg`Pq)XfL}2BD=Gn7ypkrf_z&u|6nUbuisA!D5UPQ{E%|QJ>6xj{T7qXs^M~|#h zS8cHx3RDH1b+Ljgf3Sq%aZ5gcr9D12*M8?nt-Dr^Pwn#6N0Sp*DKvZR`^)vv4n{c{80jOIS>d??qOy1n^3$Knfwqb|YZc zw{DV=UFVJ^SCjcL%kbHVNTp5NZp--p*l6r+BVxc%?ck^IJF+J%e#7A8pp(KQ`$e?| zGu?y9PNqj*nOBTt&gc)nz8&z2@&QHmov&I89k(}}>e?StA~1}5G8OsymA~^>{Qt#U z?Sn3nBZnp&1*!BbD#AW|J59-c^a!^%-+spWYi)CV?r4a-c!Hy2zdU;Q zaIox;%$GQqeqeeS%IZG%m85*uaWYc+FzZtyXeb(&{gj$+w|0J~_P)WOb!+k48D2yu zVdyb+0@woSn_=n0kg~_^I|q(=+u^1q85ByAhX?@x>#kixP@aW zCFUet1-B_$`}$PT41h^N)OlEFXqCid=^KFLO3uz=I9?=(futv)vw(L8VXz0XJ|L9? zBAVh%04E?QvmVDG83zL#xJ#UH6z4V`KZh4~VmC zY0K4c6>8?&Q@-Y?^z1I*iICS(gQL4bjLuX7b5TYj#RFl(LAOyS8)s*PmDM4zufF|m zJd)Ua6B84&vO9%89vT~>s%HC?r#5ovP+lHwrikLSQ;$fm>hmqWr5kn!n@(ko@~840 zT#b4xJ?`%*w>e+N_EW~A-DhvCn>Q4`@b0GeCQiOIAxgmuUm6Te z40VEg7(dA8*lrR2BqKqSm#}SFO_+kjeVp#ip-^p4#zorqG_!e!OqpCKRb**vyxpM3XMgJaqW* zEmR{3i5`_R+B!PFGi*HrU}gI3F|7)l36i-65NeZ%;{fpQ;bsb$lkmo(72a3>2P559 zy4%n>a`5mZ+>%159`Ixm?~BSA8XkTemKc)gzWQs+Dp@506NsQP5fKqNU^MvK4Kgkoh;~h?|NgTVZ4rs30jsYrHOmCs4UzN1 z8<>zPh=mrzz&;T0`OjMqt^>w1#HA$xvBb`a2nevlA3m%@NDor3x%v1I?%!2&+}7@9r*T8sgeG%7G7l_^Rn97 z7-c^d*zUpN0~r1bQ|nv&>Xx_c8x(kS+~?851rN}?d@?feZ(1a8USvf*$LNYDDktLP zwXXwS9Cg(($BTSs55!wcj^%d!k>F_@Umb54`ZJt&+jVy?&uZL?^pQxddy(@RLM>aI z-)F}e@0;Y)`B-_HHoK)k*LSg?5oLHC%J9jlC+oHucx+A=c^-=c%xO0{goeTH+Metd zvyb%px|ysKJioa38pcg2N_P4f4B5Ic+U34@8NNy9=glR(ko9Ax6kpe{|LL*t&ROAS zy>n@Os^6fy!qcpW3KS*FWr}Zmc5POXzj?`rGS%{2kf!u*gU+*3p{DCJvRhQj8S^%a zCL~fFzt8+7RB@+s?(Nvh;J_PO1p?Xg+Y{L@bx6tGPm3)*R6AtTpJthuEcV(*>erPm z8h7M5G7YW1zWZQ>c?oGlsuIo+cqyN_{^?F?*@~WjryalbdE# zMZ>kxVzrAGIS9o8&-&5;OT`yxdP$lpWGNVz;6mX-*ciei4o1zaa=P^^IefLaA|V~Q9TQ9mg_W1mDf0sW?TJ<1*NPeQ^3jYb%t zKNNHnR7j!hK}F&aAp1n5z~!24>)}A53;AShM5!jUB7`U=XsRJH3`N%p(|39KZlA^1Ge5`TNT#v<@!9|b+;&6HeJXnnsU+ndeDC9{y=uK$+YD%&kM=328DJx3wGv_ zRvVqa=I=Ciyw;MvcL>KYhnIbIU!QyNztT$m@w?>ZKxeBD#<~v!{tRfVaR#(pk_Zqj zJfuKh0FVb$vprySn2A$~L2~ zuIzi~xw0NAxhGBqcI4`|Itfh_#`dy|c~awi=TL1|h_%8R&~bHQ(EJvBbY-d*r_;;J zr_9}1v+U~5we$1V+#XQ_qHO+KwfD(6o;dNTQam?OaSwFDK*EU?%6Y7-3Tqljo(%w9 z^nmDb&CcfroS(#Y*_qkdr=!PkoCq<8bpsIVszY!NxEA9PwpXYD^(9f;*wrnFmKdJZ zRxBulP6W#y&@b3yv;i~cid~gQJ^mhm?wm+dO&}tMDjkBWLU7tLtMe_OGx$VALLnZ6 z6a$=g|Cw7+`|(cRMFTqBSsWN$l~1QLpiz5p;XWXN@ObqD^$!z>7CC3YZ(g}p|#_4D&1E2#bh z>_|9idHG`uPWY+RVt>y(W;fgfqAa5z9Z$h$H)LO2&bR*L+cL5!&!g^WVD9DhneFDf z^#hZswbbj`wxhc^i)h{s!itj;}+KuoNA)leQG4> zcOJcu&3FD6u8C&3sh>T(a(0FI&K8(^XKEx~&;F~{$UMkhu{>+jV(VM^Md8l2hB(Fd zb0Zt^^rs6IuJIA2>747Y@%);nwJN;5@^*lB&5mukn9p9ZTvnr5^&Q%!-pvg#F$eM8UfGhSb)G z`(aySo1c3GaW%-E-MEn}l|MIxnN#kRwsw<<*n!4_>wLS|OE%TjKDRi3|1c-dv8HL( z+qygWk{$RfDm)iA+m_F6u2@bMpE}8S)7^RU(gkg1X``g&_xc5Y_tm5&{kSDxT%+M4 z^|5E!0Nd4ZI?!~oV*rQbq8BI;$HSh7qa|wSfrY_`YBdzP>9qs77{_+rb;0{$+ zE1(SqQccq9&Eq|zfGWp$@7;|?9hjKwpFWo&?EOQ#3ObQ29)?=D2~%B*^x{6)OL!^S z1q9Z^H<+3lwc|T33+@ye{w8h}^amsi2-grm2R6no`5>DDtSkD#_669aV;?5)bdn1y{X*WG~P6y$)NNr?R~7lN{?0Z(5|tiq3bVs zruIL+z*g6(*6JiR@z~beCXewI`iG)|_UV99($aq1EjE1LJMOi>#~-OD4SJb>-~Kw| z@^QIm^wK7Fn3CDHBT6_Xea!mzZ>qGu=UE$VUf0#Q)y{MPa~NB+WXX%FWICr6kXl!Y)-K_XD_eE z-Flm|zy7N1X8U?Sn+;FdQ;S6uLK+gBS)4>~->zWVH|=^xE7I-=)2k`nrnwUXhMi9L zudHeX^U3cB>6qgT-K}S|`R(-trN0lueGH_sDBNDQh!jxms-gdxa8C9tTfnC%c0Gmg ziK*%UMd8n*fot`+`fK0naWGULUSxYEDw=J$&X=A&-u9@hfYGU_=^Z>rT@$U8cbnvt z+3C}d-+g`Y*fEJ8-^UcrGNJsvNK1h~;iO=JHHU~u+thjeU|bEWbM39izZPmx?!NnF z`XtiIMT9aI7Z*X@C1q5!jBw$KKNM%M>pI0UVNPz1S7C)D+Q zKW77JvO2Ala?#B0b{`XII0iSbh6X&rTx2CJNjd?}1)OcIK_>{tL5zeXtQCeW2t%M9 zvF?7k-k=i+DPleE4+r9AfC*8;*NA3=yi2%D#NYx71|S*?Eoh&{Lo^=oCkxUwF>JZasw+ z?VLjB@(19=!XFvspPF@J`|nt^`jsN*$gdJEe}^~hpL*|7{zq1Ywof56VD>)1!e$Tq zusn0M_8y0Twl?++)6@Sz+Z}5kiRYP^Gp^e+@0prkG|O(V6lBaN)@@~yL0S06(cG+J zqx+ZI-5bNg{|@ApW-z8ymOm~nKc`#zvly}6qSR;a&^Dep)U|gj-M$Ixb5^FDQ>KrHzvMJI2ks6=Z0FNNLBeBo`X+V&#o9K9!3OJ~ijHl{Y%LeZ;GBqk-1a05Wn5W6M-djS21c808X zd-;+`wLybokRl3F^7{1lHlmBbhI6l*$X7kLZH;DQ<(T#F@+Mj5|DqgEF2ApqrnLA!k%FULDBAfX1A( zw?BwC5jO`{?sn!V-oy9Z-FSUAAW#*rEB*c~Qpsm?RMZ;8;hE zzsve_=_mVGlIr&UxiYS$hMr#0Q}0frHA#>B`A$n7vNolVI{Davv@ti>zrBsz@HcGu zkO?DW)UxbSp2`@t2n)r|qsM;hoi}RC(B=`I-=nuLG?{DX+u0_y>?psNYHO^b&scjq zhu8Pm8;#jm|2}l%(UJ>5>(>BOM7j)cg9`T!ZZO+)Zm`&ngZ{iBELkgDdv?$J7~65b zrjN8Vm7=vX(4W|J=ums__8kLr;~bD&7D^qat@K84ScZMeZhc4;ro^+Be7Agde-Iu0 zqi_g+w(+HUyHj4cCZGDRk=6N%%bkzQ(poiHcGCTBvfsqJ+^MMhk!|d!yPewiZpM)T ziK$N(J&|FnbBSf?><>N+ZF?ybETlbU+z{JIO)E1Red z+OMv6Q2MZYQ}*>z!+?Xd>1K4eYF^x-CR)2P{LNUX@9CG=SGJACZ{6t-{8O%7w88aB zDu2EMXMSWKUHVn4Hm4JQYoxZtMs%D_x|-7Aoil0DEeCSqJQ*_#=Jfwfi16xwA}&>F6qP7ys~~r>@V~@{{5LHXU#~vt6?zpDKr_ z4y&4=Jq9t8kZP$C)M2-@& zvS8hvs%BItX>!n?%tI(ZLNbAH17Qq(`0(CER?IbRFt}d2#0k+k!mh|B6rh}ZYO!As z%Ecur>Lhx{Q+APmrtBH+RG`_sFMYHCS{yHkB6 zh8%e{H@5}L&9lY6sS2@f3B3ZR4*E=VQ)8x0GTzU^KJ5N_`K2MQaEzHL9pjzwusxrYO*)s)(`)R(MExX)5xF`A|E9>SwzO2r@uWTP~OBz@bJe|1a=4}=G2Vbtp z%lj6U>HlO8lO4y#*F6TEO8B)|TJfkNQ9HwOFB+3;o)@zIYvi5{Q87*THux9MZai@o z);pNyHeh@jm8&%D-^EU!9VIe7??HUoAU#QVrKUjz&N^9@g_jG>*3x+Yico4QqLPOy zxbg7e;2|Q194R<_$ZArOR`ZsV=K*wD*wIDFsWeQ)1`!cVM1Dh>HuQN&ctbxF0=+C4 zPxu#GNFUM z5N->C4xz0bt;kTe;hJ|8~gonj@ zEeMcx>M&Y?!RoQCXd= z!q)q`QP0MiKhslFCQQr^s@Jv}6c+Mz31#29=ent?%)M_HC%dWc{jNUB>SANfE|X0f zpBRUIQhK-bA6;8K=se`fL8X_lU!#Y!ZU4H0M&qc&ayf0TcTNd@8cL#EVU*6NsGe4K zZt4@MH0MxpmE4w0IaT)k5nITijcchl&7AWd`VyaH5%n!Zdy$`Rw;%0Oi}U+_1k>$q zbriC(9yj?J`nkcAG5*9Ok@vo|TD}*n_s-T_+nZ{+vgBkC9HGgs5mhBX|0Cz9O8xRS zL4h?QTYm}aoTAM>w&tF0+bW^~XFu+Isc(Ct)5)V;#o4-F&Ez;W^N?B8`P9)}@y}g1 z-F+SUo<7R0WHe9TC)<17UD*{WP6Uu+LCw^!H(RF3B0-`hg!>JeS8U`WMIC2aOB;e` zA2JFH8Mv9I`lh!!Y=*jTpzxw1A@#o?>uscv%r2 zObO8Aev$<+5f2`dk~ZV85`qkNLQFC&CT#RdR?E5LQD^-?r_T+;G zKZmnwD%u&s6roW{LaQE7MZrymkI zWlNI0K_{&9+Ikc83%mHqFtf(y^T(PIUpD@Ae>m-PQo)K0Pp(!}40V6l8`MBOzcxZw z%d4hr!7}IUg}anftR%xq&%i|J>Dyk3qdrn(tkn z=U-Ake(?V)z}r*V9-?f}O8I>JEcuep>ZxAGb6=-JR3~ zH_7j9+~po@b0!Cwq>6+8iZD|iJ9ukfJdjPY*vEbxhE~XFxp7N?5dqzl2S$XM28}Ml zvmneB_bxyeL_&h5=OJzQmbLOT3v2=+BR0Nyg8ed}6|ybbc@b;6;s;YY(oabG51dlO z&q?kZhK7SMwRe`!iFQ(ck{9*)Q70*AtlivVkQF>7?maC|b_F5p7M}`ajA%U{zE#lK#l^)w_exFxe3;)t zp|{%L!_MfY@>?ri!H3nsz{NZiFs$g6VztEcKKxsp{>(S_F3CH31t@Jhkl^Qjo%g8% z+$wM=a(VhQof^3=FP0D zk@&`&(LXF~`gadBV_>0KSLEp)f+^MESL-v6#Gk4-J&D%FM?;G+}TO3#rwfQ92u;_$!=0 zS}y0YrnMQx{VTZ!Njr~x3UHI`3Od#0_m(PT+bd12GTZOPdb?#Kgk(8_#@%%I(olUTnWvAq1X&d%<>kxMvbY5s$}MU*6rT+S-3TqOF;Z>@_s07gB9s zf19&{QahB{$teBvgj?n5ch|JFk)QPs-m8`SIST3XC; zGr*@1w;&|&DQKcJdSeJ5`0icznIKmBq5^JS-mutMly)96A_2++bnIw=TuI1fcAP4B z1b~)Maae9Zsyu>1N%jyX70_$f0V7|>LT6X(>Jxx64%!M_Ea=B9#IAPVY8j#C6iq(< zlpe4bS@jDkHJ%DAVIhMD9w36ffu_VTPk~tBU|0-5B7z1H8(*z)CYyxOm5IjD;tF0z z0PFPuKR!IMXtch~7JnUR38?ejKX)O-fU?@Nou{$HE+?NpdgqQS=N*O9&y9!#C4aP><(QKF(dbP6(CZltJS#DSa>wl}a#McBG0ZvtPBn;wuRZikDODTA zKto}D|Iw`_gua{m()?X#t8-hvGL79eqjNWJ*t2ZG0r=L`zj6m(Z0*qe{91DAt-t$y zJ->YPUH$ecZ)fK_<&Sr}x!JS<0DJr|CHbP8Kqq_#s9JSB_V!rq1L_&V%%HGMm0H=+~kCNh)UeSDMZkXJZTTvW7mfTb=4I!E8@>5#e{(zTtgDrMkW%L-I45dAO}&AVQakX|haTEB zIde0GUO(F0lXk0iG*rnI3Ay{~&Gae#c$O-7{w0%~g4X`>bq0c4*dH9FuR2v^dNXrW zDY=${l8fkHr7iELde$>2_)&DxQYV@C)_yw|B+u60lxb63YzxvaML+6zsJ$%>>dF)tF@&AZ=?|7{H_7C_p5>eSnNFrrdBpD$TLX;va zB2;!(W=lr)3Pow!BYPGJNs=8Qv$Dxv&-;7bzvp@G*Q-D7ayieF@A3H@$MIfBHU+y4 zO^za#%mB0cQ{E(+0fi>!^q81ylcjiyH#RmzmDl&uQ4vCQ^k)b*3&N-ozuHTU>`Eg3 z@Z@^SNejeIV_g?t>FyEH?mQhg&79)p_!Gjtao{NN|2kQe4zP?zki<+$jjN) zO&B^tF{|22cpIS#v0xysJk%K~8_69w_?PaTT%rKX1YQ&s&*CQ(6(bW9^4^AFEPRZH zum>XSq6tGJSQ3>u3x>+f5=j@Rc1%eYj8r7lAe`LzG3npEdw2Wk>7~^E->-Sl=RUuisF~f@a%s+(Yuf{>(&o=!h*;3-M|6F^FpAOj z6*o>lmBz0y(`?ExT^CH4-&SF3cN=A9hR!1vcBWU_4p%pbfy4E0l74OVna!F$z&qWX z^J4Af$<;$wuf7;rsIGRsn6oI-&Nq}W!Y+7YD8g}ybKzr!FEv%Yz1j+egQ`K!S;{o? z;rXBbWHU4tH+;YJs8GJW`I$xG=8;9Fa(d;6TDrhP&6oc)PyMq})Dv2~Eo&8TOOqTo zM!V-q^$C^a%BmA4ym88kMg;}2wTisvXO(5C0?7i|HNwW)F?ma#JT>fRHpKi)Q z!KV)r?%1o--zRw__eo7#|4gznxH#E;FU)UWJDI~hF*=HW)XgM5v%>2qgpM0tS{N)a zxv}8=mx1+xD)l+DJ$g^Lhg{4(Iv&(0ix`)DtWgh_a>R@bfHJw@b$rCY!1h;}SqP4=)fd(FHp;v$@!CnG$>C5dI zJT^%5B7|3X0AT@5Ko98d0aap;OpGE7t1F;nz)1tc#Pip$uhn?}VDViHM2CWOq#FmG zH#9T|H#F)T920XF;@FL;7<8UWyI2aWs&N~AIki((2|EDvN7#S;g4HQTZA1@XU;BSF z49I5D$DLo_89rKqAsRYax1sRUc>DaA{lSz2S`PjOKpt$-sFgAcv4g^3{^dJ!)y5{) z(}WQa0Q!v~t&RJz^MJ&XfJgt|ND%bm#4r*aO@zr;!cPS+&ke2-J|Vu6aPv)09&nZG z-AO)Bcis9kaKudqi+eRX5?+4SMjOT6X2Epwrd zJ-U;^hvsWM_&Z3emTxR2rT$E{S`zTM4d8Lz`)NzAGY{+~+dwuVqSd^=%qU1yKJz`f zvFqeB$FYL{Chz=PT1oNoLwy@drvW7vlTq$kq!UhE@SOc)xwPO~`SAH3A(1b08y-{V zE?@jwXuPrmq0Ntg-Adbs2__j2{B-R-QkcZH*QBPmR4+EWPrT!s%r)VjhK~K_ETv2r z)yT7$3MYyF6yYOOQxRVOH( z{noM9383dtnm*r>!AE|}pkJq8AvRRwfXc@w9LW;9lf6R!ArxEUbt3cV-8w0zt9O#G zxLRbF3fECm&Mba2mQzg6Qn^vW{#}B{ z!dnCv3nQFwQpMV~fA?>jYm#WAMGw#|zbiBPQR0B;6 z4Z#-K{aU{%*od>%TYzV1sDuFgf4+S<=QEfjxsgg!7m%V9I^~W>>gH@JZk%B+f}9 zpcn+01Nj8|HXiMjQ=iD>-c)X86?Z;ObJ9=etw0Iea+oh4%UG_N^N(CH*433sKlhoE)Q--QJ6^oYjd??$zeT10-X{B)j(PM9Iky_$J84> zFSXssI%lZ!`FxX1!|GJ|DR=iR37!c{g(o-csBf5V{A=2zWp^FVqbISBj9wznb{6x5 zO$lm;y(SYL%eQ@Hi+By%8WvV#PAuw0c50FdtXh_C*--1QyCWo>BY%MABcF|KTV9$g z&(6+$(u|$mk=^z}()4^ssV#~lU)(9n7^mm%e)J=-&}wLNoJ~5uZx{+X$CVMAbSjjO)W2hu|Nh zQ^Cp!6X@sh@$@)f+5f^WISIN2T6M^B2_^^V_iG47{uQ{o{edEJxZ{z=e5^q(57G$M zGT6AJKYm0chaNo|iAJNv&lu7K_#I(uJ3u%jz^D|Z6Oov>A)i9Uq8#8}6MQ?gVKgM1)WmrUNZ>e!N{cv=oC)s_pdi2nQIdoq2$9VQTLgTPcuHS_ z?T`KkR{>$S11C9{u@h+=5CMZJ16c&b0m>i-V#fc!$sF|mPH;()k+;@6wax{9D{{LsXN7}8K;v7E~ zClRi*XCG;i4%b}N);_$sUb(*aP?ny)MQ->NE!N^i*Ii=_|FfDN`be3P(NWy?vvIEP zHZehgcKctf$FM-0+}>(e+uD@Es>^QCwrXX#J5&U;3W`vT@C z{xZBdMrzq+vcoK(VEnJQ)E|MYt2=e#>W8h2Jc{=^nhf?(Bwt)yAU$5wKOjgw?DWz` zSts)}`8|f{uwAD*nr{hfZZYTAe(V(*u~n(6H}iUI==nS*?ZMMg(>V+2G&cM!Wo33o z9ojEnhMe&XvT)pE)=g=5cUWedD}~hiw__)iRN3g4w+H5KBj-vPy4$jx$H>N`5jV&v zE6J67_3ap2v(vzglH8ceBVTTz%M&lRO7DKpNT1)8_31dx;UoTM$+IIRF&q8JXT5A- z_iT)?J{CXL`mQ|ZPT(vE`NuSWkGx~f!dlH}SLMzC=4nzCZ8p>O3%bZ=e1yIr(PzV* zVB52^E9&YZ-{Fj!8o?QXV;}+L0n#NB$l+iP7=ef|MW}?Pn%ZZhiOo`&hy2m`@vLI(6_#8yv&m+F~h>79GBWwJ)ph?NHVRAux2+_>nt` z1d*Y{e1JkBGT%YE#@I^if^gvfnsI~dhDfmo%L|sFpFn?tGaEd}v28jFyc!)nJ_NS7 z*jf=&Fp?}C$2$+Byg+_ICJWZ9ge@&T5#kGsy_YS}cU2u40nMar=F=Vy88>>3mM^O- zLqjiB#m|7Uj%EoRR@Ut^l9bF_WC8M&}$61e1BmvAM0~s(ZWGrr)7<9b-p* zVJTBPuVaD7uB+z;S<)@*f6^Rh>1!B%J>Kwi;ZWs?d^*WPeczBlY@1BBpWo1e_jz=uDe9XGqE$);q8J>H2DV8$Zc3)cW(~W|Lfa`B2 z#(Bx4o(oqnbvLM#UcEAdwT@l2LCRe&tj4<>k{6lJTuB zLWeU{?zz(EEMH=QI!0jRMdg;}KGfo&{;Z%oRbw;HZp2Gf2&ViSo@u$&c!4j4t9evU zu~&?z8=Pvr1^$SRBhBx{=;*>*3saUR?kH%pz86bgSo=QDU0E0@$*g=>m1=gy<@=d& z&zjGaA6o}`*w~l3Op^qRPH`#ouw9wBM}0rgH_el?>t3$IsG_bmFAsT4#V7K#4_YLyf^pzNh6Kc3zy!xJALqrJ5_BdXk7i={#N;8LElsvw)>>_Wefjf z2)fT*YjCU<`=5m|u|?JLo@GKu1M}L`9nR?Ntw1F$C~&Fq0+(sycj$)y9!XpK!B5-e zmij4xE4!n`MjDhUkgyO+U$hgztie9z2EF4enS6^l{LhLV2C0zdhZSeB%ZJ4~m|nq? zT_SvM(UF6PfdLz>ksE*nD?7VUoak$al75ATsI~P1cuqtrDZUC22jJ(pq$IfU!g7S2 z_)j2K0|00WJQ<=bOymGHKp+Mo3|~(qR~|S(*g`*l$Tbj(w|*|_OffVrycmnwI5^;< z0$Ucq*+fzkOdklMENCv0wmk$82QIe**e3)isj2z3M35}!B7O0$GqwUc0i-x)0y^#! z{=|Pk*h!r1%}@!ruYP9Q8{G|$1DuDawwujeUG?U18vQ*NWuJH?T}1cFQ;(qKw>^Gz z($7BxaQFYa$@?Rw+ns*I3@yH8(Ys9DyGG+f0-y{s^;qQviS9;Y^R4gnjWOpF(m!_Z z;k0mZp)%^I|F;Yr^YwKD2?^M_4sZD~u`#xH{qe__ye*%zM=wfFOxWD|Ic{$MED1y( zoC_cX17MAe9DDOJFY5K{pHb15Zu)ckdWgE_Foea&e0mcrGCMJ~P9~k;@=mN$9;@fw zal2(^T1|Jz%^rNpIUyu0((E`9XmexnLsN~cVq#OBs?Q?h<-+W=wx<_1S@R_??(yOu zyDb$y5yiop<|I*kV!To0`g+U;O(;x_5ZMHij+UW%;jvnw{^>Qr?}Z$Mo-Y zvdKT~*iUByC@F_4++-5Z(A?=%IQ>aWC#74J!OUZs<73^{@IeN1lE3gS)zhoXd0Tfi z7MKq_Fje}?s(wegEt~PEkb;Ue6<W z81JnqNX>9a9h;{c#$^((dGMuy8f9J99u`;HY{5Wqr3Xv<)RQe?! zBskwh6j3dg$0KAPp;rC}H{kfkh(R<_c(Y0Wayo+6SJ| zAY+E3YeQ(ewXqNGGtk+w48~Uh!~~oOl#Ou9CH`O$6Nhe**b@K#{Z`*tar`QH>XXln`_VmV}6v^c-|P}Y~X!by#*J95Frz}eks=IPJNCdQ+-tCv;Fc?yHezK9L{V795J zF=A;G+REK3>z4;vhm4oO&CLy-jYUZ_nP)zlUot8eiLe-YAr#kkR?DZ_%8c z)F-PxSuWLAuf~*m$ov;}w|q8vw97YH-KMLDZ0N?t-Yo9xouM69OErsW9X@GxiWzZ; z2WKLbvZR#kjD{-qHStfS3*P1D9?5K9x~(!)VxkX~oA|$To#AxPGQ-6B>N*Q-5>j$a zFbTsv0z|{r+$*~z1{bILc3u%+o*-z4Z{9q_PzxF5fd4@rg+6pSU_Iex_;2+(Ftsr` zg$uwE(qqie;u^$Ig0KiIFDC;y{6#eqMi1EWpsFy-6SD<4;&^`l7ub!WK>LLL>pjwyE?h95 zltwK;`vV7fV(SV@3X=N1K9Q;>$b=Y|-4Ml0td?K{fOp#KF(pfAn}9SD-sD8+*k13Y zeZ)NR=S>oUy!3pdOw8I=rBM^~Sg@0md_es-l#v6I)FB~ibJ{g$KLts>UGsb{&`w#g z?q1`0AZ#Riq(pDDl>G2rlEdn|rrKefv)|K$%_mw59;6G%f)My)bkKGGf&Wj!&S+R_ zwJV7>*Mc%V;7W1OJXDEn+o_iAeEyj^3-YD`b>D^pP|jGJ7H4A)%t;SKmPU4UhwBi8jHY z!#M_+n(Ko2_F!qqQL=BIl<}0FyaOWd>GTi9kJgPRzcx+nbUb(F;?quwMi+^INX4JF zg`)g@Pni$IXIw0!^Qh|P%4VdwEbT6TbL{1(V@w+*evJ7I9l?5}uV<~)1=u|XPMR5I z#*?|1a#rj(s93`!yq!B;LE==4$(HRdN9PD&8S^nrjlGRovWxC&Z3seZmm_crPGjOd{iM% zIFj8w`97aR)<@<|KU?Pv`j@1`ez{d@a^9=QuIZfoVdAv8!<@V{@a)@WC4)IyTEmrp zM|O#N1)8#fs2%VhFE`^=S^BM?jTuvZ(ac#TnJ@lO?JG9)HRIbNLp{e7ejKPK4qGCs zI5l-e(I)fd_#QU4D^Q`K9z5ktIO3!^cD%4=hub-5cL|h)A37eXk0=jJjD#2;qb=cb zH8a~F>I6rX0=qu%ON_pmV|a8CmRC=(f|53ulTMzaB<)7SOt?pb`v(;f;T{fS1~56^ zVXQ?5MRrg?V1OX&5!v4eXoIi~t0Z7%FgXjvp&y@+0OW1}AvXXw2-pq+Kv1P(yj+m$ z0fs#ycxY&7ptPHTMJSO3i?t9Tk#hgne40=%qxkVrjopV?pw0V_cuznW zb#!=!$zo$;0YVUV)xf&9E|hs|ch;ZxGj*n-&mycBq;2OH)S7lSi`opCXETNlclkMc z-{52JZlI}~`-T3o;Ymm0TA@(n75>xR-7ac9(z09Yy$XGdQ#gqMTZ34d`pV8sQSCxU z6~)q9YCp4ue#Zj@m2zy>ZZ1rL8^3C3^C&dG-nKJtkBM& z7azDYggf5eureIp?~wD_G^skBVZPEZp0;OoWxXo1-Bo9hHeHF?QD^?t*?JNFi^Eej zN2IK-X(ab)>`f_dPyeA&n3!UxMa7#Y07fH!a-wwg&Fo8HJJtuPd$#g6_fn=zkBY+%IRGZ zMJFc-?k0q9Cd5rRdvGE(iw9$KkA+hglu8)ziENo<4A8)rr*W9-T)c?r2Vvu^jT04%dhlQiQ7^Fgkz89gqzO#cJF^#{C#bl1ItSY4mpzG)OhnOdAo(erFp0)6 z4M7yPRnNgy!UO^Ung}{&-Ub2b2gC`2xR;aH*4#`elaVwCVvz%e9uecRGk8^SIF70U zRUo8B@MM97IV5{WWMwtD=?Py7xP79##L^cpLLvqrY|re<=UIUvtaT-=??&6f%ggIo z|DretzHP>#Ta!Jxeri&Q@emJxw%Iiokrldu^yICUJb8~-rBjAAEMysO_qhN|5M1{*N`=7L>AE9w#iU zeN>~RW+{Do%amWh-=%TLEAN7DD!caclFrx=MwYAwg>!EfSz{?vlKf1cSzYEOo3s~N zP%3m65%XU=dakVf%A2$73;}A|uN8U=(_hDShX#kTQ50*b{Bz47GvZ5~WL#&Q+&=K6 zJ5>G2sW&gZdn{*?+-3tgqM~sW+`D&b?e=sbIu@K`1_A<|`Dp>*Vwm52_M;nozBciv z=MLUH#K3)qELkKgX!R5x7DD@(lhZuFj3))PLQoTMyc^&C!#5XiYi9=jAIN3HDofnu(t2f6m~bFu|Cg@N+}A)y95T;$9Pv z7Z3|V7mW$K^Z#_GFcYvp{snB+&p7cL0TCcZSbSm=t}7^>f;>WY2%8^t&R8~K(x?WN zuLu)6LDdixY#5*d)JCjSiG(NUZUKN{rHau4fI&1iz<~1_=M4-DmO)qigLeZ&5Zf4* z&1T04dM7 zZuKVi77fkr9)p)b9(Ro{ zj(_4cTnlj+{c5wZU}rr1b>ey3~+IIbKoi+RLd{(BQwT z=_*_4<*$Uaa_VcvoLA!LD(7CGx(8Y($(|wHCZoFmKloFt83{wfqtKLuT3i+{ylL^X zL=h7s2x)d4C#uHyH*2g%SK3Zae^|9V?l}Hn_yo&d!QGjj{#;4I`#ncDzkdkw^{b({ z5Ek!fRCZgcuq|rCIH{iZU5}q9N4{sf;8aJ(&pM6bFi}iZzNmOODn}Wo)52V+H%gl6RR8LA{YOUW~E~ zS8c8kICn`O?K2J%L16m&^)TVJ0j;Rmb&9LN1|+IefZIWVHihQ~rgUv>?LZRZap(h- z2nYi06|4{-G*W~a*#8Kwgagqk3NjZ~9o!Cm>_Fpy>VfY8H126%72Y143*gv?g~K~9 zkL01p9THD5-oljfy|@PYOah$G%WK`7^xk5{&K4i?OW^#wb3atd7CY+XDs0)xoK9c9 z^r~dZLeeXFJgj>rDYxJ(<7VbK$?DLU){L=yWINyN+{2R0sEz_NPC?7%i0jTwOrFkxvPErL7pE&IQ(PX?Ch zQs3TvWZ%T_aqTTsK?=^(wEq1D+Z@chHND((9-6W}ejUds&oo(GG{pGbnX~1H?31As z3&x>2R)s~SJ?t@jQZ5k+r@9LcN6bgsSbIuHt1@<9RP)t*6d9=?|Kv^PRbGmSWZC)4 zZ^_O&eEnO*|2@+{gg-yQaO+IXB~@q9eGkuUPJCfdeVHS6F(xhRkduP?(_P6%WEw5m zXIS=7-|@qYcb0BaPUuO(2}z~yuW{;CyMCTA-qo%4=LP%w=v9HpwXZWu_9qTKdG8YY zKu@SBZR`ZmR?Ys|B3EwD&|RQ!a^Yj9ku;5jgpRI$@$0(0S}EffIc|>9;k)H2|E-@W z6aak{^D-p;#O@y(PC|d}zOg(CX2So%QM8h-VcvkR8%$BqW?`T}7A({_Z{EJG+ZXtv z`5=sBVOTKPR~c&44bx70po3VT5;xIq(^6k7}YTY1KYqR3)8aVO2Tyma3#A!fBfjuOeG7!B8dpo=>KCbett&EjE zv|Sg57|CX3TONkyhj=7yFK(~?dg20OK{Ez>(-(A|HybyoMUWv+d<$%Rs zz(UzwyPy*d4y8C3DewM^4lvX$<4y`%ldI8w@u#zX^NE+lc7vkNe6Gc6v#IO5&NyU5 zve&_4DvEv7SdrqrLv>Jr#Ct~b(x|{bLHplP@?pj`MfwHNyyMQ|vJ9OU-qBN%TX!DQ zJV2U1ar@~z4&RRjhlk__cSKzde5}yhk^56YyG=s$)!{P^vMDyN-l+c>X?zfEnrtIR z$Ju>xBx1>=<=f3*@%@c){KihI&WjCBO7xp0Wm-CH17G$X;!dY}^z=s3+UmWglcPUP zl1A|7lNeoU((S;Xr7qt)v!z~rTD|VKaHcjb*y8fXtF+`yu?OF~mXifc*@Ca?u{b$w zd2)3(p%j9C6Vf64stJS}OuNxUj}XGN<;x7@v(r~m%rW$w!WEP;C z0ZKpxz|hu!ut%^zzV`U2kq3RHv$0;GEhoxu>y_)*KhJyG>a!xW1#<$}8o0m+GB--$ zY|9YH>=a<<;a(uZw=>6N+@^ieuYqfH3i@>XkKnr^NdU$RpD?b#2%9jb0e6FF5eb11 zwDL(ja$&I9Z2;jA*x-J!mGJW*q!+(`6P`NAa3U1DH*SpWPqOfo;VQ{|KKN9lCT~2d z&vma{`?ir6+PjK3^bU%6EqWij=(zq$kk9F6PgiOy9l7yW59jjVe2Oetvp=*CEa)=$ zx_yo4cwAs3t$&%-V`1i3b?s+AQIgx;X}ch~3UTq_wuhm7Ro!oT&E2f5ic87l-@4Oo zPE45?Neoq9qPnqH?xG-46YSOoM)Ug0$mHi@SQAq-H>y_0O1|D1O&lF~pyjXfLVn=a z%!@h8LxQ5CqTbV&e4@Np^_0)Gyh?vB5iI)q^5r6b)z%-elM}7aVyMs3m?>^Ib`RLv z`s`h-(`Ai&S(9mFC4>F3t3$&@;j4!h8yoWX7cks8dg&w|gKtMCAGz&pr%>LXfBU=q z*uSXLe78=iq85FA|CO~Zf0>1pA}Qa_*hWg^kb%0CpRG_7N0^F2${t(3Vh00uit2eg zDYrk5PU+Am^L6L4kWuuP7;7%yF<0a7R#TIR=r#!CuC_kEn__orn!2z8O!n@Vj+ozm zUoRfs(-)I_T#r`4R99&K*68zhOLPMDYhR^|gwBG*1yQv7NSr0H zvV?ivey&ia&|35j00sz28)R^BaqcY8@bNhby{2AF4W1>43I?z%1;+@pHrBHQpEWiX z4k#>ycL%-+5TR84t$X=SU`~7DG`D4Thc^8K?-5Q$X2+d_fhxAPnPYtjEr>O~9RQ;<1ZryHkj7YyT4~um281yTFNo(HuR$0V zfXGFdM`HB^k|BV03>`$qA10@?OIeQVE6#8rm4YD}bQ&)U3KqiScH=MN5)+9V5A7X< zz33mldj6M0F2;6CZ6`()LbQh!8LAaay!u^pp2|h# zG5T-z(yPuIu2R#(I*I}FIj-?OXQE~qrx~|2bf-13U$5uUSL)|uo)#!RaB}tSUF%{K zVE~#_xHQ8oty?M!Mx~KN<9h+{91fsE}dq|*vO^^0%st2lHymVV` zIqgqhhgbTwwXvp+oqN|7WNS56`F&O_O;${8olY_3JI~+B>$@eF0L{wg=IS1VdN?fA zw~>g+XISdWnXjz4wG;7lBU#OmkuSXJ}pmo}vV-r*I-EsQB^ zss(&+HkgNUGm2|<8yTOKc%O;*?N~sjo}wjMFweN<1LP; zo8yXOY8~9x?0d>v(1xb@PD{*4W~@L`lBbLWXR3X7T5T-nyyHoxDhh^gMxC|duiUTl zH%O7JSlQWs)2=g2r1DU^Yu0_R)TfWMkGms6dFZpN4y%K|5ZP?8%GJY}h4~H>E6#-H zb!U#(9s?+L9IE{!lwZq!p1H1nEJu$c`)Pb-?!o>sR_3NJUwAooAU0ARz69u~2n#y+ zl7V^wgcxE7oaICuU3NBoi#Vp&YlEMH@oS$ONw6dMA7FZ7(k8|MBpscxAou2v|EJ{Ot*3j;HaBlp+|0Es9IlPC~3Bxkj`3g1gfU~`Kt$! z`0x*qOd+ZkYBR!X5E5-d#%}C2ulvUHPH5H+T^T-aL5)g7-%#C<#0|1PCX<$Xa`c=t z7G)>bjTd*x#{D&65l9<5yzg2YbA*XJYhNnQmHG0rP+xk(wAIVs=ln}T3>zx#c+!^ijrscPf&$y((wPU(y@l6Ti$mMC zbr%$S{vjt?o)bGAhgn$0Pfqv5+NPzKJ>ksA=n2Vt=iI%+_UFz0?7{e4)tf6xoA)4N zIe*@uwDnE@Rle#QAJVpwU8G)~>Z{!>3Zqe8KI(QW)r0%N*)f-`AIxYJQAOIY#VfUo z7LDw35_PxG3mXk~@)XYJz3b`OwQR1>YONAK_M^^P+rmty>-ootFD{WBxzZ+_`}23s zx=BI3ukJ6MN68?3pQ^+(>@iOa54}UuJu8D9bhJ51VJBvNA|(Mu3Q<99?p9->>=vUsQ?6V1Fm6%U7}|F35_B zy@%a3?i`}k!&n46#M9jLgilkjO0nlM9<8HbhU7q*jwz@J?g_9pA;f!`t2qZ12-iXo zy1+%pRI}kgWgC3Tf1K{LOn&you%l^9(>dQ^BqWfL!FXez!l#C@3?&+2*U#Q8^%gN6 z8gaKa#!3<+4t=pcbvd$uvP__Jo^hvJhN^{7dtX$p-pgyk(+@}}9TB2*NNq+#TlaX$ zu>Mt=@iFic+GpEiWiTm13V1NwZqu!QNw28KXt_#Hc+u{Zq@IakuK9!of5TC83(I#E zMUSn-3(RdiOeGov+5$aXr>1?hHkge%Qr@Ny^!}7CTgr&7&@mvuqTbTboxPjFl6Hoc z>J7(EoUlEdK*&L)D=KHLn)=?hjHR_7t zJ5BS{U7+rFYmSCF)i>wu;k!u@_cP9pAD{>-u@P;JxBOMEQne-PxoKC-m|JS3QLGY0 z3H_OaR}X~Vi|3RNdy!iwZB}MA2hz+r2cpyag6rK8o9gO)#tCLv`QLl46}ds z9c}x-*Bdmu)oddrnaZ;AC4G%%Vo*=aUv8$p$R@cx0~zNlZ+*(~ZaLsGLHDj020~?< zC8f7t^*e-IYRU7j8K5;IH41OjOVdk#jeeS+HHaZV34yI;YqJd?vl78yU|*yAg3l7M z%_Tg{Fmk|V1OG~}ae;Lo$4rdBAkrftu!e$E0|+$wI=EpHNds^Kf$Rva1EPt2E%b@0 z00S{XpP_Lhpa&GQP{RQHSv?m^`(A@fim5^&_3U2SQm_@5Pt z3i`nRC{|?>!lZKyP%FU@3SwgdNrx9Vth6*iorQE80E=|D$_s4)0Rcii3uB*C9nKY- z>r->VcAodXf3LNq8lRf71aBDP3UG^&R&{G#R$4j%E(=6rF$99R1EI1&$rgJoilEb@ zWcA(;wID$fBVcnJM99Jk#-)vB zlo&_7)2Q$MJUU$cFtm-#gfxBs*Vf%$sM#L2mGNFjS2Ex9^qZeQ3v#7Rn;g<3>q@N@ zo1L9oet5~mAa_APK#+`jsz<|Gzxed_zE{d4?5T%J8F9kZdc5g-Rrn^MaeMHi;1C^S z?fS1jJt`a%wr>y4^K+d|bM>zO_RSK`;0%9?9$3fsSe1UQ-J3YtN!xc>{P_6Q;Hnto zwmrYM)seXSvzlVLLLEO8^~|e@sc)3NALLj&QZG_)iNaYRMN}@fexT+@RDgEv%zlQ~ zAs!|t{KkjE3)OFlMMpWWQ0pBzbW@+EFkGB<(z|4}T>jt<>L2>f%u;t`iko=re9pA< zG^!B1K&hINC&q2Y!V@~3OtUllM0t4|6RUX{fGr|kA@ zo0ihEmV${bWcS#1+P6yqRq3W3<}}>RmHl+jLpFZ>ah}Ecn0pyqeEdT;&a%4PSGw8b zM?^HZO$-ieS_v6y85vqm39*FU-G8i^afeHbIMb?XGV{&FMV&{nr~DEQgm)JP^i<%k zz`pZ)?yEQ(gTmaD$r)wq7>a_Xo)~9FiKiXP34(VbE+LVF)das>d&71JHYmwqfDa@_XHs|81>W~i zr2U_6ikPrqQD^eI7sHg+f1BlFH#_@Rx_f$_v^)g85=R6ZtlePR1se!VVd!Nur}{8} z5#tGS-fZ=GNIrYI=5sJm2FHRtlruh+Foz zN9R9QUWG7w$}?4wB+~}--o3ge?Xe~n&D*=gzVMUZITDxDlrGvg>fYz-o-HCs-7EL0 z+UU7o&^Z&2>1lN{$Jur>NiyH4)(g^f{f_S)XIVk$eC;(>@X**+)%p+bnnG`BWIFRwCj&TT?Eooq7L8`CeW={<*f;$`8^feS&hDiIcCszR|+-=A%D< zx;fmYIDZt}d{yLT@qlu{ey84DkKN8e`K?ob8dz+3NO6y1w`=GAQa>=FI~eu%@D9za zYs(yWl!`6e2AKlr3?FP02oQE}dV9aHM^igggJkf!oDBwf_akHH+6B2fY^hEZe>rzh zXqem8?_Y;Ar@DyxKYi7F?$8I+jZ?>t<^IwRzJEnO=HAO)gM6U@G9A~gJll!{R<1;@ zL{M{AsgEfs4m3DX{mQoXC=9yYCYF|ZM!}y%`OD^EZ|q1_BQ2Nw(Sh21lX_;0dr!4+ zm~C}891dFzmkRde+R^Z9U4rM7O_xn95~6Dn2VYl@7MUj!W!*(?9I4MPx%lamv+*SH?#focM|#~nt5L?EFM+$Ord zwGqj#5(%EbpTJ!Ri(m+Nfx5zvC&t17Rwo$J;4_*GVHZ5#;G}XIgi7Rf)8IXX3M&Xr z?mzOeBrzd@;tG0PF!h~497a+gK|}`qZ4Vd$uH{sOoe=)(xW|vVVFwl&IY@8yv%)I@ z<0i42gBiAd`E3bcLPWw>M@KCzzXqw-(83doMfezl=TOk?wz1|;T$mus5i9nsJ2<$Z zs)1P$TpVj~a$uL^k_D^ z87_~cxcDW=B!uHx#2S5f!e2QPL!~^WLk&aaZ_4;1r$Ptx=JRh?ti*Lzmj<}Wx=m;Q z`$a?IIxKT9`QfTxwwmbHnC9wSaJ7esLTZg-K5{hnAxYjauwgj&2{5Prhf^o>X0PAq zI9K{QWTV13({Pe!&42GlG|=v5wV9_c*A6}^>~(wke2=7?*{Fz|+!C3)`|{1Mf~T#m zCL*(n%E~NFUK_M!%PVOZh0h!6R4sL~kw(8JK2MuV<|ny5;kJFO9=2p6vN#*i=*&&;j_(#ORBt`x@uPdW zJs@4z;SsmXVA;g0iWN`4Rw{*p8#`uC*q&9YWKq=9)aPyrm(etngP5B6tE9k)|LuY9 zLCV8B52bMChP}@fGNA7tIh;E3E;NdPMe^AlR@Gh4taBU~cteHQwO>%Y?bW<^Ye(|- zyz^V?oM^v>WyDx0m%lgDrW?v$vwc~7^Q`Uz3foUV&iI&J-6eH0M&$jz^zin$YpUx( zB0Iw`E8KtP%;ftvndUU})Dy&~8j2T{Sk2Bbkbm5aCRK}}4o9W?mUon7cK3FVUqJQ&?`i1!Un)G7=H(2uDBkrSLs7}uRVwmbr%fD~X>Oou32FfKpBJ}NRY3xC1E*Y6^J@HQ-O$IYJxm(yB&{2AB?XX&))Wqp>pCnum%WP3!n@WDxJ?m}6 z=8@Ly_1WU<9<8H%#X{%1I{1FPxINu(`lp(SBtu^3qS;kickiLJVu4Bn>-C*nTt`Mm zM|PFc$VctEd|;=2L$DAsX@;6Me^z=~4X=OB@(TJP;mjfJ_;_lwa1*g4ZdMkh&vR3M z;G6NBeH1$PVRb4zB0|x{Wd~q2@hl_!%Jy)nEt_n9lI+@??EW{uFkRIfTlB4&Oeu3- z(%2)~NK0=1+~1k(kNa%nXB(Yp#;s%InYh&7zAQfLU+T^h9sFv31^mu4Nmm_V!`pTVImv)kLG1aqYimkIrvl&MBbQ*-Lk- zu>8~hw&UBQ6zQJ*IdOvFyBsrLi}(|+-oI}3TpGFkWZXCPT{O?DmlX)z%E6wFr|qZ- zXXN9z`&25%F7q1szOL8a|Kx_q_jZ5&^6N^`!B1!1K8KTu3!hN`?v`?+W&sJze#&J_ ziY?-2O@9Yh?0i_gpeKKyI=Y5-cInfI0=4?k;{y?gFJDe_xlPeX+J9v0bNjlSN%O1I zM#>V&>vBm(1>?(8$B%96@)f>+>3Bn_MN}tGi#iJv|^aH~A z8*Jsivtqz!5loGXynu8C ztOpz=*dGzjV@Mi#1+6q>1^Bo}(Vr7-IQ)v>F$v=Gf4KGL`r>lct_pdqp8zH-t#8z- z^v`57#PQqvzlowIYp6*aGF|3o(-1ZL9qy4+Ch169I<;WPJvBe^TW*`F-R1BTt)nb| zg44J!c*gvWQ~D`dN|V-epYl4Vz<89&B6sU7uFCIsako&OvwP6%^08WWpSH~9slvAE zQz~kozttb_l(;@)#}5vppcYfAD#fiO%Iu zE5X7wq&|#@nqf zJXfEpwFi;@DU#?9?U4^npm3M5*y+HqTRu-Ctb4Yz$bC9Uj>5roSweUqN96w2i{cT! zOPU&QxW8%*HS_K{rXl!OU-|ycU=5$~4}u5$?L!rxdyDwIeo$Q?h8s>gy;4AcBqnjb zm73M6gtcQQ!yknfXX)JgwrnoR5jKvAeii`JqHR7qb<+AInk4gp20h64i&S z&UOF39bDhxbU|$28=i9y_6KBc!fhe$-RN}g`xt8 z^1)gI8_gxiN!73s#b?XeLV9iOIR94{5+ZzaXa7_vm3e)E*o!RE$*iEEp%J;rH)(wYi?G^O@X zII*gDktv+4>=qdp7pvcC6|q~@Ia`NBKHlbG>=nCpTFOi-?M6wtPw9CpFXu|$*cX#8 zT926T%f0-%q%wN7|3FA^!0v&?MU2XNE7O#uQ2Jis=4!7~#^SkbSC(bEJ@lx~X!#sh z>Jx>{_Zv1Yc1PW(A`(KTA`SN*dVGR!s$Io~0O{2$3%cz;Nmo`+Jt}wx(z`){!+4!3 z{0r;9el^8_MnZGIA$|M)sL9g6skEkQ#{2Az{*+U@$gW3;OeJpoQCL{e-L4*RMqYyB zm6~^&X(v-#fI>I;>=?5u|0u&I!ZP}vv1p^#ZEuHiBH@rL_N zj*h#m0a4sLk&>3S zAJYWr1cbi+^5uA8#-;Yc3OHfIN21e*SQLU(N^q`0@eczf^t_gA4Q3a}53%m{Bjz65 zB+?Rh_5f;zKPn)zch}nlFx27Io`EHS2@m9IuHSKbFE#Z4Hnl+POVCBJ1jH4I=m@~C ztAW(}sy5%ed`Td^IOhp5zv#w*DDp6#<>oSKv=E_D(k|n~xBH)K3|24*TqcY(YNw{q zX`-FIiYh@N{||O}feW;?^#YpRuNbMo-zIy8Ytb^%-4D+8q4*cPHoRNSU0h;dc1hS= z;75V=5B!p&Q6mo6zY-ds2GL5Oa}9y4w>>ZWQzI3SB0`=~GwyN3@%Q&0uGYNo&v(nQ zx;x6c@9X)+2Zuj0&4#ZV4MdU6Se|H#-jZ+2@OfxGt;99z{N3WGFXT?Yed)vV{4T08 z=9moG`~AM-MH4oXGCfDltNJFK(DyNJOP2b}x(C!6~ZHX1i_UzT8t+@zVw z;h?S2V!N_*$$tiabUA8UZ&A$9^LNxy`lE-!?KI;?SDyG9hwH`P?>PLDYwNJ(edqb) zCs#OstK-O{ou^gJD4*|%%a!iXxc9ar!l=OF z*HO=cT_ta|@{FSR%NCVI?3;JYlyg@&2fQtKAgyhtzr!p3%$a?knW!#y$=}dt(2=<4 zax0V9?ogrU+rO@}GAW760V5YV_=8M&ChYy@cTGfgPtvpdFMhW?A~kg&FXsXKFEM%= z^*uWhj_L1gF3-Fsr9>6(9vWhIf$dqQuJd@?SkpdFhK~FrnX?l7r~A(}aB}Vb)z;D1 zZ<$rD8PQbxw@o6i(B?H5K;yb;dWZZC(*k6Tt4$-Xe7p6MI!u`?lVT>_=;OO^nJ;{w6ORUHV2MNp;STKMZf%6plG;lq!55!*YCH(8KqK8jb zjbz2lcH#g>mJ1#x5InK7#|{uT6CX1PR~uYYii#eCoQK}2$a}p+SRUAv_p=IgoVnTA zknv!+?o8Pp!!EAzuH~@r+~SmRGcFuFG^ zlrs?1LHY~609pnNW>@uD_j>(ffJgBt5%`5V0&L)+@f8`Hfa&n^cwgqdA4C}Gs33er zIfo&l6ZtS+p}*9Whbk<&t5WK;|GQ--x8n4Au_`iNo^#fZwrIj*VDb623s!psYlY3? z=vFI!; z&5tapxx4Yr|46nIEH)QvWxjhK=3>y4(YfeZgXCIPcA95Y|e0p=owM&qBF{&41?bty}vCX!cs49@@dU@21e%^R70r zZ>wz|j!Uq}YCekA+ncNRUfYl5MyYk2QZCi;7Gb5GA*?sMl9@C*6#iCTr*;X{Fjok+ zI(;jh_tzbZc$c5-@tnDG?I%ZnL}y91T@j(ZHQ?`KO*ibI(-9>cNGcIAc|JDFLc&$7 z-vN$7gGzgAruVb#IdvArvdFqY3FaMFsZKehkUz5M=iF#e>~KDv=&aEK_n?rgIQ+Fv zu8YIx{eQDLR`Wn@b8gRHKil#WwnMNbg?R@&g+WIkbZ{vtzo33jH!hC{K?kh139%_4 zP`I~jf0ihte6Vn%>DD`U?mew&nXh#`Ax^`J410E>a=6Lf|BqisJbBRT_-)@4lTMPa zxtCs#X+=8u6zn-L&lCF$0|Us<@PGqN!g8e0XD=3VkTaMA2PObx+yul01kMHFzW?y# z+P?VL&ELP9(UO3+VJf@!v&0!T_q9JygHg1bojn;OQ`9%C6tUAF5x_V&M6)+47jD2% zKM1T?{2Y8%3w;`pEYn%)D$2sbl72Zq5GM@4?kemo2s0csoh~o$qbD6)T;&`T2Z;gp zBiP-em~(7@p1>5vCH^9#fA=#o*a>9txmN_HC~;SJMVpwK5X&JthYK#8L@kCuOfC2Zcj2E zKBThS=k7-NHq+a!x1v(W@1bAk;>aF#O;SH=@sE2CheK}MySFel){!~){ZfURme%5_ zjKPscnu^Wx&8pvZ)cjf;ZwfL)Rz4jF*(>`c|HB8C=)#U_&g_qMKGSuZuP7xcBHeuW ztD|qSF`WxA_YZ%Y+VMzjC~dfI;{0}Za$DZ4B}2ZfYLUbf0Wy|2@thdbhRXgj2p1~Q zcci+8{M-uywl&B2F_rR}Hur#kr&*;R7jScPge*Ri9R7c3`UfJN{fhufYK#McSwEnocI6F(zOo8mJQE+&&)Mf2&Um@ zDiD~g7aw}P4l1Rl2T?^8#ki3qk{Zg^7i7(0$7OCe{!Dw_Pdyqhv)2iEcYF0Gwoq^-Wc?!pOd|^6U#f5(2|N+WPyOel^2kTq+g1O zMS@*55U4>*2_p$egVBR8mV>{SR(77MySi2hR$I=KA)z8*^?FiP4OJ0D!g81DHslZ-9N$wr2c~ zAr)BZ0vw274v$B!Xb(dWL(LWq^iA-&-1`2JHx9(0i2ntcl_8)Wvc(b?pI{9I92-D2 z7{3aE50228rl$IVi4F7Gr=p+HGyOnFqNJn*kr6xay4Tm8z=yA-tn48~G=8e70dp#Z zI01ZY#3}(&m@462L!ARC4=OAGgW!O4`2=d55*#sTEfL@!;hR?kZa7Mv?+?QQb^PcU zAWWHmD{MjgMNB&;tp_F}V`CG}d&$%!JI^TNydGY&LJgnLt^V3bQ8XjGr&sJhZ7oU3{!V`b@=t<1zM_&5mzKm1$%(t6A8M~Wdfp#4& z7d6Y$-bmqB=i0-<)^ufY?vC6>mMC?kC0!O3-Bwd`k~f{$_P+1{lpm*(lm}AtJ?$ED z%*0o_gWv9uWWh71Z>F^C`aLP;ujvGjT)G6SUFrkmbsCkKlchZt zANPhgo7QfBH~g|#+8q~EN3!o>a<}loS zEaK%gVM45$Q`s16Q-8!FW}9JJ-oDK<&{`ZS!gT-pUGzt^sQO7a3H%`rt83OgGnc&T zYRqgkE=!`+dqPR%Z|m{odHZ5<@RiPsV`6B;qY9fn%!C+uk3(Y2PDhaQX9Gho2b+}+Sl18u-={Xk$MoE;R>=>Hvl1J0(p z)E6@ZK&e2SGV=0*Rkwoss-Wk74JB*%jcyv4XLx&y!gyc3bhDLiBp%DVK0p}_R3~Al=SM&i& zgv5w8NQ40P75JDTduI?g0vobYqE9Q?UbK!E23< zzC7GIT%MoORXn`+js_o{yc?IJp!NCxWkt!SKv`Of_%4y8F3#*637fQZSoPYd=i#@% zoi2DV(C?jf=3UM#K3x9MQ13j*WVPg9@62mDLg~A`-Ny!7GWa?>_)1FtlH5N!*nM)j z;d;N-MNz?HBM4ELA6@hX{~75eO9b;_=C&oxoWhofCZgLONXZ1@9 zpZek=ov6Bd13iSl#khly>KDNzw?;k{UfsqANppLWxWU?S!~-b`4AxxvcoYFLY%XUJ zTvf~r3xBl67*3`m##(T;5;+y-qSzb=!?}F-TUlP~C-+)cLWJE%;|k^og1mvla4IWU z1sf=4e?5r#CwhnF<5FX+w4sGjr8iH7a6SK^Sgm7Q?sAFXxSL?zZ-=YwbJ4aMOJu=; zN+z-D>>^dtQKV=B->F#Bdh95R|8o8&d5Xn1YA0yhkQnOnhTw)5M*FsMIGRD(hS1-N zL)E6tD}q%lX51tJsh=O@0-DV3pS|9Lo6$KtD+*Za;HT(ix4=M#mnJ496{R1gKN_O5 zu1QpOJ90az3}5MpzACBErV%-jD-Ihb#N`nfcA#tShsGsT4h1_}Sd@Z$Dt`HjY7GJR-d80X4_C9P&q40rkD`Y&t^mG$CC4_hm zz_Sn(UiiB}QG`bySiXHQvLR=|akQ)e4ltY;2#V+cGyqs`1u(7w&F=?j{}dI&7%1er zfQtnI#zpWcgJFTed*e=3NH#+PvmsJ_1|0Us0V6MV7=rbZ1pOau*<&=Qjfcxf{0orU zA+v}KsP*9L43<=ON1Ib+@LrT(-#Ym;$CF!?U5FAFa3Z=+bTw4YtCi$bYpU^9M?CKB zb)3pq64=qNbYnB3{*aS6R)#Sglq|N=T53!&^)3It_L02jsn)?SRnz5F&u|1a-~!Y@ z@u}0=K7JhI=GE1wJK-osnJeqQhn|`$C=|)=w(Qxd>;fo*Cf3I*{Y~^lR z*0Yi0x$pOIkyBFaG;dwPZcyUMACZ~Uic5jZ^}GwhnSbwRY$wQWK_o$=za_5Q{IUKS zMf$qm?zM|0ri&J~FKSSxKkFqIrjo*b;(1o~!=D(7k_R8cSxR4Lj87{!zwtlXdmX04 z-mp4XM!M{>{Pop`mxEf*IOv)&@1oyt+ql0|?^LF_n8V*f_3&MLUGcMPYVKvn6svnD z^x}bSlfZ5wEXSx}eAP2r4PY$N74y(791FycYYl zp-9SNPdlf_o%#pGM`}CWc}s&5t;CaK08Q;0CHt-kC+5$C;#hF6uRXOIv+Iyr;N#`J z6aSjf;H>WL!`cULCJn|e4S1VFZ=8M2wacPRz+rakwa>rR>wj;gz>LT~WgnA=Wout3 z?wh+;<+!G}n1IDK$2-H`UYca?WUS6Ye5$8+2g4-{DLQ)Agw0KA3R2oxf|gQM%1_OhII46Qp*7`ABL#*P|`|` zvK&~vAjoga>C_hBaNmoyUjn)Z^9y3`F+hR}N6o&l%Vh!U?E(}K2|PirgD~wNUrZjx z8~?*~OW-Ym{|uPkK)?_dNP@tj4KOailHf&vyhLew|FUG8d9k(F0gluyji<%Rta!jQ z-2Emzpmaqc>~Ipa6^Pd$!cM={6bv8&c-MlH8j|=29UZ_Kvp^XK>jP+Tqa3op^W)cn zaYiQ$EB}ksK=xjs_dpWaq1doNje>Si&%huO>KHH$!NDHMwFgK7)JH{N8w;?YnCtX6 zBux+S32<2h$}#Y4;c%kO!iEYasH=Gc00#bTr&;gDuknc;cg+ic+{VA?2E4^CGmqC9 z!kI@Xt2F#|Og%|2S6jY^uJ{(){9f*59aKu`vwG95s&o5jlTg2sl}GQ6bgw^eZD7;n z8>OcfATs0?D9h%`;y@oLS($6e_xt*G21-x#c1NP=*+KAyE-()Spos%qde#-HP4U9I zk=ghu2UsLhRZBCTY+1gZU5v4QP(RrTWXR8lgulicVrC$yY7U7+{APanGk9_G*KokX z%T^7Wdk2A;tsia-Bsh-QPfe;Q+fYp8j(_HAJ*EbcGXJ%?IDd1i?(bYXC-^$K65j`o znm-%191^JZ*bw#6KN4Zv`9=C0K_gyc|MW>;@u%Rqb}iBSdb_qoe&niQ?}pM02kVzk z|6lo;B}_3=E`_f1zj=ZMj*JL*1n3UuyIA}fAkmWI!2aV}5~HngaY@_Z?5IfpcXfd= zmamyxGcFzP1In^h0qj3*<{9~rkp9)rjjc?%acN+(gG$JOX#7>PlT(CRkDt6>UtlWB zAM?#TOKSJ?54=}3lSn5zWa8vLcDGe&wW-_pEpY!9z;O`;pWR~;Q`y~r9^sQ*l)i1L zn~{Z1DMD?6ZwBl2mhb9lGS`}nEp+qJi%l&L#Nyrj&_;aFNms2*x75<7Kw8g~*dWTs zdErr?)Pc)bc%VJ-&244dl8`|r-o}WWilWj+^Hu`E!L#&?a_;t{DJe6>&wBe3cJD%P zd@D<|gI}qA68|ZZ00|OipnC;);CMH)^&32tXt4EP0JmyKx_aMAaRtkXLCfpYwv3jBPtlJ9v>gWT5~$^$Q0H#08Lw* z|2uG+tV<~@EW~DdP7$s&=6-|vQ~PBSERJ3b1VnC}9DX=$p3wwQXnXqlpw-F&oNotg=XOT!=t79z_bgFIpco=Tci1Dt*8-pr zw0s!#ker;65wC7;GDcFxvr)PlpRZL%q#h3`i29fU4J$NW)svT-lbko4>#%Fw6zAXZFdW+fb2lm=Fc7d?iWdyd%9Hb8IWUD56z$F{ITG4 zz`0#nxoLauvW%|0<+trO4zzslU&0djX!m2@Sv1C0v#RS8qRT%s7q_6B-z+VE@s~!# zluP(}9CSEATSu44Z;qtmY!sYL86qN-YqsI)le)eo6@NN^?p?leY7LmEm5UcTPe|K84en(VfQidjY^p58m=hi zDK#qBUDjRTT1M67zB-NLnRcg}m`fp<_Sxez3trF$5bIugI)b1VwB&+os{tPCSSN#& zSv%)vi$&v6QE46WZHdoSyaEx*}>Tvf|2KPzakS95ETI0GeIS<)WPYy zC3~LPvJb8Tdq&ldC_r@h`2IiG$(#kX@=+r61B6Wg#{y(e;6ZY7V1DV1u;U@K=zqD) z@K|5mh_d~Kq~ZdY2J~?-8AVPbobO?9Ed?Vt&={)RkZ$mwUcMJSmK;nK4(jlrs;0(eV8Tw5c zC{6#{F++s}F2>0>I~hfgVZq!5P=+Un5W&2sP4;3z7IEx_J{d$d$Z`P?#%*xz`Uv^B za04-M`#p`KR{F|DqNALM$GrJs^N}0tnYFuSo8U?!I*c@ z+O5{UZfx0yPEOCR8#Wxb2Ol<`Et#K-Dl2y$J(!uC`vSnqOC zVPR~k;VE>e8lkJ_t>K4atId;*Zv+BMRQP^wzgD0w!%X2Pix4956&DQg+2CZX8@3Z- zSn!76TwoAc1JLWEtVEe1rMu}3}yOM{e+`YW{ zDlB>vxZfpX)49lIve<5hOy;?9lP^=ezP@08q{%2th4Ge$Cnce%21kxHocKxtQk`23Y#yB-kQG7O<;dmeSw@;~!0+`2~BimCB)xQuJ zi4@SLF4c<%R1%*Q+uRICb3rGoHEH4rB3X`h_aP=$J-r z;$EJ8)o@sZ_bp!r1@4?<1re2gj8riA?kD=I!PKDfMBK2U5ky)0pF}{J>)`xLZ7NF? zC_Z)ZUw6Z)CnS=_R(!(0SbnqUp`mF@B>tczhDyT8D*lD}?!E~?=s+%-@uXqx2mmcC zj8V8(5T|Ka1R+ZxkhvqshLimJ@-+lw268Asga9~$$ss&`&{YBc4f)=LK>0yTOFCl6 zkd!fV^8qMIUx1qfTUi(y+T-wvBkmtTav8Lb0PG>Y*f;P&HGjYHF(0DO$o5Z#J`EwY zX11Q$!0CjrGb>oU0%QRcBZOQJDf4Gtl-RCP6sa$U39iqCB#2byg{urCK}N4 zs*$nu?@bOHn+KZ>N}6kb{L9F2Jd*$&}&3B2a@yv<+&6XWqlOooh*2e)m*4+Jc zU(aYG1s;VE-5L!E!#DVITkh~#s=A|QoQk|&2gAD$a*Y0>T4k%D9BK~Qfr1*PB|ZbS7b6h5-g`58GQtR_&)}k% zSb1mcwo_RlmX{SeP9H0$MYLC!j=P0DRwQH0eHK+i;^3;I7U_(y&B~0r{``eYs{fec z@@F4wUzP8gJd@(m$(`@$y+blDdh4b3dp;-#ckY;07fLNyGggq`cwDDHXL>e#g_{K3 zK*)VNKX7er%^DI~!L=8zES`V+4o^Sl=iHjE`cI(Fz|bk8 zZBSu$K8x{D3vA_;0HcH?yEh;%0nierq8}oBo4(4qr*OIu8{Q9=7*H00kdD}!xI@Gg zI6>JvJ0sap$fmdEO)%6o81A6qfrs7*PN%Na4knxe@CF8 zWdBrZ@V-h}1GE>2aW4$3xuDWS&Lu*N1uJdv6oQ=?kJyfuWFQs{<;}eo520kRt1S?y-Tf52H zn|x)3|BGreYZjW)khDghulwT|~!?wnl};P+Ega4lW4lw>2vPf5+vcx1dP z&2ZWA-IV@hkt$mv=s&B3zqVEZXSve*7@;8>d`|?xZL@e`(&(munMHe7hX2j(cG6DL z79&5CcT3o+I-U{F(+P~Mng%Zl9(>KaqQBHCbr6zfnWd`_pBfJ-#wpiTH=e#A&Zf*tbQE^UOP3 zCC>M{m8l19imodu^j=+fqqUCr#bo#(x>EEemC8t;*}nE9xmF(yhuq=2%w;9Y)RIAV z5%+9j`PumCd_45KTRc%cY&S>m57ro^)U0;k9IMGLlH+B(_je=ne~veo*d%ksmmibT zcwUXPxHw$+aed`#1EEZw;*ET|$Yw11r58KaOmrsnGrt0365T)D5Yeusvs%F_rr4_g zli{J*T(eZ^IqCnb(beO_UITOTh|JAfy^ zg$H&)|HG=`Ayfp)Du8uBFhDG^K!p#z2plg&PYh!Y@KKR9FN{e*?{gycg;R>e?Lgt! zRSn)(h1HLgf!Q3e-=I)IeR2{AtbH&e1fb>$NcaIa7j+y(R9|p7ka7n)3oR|JWFSWX zs{vG6z_Nnmb0~9&4^b8;LY9NWQ3zb4Xr(?VmH@Ow!O?=x8z@fDhC;z}QRO6ls|(>& zeHZ7aNEj5{49E@(nn?tKIod>)0tmYoE_cwW!0Dxz^axLq`4czFV_A@EG8Aex*?tFt)9QNde5u>#3`gI_{XQ{9_`_U zUjJoAB|LoQEm09Cl8^>F_mKiAqWT!>dx9a3A{^QN3D>|C9UOXcJ2SZ{RlkbMfE_hVcM9t z$aK-l^dYESWvjr0!vc5Hdc?o}iLUu?w}YqdCpsK6WPbY^%cYTm=^+_0W-k_NrAuFb znD>y5QNkEsK zAZc9*?H&=tYwWua{j3cuVR8!QR8F~Q3`SLitYBzp7nQ9O4pjn}0T3`Y3qoEH&{qPv z4v>SB*)XD&t*u)1H4pI z*b@J2@q=F$$W73cA>s_A^8?iebbfFwL1g^xrE3dxy|{UoXUm{1rh=0K(qiPu1BVyj zcvujCdnV|ZL2v=6hBmNY;q1c)2tNs-&Vng%nyw5B2gem)tkclQk9nK_9d2pjmFUL z9>C&-M%#hU)pKLP5Xq^S&y1xzKp-xyAE<7dDj#I)(K4eQwz8qpS4iad|%%d6E zo6P09`_!C*uJqLI;Fl(I%8fB7Q+-s^0y_d||3Qc>Y3GzXaiHPQrLnPDlKQypx$kxP zvryIvh_{;q0T~{_orNQ=*Df=KQ`1r%?47J0`aG9ohG`5pimkw{z4&j>#G2(2i=-sY zRUAyp&A&dTAVr<|n%VkKXu-PZZ1hRcQ8}XkI;heXev9tz?rqfvW);s>l)TE%PrkZ* z>wcrlxpdx|C9ZYMx((@6yWyASbN8p?X+61iPlRQ9v4nQak||uUcz;T82IuwM;B3uM zbo;uIJ`v1Sl=WymP2J$y+KbIw{cs?Rwohxt^!G z>c5yVapnW+&4tth-c(ZMoklOwC1rEb`PqCijZ-0V%N1x+TG}BABn_{#F|x>V-+TZ4 zbpuv74l`?;8;P+}Uxu+a;&17*VM!kHH}?$fvbsHU-oSX{NT>W)5mOWQkD zu6j}}Wv;gO+U#ZFjEh1N4ld)L+haETkIkx@E5*yqySoV15S5+!^=RhCm$2QU{u2Ma zktGh@z^4HvzS0n+$|?$>fZ#pk20}Xocbhq%ni&L5eX&E+?$_)8ljlO+nuP$JfGz(S zYp5VdY}Q$q>scfp7A$w?pv{MGMhH-95taV!+o=qUGQfC%U9Tr}g0R*F@l`-(U~`=v zQWap5f+U6xfaX9G-?Y3OnH~ued88EsMJcl4f?|aJ;f^Ry$zC=C?#+=E_ zKgtXnFatLegF7Z^PRk8>O0L!5!|9 zbzGPd4{I64%P>zSJBO5IJa+;GC#HPx;xgk_Dm?Tj^`Dw}dRtk7CoXv@Fs6yh@W^P_ z&f|0{U&b8eKEU$icjvseYlKWJu8=Z=H>p_3>$2bkB_PU3kW4ry-afRw1RCujjb(f z@JC@`XmZD=aTznjVS55FhgaSh$lK2DU98GpV9T6Y$TmKf^)^hp07`q^h;NFgo$j72 zXtJg}rQvjXT0MR7%K_NVo23bi8N?YScm`9q`3j1C>xk-nuUz%eIe&#$WB%%*jiF>>l9uOO zL5rfkZE6^~xnAV5@_2?m(&9BC+Rsv1A(!t#eI%Uom{<6}#8F?{_&8?6&JYr5^TNI% z(xvw;3F;xyN1OuY3Rh7fC9UxS$<3S$hu@6bkC-+b^@LgVS(3x4^@&uC&WKO>c~bR8 zTmSubN!xs&n^OI@_g|(O6M0c}_Uae07L)O7R2^ojVz2rJuPjy$y{fiL%CzYm(&1iM z6@y$6fmHv~w08P`i#LEmk({UNe`=dWOS^O0XZWn(+=a2Cz=GTF0WVKTxpeMR6a_qA zP&9Xd(F*Q}5u!;pH5h5)DbGsfm zZxBzw%*KXcI)-STpkT!(CPD|-j?EMR1{z4w0P~>w#O5BwOR#kr$)DKZSzSKNZOBF(cEv)%ThdjkfJ*?!7pO;w`U5fHU+T+*U?Nty1K#BNA^PDo zu$qFUnuo^_;S8dcgtivY6|112T&VCL-4|3~y@V{8!Gs18bbuiltk&S&AZ>@laTI`O#S9S<i~edDSk5~}PxlCnQKyw|lBiPm5^_-f?&dMqv#dvE@UQk#XL(bsO zdCFR(<@U>&3x<}{%d;zESQV9yM`?G*$`Wt6`27=G1~O++7?a!LHjA;bnEu@d0lMA* z2_@3YC><^JL8p}a_1)^}qoOE|SdOYz673()ju;KFCY8|Mk!YVkXd3mNB3U(&(K*ZP zH54xhJr|e*{A@S_FVJ!I69!FhMU1AYZS2ZH)pdMJsd$rJVLirZS0!0p;w{y?N)ri-`%LZEP^P`6HuhxpGGLM;r^h0!~W)N%$`dosH-~AI3jMbh>Zmx z?+B&>IzX^>IzK-LdIti-gMJ^N1lWzynU2-_?r}nST5Jo&fD}jQT%FS{p*2OQfk?On zI5~kc+Bc|Jors?@tfeiN3p1hkL3asCmF={=vv2`8tuT`f0bL$wC4$;%|Ni*_aI)?# zBh7&OHc+HQAuq1lpszIy9%1Ah3jH6VWxo zh=_O(fSW&@H?SD61ZF)lS^_f{@KpqF0nY#soPkrjq@*M)KH%IVbr9Cyh}9HWw!=*X zD>r2Q2T(1@m=WC!NGo9rf)E>_^@U>XG}Dp;peJk#-c9R}V>^kUCeHm8`wlaJ8{CH80LXhC{}u;}^!1=s0y7H270)>&`Y+ z(-%y>3mQX>KiTp(Js*;U@C|wWa_u`!RU#SN6yZlyTQZ>9BEtFAwsOAcS7+Db(p5E< zedNDtnF6!NK;O(U*I8}riDT58i8m1mbS6F*5mZ!s0kaE_1#~quSY=y7&I0UuTHGYG zU=u=(LyUt}SP}NB_%*uT#|AJZs6|8z+uOvU5&l;Nx8{an?S;u3@MLH9iK49mrAe*x zvcTne-p-+k>ug0yenWA_dNw_J=#_E;!XIN3?H$LMwXVAG-4(5Nyb*uP^%`H_{Q8UG zv*YyO{MX)Ox?8>(^QlAF>jhC9SG?~uMf=kZhIjuBY8hgQzx{4*zyCmuv?|n;-#>^mye0==!5&SAE_=%UsP3SIjN$Il)rt{=waJ|(!b5~@FADW|gBrv#bL2b!7) zR8=xK%oYW4k@N6CnS7&N?{)UOn1Tcnx%!K~B%ThnCZsp) z8(dT+iDw#>r;^7K9kL)Wdw603TkeqtUP1!Fr6Ll(f>v{~xcv+zNFr z$i@!4Kj>8-?)~Y9M;lNXP*?)-1MJuAU0nYBC{R4xj*>;31c5t}28}ArpO9Gwiv?&- zLy?U=mFLd1UaFrEHYhN+o(tiH;Hh+{ADH5Nu9=YWFIT zgVLU)va~7KTN5|L#?qKF@|i)Ka|Ope(%LZ!e;W7x9`A;Y0+!0Qf6JA$a+pID3^J`;R*e6t%tGf5Ac}_Doi=vdDmSuRbol^Pgrm5NewLJOKKcOsU zz=6j{wDYj|LB^xm)EFfimx3l6jNC^*Jo^O8{|w!29$T`uxqbiHd(uTPRgh_*p?u$i zD@gR@#gB9Vq_om!sV;xk#2og#s{O6QFhy8E%ks~9dY{#+=|#S77U`k65>_&DKMgQcmb@Xw$3u74H2 zfQDIK(lq1``IR!SrwY-tn4qLF`e>VQ-U5T#%*Dn`F~}zolm*UYxmoj9pgjJnw8n;6 zlT})JiZjY}x=Edxcoym}V5(+5b60*(Ou*T4e;*8cc6i>cI*%nhL^T6C9%x^YOi*A7j<yk;4A6qc@_H}#eX*6MH>>`ZzN zK$%D?c7QI|ni>o7m4`tYG^Kk*Oy|*knF48`*9J5d(Vu|<_StI11rH#rh`a{Y8i;e3 zzbQ~#z|!%{@o`)hD@=OVNkZaE5#iWq*2mtmhX zpD7vD=T&*gPUMX{1T*4AP$O#ahtE?|ELEbSU}rn`r$a(mco?xT2IbKDH+=X22;R!; zonOOSCv^iA$y}Q+cxZr@P;3WsQgw|-JV2>~{wl>>FZqYPl#G~)?I_RJujdbK-m~7~ zikfVax}AFG{_{Mr?Ti2W!r^Hs3OEg72N?hToUKJUd0PfCQkLdO!iskz zcIm^)Nu7EfalxmPhSgeqBF-2^_N@%Pa=3v4(aw@mZ#6!Y=IX8<)8JWdJJ zzP)t&AO>qU?9hmpb3->KqmO#}wK&Qby6z4;37R@FvMtyRXpi_j${H*o8T^Fp5m-fH z$XRY zESRKOlrJ&(rf2!-Mr{`SS@pw+wN@hM)I2SdlGJio(#0huJF%G<7u!ymK;r)THOHsg z>cJ5`U4TfhNx_1L*m{aen1E5b%;e;8N99#fwmAz)(j8$}k*n0FM!OWpGIbKHG~ImwC;OaS01I z2WDP0r#$d5>|09Jj3MtV?O9TOrS>bs=1z@M!~0SNHFPdH3uausPinE4e8l;3OnBrg zo-Zkt^_Ynw_ma^Cv;I-Ot|_Z4zYe}v%Hp?4UoUAF_E4y&JecnN^+M)b_KRTHQ9j#P zsgh!nTlaYU=i3WUkaz3_&s<(=mb`!8+0}&wJq=>9oYWn5mnQ;#0Dca3C;O*NHem<^8|9luJ}ur9Kc@K`sRsBV^Qp3>^uP7#|;RgV%%HV?hat=oc?& z!rLvuaWCI0?%EQ2wnhBswH?%-A7e^_Av7#TzxGxgGw#dCT%eXD3H=dbgf2ZA2k=9hd-azCu*XGkfEv z_wF6f~f$$&wJ^Mf=x__Ud2XSHlhv zx;?+Sk6&z8?DoVKG0fh^-W3*E40}4ili#?E`u+RX4PogBubT;-5m#PO4Lxu6r#jE% zFXX1~XemD*|M+GUoE&}-V_{d!s|N2`!^Fo-dQJI5-S`fAi36>Hfx(BGn%I+i$+Les zwSuzZQQL_OiB-4Xs-KMow}dwQ!`eTT;p)BYW=QHSJQ6G^>@dWPGECIG&`fz=6v?OY zDeg3Ou|e(mvQV^s>Vy3uceZ<;rg7X_#A`ZzMH5OG`C;VCr&(CaSwn47{={jCJv&Wf3{?$~j;zBgk%Tbc`8c6V{Q zEK=A-yirsyLIm0R<0W-E9jVs-KAwp^x7x7Aqg|O)niI42GVR`&AoE$`5LKbgxuglE$=D+PflG)kxaZ$(4UGMp7y3&+eVf9{9n{5eCgROsce2 zxc91~cc7L7r;UXeC;#>9D*~-&Lf|8p{&5oW7y}@6xDHlAaASZr0#Wy6%LLLw&y4ie zaBz^R+c&55T`WLIb8p||Du5meddTgMdFS}9Ehn51!U~oN_^A74W?kS{1o=enCsmgI zW|Nt#*;Ul!C^6){Ak8~65(F&J&9p({5`bWM z%KFJ_>_3Kw!{9*$pbuHm0s-h4GG6t;QhKWK324LU0my^h8YpyCVA=*BO!)MZwK!9> zI1!pGD5KhIBlbNYeiB-T`{w3A>v&C34>{(P5bGKaupxN4AchZM!3XZ2DA05$0VWQg zuN#DZ!!>LbwQY8-(%Wr^d^WVaog5{hj8=%_(#Q&u`P_w?j{2yRHZ}7%(}y0&NdnJ#9tuaQKYTD_|@qT(Kk5mro1d*ZL5ffYC-MO&v3AB z;{H7l*rCpMa239|V7efYJw3{sZ=VTDu4aB1Ur^5x$|kUHX>LaqtEmCs(Kd_4CQ~ER z&k=jeZoB74?gy)=yZ8EUs&=>VpDi5)hy05y&R*S-6*(r&o6hjixok()ZJ$J9hlWb5 z{W;S=<#a(-#oJr^JC%&GKCq@?2S5_@jCJsLta#7~lf+@QD>LQw?%g3$9dO&3 z-y4wW9F)Bk`A2CY17C$SNrKURE7<)a!_zNFK_n;!^8r7GFMs=ZGmgG-v6{!wt_Ml) z*&Y11FG`)nx9DDe_$Iaz!-_TNIP*w6HTc=6u0Hv7fs%2T(fV()eI?hzu_&7JKYr)K z5mi#i2_9OjjJBrERhObGCA`CJ!Jbm9@a|?)Oa0g_76Y1Vcbp8(%r*G;lIMZ$jM3on z?V-rn;ixtX>JGV&lvyL8ZH}mY2qD{f=n37y(2Q32yqE!RXh{0jw7sn0*!2kRA!33i zgJa*E{g1vIUBniYp>n>;tY65z!aJX-s+DgQ z_8>g!qjrMh>%Zvav@~DhA6is%eC#feh>BK{q4GpM?s%%jnI?K+VHWpu=8NE2qmMM? zZ2X>O2KWOV1)GQ86UKvs(}|J){Ep90K2lmcc_ta&>yw+%<3kIHQo`-AQ)t(g`VxT# zNi-3~4$u{L?(d5LacFRCEDG?Vs4ca9G z2R&xm1Xjwpg4R|h#MBaLrh!*iR9bqqKo19+XgE$?AWL_Lofxc}SaNjO(lzD|#>~5c z-~97Ih+~x-Csv~L-*xDj;XLt(1o)E}$hyy3|wX=v0AJF?~EzU5& zBEXX!v2D+&dw3n*T>H=vsZ}L4_?*ET$A*Nhnwm(^yEL6{Hu?Z@Kc5>9xJ{r*PC#xl zDPL0XLIM;W8<>*22H$p=KU2?I;z=#~IuE2DHr1QXy!aIF>D=?po1g3teZ)0`5!RNP zB8SxY1xu#xBTEGyl;ws!)AeFo4=Tn+<*vdl+(MtWjpk@PbfrN-Q@cNVA8#vIHOk|m zHpvR#dp63jb8M20=zYiTXS0>aOwQ-N9yiw=eELMb@cJtm88K3~{yT%o$<-dYxx`i0K^n-^Ge9Rtl*x2Te#y`0=~$^r6qC_^eq*;)Yd+mJ#jdytk5c) zaDD6l{)Gu=c6NARRyFwC8gsAbRO<^STV7I+vC0E0G!LB_{@Jc~_`TKwsRNVToRP!d zmrfM=7Tx;hbdClnZpu(i?*82Sw*=n^P9EYlmfV-QVWTEeRH9l9q+OC~4^uuAx5i;9 z)p|x_X|-sRTkhzHVopRu*s-{Bq@>%r5@(!okh1mhQD`HP_$WUieOwIZp+#i1zNI zlMrOFpwFJT`Z{}0?U&nb`awT0^Xl`dYLo6Y`HHm$%jhFN-h!vx z`IY}d4l9#ofb@qneXg9_HKp{lQn%D#5kmpH$1or1{CkE1M@4 zy`Nt8$46!SeR>gsr{!yqU;c$FFZVP2L_>903GRDssTS7L+`HGf`?W4uAZhG?;OAtL zD%OoAq55&Iyn?lxLND+WnPd||@@wJZLb&5Y4-R`OpwLGTZ7X)pf5!tw3;qb0;th_E zM+2uFT$HSBY_34=riv7!DscUPPaa}%BN{fc@bASXn?o6c-+*!l)=p3%p;X2K&uA8` z;vvrp$u0zb6HwLxfkt>&YXS985Cug+UTH~8Nj=n{+uPvJU(S`BS(WkW;kL!lTjxiCf#d2jXbAtrRp@B_-I z5}axjD8|r1DANfrAW2-O8!&X&e^+0H*&j(vK;Awq#|kSeN#Iw&y6nhsT4#cx%WpWb zSm6$)o_^cow)IJRmX<5}{MoN0%&!iwpvWoTx|W|lx2nh#F%65di8Jc(HY~5Mn>bs) z?}@X9-f~!EbMrP~-LnmHp~Xv2{r{c57Ur7n1-*IAFrl~+3msW#l=VUJCKb411V4WX zcr_KQxF{(qZe|`vT@k;~_`XIuL1I=x^%IP?-{C9k|CkCyO-*696dJ2bRn4X?vr!JJ zWe;=IPjb+#I1uakyetct>* zf7DZ2;m*T?u?1Uv@`-Q1Gf6XwGoO{OQHEZ}h8i{OCtRhbp$ym1@#Tk$B>W zef=le&LZVRQqb+HsTTf=oV`zC^4|!0vx*g|lxP^I%Zo$rb72{;8H=)6p$G&AlAdUq z$hYoQX7)bB#}H}NDMBUV-6|i{j+S40wNis>Kh_TIE}BsBc)sRfOFUVqDoa79XBja@ z&c8iVb{Z4SS#~q61U(?Q>-nIWtcWbDo;=qkd@fH(zi0f8tGo>WwHfBhQE zhBpgCaYkllipFcO&5VGqw`r$~4kkMIW8Gt|7v53_BX=lcq`_tbj3k)g90GB#->4Rz zYI~7bHTI`^+@IcGLD9cFcr&)viR@2*{fdFlXCAz2;8kEHsQ@`ZNX3Fd&*JgpQM}8` zFINS?ip;4GJp{BMnkc;o50EGl<5mJ9q6IjPb>3@~Eqggzvxqr0kee#O%K(sWP4eA~ z(=8Y`p$%k2kw?gf`irE;+sel6k|?sVp{km9U(E0S81uF^MU(dD)6V-F@Uq)l1<&H~ zA`f1rQ!%&EfS1O%VQ<=m4~sQARAV#sUryt`C=#~te?797Bqg07xQ%klOO8~IIYsBV zU?LHagq(Id51Gv5 zEi%)Z9dsy+F;bAMTyL5j9>MU5F{af^nv^ZQP!P4XDIRheh>CW2WCwM`GwddTMr>1fW z3iByZ0jbkmy9Elu*Xu&}r@5l5hi>S@m!!!e_%TTJ(# zEzKzFr4DcS^Lt45y|g2<&N((^Kj_%2_kA_=BlnY(pmXR;{bX7RNnh=RRF_x0(%&~| z%N|E=RQJc|=8Qz775?~GBvzNB>%?_ohbuI@Zn%)G!-6^@TuzHnOWbq5yJ%_9=8Yfi z{WHR`z-B_lhEcTb*YYh}>)PiJGX3690BAyLA6nZRSLV6;{ zKBrtHN^obOkMzp*?>iRps0He-;BbbHX%`GLEC$arDd=E+IwmAB$&`!S7DpxCr7wIg zXNgCil&ah?d_L91h+4@~`FGbnVCdan&bLlU_au~<`As9gcnuj{K9a8=WO_*KOz>glRuD}3VOG)Wenqht2*3wQxWdXV^ zEw(=Sc3moqOde6?ef)-U(08%Mefo_L%5q>>%fT%Oi?JJ0Qt`kfdv*I-S$R2dFsb2> z!o%e4?G2AEBIJ`fp2dLY7Q*>Zu=KBk;2D@4kak5_7~|eO=s*Bg0ESuFUi!0VaGg?S z6|<1WSOf-6rDOh?yL?kzybZS|VOB9Rq`>?Rwn6QX{TB`i7s~;OE_OG%0N!A@rd!C4 zrv?WI7I@oxd6)E%wF&av@m+ei(?e&?ed?rcXh%@g=pg`nOae+3ql6A8C$R(_dKX~F z0l=@wP714yx8&e37d?ON;;h%c!FoD?zTn-vlO`;b{{~0-)XCZB;37wqze$bWkg;9Z z=OP~u(xcHV;w~O_t^V}2^UzTeH@uf0J5um@22FP)?#$8y{*=D!Dq0xKsha`j;)}awa}Z7W;+X~2 zT4!_AiJ%vgxUPjUk#VBQvF@r7dok(kM6*JR&&5moj{bXC*j$8vYj~eN#|_o>^~a4= z^^=;?NqFv(Lb&4XtfJ*PWJqqiNa{!3O}x@TL2AG@r{C#0?4eW;O7nS&HPU;klT1@T zp8SfHY?`yyV1XPC)z$XBDd%_(U9rtdoi&%A6QpDk6A8g@^og_k=XsL^?Ve#f20Tx} zj<-i;cQ0EWe{3EEvwTHNxzj`yG(CGv0wKz`Jx|Tvko*lzl3#crbsN=e?%R5Qtd!fL zL3j#_OV7cN*wm2TTkLyZH->O03NPN4wU9za_Zs8%2Oo-W-O>GVG3#A~8NrR8eZ-;+~5Tx%&d=$?a%xDx1HusyMIb|!$!-RM9anu6@?4(NKI zMMk7EQac@FNJs;q&IsrRgl%9iBOn?~3Sl^i5@d@dGop$e@a*j2dwBJ? zXOnBR_d<7Lv+Iu|$_5=0Hnc@Q?3Co>9$7WCHcIB-(o4^{D>>?DzP>(c4ewCI&Kc&g zWQXgu5_e_Z(5w1MoX0+DPAs!e()6iC+m{c&N}4RN8tgfl9F7?)frR^0xS zwKJ>0PDhg3J4NhMn~w=mM(na2)KkAT*puGsg^b=ZydT^}?PX?{c0Wq(m1hyRTV8egP};d69Bs#3yv`S&kd_1mvm`1Y?YHpLc>%j@y#o;&S?jx)teLbv_gv%=jh zXmm&N_mHKUSo1fZN0^Lg^6Y*Idk%?$YsBR^R(Q0r8Hd6Q*e(mPWLG}%F5F*eaF)jl zYuB81!WNWjosd@Sdu^?;oTt#d@|<$Z8THs0m%~J_eWJ^qH(PVNTxU{}J^TP*rbRALynOknZkoPyvw^ zB&9^@21NmB1*whF-JrC97_?FXf^yhxsa&nB2=r^f&4wk_ZPiN!Ejdna&iwBwD=WssKH~PX+{#oV6J7Y&y)5=_*m-%1*9ecRu>* zbsl^TFKblhtDcDIprz3~$}a8=gJMly`s-b+4|3-#lO{q|Tz?KFNop(3yjVXCkl&WR z_C9xZP>djQjffvLj@{0$$3V+nLnLqf2BrYzg?wcSRSNjpCy=p`=WwF0tv4T7q2N$i zq~A@W4tjE3=L*W8+%zzY58us)gi^2dN57vH*Vx;!8nf(KYbW(Yelc`Hs!54Y zFGsH}{E}0dau)Qio(!Rk?Np-i6=V^PB2mf57M@z8n+%dIkw5>~ZIvb`LiJkl+pUGE z)&4E*;#uK>vNE&Q3yH=>_Me8w{AI-`l152bbqAG>M<1$@#io^+DPR2QaF;65Wiss1 zGgJd{x3`;}bX5ngf95!kt=Sjti`M4hzAm5cr8=pI=rOVHb{uWikcYCvG{8|)>Rz&{ zcOXs6VPw2^FD-XiVyK=EONU%DO`LV_gBttsP|d&}Q72aDD0ve{@7^LXMpe=B(CYe+ zaL0pUWhMr0wpE6VY|Y?k9=f-=e7JdQxjpu7r=7$^mdzw6J^=w`GbilqW0@g6E7IoK zcz>*1R+o4qi1gOZEA%-}O~}Jw04-2(J!P zZ2mg|==#X#BLqOQ(sNk{Fm#SoO(XyfTnnI~M}pbFsxb_xKE#_Dc?5cRAf634<%*Cm z2(lRj1Od1YvA)zV=RhE41+_;YjHO^~f!kKa#ijJl0OT{-lMeumiL~D&^rt=1qryW5 z4;2n$3yTiXphKwD*|aR z0Cy=|rgVo?yaVBlIf;Gzk)?`PN*sJU303IBGnZq`CceK9OV=QN?qyXeH2kK^vn(37 z!R)6b=kx=gGa*qPY2ttsb=pKhZHaQht4t%S#onHjIuS0m*|}r-WBKIR*`s&<(u%L4 zeM%c$EjnmFS(HJ1I6l_swU(x)p9LZt8z)hUIi@NluZ-KpTm)BrEOx4j$6lHEcGdG{ zw~0AZ)W)q|$a`TIk)Av(5jV7N>xCN5%neHzd>Ay7_Df!t=+n&+(;=q%SLjg7TE2VM z44x6Fm^C6uGIcJOsdN^=C!cyT5o+4`)RZ*=lBfcnX_I6--qx6*8@GgR#i-R|c@$EjoYeSPV30|II8 z%O5kL$RKw=IOoyFD^dlYJ_(eo%RXP)XG`x|?F@?|c2ZzqZ;|`z^;uD$3T{ONS4L_v zKx!GH!VwIid;nQn2L`f$a7qRIhjeyGLA#Sv8>CJK?!LD&VLwh!OH0rxhNkprF!{VH zENu5a;Y!wkzd&S)a7G}1LB%xAz~4Z&hU8oT5mNc_V+h~}fINd)s&#!Ik`m!RfNtmO zcYTh)R{{qiT?HhfFzRmnd0&oTU@#8DM;n`%D1nyg0;`@|<*@ zmQ>sxJ@dB`ze8FYJ;e}yLz}eyoVMUeeG~1_E@)wExw*K|=NJDgXbYI|WbX1l88HKUxnNFO^FSIHibs^=J_h8v!R78;~V-KjT-T@&HqSvi-N_t1sH1Z+cAsa~SL26nu1|E)aO z+t2oFL|N0gosI7PY~!R%`nz1R*n0XTH@xcx*81uC{QUeTYA%`ENUwkMY3Cq@C6_uz zT+*-K@Vp9%Ov$&w=aDP*}=R+T0$ zu!|<2uT{N&ANTgw-O_wp+n~dKBe{Dpudq!hQ?JSEdj6n0>>GaW6b$ z5>C|=o4%bh*`{uiJ{L0PA{nekbua6OMT9I=h5qB6bc964jrH#&kEBEt^DEi<5+oPL z!fYIm!*V&L^0*)L_YFl5JfW=GQ)Sr*UdS9iR(_yGj<9WpXDSpQP1;-|87;&BWXF{#gy5Q>w(* zwJb0GaXriACVUepK!Mq)58f}LN{F#)2ursLAZ`xC+;J=&o)`|!zFt$%TuuwN0i7wi zn7ZOFCw`UT5EK z(p&`TCS;QF!iN+VaN%@9DCGvEyUs&o1b5)kw_IEJ5aUW))rkO*OGX-5`r?6BS``A9 zKu1RNo$gFl&%`7Wsgn8j`WAj088SwQ#ASVe*jw{DH>~x>Z4!j6g0e>xXu=Q{2tGj1 z$SAxVeuUq=e}6+Hy$ynn^!4@UL+LM}Oa&cr(Xp?SXmC=PoPG~pT2{N+J8Bv+mYy^{ zrpddmG?k_@_ulyXo2uOs&4G&)`uTEJCHVv&CEZFrxxa|2Vuc7v%%;jmjGadR!67A$ z7p1X8iCr?E5(yO8$)FY)3_AST)@C;_*K{r?D=W)FR(AEPtnrvna9LL_p%GnR1WS2`fpMCMq7yZx_O`XnE-z$lVMFSID$EHvfkzLru0J6GU2#T6Mhh6u5y%&= zc)vi1RD~SaSb$*{z&j`XtB#oz0+|No z_L<-SBf1HQh_wM(79x894o07kiY6;#@dK(~&~(*M6GXQ($d-u6k-*Im3Kntv_2zSV z`03ez%q|-!je#s@m3+Mx*eVfwExaiR9*%Sh!uLnDL^aB?SgLHZ>ha`AMDopTa}eO}J|+oG%Bf}4_+0E3~>C|CYZXZ`BmFV#=dwU~?7Jx;mC2FfIS8LK`I z*2L{?Y#7sRxb`2TXZ3b`tiN)SUV{UUFToa`JB1u(CO7d_6YQ>QxaDcNgK{jm9=Ek0 zRk*7sqIkRNj5bew2Go;sBuOn;>Q2lprP7x_a$PMFYxyA}(^s-yo!3(dxpV(oblp>=dns`|5lHh4hYye1)mX59zzEZdduWa; zMD$skb&ev;jpIe~umcC##ihf10&+g)<*M5I9p3tt>a9P^?Jv!!ozNS(ThZHa3EOk8y<$&eKLU$$rmhrUV#Sq< zKi3bni#_N#<<^UO?4~3e5Y#!y_GzJ%(M8gI7R-@$(Iapfm$!lq3-VP z*i&$ka{j|?%3QvUYh4n~PmA|e(zV}6PXWqlk%kk{=>gLF5m$`Bm+Ki@Mb7S4(?Tm` z5+k@Tss-k3uye%$YanD+^PkQJ+55l;W(!8tZj1*460c3wB2zQ8svro$@&0-jq+or9 z1mZ;q5b;hrM+|XuVD0=zGh$EDGj07p3{+qH#UW(g^~Rj#A+vfo*C2<& z!L=;MB9BP6$3NmJ0~&87nd?S$dbpko>2jJ_O>(8qeDm3R&TDU&DLXICu#eD zGOe03<~*m=MN#GsDzt5RS!*iHh7J>LgeIWGLMbca4gV62r(x5W`TkloRqIr%P=?da zB_lw|lJ`_uvT%=^vDM#s{BiQFg{K%?dLgO!x5EBH^(s6bZCSNa4o;7ooII@_CGqM-T{*phrPOuPulijH~Q5el_W2Ne2TY0i=W-WVwxhxF1h_)f}?c{(~!WAsC3H zeYdz~e3zL)UU*9Td9S)WACxY@qabn?89f*TA zFc#RZ8FeqSug@2fdSsC&+t=fx@u$R4?;fX7x9<(ykDB5BwF?(Uc~zVn+BwO_G|Oe8 z7!t;Hry@u?=~lDV7Q-NDuzC1?-a^8W*j;O~2ZGpoQ6Y{(+=&Elw2xA34vSD>vTJYG zy=7k?)HlvVenFd)xik;^Bn%dbKhVF_{(-IQdOsr;=XQaw>O>0p^v#Mz(ZEL<&d>Nl zL$wlaobs>oFV|GL)2qEm@cy-k{+uk9XDBc~g6Z?wG!mWfuxbin!>@Q(eDQjX>kTVc zQLqzL=#f>Mv7@IJs|^XoFW=TK!k>GF?uY^9!^t;=Q%bP9KZEGKIcRqKg5YQf34oke zM7IQCW#mv7ib8|9C=V91PC6uD3Aw;Py|_7U7oT5T%)2cQDVuE&JO)$^3w>5+65xGsgH|k%FXc5{*RXT@^Zl**^vHB$o`K~F ze>Vlg=G76-c-d!2UTg>a3?L-8zkED`cXTImB6;n|EM8zJpyU*5WEDW|+I%XB{BEkt z1Bk&cXyuhGE3c-qZHXc*ZY{u;b^L_>uq;~9+}rf86kqW{L)@a1+~-I0xiUJwiPber zK{$zT*j9h`4yHO?Y1oSx6BWTiHwMwv58~y2Ac%nbk|odw3yqW1wTq34zo?u>)&c{q z&YT=%xXa4^qvTmUmL-!sLTj?*^4{C_$tM=q`BmTO>0^>aSKw)`BGDX1nebL`NwcV1 zx1OI*&flKyv5Ap}rB)Rnbr@mMwg#LB<<^#JB8CZ>Z^}||%8u$JxhzyC*28&}Et+l9hO*M;vF?4O9>Tidnm#gC3gPyfgr ze$uakbw$LkYvX`v>vs)fXXTo<(7QZ4+)`s>zfyxWw@Cg2&-S%D0;zd)ha{9H8rS{` z-)2u>zCD<2`ghtDIzIw+1oM6h;5pwJBkUYT*!$_bfc5rP;w6yOWp z1gFe@ixw1ErDjRHV?(ZG%QszxSWx7~v2hi&@Y~ zSI`_>p$8Bq184A3=~X0y0z?ZJ0ZHSdA_Q558hGZA()pN_IdUcbP&llwXYL~jN>4s- zGb7(089|n}k&l4itlP>6H!OyKL6;ln^l#IbbBG~0=5?zoR^{Aa=%&-6gZ>*wmsC?N z0lR{Op{FtB7gyxog(ifyo_UI6of3=XvnK6}lnQg{53Y92#+C&=pVpF2@D^^KNj_&` zxkPJ;VpGhFp2q5JTl_3G*tjGsOLO_4pm=;XP-h=}>prLr0;-H}-m&imSXgo|F5Sxx znO5|4sp|2xu&i$M*O1+ksl(q93JxxzOdwlJqWXo~$W>t>=}x}p|1D9C&CQp*$LZQ| z&lFdr_XLZH?u)i*45qz2ltQIRoPX`H=9M|e=Oq{SM|mY`zD@}~X4G}*<(Sz}rJ!b0 zF-VIFDj3?7l#Vvgc#2|I%nM9-m1zGrCEjAPJ#IjhR!;@PP+0Zk!=6B?&Aod`eqHmw zZBPZh9d!Q5W^r~J8&lP?)o-!wFwAPkdc|BrSf$LLEDQL9QXeECLV;hV?}F_<)tV?j@IX$B2o7AK9gZ$P*ih& z97PtS3P>kHK-Y%HYs%19UE+`nClba#gfoVu{ae&-FnJ>42SBwdvC&YOmU(v$JY&eL zfLKEjD|oR^HZuFd+LTw_35N>76p%aD>af?S;$HvDuRHkB^bW23MUcx70r8a-y7GsG z*|f+d4?h|xMW7r&6!$ByhQ%}VcT>JI7gG)gItV+mTS((Q*G#!>le223Z2+q(UzBeC z)$65J+Kyx1J0i*YAE-uFBTGISn$xl6UK}%(e|WndHO_6`ICgysE<~Fzh~SFC!g+|_`~=)@6MW_-9XXYFMeYFPuwUWrv|nC^0V3-AKLm`L7uLb zlOH)Zh-GOtM0-5`vA0VRA6`q^8KmIuwmXqZmug&nnr|OkGgPpLU4f zJpLpZ%l#npUqido0NtZwFE0El@-KVQ21AB5I{VDbTDxZa9}kzWZ3^b%9mN(4i-AWk z@zhEnwO4sDX|0aA$dOGY=}fWf9WlktanF!9&&rk;jidC4rskvsg#RRN*5RPoeF|A58DojN57H#{^ z>U*IqgANf9sa9dd82%YN}U`uQq!* zafHIWuZ<;6_O!Ym2c67os{B85~t1fDFiE@sZ2yuL-65NcZ)fygUiXECn#a1ii1 zhvo)EH3^CocuD7>_`w(|Fz=R`N3!7~!T>ruJrJ9Lwrml8iH?B*Dda*h1wdh~eSGMG z4%%4Zv@w8`XCj3cXjp^^Mt}*h3=VcVl3sHZ;T~>}q88lP4?5pRcsG!*4G#~CcU|4d z&~l`XmFL$>pGYd%3tSbM=jTn47jyZz$Cx*eEJGG*F;|j zrNfe}ah=f%3dNlp58GbEU*lM2enn`hJM)NELz~NP#8p3$%9qXIeyUHiz5upmI@{jP zuRSaj^&3NJf6I%siGx!EtHQ^6{P4$jvD7=oR59kxBP0Hdislb8YGZ1T@v&V9@Mffx z$c)L+JB^E6QW06G-U6(OWgf##X@~Yk{Y17970Q!(Hg^=Q8sF_4k6_ut0vVpiI#b*c zUD3*P*infGrmFm;d{@>Y#h&?vjC9=X1i8+0XHF%0vDjpwj!-`y*qb8 zAzEf05dlK4R~T$3kjS>!v_I1Z#}vlJ3J;7XBAn;d&1nbgnHxmUK+2h2|I4cg?gND+ zq00Fisu^qfXmd`KqM2DHuc%xvS-&5OZ0;m9dXF_#GyiWuD#!PHgT zzGYv<#+$wP`=SaKPX9`Rv^K6*QYmgd5t=*OR~l`mh53%=LL*AC#Z}(WdNXov?YaCG1& zeN7$f^Xrpc`pD1s?b1-S2d5sz#0XE>mc{ZX*`=Z<$4!#l4%f_$=X$4f7;~p){fP4Ty%jkO^NzL5 z$hwbTeD)*{W6pH<^SQ?LX)d5I_qd=d&hFs1c!*8JONYJ+_eC~I5)#`V?^u>-^}2T_ zAVPg8Px|)9ZF^0s3iLNTWGg`-5o9NS?<=%H!RW>!>p5M#!kP5D_wUzz=RIf9SV(db6QqM6rVnQLLAv8 z#+BFr$s<;6fIpF0tr6OA4}Pu(h9k=CvN96TqaLiEpSk{b<}VM*K8It>Npu652qA#_ zlKiK(=hpdgcJYHWxifY8pTnqEbA;mk>hH$PL_Y`?Bx^dhj}lbo60)A{XcjbI-CYV? z+0}%7!dG|iUq1y?cQ+0|H(=Jf|Kpgx#qZotmdyNldo)T`_80d_)_-qkZntUQ*Uib! za=;sD?8$rmar7xdJf2s6wTsAJj3Q$DLSUg0g|nhJttiv}$?5hmCbWNDb*w>B4^!VL zKf)p+{=ARmL!`JlX5*=b+1H!n_aYgjS41`FOh^3%$-6>) z*ol6PHv?#5Z!@x6zoyGg*P$ls7xpyW9VF7^hm4NJLD*6&AxQ_YKjbg~{Lx&#YG!7( zX%w_;1mPEoASK;8ltp*ffFcl?=Mdc|0yO&jGlA_6$dxukMGYf9oN0Jik*5=ZWFTL4 zcy#mv3L(_tzlZbc4)!2$_|HRV<$nhZ!YC1u08*)e7<&+Q2vPI>Z>4_sP5=o+MKGGc zjpwXjWM+hGH8+!4PL_rc!X^wBO!%Xg5}NDBo(-QHINjt^EGW^YU>G7l6j@%iHfpMB z$2L(8PGS2}NmH~a!d@8ufB1{oMv%IX&$N`I+GIsDmMHGVMuy!%{WN6wFJg)7j!6W{ z@B0|fP39%DNcrE0Pd@VaCc-}D6%~=XwCnr~r4fgX(Z{MwuXIY*55uG{RSAhk`!6pK z-n;%;Nvo?!`0(Ca!EGhTN5e?8UDRX0fOa=-l_Y8y;h=9 zkywf^cDPDY!}KTYr9^Lk=)RzDvYBz|S;|ZO6JP3^QUTRxo^IuPh0KvH!GD~| zeCsJA|4wH88YV4V^EqV7`kUVVf$6x4wD;(e0J(HU73KOvyS0|w2Z3coU0V4Yw-@@cfPculYe)Dvj^?#;h1)i^E1m@(Twa#2#Y^El+-EA;=5N`uXoaP$K7T zeX<&ML%|PYZBdSKxA7AK%M<9}yNh3@jFkB};_wO`PF-(K0xoa_n(j>%WR=EiM*t7l zYi(?8IWY8QAasVPBs(BG^fZz5L_|yi>;{6GAh!*GG3}JPvcW(M!p9=C)>w=8*=(ub6$5mG! zeI?$w${PRMZq_}nTHK0u#NC&ael04uk07YNGilY)cUDL|7&&vnv?#HIepNtGXg1?x zngKxhOtzsm5*`Co3+$)r3qd(04vp$#i#94W{JGva(R$vAFS6dGWTu@2CUvJYJ0xPt z+|J1>Gf9ec$GR6q5}!@CEaejAmbV*YFyB`c;6u-JBE=#8VMMr4RK?bb(v%`~`C+Zi-U~F2vpHXBzC=5LtZL{- zEyL{g8v}GHUJv5b;(@{*;*lz>y!_0s;EV0Q^Rg7d(_C;&`qAXlmDp-!fbz0 zz4TEj!B8VOEK3~2&*78pd+t#gvBp^B?1jT%)mxXlB1Uw3m_w6KmHlX<9utr*d)}EL zQHgb)?M#7-71i-dju)TGPzZO<^TxYEv6xpz?T<$^Ift+`ZQjOYCG0IcBNgdpGr;4C z%bKGr@c+9d(I(dZ7U4j49?;oU6uu*bc#yWV{>;k9{eSQQ#ML8c0;}UP`ye6%lzJ4$qy9u&WgrEaD4zYAV$~xk(vbAj`L=lE! z1B|k^3;HEQ$_W*6h#X^cLG|xcEh#h)Bl63jAO%<{Q7DiQ`TVWyDyg#uF%yX75#I^S zZxBl4H0zGw)FM`&V;~<42_8g#4Pj-5hQ!`8^ARhFq(g(rVy^vV()dI0Y7Ls{=S0oM z@(|gKPZ~D-x^}ZQoqXr*w^tET!6XLj%mRaDKUEH^%mcH6mYr-(88@%KJMk*>8$ZfS zKNag=gLgEDsS$-*k<-zo@tu}3f9{au)9dRabgzy@3xS#AkI`C6SHm|}J>o-AW1S4V zwGmnUgj#<%{4BV*6}m9}+Ul67CuEaJS-)`W-xGTjB%i1I5Tr-r;+NghG?AJJe1x-7 zw8k;)z-MSFq8r54L3ZM=k)cU3cIKkJ@UvqokAu~b|4;Yi0p^tL*rMjvC}%YR5ivEN z*4gADiGBpv&9?)ZP8k_|%|?V#<|4d}^#w1?SGU|B9N*#>RAKwgR`Cqwr%hn?z@Y<2 ztiok!f1X_6jpbX}?e7=Aei&#Ed87Qa&74rHj+o0`ksSQw?0Bb4Nt8+%I~T*XuC%Et z+-+1^!5a6rc3BSSZ94+Ajqy$}<(Xkv_9a_oxvMNp3)CWY>VHX8u#Rq>s8@(Hsa+W2 zl86ZE>sb6shx0sU`BKjTrakH}sZ8$votEBo{X4&1ORv6uUF<$Lcky6u$Oe`}&}|B5 zO4(SqT>zL%?t9KA1$j?yT!|iGG9T7uSqpRoS%t9%KrAwVcF}^I$7idD*Zp9_#vlHU z{MjSma*2681J9qd}H4&2^!nPnF+>dv65Dpwv51Wu%iM-apC<2Ak z1tMnHNo}SiKvfE1w2Sb`dYU!>X76Y7d}&*>X>HHG&Tm7fC&Gov6>}$KNhxpo>$`c> zk#?ze<7#yc)qWB-*5SX$rN`#yG;XD|hgTiEpG8jBTE=89v$5?*@@}PiwaGF%+05#s|RcA zR^g)zf>VUlG9B@n&KuIN>oFUVKckc)l zRR-XP27!^GB?1XfKtLF$HfSef1PT~YSVxZK_x+97jaeA7+{NA?c`6c^$^4sRa zBPq{+6i%f(ld=JET)z*!S2&VCUhyFQGRAMR>P+jS!ZgP4bvJInwC^b(Am%<;sK(+q zT{w!568sis+w5jqqU&I71)+_J(+l6Kn)&Ve+*vsq3VXVz8XKAvn}Jfl%o&6DU2TGe z);YGui<|4y8{g0D)b7+3)o6~yrE_Y?%>>qq3lf-VRD3GynVc5lE&9f?dBRj*DS$`L z|4hN|!&PtXMrV40#wUJPp_}p>@H^zjzResTxp@iqA10x{NGYEa{mafDgK(j2h~5e zcu!1sJ?q0^<`Z%wKR2I~)*Zdv_%P6N-}p`U&Z5^LF_dqrT$21TYwkst5+2XL3I~~(#=nNYEj^kh_X#vHY(TMRvzR6| zULi5KJ2|9kKA47$PG{H9tDk2Ivsuz$P46eTo34nfNb$<*Etdeg?XHe%;9be}4+kPO zk5Vk<1^Nm*)#$?XnYAf2bN<*Q6cWt^kf3g+s^Pos#&QkkUnQGW>uSEJ-uX`ON633o zpP<5j!4+Sjk5VzOlqV$K>P4E8rIA3YP*17J5e{c3c9BNJ9|~38ZoF%P24eY@HG-=* zXawkEe(TZiMW`Pw`B4#})nxM$$x>}rZw(f_+PR3CKfz>a);#uo+Izo?8~2q{5&8n^ z-@sSv1JJp$$`PUv#Ua2UAdq1Lfec%&m9$xz>03Uo$6v`k#TDrosP0GM$7-nJ856Bw zn=cCBV}t&-uyqYb5$b1un+*MkOJp{{69n# z3BXb~^rht+3b3b}Ne>2hwS`Bgixkfceu$iRWX9cN(I~B7c`@gNgY#RlcxLJa=CVg_ zAgL`ocGL4BHl?U@>B8>2W$#xSoLmORf)V_LG5SpSFUSqg95-S;&Q<^k4!sdo*N6|a zZJQlUH{OOU$0>nj)@mhPqAJbEJ=>@lsxD#o)p7h34y+@Q$eS88eV;aBZ<@HK7kkRk zHcq|Il(z`sE$1!AnYB(WtSYf0!<8gbm`%Zi6i3hHEsh);jheCaQBd0_&Sur6R2<&# zi4&jbU(@j}0&T;MGo8J;$Nd~n_$bitg$>?(QEZqERf^DIyOzMynL0ZGaZrSrv!NHy~yRT>}ZcAJPGve9a1wSB&JA3Bo zG4o%)RTq@vw=K+gz1{VrU$*;%yf@V^JL9y7IYQQ0*%Q z(-`uu!WXhmR0JG920R6kSOFD=_<8_9fx6C6sKa3=x&c$c)L{dlbBKi!tYxsCKwBtM zS|wysgmWsageN|i+u|xmX*D&mx<{^6`NDqbdycmq6LgmCD$uugt;zUK z!poRj+BFoB7gY)?VgwYq#C$P0>g|_eq+cHi7UjJV_F?V)O&-~FaENJ_vDOpd4q)!| zCV0jcX--xZ>q$ecn8wY?-MyK}@v%DYD6I3=bTQU;WBS_CzEFIcBKvQCO~sM@X*SS)Bm9f;=(w*$%S2g*k?i+L$Xj5^}3)H+1zGat}r)RL@NH<)kzsFMcsb2l*qhg8R zNJq-?%lY}j^tV=otNscfR~ZVV`bM>?lwN-3GjC^E^Zbv$w?C6;(+Q#F(?e>M;u9m< z$7|EUpJxz+rAs;3Kr!#iGs6&)C=xObA$XMuZu4UwEZf2^S#ZjNi-kbK5R2P*cC?Cc zSa1yB%GoG&4Y&jxKMZykP+)LGa=vWn7J#P;a-VO-lRf%f;B&HxfFV%;{4O9Y1VY~b z9%5&b^&tb;2Fd<`+YRZO;VVMaDR6ZnVwO*z7$B0Q6A2JP@Iz2?u?8NnL-1cbw5iWQ zNCNWEgA#WG{AP9_?1CQx%_ciUtvEca4?5Nb5F3E*RTV@9Buvt1tMj9=|9aCvmn+o! zc`w7v|LLhrW<`XSn{$bZUD)QcE_WIt+!jt<2E; z`DNCnY`4n4ON2}RWq7!nBuzD{C0Uh)6gS;zQ}*YT{SD)o4f{mop~h*c81$`)+k|IZ zjUlN8k1nxGa@)MHYUeDmx&NlYV9hnYzPwdw-%Bas18JCnv>Vy1i@x0!E(_jCHA%}G zPrLQbM?_?u-<`y!vrpaHPYSuXPN`vkZ@1KmXk*s-n#_Qiprnt5ciwD~^+Ha-I}~M= z$s`wxn+mp55&7jKe%()EMES;V%tCA^wBudMw8$fq98z}OBlu)c@6$AL= z`ZY9esB~DDK9gJan?9@^&phjkI@^SiNf5FYT=SzT9?S|hAVglVvDt8B4+h~1vSlbM zUAZsF_@ylh%XW%Zi#z19YB3#pdB#!*w%g9!(}~=9L90VTMAyH)JZJ|~;d`U9D{|AOKCk@!o&YQjjTt2)B`@F9fiI;W0chksJz;k)8+S z6ClMo!r*O)7!eX|15q`OrO3*S+_y;H6J#zTiwFp1kz^`pj|89kdulFJBHujdst_XW z?3e4=1=xZRuNlmTmQPo>5#ZV9Xr)+Rhz5qPe5@d^}3fR#)u4S z{*gH)m+aRDj15-(N?X65F3l!rn(A~5KgI9perW+hq+Nugrzj)u>oZMR#)q=R1=bdL zw7maQr2fMin{;3)b+E67f3?@Wc}W)I^u%{YB3kO^v}k;LIgIxbu~xq0{VCiuOVg9j4gqbwdICL7amGY* z4?l2~6dAJ#+Be)~$k$BnoputrVxyduEXF23u==LDCXtwk@%m_BjM(x5Y5J``RmK&u zwZ?$QSyeRxTa)oRae;Pwaj!0_%&gV3g&P=q?CFxJyv0-h&e7vBLn<S65E9VvgN$%UaN+cH3_yyTo9>8P96=570XoNq_B!B9T43vN zgGl9*=JWmY|B?`)d8Flkj7Vv9tnmhz4jEzPf%`n%fDj2_12Gl?M1K4B!SQI=E^z)& zwJz+_ASUEIN*+32IbwK}t-~#teWx*TIy}Or)LC@MJvv7deEQ_0=}0>RzFrek)e8pPl1&((b*D~ z!JCvG&DZPPt%~y3Hjr!Yl%sXflUp+W6%=m6)iNX#GTkz_7`x9O|BStW&CP81Lzf0s zU|F=+5D&{bq26m*0kuCYo3m6Mt#LocFK}6RKYa3iw)bhKn!;`7J5;>N{0y4zO*aIs z32r@=?b{KkDmBQmUXWR>W5p>#4d2&v;@dniFoU}*bnJZNg5`M|BQR{$MR)+IC{ZMOIQ`t6QP|4=17=E}t0st`FQuE~KSM$C#6efki5g6EAisnC1cgFWAwWYQ zE)S_k(~6){hJWJz>nnZZ&WKjVix*1&Cs#s(2jF}m`X`{?Ak_sIg$M+YyuCzDwY+MG zUc3qr^bkDRAk&BFUIO@TP-7$w01p-lLvWVwSaa(S>u-8S-Z?zZ?jn7)HQB!ouWnL-&zLZ@0+Bvoj2LouB#M^ zl{=ZdaBeILxe!HuBJkNVbxc3XwhkRCxwT?xib+!uag$rRtcon<% zR){%{=|b{F1iz&+;Cx+Wj^LDbWM-y)MRq9kCPB3kt&zBFQh0%^l)x+HqS8lB_FEBF z-zQt>TvXXq#BN^+;j=|6QK8w&J{SxQ>B;EOk`PBi)qr z9aV{%o1zx2qEs4gH%L?d?)LoTs}tMm(rEhtoD?-@Z0nBno$INI)g+#!3Wui2wKk*sUNpjLNfBBU2BnRW zqqP?-C^C~!$(EQcCV|Y!ggZeRpFRaH>Ju7dHk9;>tP5M}kl{LzV;4ruTXIAQi3)Q_ zI-C~q)^d@sAC>&IOe)DzRY|xSSogD@FFyu#l}9yApa?BSfkmcNni@B9q2kZ$qb%~* z5mLWXH5)N)20bji<=6PlBX#tL^EqgjN86`o7uiB_3&!h z?CfCaYK2$YXoIE0=j&-}OVLIuV*|6uRY_dGnXw;(~<+?Vwum`O4_S zp8nrTp?veoOI~smC_d*mJD&Nm;;i(y3fbyEbJe79{9q7vT-2{i%ikN6?yx;;ZmF9x zmCCxjmf)ZnZ~sXrOd&n9xXj5R!tK#@dga{o)veZrWlfu~=%HVGDGpoP=FRTM9?v9; zNWXp3=9`P+nHPwroEv$xlX=(uz_+6}rfH@7eNJsIW!+2VrOsh;=Z26{gMGWDyy-W( z%4-i*a^~&J`7}}4>kPW~f_Q8~sU^$Or+0;@Z%Z!D?_I0>H#wfZXh`5EK*P*&sqtT9 zxlbXAj^jMp>D52oOY%PFn&S9B!^1@-)m6y+V>aEnmh;h=NYPYHeDY*gb>*FK8%I?^ zEbCAPudMX09_f4v^HmDr2^0f{LI81de_^;xEb`+JBtK`an>pMv()91Q^MHe za$1h%1Q`fW2*-az*6*FjO ziz*VHugw4$8tH+8voNowa72!%0ied31stGA);SDn@bnD>MhCMR0@Fbr3bI9vmRrSx zI26w1;=i8_z(+_S6CN-ZM8w24u!=zGlnU$#v2wv6F5{`N zoc!Uh*C$?yzfbC>H!vLd|K^3)IGaBB1Yq1B+(=)uH?y#pBtMtvYUJW5vfw&2t{E1Z zyk|vQCI4_Qg>?E}*<%e+pJO>5$2iySwNKga(s+uFH|)u)Oj!c{h~Gc>Hs4%?hvjm844^__ylE znydL^$;Dy|=#G^VLgLfy^tU(#?yBLUtY5vsNeq8ev%vr?-kw=*B<2@an^p_6Xp@tw9+h;#Md1plPuxm#S%+M~ztZvAijRNoYaiVy zI_glTRx!MeE5q@}_w;Sx4pDb~q5|Xey+*58@kHxZcA7*_vZA|?D>q%g4HLC2umX_1 zbmVkCeXqibd@{Fwo#OKILdL7i|VMDXC z@qlftp6bq@g9c`_)U48`?E<5?HNYvbTPl*_f_nly>T|SqWbvxumzPDx*SYpM>Tun+ z6wdyAd|54~UHmI@Rt@aWZ`iy8Mw^zNMn)6(SX3Dp)^q4?ZV^B;^>Y2_1ds{QIMJG@ zIpDTf@I4ah8c$FCzO^l0y7=Vo|JbbnG>>-KGl!fAPhv}9g>rcNbT@9Pf978SI}|2T zXY5|;pn`8mu+TyV>+%vU@87!nWz#;G_WEhMRK|JktHKO+Wi`!6#Opg&J)2ReScpEwDWGYOn`S@hT27Bu#zR(I8HW>>l*gYQw#KrIb(|G*o`k#hKKgKO4 z3*fOWFW)=%@lQXw=q0M87KgC9Q|MDaB_MWihy&?lv$F~k7`ql31Mk8{_k}nhlW9)$ zsQ?Xzq>1tC98;F`^euAzPKN> z#kQWv85`F6IV$Wh7rWCBdy+R|?MqguaP?BhyEdU`kpO(U(p^Xa8cbBvXAT^Wn>C9! zw*dhiw=lNQ-fzI91^8D7qrP=!uCm9dVGcZ(E!H|Ym)4?-T?`+t6IcA^z_$y0G4fJ_ z_5gJlx?+Px`${O*NwbK*SU{O~ZfGu5O-t*?*!nuZ_duH}R(pt8S4DlIc00J}@%SgV zfLWiap*eG2dwkPSmRScQ#a79|;(TQnV&a?+wW8m&0#_-2h~szY515k^iFY+|toOP) zaZK7I6^)vd_Fk1lQT40x;v0)YJQ*@M(?xPTh9>x!Zo+dOtIE=f8AJODiP$?MVi?wu zzYc$>3M-SPCco%Q0Y6`hO`Q2`@TB+Zy~0-Jo5W9I=z(T4<{z1q>)0;PG(0{7Z!lVR zZ%TLrhqs@tK<#fHrwsc_zs%;JpA+Y7VAc8Rd;M__*dwB&pY1tXs5>q<;@K}4hpe~v zjB#Kniq%~Q_bkFzi2>sl#AGC(9?0+V7X&Iz?FX`1a!_P|+0QM=is;Mi0!NwJmg(Om zbjF+cl9WJO(&(|2Bxu^Wj0xQV;C{f`2pe<`WE4jMl?CGuptN?Q2sAQ)DeFCegLx6m zj6vzcu0@lW<>LU}8$ik}&MgLJO)4&lz~<1ug$7q;WPkaAj%VeuB%BR=>6FF(q^k5I z5NE0W&Hr^s_tGpjFXI~8A*d;3Q@!eiIojSRi1BuG%tYg$v9%Ke2`~%rfy3voju{e| z>s0vE&P&4_g93(mFx5divu?C<$SRp-vt-wh+^kwq1Qpn0Qd00;El8P-&3v|_eo`|R`cswJ z1j{aAxQ2|H$$%THot81IM7JsF2Pury-O0U^re%XDZ@+XjwMKrND&#>VpJ z7L##EaR3g;C%Zo!x~%QRErI)!SGdf>9BClG{s@QtSvX1ku6O3=?l>?NNd5Nca)d_W zamiM`H}CJLY|Ha=*6w#Zbrag@``5yjF&o5{7z7E>tRe?Y5ipe190YkhKlp z%(|4*I_`F%0+0K)Ww@8Psv794)34_mPB)ee(RT^HIT#{re<2yjb9CB62mpyVw*XTo z(duOu3^6hJ9d6go;eJ5#Kg3Kbb}=XIdV}h32e(kI6%&dRA+KSzxRDKB)M44j-4BBl zAUk|2&Z12vgkBuyTEDQOq8fpW>rdsV+VaXOVwXk9bboqt#~FWU_D%(RwGRpJ$0r^z z$5J;|vFyC^=HG(1Qu0i26RZ+Bv9|^U);^TlApT-drM2;MtXE4F;zU}-91?va_jvbX z@Q_dWPQ^;UA0=KkXB*VwQBzVB;ODG+a;HM*iYqdde-AwCz!eu5n!uHNaV=A$Y<={b&*=sz6y(fGwN11Q0f7ZhoPprAUn{ zM67w?+rzFx9USff9R~)h2@C5YzSD<<1Mm<424P-JO&&}AfXUK6keIz3c8d(dNH;O` z2teNSCB7t30Fs@6tbXk-V5vXe{u_zPep1lW4SyDHFZG%Fl!;jW`L)G4t64{<`olem{`?R`D}Hjsd8F&7__VA-SqxPn;Kr z-mMtQ^gLaTE|JoQfpzr~RM6#G!4Grz6Maiwx)1Qf>vf;R_|2lDby1mIF1qEDQt$PC zF*Ujm6QFa48kfgLA4`Rl!(Aw|nk2OIm3hHt4C8h9Bt?Rp*5CR(s^ps5tD9*}zY|-x zD(*-Ot9t41Q3oD=gE29&HMEQsY7UC_r$}&9WJN6lN}{B2(S(c_PG}`Q_%y@%3Lbl6 zv6S4@`+n*s^Y0@*xv`ID>S`av+P31}jQp_z)tnX7l7AtKpyuRsk{aZY9U}ag3|@Sx zaO$Je9G>*k&W=X&YmbkyL#2eur@baKg}lFtdJ9UbG9F)p6)tA9ZsTbz`-@O)1IaIA zU&l_;dNLT8+bcc|x_3E;NJvcnAm7&RQIvzP#ryw%C2R4DOG?_zeI5Z+j7&1JGBl~Q zPJHH|B39PEg-n}Z=0GY9ay0|yo_K7HB*t!_FaWWu|D$c~G`j*VC+6V_WL?u>?6WYl zS3oL@amT}WzhK1WKt;jyD;Q82xDbFc0|cjRw7y~{#7-ZmGKqL~>@4zf7^moG;_)qV z;Nnu4;KB3Gq;<5#g&vL-8fl`@g6&>)!cHsjs` zn6EgbPw~IdpnvNb6)71$`8)auIl*k^q#s~vxWaEJlu#J-C*yNZo(NIO(E50%mwl>G zel_h71H+Ij;Bql56icEMNyEx?AMkUN!Hh4je_CGSw6?V!0MAlNj9AQXZ$1`ac7R|Q zGg)A&uylLcgc*)vq!k!ndH`|@*vNFmaG3zJER2H|0B`^{YnWj?hR$Ro8rNE5_v@py zd+|VT41nuiS6d{#%a&0aMH%y`r3ltfBOuQ@&QXS5(apcDgqLSjjTT zT>=45=xnlUp*lyjcx?$T1pLNHV<6s5Djw^Lqpg;$$fB!^Sy5g^M*xOcr!sXh@ckD9aWMuK7|U$4Rv-Lc5uI=JmrQ~L*y`77Z%Ox! zmTpn8A2bq+`XC_g9jO}!)GO0yplcW{+ z*a7lzf8h?jYJ6;nBOz`cgjJFj>kNB=XQ@v2NNHI>C9pyX*Z?~)=1+G@73&d7R?+V2 zhumcvR1e9AqH;e%En3WSKYuOCYOthw1b0JY=7N`uRol=*q+V5FN=DjX#PI(Z*~0Z1Xn|^yeq2|5JCUb zfnutnSR(hG&4d;y#}Cn$od#aYT1P|Lyr;v)KH(`D_vdP2B_ z0GhcO@lD&UH9T^zsR>3E@mLL9niI@lybSn_{X_$QZPT{Ej!X!HveBj450RU^Z3o@q`8@h9Vrm z`Y~R90Cla$adrX5+e>;2pBs^-x~sE|J^&Kvox`X#S0&*!#(~!m z%7qfYlcn53jG6a|zz5bvVoMi)xssx?lu_`;!KOHLO3-(84E`+XpF}wT!(01JU3B z#x}o#FfZt50l=^8QS>zlM$&?@`3zaYq~`?O-JBi#$-AY}(9k&lr5_sEv=~H)5n5p` z4$K67#DpA=2gn1;1LNT@`VvN1a~&K#nK?SR$Z<pcipGt8`sy5wH;Dk6pE& zaepb7#{DBRKH_5KcmwW2ZVe8;Bw#3=; z`0Dk26fv)f38_VL&DrJVY{YK;&?lXr*o|8|V;2aZU^j( z|3(!%%6=!alI z%q9f%g+%w8JUp_1+YRrL;1k}KqB~8Dg*{x_8;}*7wFi)60>N{Gwt4>(u-~3_B?GdQ zr2&kq2xbZmY!+p^du9NcqK&+>_;2SQ2}tSRk(4)U=GN`B8L6SVO!$=|6iRgt+p=Ff znxu$Q?m&bZr5nf+624A_7xmmh3@G^vEE=s zbVOCHlam9r1bdGHx^^=bvndpzv}}aWC9qrVmhl6b)_qjsEcbTHB6;5k&3B7x7&z*m z^g5Rrof9Be)=&Vg&YJW=se-Rt> z{-Wtuk?>DQSZ*Q8Qq~fn{@BibD5Lzflcq?3KX{dc*ll>bn^{L*#ocJUk$r}DmhGsr zfK8RADmvy@#Qi(sEM1LR%fZ`}a;jW%x#gQ1TxMIIOA0RT=jEF3TRB^o$s!If`80BY zqv^h@%J55RZeX2unE3{wz&{u7AQ~@+@QseG;j^o8tfL|d)MX?!a znF=g8)#LrQ2@fU4T-O$@2kcdVU*EX(BJw%-er6w70J1441G~?OI`?;LTUgm`TIz4= zx^ctUT#U&b5hW!h?fFw;LF4XjzWVPgcAbTQxHnK5-Bb0aZjxE_Os|7SFI&0&%#Ge< zuAXh(=k)4AwWzWdEn00R@Bob3Xhd+hQH5*84nxM1(`>lWi~8p)iwfW+mcJJ=atlR_+Sw6 z8~3L+`lzGd1|Js*lhMUE<3TM6ZCh;`21nd=76T!+hl?C55*pG=UFGtv_?7kn|Hdxr zq}&531bx=bOa1uNjX#2{jN}_!HIr+m6@|ktd)%FJh+ddZq#sEA!NWORIg9ZfEAf*< zMs}h<9Ek<>nXvG)jo3=1youeG^fDc?E;N}dCFkHvNqW^>VEe4vHwh)(@bh~1_Rwq? zFjghmGj_g6T1cB0Di;67@z>p?Dp5Y?b^mYloLO|rFW2(an#~6yiYz!dT#F$>B_R*rVJedZ7Fm z-JdXdwoqE&G^xaZAi(*-9zV-iVZ0*x_ksllbn5371%21_2g5UJJrD6w_(ZM`{Sw;^ z#Nd*VY5Q0vV?v8~i&O69VY+0s+|K)m{zx2>EOad7SYe^rVb0T3d<7EL$U_XGX&EN| zY!Wd9KgduR_RBu}R-FQKmgP_W^)yGrk0seim-s{LucId2mSuAIi1fk6OM~#MoskzD z4g+GlGau!qPnBHTYc#D@W*z{^n~kS40f9F{($$|G&!Fpv@}Mu9G-)OtzwiG9ueQ6R z%!*v{4~+*WjtvcjYRp^aOXUBSPTi(Lbb4q7q1LkRJ@aQxqOKc;F|O>n>~iK?fsga9{W`M(t)j`Hrlprv)o5-;iEtcmK0c8E2{_BldJ!!2P{xWwC z{dZzc!7hE$HN*B@ejP#9Sd~(;9{qdlbGxBjGrk-~njV5Kf?ZPa_>UIAO{UezOL>n2 ziLp0%0q#<*7mQ84RqNNSd|pp`UP$%J|9g9yqB%B-_j;gFt8n{5cJ|#n%J}iqZzp)T zPmjp6-Z!TU6-=XNRCY()OgOfXR~sz_N3Cp5IbQT)%=Qzcm4+yPd>4vLSj@>}(88Se z`n%uoi(Zv*`m_inUbvjVz#rGb-9NUvF;M<=JSa#PDqnru-~*ngrCF*Gl$(Hkaf?=F zx8J`8l#0U>*^EO!wEKBL(qpK&2NdHi+1~2EK2F-&>jA-sVSqEWWzfCq_G_`Er2U}yI(eS17qwS8dg4?#v>b@Yj?-RP-Q-9sT zyD9=u|5Eo>h~8i@$aW1xiS_h64CK3uw9OhRxma+nQoFice|KPXz(UA$vGC_=x6T_l z1+J^h*r3*>`*`!z&jl&aqYz;1IS-FyE)ZW&d-c*+MMEL2J z71Z745v>zWnOvpzRlaT21QEUP-j>l1?LX&+bbcPUe=m#(ym*hsZd5-*y;am$Urx^_ zsa#hF{Tfq!Q#pVa_#~PA9JqK*Xb8moe4!SIIprIJTvP#xK;1@)rT8HtwA|;y`_eQ&-7NaXx{d)#Ftj@ zkDjxXg)o};^l^u(#yb#se?yncSWGKgXgsboxR`#j;M?8y15F2&E1`I9ETY79?o4_1Eh|O!2QxxXKYYs=mC)~a`!BA2zf>d z+ALWm;$H431KCo4yJ$LP?hT9Z73J@8d?d^c8gABB6U~08`xcC{uZ!qXQRH zb7Jd@{W~dowagAAf&`no_tr0ov-v;&3T;c0dJk76F)JY;J(rR1R9|E8Sq-XGkgvu@ z3Q_!#{4H+~rrTE|X)%8nBp=vi$X0%{zDm<*io`m5cGd4)@cG^Jp5MIoTdQ4D%FnOe zgXBw!`aTW|ZbIXo$3LF<3Z<@4jHkhb+!+1}>38Q!n3GQPJFv1tqCPgl&d9H} z(2pzkPbbYDJp{e$_t)UV(!1(T5ou4w^W9mSIC1?IVhi<4x-7LHh^jMcxq!iEU8PE|uIVZh4knnN3f7^w=+FtiqYWw@bYbp2L2$gi70bc6X zS)Ty}R2C^`WrhyYVzU~cz{hg!Fr@_TTi&}{bi!tZ;!d5Z=9@FD-Y3O|B)p{rVPCK` zKTstISF)-mvwH>{nt80#@Eyy?c&)&r$qAQI=U(zS{JKJ?dA6kDo)d@Ot3)9-48(YH!yYPj_zv~m6L^YnZz7DK7*9HqOP;&PkIHDA z-RMICV4C+>2sPX?n0&xUXf*pwW0$ElwHkRkCLnS6`06nrFH z>d)E?0fnCZpaR`E{9(-dimlUi^e4#R4_0^~m~6tMW{jyAw+8xZ<|o?w`qj{3XL-i> z+qm6&0LSt?^%Q}Gv&KWtuovGguKovbvHxG4;Q2Z#+y~v)qgJ{U8jmRkOx)x5f> z!hJA^d2^eXD4)X7g?Y`d!~fcS{OrcL*=@HC9!5>ab5M$e%Plv1m{n<{9yK6nDzg-! ztNk}GMc*<%&TJpeIob})GsyaCE_EQE9L$|8KezsoU-a4BEBU%~NIas`;KN1TLza#M z+XRa{zV;d!hp_-5{h>Ss@uew-C9j{T=I_SVi6TuhJ0YA%ISSeR-rrcA{?`Vq%VQoK zgB{5Jc%|jQE_j%s>9@!i|FF_sQm7y0^qDa6488d$IvyyU^u~Q-<4exAE)@BVNxzG~WWqA&~+^ z+1%GtONuH#f^m1Yj~eQYG(F|E?YpRyB6bZ+9#aW~}` zl(WZcyb^Cx? z?smrZ(eoL`3Y+kc<;L$huvA;aVNNiX+XIwuCF)ArHSEWSJ9f|$r(1V+@KyV4!kWzF zT2{&iWk=A*-fpZYJ&B4{ND+aGVz6j~<@(k;ksUMmS6b461TsDxE$a@Bc z#0XjT_FLdBp<1yNp~PB))(aFw*hu8FMUl2J$71D?PU zV=_lQbNcTuhpZw!bU9(zjc!GzWgcAkEenX3@&j4xS|5Utbh%Bk=_7rG6j^eTGNBe1 zC-eh;2n8-_`GdDo{#u#6-%!2{`gE}`xy^U$;N0AOhFWQKjbyjEA0DgGoQ5P&i3HIz zY?ZMSjg`1cH8^qkGnwxD<{Gu6Yrzl(gAa3t48YO;^9VamA6|}Hg3K)SPQQig%%Q^# zp{8#^HQqiTa>$Gs9ZwGEtW6y+Kgc-yuUvW%n#4LKZ~@gYPpc~rqQHJlPgt&jjCqjo ztUH3Ke0Ru&oZ&jKe%96VVv=hH1kC#5RzXo4lb$4;FtpK2VsR<}wPcH%{uiUHAcjd}jBNfwtDbafnK1hu%G|G4k zD+2cF{YN8ar|Lez@i<($j{%8A0Mv-nvR$tq8_Z3bNOctRh)d(5og!{Ay1waG<*qL8 z3l;A~SksSPIm_yzLX8zD!=VLzSZc*pi9~Jq!&&ivfX8HNc$CJ_Md z;CW9CG^`P_R;00E`eh6*P@qEB?+@C`?zthp``5X>5m zQuV=^+}&~`#rGu|l(7ZGnP~aB#hJ27TF$mV@Mx=2 zAMj2D8eeai*;dgZ`BuU@fmWUkY4(miUbNuHGp&;q!QzC|_lijZ;v#dEvG!jsUYW># zXSLc53<4$z2Mt-(fV+dO+(8=9xc+)cP(lT+IxdE4aPje8JB^4i@0pyVFt``KRqOw4gmvSP|TqoqvI z@j^+ox1jJr$92;~3==w$)q%4|4&t9|f|)$*j?T<);EC>g@qs68q2>8NuKU@nlDbiM)v0PkvP<;wN>04mXFwfZ)&4jL@;=_ zf|9S-154c)dsqEI8~f)7J;C(YRTCq4!CC?vsl+;XsdQ{sX^Xi1!p*KLaHd?Imb1n7 z0dcINr3a_k`!qGYH77)%i14q+ML9(-wT0LXQC3EYt>n!0EOq zbLhD>Bj3(_3E4F>5gnUsb)xYGyVtDy=m^E&U0;wf0jQNE%NzOSqz!#Ze?L6-Oj->V zK$6jWTn-A?1Z-PM59L;tC|$hd8yhp|BH)3hF3oaR6=<^Sw(X7q97sf6?8uEfOgJ9s znjS<34N^{CS@mUV zm3eSzw-}kaAx^?v>v8mXAZ*X_YG?DH3f1pu|6AU22rUyQ#I+XOmHlU1(?!zyuro=} zBywb$Bs#6~hzptEzZgP`Zok@lBIhpI92ATrWf_QLBxKoxMJgBmxchb2bMIpBxNu-V z+#4PYMa6+zSvjz}Q~*>S8pJ$z7V)O?On!N&tWc$Jm19fc#xDOxP~zDK@*~ifuFJV^ zJs{l(o85yxk89Zidlb4kt=lCl4m{{H{QHXXflRu-}Yi%u>OkkI>IkFhjB`*;D=5RuG{Sp3xR)kXlz{JGIc zk?JymT`%C47t{xZL^t>a7O~B}tzJlrQ?ACjrou<)bDg?CD_D312OX%nUNclAFPFvv<7vIdg^#YH5KfL_NiWrhj&eO&NiSB60P~PO zEUtj(#|Fqd<2SqIi*shEVSkr1rLB9z8}sS4#BQ_2c0|2m&Tp$2_^=11zpf=zp`9#7 zJiNckN2joAJ0xdDu?!g_W;SHTuw;>eH{Na22K<}ZwO;p6f=!Z&lS=WUjI(DYrW@?Mf8vwKlzT?&{(tP2uSmC_pO3rFv<)`;T?_c+tD)y0vo}X^E7^Gk$*!e4HQ#PCcb#9{PXaf%* zj}i}}fHMGJeW?Wq)K_A&9Q734EI%s%tkgprbIe(4gE4D7jPu1Dve1)#Jab~`ZY++R zN>%|}bgMjf@?~k$vkvw8@+ZnTgo3fNpW7DP(LApEQRIuh2qA8sjznJ)>Z&v6Hh2^P zf@YWFQ*Q1;hhM2C2xLVxriXonn5ipmm|7tFXA_oOQ?+X8pnrtmF4}1R`~tZ|BI|V* zU?witrBTEWHdmZ8YdB3!*)aOC_`4k2`&Vcn$yPNI6+AXe?Gms8X()X#N@s|(FG`6& zJV60;n4B`777?_RAWyruV&t2KuDBEoc1@#fq%|U!#ph%BCHgb=q#oHP?N{?zo7R`; zM;kRBgtBEYrQJWrZwr}rT65u=x{BkzOw3o4>3~FB_diTm@sy5)dX=%>2W)S`;vkzr zm!Aw^R!|tq<61iO^e9j2-yQ$2#j_b#$*(gd`OLP;pzxq%wR+Ha40iY%V!Mg(kJn7a zHj}TFwnsb$jnrq@ZG#eZEIB$F+?Z#Fu@}F*4jPP{T( z1@hqr-DwsEVYcoxkYo)E=0bbNRBaij?c-_;vKkxqn<>;b=SrOVJVheD$DC5RI^gTo z;=+uc_tlz%=cpk_s{I3jhon4WF8mb-HossT=++;tP=$UVil&kkA7viFaYOQw(Wz5hS2skrJ65TRy`L)tCgN^wUfCXe^xAA&)Kx2)2fl?0)IH*9-V?9dDbOUc*k>^=6P441RhUL(+(X1)0N&3`OeqT9~! z&J=jPzqcL(I?Z_pCZq_n>8~7>P+25gUsA`Ti>LRlO_l_9u>ohst_fR=<5=S&7?xpT z^&OuV95{HA^H8=Bve$GPivwN_**!A2+Q##Io(-u7Cc}T}{X7aCtp>4L#pM-W=kX_D z7p%JENvNsW%06I>LnFJv$&t?!qHb8SsW|eIMR&o`%r%{M}%NX1>A{&!DjJtFb_YMR(5WfgH6t3_r;ZsX0+G+ zsf`V4J^RX(DF?;IOpSW6+4lWGBy_mE3ypF-Wp|vTO6AqLjj<*esy>0PZX*)+tZhnz za%KH2u1w{(KEY4>Lx9crU4E=C-e;cP!G5o&sT&?}^P&?qZ1-TE{eKWe2T^nrt zWfvd-DUm};u+&Qvu51io<9(bTi)WDmq%pK%cREu4j_s0_p zt}p!O3h#kl?`iT*rOH0><^#Vqcd?U8{|0Y%VM07nza&|^`TSbi#PYxM(EtId|2IuP z2k_m~d)IeA|5vW@Yf8}%|M%Ze8`@``>U_Ms5I7lY&EJWb_~{`nIKAlA0_XoFDg4*SIL>@?^m|IzsnT%B z@JAZ@1;rvq;00Y%4%)FBW)ikjH?q*S827P{v^%)bB@Yh2{3tW||YWix&QUL#UzASFC_lyAw}KTJJIZg(^R7 zUhT|pUtp91;%@$hCS|4ea9>+h5G5t2<&%{ZiIZ1ZF?>2j0gl^I;{Ei?Z>AfakK^B* zKMD9m@S7?+OimKvS~vR_eMAT1b+aOe?5NeF|JX?d-E$+UX|{7V%`@0dZmf0k_$Bcr zQVlO-PHf6ig%RcbWmPx;6+6n+ct5!~Xn(r3ROV7_155Z=tdnL-^>L__O0s*X-j%qb zkspg<6TONYGU06L?g0?+-3AH=e2!LU%Lf9s`iU7WTN1v02D$ex-Q>4(*wGCeTfIWLYfY@8%D3N6njq>O!MHO z938f8i!H{-RDHnZwC~Bs0s3GiM%Mf=)&6f6P)<5w)BFFuA(yddfahd@6y`SjL%R4} za^=?(9xfZOfMiD+U6Yp&mU*nFtV6D+$-SmzZB8V>6^j1QY_3|h!F^_~19;CA zbajOCfCrKODR}cpwcLPnPA*H-?BY(#r}0z7W()M9FpZr0JG!cfaF>3pkm zi|awUq-&=O{{uNWgD<@o@n>?$P3wR@jiavaPGqu(vo07Jzq@xGgZlY#a6maTH`UyLMe;( zXczc@e8rIQ78p?AKWOKCvW*LWNkvw)Y5lL1B{;n6`qUDBup2uA&=>3j?!-0lKuX^L z+6v6L3LpEjlO+sFLC+Q*TeR)1VIRQGVMTL77a+g3#Gp522cPNS6PlEW3!7_R1kQ{| zHXwltO1KAkpwi5MDfna%U@c%wHR_k>Sy^4o#7b#-f0;Zr{PBDoQj~JMRk`xQt$}Dk z#1hM+#Pp&)MS=bv!{{IV@=2ISt!;sD)cW7TFeqP zXft_ekmVmm&XugGqJDMg{pM>~j1k~el%*6}Y!|TCVS0*U6$PDPW&ASbvUd2`n2$2J zsW_?SDFhM~X?v+8^WG8XF4TuvY+g)B8}yffr;QqAo2JUgK4`l~vAWnI$u~|jaX>rW zduhLpTt^PjEG z7oZY49i7%#OpT7E?w;nI0DZ5=qZbemt0Wax7xw9(p%B?4)c;H7gl^t={I3rlz1L2* zs^e2G#pt10XVjrVUzM^(uLr(PP0Hr7aSRUl@xa?88a(I zSS4miJsd8o*Z+(%87RR)|B_mN0{E(e z1;v0C3jl-TA&^qSu;WBUun6VZ#)8Kf1@zohH74|-Bg}o&f8qQSH=5QQUI5@N#ARqG z1<^PZFXhIpGh&J1kx96+VNV&4QkXVz>&v5y{afJri6aAHlhFPa=!crK*3gdo%Bg}d zPZG%f)o=(6xQvGFzX{c&-~jAL(A@hMh0+aR0d~lY^hx_!J3LisLuTr&Df&omb*gSu zw#t6Sk$d`ieZKFTyUZwajx02%`#z$G`Dk9RW19c{)!xYzzpU=gck=J*(MmgIYkYH> z@|7L6N0-R7Z{!fU9^VOn{wCCy&ezf~Isc9y{TGhjY`uC=_VDP6lb8)ny8Mt8u^9%7 zj_!_w?*qSbU5aWurULy8g^vvqX4G{VmgP$sr<9Yu14lCM7j!-bS>;J1!aHb_ofsUz zFdL%ZWh+)~Jkni~q0@d`d;LN0Yw;7!H3Ob)ym?U_7Cj=RF9KW7AcO57i*b01#kZ8a zMgx|;^LmfQ6yIZ7UVwBDSTVj+V<5p1fDF#6-Y3is;glv#q zEkyp+e}Q?6v~DfH*dd835mon(=)tTb>!7kT3A8xpBaq3;B0J9h!_8P);_Jo2LIr9O zL{Mqr+lC*&n*;Pn4FX!Qs<#CgtZbpU{|!i1F-t-_!!a2~{69c)7U$E!Y0fVLE{={w z=aZtd{61@59Dt)jkw72kUs>6>Rb50k9$kU-t4#a3ILIht9Q*jDU47b=VLGWY?VBCv zC*-`NaOB&Cp{VwgcSnuhc-|a*&UfDGKO|)e@1g6WN8q8eCodmBwW|UL8Cnpx5vN!u$yLpAN*BE*RvuL^$gwxGr;d!#Z~sp>l#s2p1U z)FxY)qc-mdG?&Pvc~YEFl4|hhenOOwMg3I#A?$SRV8aipg026k8}4%DJO@ml$YWy^ zcbF;ZHqDk}KmwrsX~is4ghCQo{>`&mvN0wpEoEhn&XuEUS5k_=LNqk^Al|Z18<-p- zj>cAjUhI*v@Ct+)J75cvfDIS{MO?*)1tZO`N0vgWtG2R6R5$fgK(33Yz@UU-%$Im; z34U~h=K8_|G5_)_1o~3S&^aP5l|BX3n{*V^2LZdhFOjoh?dQWX?yM0Lx(Y zNCE?|RBKNn*uXQ|k*~8_3B+H-4 z{rLRP?W5^yORmutVy)?;j`qMY=H_W;8f;J5cE-+^Bxk++Z_x+X*a!>#CouRAWWmQp zR~KqcPi0h_56zRg|w5TxOwj5oON4hrZWcA#M4Xj8C7gymg6apCUJf4POH;yN|VK4F!x=H+3hH^zZN5u;Z*BGAm)bz^=)&tM>C3d8% z*UHFYQ|?cm+%R6`A0Sd&3L1~Rr0PV})Ce8oQU&CEouByR;^Z*#9jKbsEvUb&&GH0)fSE`Jd0R4 z?%X;YCYfJ{*(U=vdM@2R-S<6(jcL|YXt+wfA01=oaJLBz*l<_R~&JuJ5%zbezA`vndugWHq} zB`Hw|;pCX*P`Wqyz9KE?3yqMkMK1c!yH5h5aLcGTB&?3_pOjq zkt~j?Cu`R|mOJr&f+hC4VuR3>MF2mWaP(ZpoHFWRe;lHa`oC_M0NXg@pm9G&XeA7 zJ6ZufD`lLeHg)$`ibhay46MN2!%DC?Dk8XsJR^0glUM(w*pDX8m}SG(TP56nUb~yq zEpc_GXcl?k?#jI>TF&4k`c9QqX_hR+;znRpG*9nOl=yI33ENcXnW}0+_QSoUu4MGh ziREhB(iO87FUEiP4Z6YTzn>#-DIgSV!jRChUxbs0E+R1V<1U0?Z)pjOr(XY>kKoa9 zJ7KWr^e%gtCXB!q#WL9_+0kq z-eT)8{Qh$?$AR!(G%0XwLCf6;2y3VnQ8vL9*X8&UPz9~=dU$|!9F6&ZX!`Czs{il* zYg5W5J47fed&|zu$jBxuu99LXa1$99ecm3ggacfCm;K1q+k9iDDwrr&Gx}5AMAV9 z{rv&gxz})Q6hbxs)KlfsUYqb(lOVCg#A`OB+J;?>C9Bf3Olu$GhV7uJ_&rv88n0 z(^@|Y$^UxoRB(7{=XcUHwBJ+!3YYt1{^rBr2HV<6A`$7%&4?D$UOVQl0`8Ek0CGB` zt*ttHE$m5C^By1cfzpvoWHOS9lJ;VD%Ma!<;4TarD^e1$$ok4m3B z;{%t-Lp3y9;HN=rlUyMSGOCozGn*Fg_4XN4cf0dO~}Y zgSxr5TNFzOf%@Nw4pf1L^?2_sx|}vLK!+f|5kID=w=C=^V7&^+gN;M0rx71RmFtDm zxJ6?YKNi5@AyWy`h6^%EYPXzVrZ#J$jLdYEfvYiFG#&&U!y)>0w!Ji>;2zS(vLD@a z`4l(OvCaxd_=}+!a9fB^B;b9FpGmio9QTB9=s^|wDbS3@XD7D-#6S)_J24B&s}$uR zTaNL>WfBwo!eSht_6w`Hqq0D4yU_7UpkDoq;>UBNNZy$dd%}*TR3q!c&c!2>CBEQ2 zst}tP5P*grdmRS_bG{Vw@+cWW0hi^o<}oah3y69V;qhEtxCpaBAS~YBA5%U9Y&uf5 z(Q&)!f4;Zz2GG$=pSk8R8Lm8kQ1DO-)I`WsD68x46+3Xc19NLeuyqajL;QnPqp7L= zbN;y;Z%9VZW87A&^(l5FmA@-zJcnm?&{o(>>#}Z# z%kxicmZ=SYP&xkXK~h^xT0Q7f?c8bd1|qtL*2H9EbccOg!(0Keekxp|#q`L0s6)U} zuQ%Vf3NkMm)VDsh^IoE;BMvxWg%kEd7}?>n>+}amFkxVU$3R0`2AF2{d;0uhf)W2C z=_F~+5UZG5J|25+)0WfckVoX3WG{@5qZ(die~XNWQuWUc@1|)Dd|;RS#(npr8l^)v zeqgmv0sDm53ZT7D6?R%=ALfid)j(E0dc-k1eV0CMtM0XTLy~6wVxFu8o~32p(cDuB z?O^*)@dnHDBGt&o3x{qeu+tGZzbmDUL)qN-qTTlxHd_KVN6Bk_?+MlQ4Qo6i{vDOx zV)C)p^CRa4MN8=M*?=v#1G+zuyG}gSOwl4+1s{~OG2tLj{q(w9qJ{7P53lR~t2=Ltf=2xja#(NtlXB3wlX@pyk>K`EttdCqPOYb3 zWh6QTDg(P{@Q$y_6tb(``c>yDkfSWdBHI6D6ZtIoE^k`HQU?H$kSWPa6B% z!bbi~fp2XADCwS6@!8j@Vb`OHRno@7y`@Dnj>Z!KD-ZWFl1f%86PKkH!NhqK_P6+J zj)M3&VR}d)2H!fS4ZELb0VaOuO*fYIn1EPpj%V|Ge}7@fDp}h_-!`BRc-I3^bbd;O ze47+khu=I$RAStV_jHl1PZ76edj89_(}V~_e^B^Z3n#u1rbX83J$x4ssZ0;f6Ma(h zIdNAqg5kDUg`O>a;6c6N5}#CSct?DV*)N(|FWHxURjA9hfbcAp2&GRk#k3&dRgyk< zi!DubAw=VzJOinmd#pP!A9mkMeX~_(?}&(N>IjHlq?Te5uh54o-!*pd(aD=y&-pku z966sCB}C(~rA%_2GXw=?wmY(=E%b$Wlg>Fa!c^)>YL7lF(8)WZr$1N+v;lp*&=ABPv&c6UUX zmonBpLW@t<^N`A5Ku7u)C-L;x4p^u4ai^22Exvg##VmW0k0;sXi>yy)s%Z9&fwPM} zldNS&!F@vF4UPO<(Utsi4u1Yo?=rtn?Mo;`UB2?jHl~5{pdGB&%r1YR#HDQ8DKLgP z^(6CrgiptMycM8!JAV0TuYyV6AU!bL4tNd(EOiY&e0Y9b3T4lvJIZRbAX--&?as#2 zVWD(6Nc6->0!}R0wym##p^72dl^qpc*3vsM+j(@3uRmhgK0;zv@eaYe-wJ!WyrYzt zcli{P);6Sv5FufR<;#k;1)A@UAlQmy?id=s%?-E+aIXdnP#}xPeJ{c32k)J2?|Z!= z6}j1jH_zAisM`B$vL4m>0SpnP<)W38!Qc_D$`cu$Pr0!#IoqW8pU25pE4YU&es>}ht2>7a>xP82oxuIvU4x z(y9Ive@)=Iqz5~<36pN6-~pRRI0AA)$~Rr(Q#85~Y%Wz1OExz^uz zS#PKA)ABO6n8aqImsE4BPwMwfyy3HZ%8?Q1W>MD>RGJPlHju6S5~}g3D75mF+cPg! z)Ct^2hzP^(I-ZOs5Lr4^N=mMo`;^%ygUxMz7o9D)eZi;tqWzWl!F_$SKd+@E=0?UT z@VXJ{wYTWj9CYN{Tqiqwua6>uM^wpL^hHBtc#Ll=z{1QJv$J~zLct0~ z)W5l;f;kCJi#3D^1~Ktm63?0CBdv(2UM@0MZ^&@IpfUVtZBwnd*>CvzI0V4}%1PVS zx<%mj9jc&+8*ATjT#TRoOg-$VEjSmD^x*8WygP%3wR1wh!`ZYIIYd0~Sq}L%Vff+a z?iAZwC->#GT!bUzvr9KrQ2uC(gKu}W#YXtrgvu(B04m?@*R%wQzk6*WtbVhx>*ToU zwXJNW-uCxf3=IMn0l-}H$3PSyxPnSI1-vB?HZKo-PuKFYBh>IfvpXQ|txN5#ckc_Y zj-Ag>1F*N&q$;9hzu;gM41C-PKg@cya{8e3pb7wGO(p|1Kc?B8FNi?#lWILHpj9;qsP-~Cmh?0O1pIugt!?Xf@lX7mg#p1@L z!|+H`04@kAp&(7xn`2V{w;JcO2NRq-Xb3k)X&JWJvrztWW3j6$d03*~E~415fH&8? zw8y;Ur6{Jn_=ISv#AcCFhKXqQLz^MP+z9%>?7ZmhMYK`>=-i{l*r3M>`QNJ3e+voJ z4r13tMC%Wf7KwN7+ zSd9-n%ZKeB{v-qDU4JH`Gl?YheFU?3RY0Cp@S^a+chw;$Zs(KL&~_@2aF-2E(BNu~ zlXThFVVJ4r6`@%N!8fE&Pnc0P3(2T^r@f!>3St>mJY(;hyZr~n6W`dDp!8A!Sm9tP z8N6_gFk|vO=9|KcgS?$Ya#y9$vUTSk@^gRol@XOH-xrQJNH)#+6%%^# zA&(9Ts9r~=J=EE58+Qz{^f|7(*iGe zm8fBUXvaai<&QACqI|G{VjT!RAk`>@nm^XXOeV#1S$^2_3!6lfH~CI!`kas~J83ZC~|m4v-g6i2S3 zro+;(X-=#*kdV}3~)o>6?`;R0lFCzNBiTE74JCUKCLQVjj;>8 zl1sU0wbI@5RK51FgvH(qXyvD@aaM0HC_25s>T0Ivc_x*L6Mz(HD#Pg9XS@qqr!rEp z^Y218e1okEvoq~N0FJpvaxpbX^%%Mw`Xe5z*v&pd5D`Q6zb-chPUR%>{vY8JpMoZ> zM@IF~Er`1Tg4~?K*Ex61^{>iYUF2FwYu-DF0NWSsHn_>HgtMV8C!O?3y);3eOP~mP zeV1i2vg5X<$=`*(+zOK@EuFJiCUAhtvJoruf%4DvPft>Fii_nT)29=v3?45bc+StC zb50#WRa8~1JuiaYd&vQK)ECUBd-_gJ*NrJGX0#x*6%FNXX2ocUEOD>P`Bfk7;;~Y2 z&oe^>LZ6wD`Jt=d<4yTurvY}gW>G*#CS5nzLVL@6l1Q?A&JK`ly}<(LlY+f_i&OY= zQ-D7xBoMHUIG8OD@Lua>5b{fVGr~v%rmIn~aL)~YLA(Ens_$%Xsh>UcufF6M_J@>7 z(IWP)YpZy;+O;XCBKX;Ln&Bh1PeUNkYiV2Use0aUuCwjNyDfY2s5Vqi`X4afaR(U{ z5YeS>CusqkKZ=A1-$<@?CqZ%sZjaAXAjp}?q!OLkDaDtgkaPtSLbBMFUdhm2RsnXjx=Jee+=Uk zAAtBPzjg5p43l;$JA<5=fJgd+tom`#a@vZ-LKJg>y zbxcIM5Ev3)^SA1dvjL~KFkE%IosTvVku|F|yYbK`zw%A^mQihlhH~J8ynrOkJlE+Y zPjo7)v7>zCIU$hnh? z(b+P&bK^R2fEr~a$8@1}S+j!5FjDr6U&*i{&0tdx(rX>a*Y z!MN~I8^)=F2e$TT^$t20>Z!+=(+`VRAjHa&0oOFgQ8VDL9W(7_M;Mky2*V}`&|K~GH1~Rd=_m)< zr}GVqpDYP@j%%HHb)I7bJ@0Px`rY_o0{m<^1X`VR7&6K=^@4EJ5=P3iQ~%IsELhU@ zbRt-B!}7!UJbQj?0klPcF8p}IQ9<7f=^V}abSSEE7#w6DZh82Gw!=j;^m^I> z>3ufBIuAj=m=FF-UuE51=ek`7ry*E36gD&ocbFAirs&*PD^ZQYHmjdg{1~OYSd+59 z*MI5mR*W;Mj3ENSl@}=-xOhOZ@XX&Bx6rxYST;Mv*@Xveu8rdOiO6P7?}=~gO{K&1 zzfcq(;j7Hp7l_gH|H^@OjhJp+A{Ee9EQ+ zeHvJ*q*Mc&dcPZC1?3+7G$zptq9?;2_oLt0;5K0A^@>1%XqJowbZ0>Ep{`t%HMP0b?62R22fMp;mXqH9VvJM` zt2&%t_ivVeH!M#F^On8Ln?%v86vA#cgj9nI6zehu$3#-&IPggclkoqSfu+4lBK!V_ z9a5fq2@AZ+SFdGGTNfp#4jr(?pR006O^DM^)I8>lYe&2+q>c|BD(}DCQQHEBMwOtHAAE(f0Jrr|J9oOUb(I{*-Y*rZKI}kzoJw_gtS+a=Gp2he|F#OI&%X z4W9pE`J+H?!k*!9vZ@s#t}2>x*rp4YN!qBEIGhdHq}qDz=4-tXm1!Q?3(_j6^!Km3 zon~H=f=sH|>r|EVj5|$iWi84({UTW?SQyWRzX`TkP7D=*CD0(s*v1w}X`fs)nDv3g znrIJy+Jm0|Qh!yv*6hSQ{hlDlPr0gACMZ6-fHV@kesEg%bzRPx@Oh_?qEvkR6eb(c zQ-kbvyv@}2SSu?n=yp`2BYYf|=iVCrz&`vldn49vRTj6_dj3-%YSM4VqEX@~UmY3F zuV>Z+;uA+@e_-$X+_L1q=5b`%;I{28({C@JH;M53W@DDMK?Z88d~@E?d#0vOdQ*Rv zt^lzq0^Tx;Nx6y*lcFGGQwIj>fghZs1T!>_vD7!C!oVLD0BQy+Zn|3W&`qpf?HvL5 zLB-b*q_0V4zQf@l0nPGa$C_m(dIpT<;~P;X;&!dfQ{Q)M4H=THI^kal`Bt6x#0qQ# z^jDxIX&{a;uVN&4JIOGgg zf-@Iv3T4ev5shf&-g_}^fB~V*%++Xg=#K&qYt>_wLMK|rn;fua^@QJSOIpsfJwkp) zb*8UDp7+Or$Hh553PHL-f{MB{x866XoS?*Iqw?Q`?hQHaPJGs(I`O2_HKQl}pxNbV z+OLs}SZf|hlnKb-1R5|0F;>M#mw*pa;KjPcVi<5QI!>tBLXQnBP4?;W{5{t#Ek)q_ zRFq@Tt3TCZh%#?j`PpkaP{|8Q_!v%Squkam;E&cdiN{OqK|9^;iflZyaJU-0g}Z3XT&@_x7rv`P55_1ZZP$3 zF6H!Phaw}ycH^lznY}FVT29?(OOrZwH{eX)cK95gxoTC+BHtRU3XBy#;F&86Gg;ALA}6KZLWLIe&h& zN@n;qNjQQ?gB#UCbkq_G+g^S}{sCL&64T#Hm-7mGcfakh4l0K|UkhAYly5to1+so$ zqEme4ATbR{Curdb;23>dvyylD$Ne(g8Wg*llM3ZnmTrV{U)DO2OsC>bS;Zl64_G<) zw_D~xlSCj^Bn7dA>Y!jY$cQ`k8Szt?mJU-FZPvqh`1!EP?Exc#KtOh0`dE2-4%B0Y~x zBTjRy_T=jM%BQk)o?u&vsWX~mqxz-b5;o^|CG6Y7c-cLuaHLRfBgsj6lz%Zfekx>7 z2%6T1y!H~8VBlWI82pig{#TtHVl7j4210@%6-Tu%YHFPB3hVQ`B908V_b)%&N4|Tt zH$8yW2$@P6^RJq^K)QB5Bo#K3UU2$!8gL+raXAriETe>+vzbugJBMe1ZDuDc zsq;EE@5vtxO`N|4oMBP=diz77`kq%1b6ejTRlFc`3y?7t{2ULcV0(q2ah>OVFn*3g z!~Y07sm>n@&Y`QsRNLh-PCo1>!3reDM4(%Pq;SH{8TdAhqHm>w5J7S#5&UWv;#3Cz z^MleH$jC7S8XO>yG9jhZ!=(L~L#1WA=*9Q{%N2}XJ?otu|HI1(1@CG_KH-DAZi>sK zaG6TyFz!Ed=I%}3Jk}hu{)#WOm03MWJ5Wl+=3e|BbS}efo_4;roi;kvAp+bvGTyc! z;`asmOm-17ktX{eYVvPynS!0svY;CHCu4(fq-lBaLGc&eOmaLnye%*hXsD!3ZK}xq z*{gy=tw70?Yw8R1MOSVn&#iC$|7CsVe%tQ75gQC!(hc=}2~AE|v~F!g&H|5?H9zK=tMur@A%H~!?EZh3*u%AIw{{`H<}YQHFEclP{lvesfrgT zY_GM!_FXCtzOL01VbjiB|0xEn5ibT|1oHCc`}X9qQowT=j6d7yW)dEh3!)*(dshv` z2pt^RTyZoa_`aTHI7sG$NmkGedM9oL_3xaU2&|&tR)pmx@!&u32**gSUBfzCd z_@T4uEdk<&LsHg-Dp?`q}w|@%L=bQ9KlaU2(Q=Y;`aB0+9r?8~` zqJ|b-(2X6QHBdaA?Y6(q1bCHz+PQgnOSAAUZMvGZ3#OKwblP|X2b*f5`*I=!m8%<7@C&Bbf)6yLQ^O(Sk7~`LgzIQSm zSEi(r0=sV&v#RsU7QLNCStckLp9SyJgH5h9<`X%#(a!{VYO^UImS#-l zs!uK$Zz|WWXkc7E0C656vaI|tMgf&{90SNa+l2>UdjApkQ1FzmxSN>>;4vb-{AG^h zW#qyyzOLmIq%#K~s_$jUlnU-9N15F}F~44jHcnFbpF;Q);~+*OZ}LfX+Q+67k>!7}W|5 z?eP0Ew-XM8o+z5u1??`0uvX01oW z4cndBory=k`EZvZ!!C>Bbup^P7WpBT=vrEAVk~}4@!#CbPuZ-GxqA6WG_|jTawG^9 zmp<~7FEgJ|DX3f^fEW-1;tZzoDO@g1f1=eDkjTnopq|>j$V?>NJ`9r4Cw$Ye2EKp zhX;Qd6>ewQ#60SJD>MIV*-xHNqs|p^>*Q$pTDE#zOY+Sk)A!JWB1i}-?v4F}q5i+# zI^JSy0;?kaVW%@N8wu=N1PQyA31eCBEB8Gn%up2ZM_M+6u9W(heen{gBmb+%5Vo^e z*Gm0f(gJz+>M0-wr|nOm34tCSnF9Kev(|oJ9HLN=lV8RA7?x5?n&T>d*3TpiV`K9 zzLug{H$yIenHMHczk)%MMQ?!wE)ck*ApM4~h;)8ECD}dWSf|k60D0@*T$h)1NCiG9 z@idv8o&cpThr*92jwG(?%ehfJEwyFN@>}^oC@_YEjpH*adtNNiphxFJL&}UoTHqTp zkx1$_rl-~Y!6k7`#mFEezuiRqJ5zg`>$P;r<2o+hpH)~R#d7^A5ivY?DuGgQkpNxT z+`(&Ta+;yN*>w-+2bH3ChEuc$S9&|cvbrnP9j?)&^m!g=*jl+g@vend8AlQzjnQ&# z=TfxPa(96r9&dbx{t9uZ1q=IRk7IpX3MzT7mW|ZkQvh<;Xk{I@YniZF3eTi<*V$Jd z%aEs-Utz=C1VowyOP&^r-U|g*i`S!WNIJe6QhO@Cn*1pqMB%Ok;q73FU`H*%di7HN zfD9j3`q7ZfiOyu$QV0#qbD>)lAs6bZxnhHzP+Vb#UgXbEC~0%a(>p-u2f@*?Sr{lSulOY^XuK z#EpkE8E%XVEUBQjc|i^udf=s{{ogrS3hDo|f9m5&{dcT@K(eChZMMz3a*|3%J={KB!=sEgkHBKet$&H8Xw?VM> z8Eadr99l+<$3?FxS=r@K6Z!IiTMx(Gzg2Fz=`T9#mKyKcQZbKC*IKFb>IcnEuRBWD zu08g!pKCiYMv_^3-q;B~6ofl|NXQ;uePU^!oVUKa# zp1&;UNWc#9MRnVgi;eOi(~;#{|4wkQ0xwxL(00hRM$&|NnTPgy1vSb7VPquoHr4++ z4=bcxe}EXT`kojd=eBr9^#Bis<9}cVKDp4Xg?M5V!unNl{#mRymuv!My@QsLk66n? z^?gmX#NE8F{x+Wa=c8N>j4_w(9CukedFAHBMZ+1Ws?o#!&P8wTr9HL*rh{fTrm1HN z5-Rd<-xo+}U~_d``_kj6tptmr*KqP2SWC?{UeL+&+!#@QTpq|VIBl*dw^}%7s#q@d z19$?o^thh3V+Jm#W7$fqxj#S@qNi7^oYz}Wp2<;y+|^oS{KZF=X{%26_pe;CX)@j> zqQ8sBH94De&bHK?WRpFh<(DyFuiJmy-$r$>+0TjGHHit)a`HCJDJ5lO&DwW4;Ml(P@vnevta6^E_>@nPLTZDVP-51Wku?$uKi6L6pTJ{#4uM%#s>!bTmK!i!m zm)Z^T+R4ZLH@Q~j#zx`37cns3L)9?|XaU~Dcco7x0JAdnZPRHGBJV>ar)%3NTf)Q;3?OO0QG)?4ina7Xyb zQh0(Z*BiNnS&k7`y$wAxvU;wR{_;zfL(_4RgC$3TCRScOuwT4 z_bU2Zp`vFouCgkssbWC`^jaMc^upNg5BZ|h{t5q7jXzi+2za=8OfWkb3QwCYD_6;+x*T*8~{ncCiNxg%}`+Hkl#yr(yDudRk3|r>mp|E_r^J& z@V3<2vGnWqk=Z`7w^uwm|C=+|AJgz*@kh9GK^Rl@5`<3DGvsdJ)%r(|PDPIpz`T_X zdw}YM*HCW2b-GO>ZMe=HA)urL_JDXVTR!I=#p>FouXSGCTSQHNuhYN5nj+9wc9Awn zQ|q@Ed7mXI+Usskw@DP}zE|7+_&PCgzFFx0r)eUpTn}Oylhyrq0f2b4ND)lP$?j03 z^DIc=Yt$!ov)5^lV90U|d~3a{w8s%7hNKzv4qN#Lyaw5nDy+VCMyjd;n>T)@x|7MawHgf&Fd+m9en1bV*~riH%E|RPvFl1?#;n zmhAi*OIeOea&IoD&5Qn!e%F4<>ryhiIlAMb84FBpW&E!f9P09!TLGt3$?X9ltuOF~ zsS1X^4D;Cf?O#jiPVf{*#^E(xTg*MTM^;Hf{N%IpD()^ei(MCi3C|0YC2fdjKftvw_W6fhYVPd)KKIk;JYSbQ7DR!XYRM(4(|KveeM>Z{C%CWF0H9v-DMFZ;em$eBC?P1Ud6~VLq^;BpCGB^~*IVNq-f=(o4^p}JC_@5r0 zXup9hhY0sPtItcWB?%hs8!++kTz?b3SFA%)@Jr!`!g@+QL41>$psc%;X>6>sLFQc7 z9AjXvwt)O4a>;>RO<7b_ZC4^!t86_`#C^r5txza)u&!FpseM}7@>uJ8eb-0x=pa|W zvX8(UYjh&5{%vITi2%X$UH{($(klMpqDG)Iv>b)DVv_G>+ZmHn>v9@yQ?)J)m#{D> zL1c6byP`RPDQ4Y463(&gU%vCJjUAHs6zYDo&SLcbk3-VyfPOs7N1<#SJ37&dBGC#q zh2wlhxC08@0QS^bvAz@N1nuZ!&tpzat~Owujhz?_v<7!ojgt_qAB>>@Y`4obt|eF4 zlZ$EKLDha7if^-^kFKG6h^BW3d!&{|{&$_s*s4`xZTge=rSv(SMXuU;qbRFa>cM!Q zgy?$XgFXoLM^ip}IT1~{de_VfT7wWZ=!v6LCgtcUjUp1H)$!-t(|eGV)C%83Sv~G) z&*p+$iL0+WF!C;|a^9JZD$-jwgB$F_W`A5qpAHwXl|Itf{as;a1DSCd)N5Y%#{@lQ z=+$TV)9g{fz=~%$G8c<+X{!-X=-~Yj?Rqghv0Hd%H7LGAL!TcYk(>P`@8Jp~5m*dL z{YLUGeaiEN@R7R)*{$E-<*QhdbNyX#Vkr1)&J3;xTP<|3O?Rj-)Eg1Y2<)G) z&ZD+N^UU`9gGZ@~U*_Ooyd)OZ2b0zG2VGrtwJJ-j#<4)so zHES+zVyf4&nS+jc3+z(FL-tr#w-K&%#rIdziQB;Gu{Yh*@SzpXMRt8toZ$v|b>s@7vhEwh(72$yI(Q==Rif^t1rE=Rt+1kOC25gE{ zTkNkp^luMlEl!HyVQ%av`F8~Gem(+a3`d>_c*krfM*Yo0y;<7{{l$4u8RmfJ52O2` z*Sz`$*D61D5z5fUD^swYc=?XYiED)!4BtF5d>`~Olpzw*u1o2J$8bwtQTror(n-Zc zMbi*oz1J|hyX6OGaHq#dPUvrANb8k6GUf;(sUJLt?@UO)>ueEYHJ$O3ktY#N;*YE` zx`p8Lke#*BX7ry3=?%_+@D+Do`AP-q9A))D{Zse1y#?0Xc@_*Jr{1|Ns5C1u{PJ#- z1{P^d@XDgn=r}}cO@?9BAP~1zUcK`WiUr!$(38y5;_A*Oiin!sD+CTZj{Rc;^-#o} z*);gv4~3S~0NR^>#<_6Xe1lUUt}XWBOOzP4ofSN^AGQ;dcQl|ket9pS(BA_8e#$07 z@1C{)Z=4+asP|6G5{)wH0ZXCZZ4ig`5J8xoU{3&5uq4!R}E(3 zEL+>x3^cp8i#2CZgkto;{(P&&Z!UQC7JYQ~xBVH(iXhV&qLH&`w!$65Urr{F*Z#C< zPH%CaTeeTr)I!_dMGH1SQF4@xBJR-pf=BH;F7OdDgBEL^_jOKFqWFO=yM)V;S1HM^ zLKkJaE?luADGqRR91C93>1WDjUl5@5#zOtNa-xuVL7KDL!gA=yb$AsHxGOx*BsyI| z7;ZET<8Mw&*v=beY}eQ{R|m2-PueV47rynYC&JGdW8u3s?N`7Cojwtfy`zw9hYK>7 zWO>niXQC}Ch)MqAPV?Kbe>?CrLg;;m>QnCbZH_BFMD&ZY5GrW_y_p20y5mldmmmQ`txSu7D`h0Tffqn-0iXFQRNpM5-!IdH)c(dH!f`sczzVt4uu zx+K&ieT0fL_yj^^jELO(vyJ|og+=f#3JPzy6ZM_7LFsFXcWA6_()bJd-w`=i`))xj z=8{ezI5i8qtVC&<8Ra55MN?UF*&lNYUo`%I6J1wAt56T>hNHaBWD&*1T3{& zr-?g9M2U?Do`n07EUkqqC^S!!$p)-U+h&`oi|uORgrWl76ygX#8g$Rj83L$ub4cQ| zfQ2jma_pmNs#H~nylb?K7qd%t-U+WEv8m(O4SbYlRa8ce2Q*ArVh4*c| zq`SSERt$(DK%#wjz#sQOa{N~^?GYPY{K;ol7C<1nxBFGvVPUcZ`- zg&2DCcjPqKHsgK&l{Kw_O40d>#W&|%Sx$y`R<-DnbxglhDs{9A?fL;r{A!qxx~gno z!gf;6`aoGYI({da=%J!VMk@3ur@}SV0#BaWOgeIL+o>5^wCT9huj$f@d|a~zsVKyZ z7ll2TGq34?GQ)#q&+jzs!KP?19TsqhUpoC|c%0iO{>R)hdy(Ku8bzC+r+yhK z*GWJ^$Ix)lYF?lsSmBUAalMEt;LIn~d%(}EBMMX(e^eBc6^}&5$y5=}4+b&}rw-(j zRt7*Lv{p#co@rptoFU&xZ^7V|Sb&~D@>(~(7kj~!VEN=NMQ!1`lRF6miu!^MsfKkr zM^^(gS^`ccFocDEm*=4cxA4$1I!2===d+7N?`@i%gbcXoka$V?(< zGY&%*#sh+y2++sKR`2``;yCPBPLJd2Je_hZa{n0%h((Pd&N)bM%SI2REJyfq@TPw8 zsts9IJBrW+qCHSl-loqRcJihMItekog7tn-cO0WML5&KaLRNI=@m>4u6s3{KOTicI zGc6PsLF8w5B+JFkD?3O|yl9oo+-Dt)mfg--;?3tJ4Qx~$o8cpooEjN>m%~I(47nGN zdU{({q=M66ne1er%=-WMm>UkC6;6JqQCbR+LmZLz_Afq^*6)5Ta5P0UIh53JYt?80 zG-CQjX>;wVo>1in1L4HaC)zKWJ*864MfSKDrdw4aofW-E?lMSN%`Z9)nxSqXrDtzv zb7)#R+MS!o3OlxWqDNUDhFE{FO-3kYggz+zxZev42!JMOT>sG9Mg)5L)_i%!*ZV|D zDDP;e;vwqyuPXm_hyUtJhhx4CYr33C%b}qU1{|2e0+<+2hrq`JQ0UTjeM7?0 z8=Gz&P`R(!yCDMkk09ytWA9se#8cj}tlj4UDi8Mec2SMw+iO7&q9{GPay{{CZm-g> zdOSG2eeirBTbq=_Is#fyc8q0(3n|Ya4c%IAs>cpp)v+aB!6IHX@-fwDgiEZw?t>^B z4nN6E2C|od0=uOn2Jy)^&Ai|Ma)pID?zk1Jra{DR z@ou{p%r?!@htseSw=68kI8{A8!AT?&6o}?VAMm~m%h9kEno2}Q?7@v6j+pNuk7krg z<3&onN7BDQQ4+<8A=eLhR0@3*_v>XR$t*}z=iJY;NCx|RQYapYFaCN^I@!WU-SNul-s+zCiU{ym3dqB$(yMIAHhuR>Ot^HC2<>z;@%17@|_+@zxQ-X z@}HR_nSDk$Ca|19aRYgd9bd+(sN8u2= z43XlOROvkN&Gnbo@X{CamxGxF_8`kfR&5(OMlxh%EmiF+vlA2WoJ^{aW$bQN{j6$Q zop)LF=pjOxGf6V5Q-Gs-vKuDzvAOO+p7&Tr;qAv1{lB&?`i8Hh)mpFTc@<|>77R~6 zTrScVnC_4-BO2II(lWzqdFcHkYdxm2qnVTk!HaGRF!FC-Uj7o;R{oDGbzyFSg*bTW zH%}7GouJ=4@2;Awl|#2N=DtL!QKe1Q8tu6iizg#qphvSNVztx2YEv`(>_{#bMgzi> zDK3oliF)tP{zi`2GT#!-ojMud043KyM;t{WAGQ^2`-NQXD*&r&rtp^@<3agHbCXB)lG>gMK?w8xzX}w$(O{7G_@4^A|Kc!Q*Dyox_Z1@d%ve!@HS5Nz^$s> ztn#Sf&lH#E$8;a?p7i@>y_1%2LE5qLg#L02acjGla83sHcusqRl2=dX2V*a3wx2>g z;=l`d_=qpkZE{TdJ3@;ZY^+?I2f_RkYL*t5v5BlqpT=7f%?rF=?F%imGG4zP&O$vn zqd5HxBfzlrmrTtP8STQ{T5{;NF{8|}HS=Kwh*sKb-U3Xm;rq!c|3#+N$G2kybrEiR ztuNuV@JrEE8`=7L)mNw|NnJ8NA?L!5W14SRcmIy)QI+K-(SH2ct4_Lmwh?5x;Ek7T zr&v6?r1zNbBA`g2iFx95ZK+M=$_7VSkcZcnmo_}kH(M(4foyAEf%zyPYxhLgSN2cY zumJ}1>a(~clS4sah{DVA{6|t-Qs=S`bw4-!o|AGczSrLc-S5fJeDSKwrt>H&P;&aA zMt2IO@_g4@8KKt#3^(W8EZX4#b(4XZhQVu7rw1%*oG9uQR?^>2zW*JFR<^{eIytYO zSwBdajpn?6%QWwO4hDoi3|oG4Z6Mo>FiTSzyUK7u7_7@e%yr@cO4T>@ZX2zMCOj*b zrB^z(&To0^s&xY$ZWe1Edo0Cl?--scy&7PH0b1nZ5%hto+Ra63MzD+)9oEtnmgH4s@8!0yv*ShGfc69cw zSw)>~&(7;gIFo9|{c<_`JONKL0QEqH3iGL)P(&^aGWFAK9lKMn!wRNb9?hPRnq$5V;~U=^3tlI1qaRjbjLg1|dJoB=^{{GF_s2{G5nt1pYQAUk5_-t>%Px(&UMap-S>Tt z8$74vQwKYzCHD2P)bH)773ESbsT&I=6DWAre3>pUgPS<>oa9AZ#&`1umTA`g_~)#M z3u*>kh_}<32e2H2sLxb_91$9)@MSZk`m7ndk3l5N_ z^#g}mw19DDf=XtWa9g=cZjqQ+>S)o$8njry#B*zw9=w-g<5>_z>-duo8Slzx-RnvW z!r5C;xRXW~w+|??#5X;4eqS@Ocx(0^ANGe_GT9e<)VDsc_e)s+#nW8YFznt0UMpzZ zq&1R;RGw3!e!cu-6p2D7ox-Nq0;R<`2c@nbQiR5A}mg@@bR=>ys%~= zZK4;md!mt=CC3{JS&j4h&YhWx8pE)9e~i+wyl*YY%W3=;fiI-H7LE$3?kV46XDD^) zcegx1zkQ+cX!wjmyWi;KKOYWLYhwu!Jw(v6e`t?oW*@&3XPC9#K%w)ah2G2lFw|~O zUxGvHDQR);26SsNS}5vVXlE?MEZr6(8SbG^}ndW`!IPM>dAg^QG(|^ zuKo6Tdp$E)WKBOl8hX(3CDnQBEygz_weW*l$TIa~@7suyy9!nA2XRwHJm)rUX*ZU$ zx+!ZIr=R``X&)r42DF$k(;?W8PGeHdh{`RhHdQN84?pfoD*xIg&DLEBIJb+N5dg;u zdOCR4eEmj$uCnD~61smW_|!ay@aU3)V)KPei<6ic+>X}#Fmn@cG0(a;|NZ0uh%K$(9FfK zWI2Scp9Y+X#DwLW4nwKO+-`=hIxJKFH~_^b+rL+tffN4n4kz}|i>5r}nv07 zT0yK}&`{K-51{;4W+a92XNd=1yAj=V77--NSSS8^VEEgb)17j3b#i5tRQ8Xn9R2o( z?i6g#9&%a_4;p<*En<`#Xmb=)yQ@DudMJpSG8q4=HB&D29r1F2^tFCRlOZ)`ApCJ^ zNbhm!QC+=KfaJRKz0YZ6_=DTQTgZaJXcS6i+!AkYfg4b}+>#AU291XsJ}&+-7~A)D zLSR2P-*oAB^vg_VRjP)V+ip44_U@PoCm)TZagK&D+>4}Ox$)1hWyE>ae*DfncgmNJ zeSuwgu_tJK>C@OqzEDe8Y`X-;keebZN)=X=1YGP^_wKh)()BU zIjIiWg%wM*MT?(6f*?`++uJ>D*$8MJ6aU+6m?xcy5?mwE!i1e!(;4hmC zi-`<|unpW7K-g;q(EjJi9W-$lYHuJ%lEPF)IY8!8j7d0h%1@sV)ca>;@EhP#^gm*S zb=4RJYhB-^|ERFO@SQjY|MD}Zk5-oHheQKuechAoYD>F)1C@|!>igh3mzUQZy`4oH z{*s3~b}S+-?qt-g>^|O=-Uw}aX0U4P{R~erWn9k_yV!Hw66-%r8KnB6k!OOjd!2nO z?Tx&Hbeb-*BW3AlS&7~qEs-hvYx~N_58r#*GHx=33g`1(6#v7GD<~4j96Pv~=KPgV zMddU8QOF5v(-68N7+w}}KKcaPs#cXu)EQUuk=7?nz;wiJsSf+XVd{<4su4`;+{|HDaf+#q!3d z%EB}}Mv7)a46%Q0L*w^_IIMjC&3mW584ImnX0vWS|4-Zq0;Q$K!=%bR2jqNGSZG5I zlhAj5{ZgISoNz2kxvj)2`hU2fAuQBO^Y$8k!KX3xr??>`eRRW3O>h;q+S9Sz@jP0- zo{bU0wJyL=>A+$bEFv{NpXzIXjTf(09`9XQ@Y>Q~pAAV+J&>MGi(VktUED8=unu#m zd9GkCq@7Qb$?kny^sj->g0eGtGTAcu?DqO^42E@|L3sN7L5Slo5nhCrj}%K`8J2%O zCV`*NKNFKfmt|>^+$!e&CdjZDaq*_;(BoB#d511sNI4)#JeAT-24IL@dFb=$2RPNO zNd*q~i}R&jB+cSsJlzDZ8eHFE4gLUOCquRoo%)lAz9cn*4=xNGBy(l%a^*U2xcd>T zYusOOIVYJ>7<$>moqjnVIIC)8#eB+L zy;hUv!BQLS!Kvegn5P1ZF!`tkDj@AFfciqHP@Ut8=QL%Yh;hTa8E&L)!~s-e|3Se8 zSgw&#heK`JWnT^mo%86fIE%PJ@!ej0U-^`V@;cbz_|2RBvb7=a?H(mrA_RnOh6 zo{*53hebkC@X>uAJIjk5@1i)5&4s2vkE)lhpi*ro-PAa%P$yZeYVY-(`^XVTI}2?G z5pWT~awj{()5#%`gG}l_%}csCipNr;FtXgtmuMr;I-j``pALB*akz>#^EWp z$!)BE)f>;E+t!<4B5PVK;|Eru#m5O2GYpX#7;~ZTh<8e0`MZ_W?l9c4OQAg?elzz! zfFQAc=uojOGYWmIbgC(`*e)fj6TBNM##Q$cl{J}WWVrI>#b&Kq0LT1x>BF)L>l1E+ z-clc_Hs_XRl_(c4cJ55&r-hS3kHmNaB93iuxP2g%6GuBLP+xT97K?pY@E);T%cG^e zLiW*$IuYC-9`1*jkT(|9A$o}VU+P%0R_fas)NR{>ox;Gz$8HQ*{)r!iZgg(vrdB(Yu4_0|C3{KCUOj~d`(Rb* zw@f%!JqHI_kK+3T-s6edtL|>bB=g!bj7^|K%*gRa=05SJ*e2xB55m&m|ApI#CK-PtE|Cv*_{vgdb+{_jPN&A+|2s z+k%x%w<|H{ULNC&8XgZ{yQQ)9#b{&kp!!AFpp#Qb>Ia#I!09hBQpEN3b+5sZU09|_ntVhtsTvYp zJ}QjNzQju;sP2dCYt85deZ=z&Dm;L&Zc@!9$74CBXJQl9P~>mUdD6C~CDD%t*)PD) z)0|WeRGW@Zh4J-{HXZ(M#;d+|n^S=o;zJIqWxV(1FEu{cS(2F4lr6|Znek#hHwrmc zVoTJfuNP?>p1oV!iXF;qd5tMis-jIh?GJRXMD6>=7L4o@c=7{z%$T|Y)15D+kTy>+ z`eqbuHIKMw41>h~s>NB;hu|)N)9J+?W`p!r+891=a|;f>ODp7@|Lu8p$yL-LDW;ZT z_kw=J|D@xKCzns0Jkn(TDQYiz>7Ko}Pdd54fo?~UPo&>Xkoq78h$H!iiG6!0^hXr}(m+Cg>8jsLuHwTX9EISjeILA-Zrb)n~}7tLoc zvBR;izGIlT&a_ab10{7CCvw(Wrt+~Gimj7bFpHcWCNTP})%{kfsRN-JHj{9W`Qb*SxvK*_{%mwVB3UB*R|bUqSwJ-lJ+$uPS}QD>+jX zXu`PuPkcOC%kBUXy3P@q+V0 zc!%~wTEGxC41y=UkN_uVaUQGv6SvhH4$9^iwzm(dSqF77n&J@wuRTk`hO*`M4^6bQDMhgnVYiG8p z8h-(xHx&Gw;|}a)aw}zm{&b0-&LwL?`F%r&Xu=$IF8?Vu@YzNPoJR#FuTn8>l=i~vWczoBQ zjgbt_)_iy8DkoTT3T0jF)c8MAwK&~<_}037%@t<`WL*xqEv3Rsskj}Q;krX6UPy6} znJKMELxVa?D9Gl0H4>(~L-cJ0^@9zw+7Rk?)al2?B0al@)!MFwIqJ7t)ReQDUpx-F zchvz(30?vjSO4$_DopT_z|M=L2$!}C)E0Vc?$3Q4r$aw-ghcn5@ya+@h0=P2m@vyo z2(U<{!LDsxkI6uzZ4l=-H(Al{tApC7JhJ>Z0-xXj_xOkWnr-iTvpjuSy7+(WY0K!@ z#D?BmbeF?=L$s%qsV+#&^Dzo9%tKr3qvp?rXJA#_2T6}!dS1Bx+ zYY;nV$5su?w(pwh2?47dTf)XUfa~PFEccIke~+ghh@f%;@oE9<^c2}VmWsxD^KPpA zt6+qJ8H5t~R4f14>AP~nZsBc6EVTLia2qIAQD5UQDm%7NY`aprMSYipPNe*qfq$cQ zpF2fK|Br~!$I=@2^oM^OYTvpd!0^nXu*|~=S)TSvB7gXRj&Eha_3io13s1eymBVCq zR-I0LHq7GJHfo>W{3Y=OIx#Ad6T?l1lwR=H`xk^mjA?KTc;V}n}9Ac5~sw*Ti zxX@bMw`_=$;i=Sn$RJ~rzwM60Tuvvd&S+cNAd@9)r(IQ2xA0u%qv^7P_pd)H?jnw@ z*Ge**)bgeF(G$vTDjT;={n{7a)M|HS9NvieXt4z_WKU1er#4IRd0bwbhlq;5z; zFeim=g9hU>i%Id}ypEi0mnilm4J&i5>>h^u22*yD zgt2+H*xAgV7PK@cHaDKf8SOx_1PqS)!YS~DQ{=T#!7hUPx3>wV)5qP1qQo#I3aQr+o<%p7;iu`e`6>Y-yWIR1? zDOj`>R!m*Gl;sQskzPr#9prGKiLq56m?w}rZh%2Hya0TrJGQe_sr?V*zvmi0gQd)E zr%=mq7+d=dtA}ak+l{}$N z-G|$;1rZwJfd;}^GjHurX9#?o#E%V{8Zy6}iyyK$pc0NYFUU(A%gxFU#Z!AVe%qcj7+Wft zr%!E)68PcBkr0}2B=do2#=h)zHH*E7zBFV$z@-yrCk9Ssy0U@WiN0mY0mMKD&t+i* z@jo&tYaOQz$Q;rR8+_p~%f=^>&*|%(ylB{hXBj%BtZ%uy0nk%Jv6u978}ZXAcw$VI zn-*`E0_~1CB;oqF?bHLhE$_H5(j$RJt`Om-i$1+wC@Q7{GaZQI9MSz6RsfH>actJ$ z$Y<}Q{ZvD`n2?O7EpZ>iHB1U6_)MrJV(g%+{w}c%gGWbeS~-!|EWtZHZA!8sfYF|% zqg-mCer);Sb0KmGh&w||Vo4VSe^N=mZ|YFs_z!lV%+Da^ZPlbxvzY*jb3g8~KNMpf zJrL%AAR&tl$X@c7$*XM~&x~bbIomgNLL;7WKto2>;O6^>kikeh*iE>VxuymZAb- zi}lYl>7)uEfi2TCXn|f@jFYZL^bD1zwLPbbYiK`;pZ>WOYNqMIu5yijL6$Q zU3GuuQyRH8+)`b(f8E9gvmpWx$nKar1B=4aaO zI7)#hGO;ktAIfz<)AI<_T{CrN<~t#v?#2 z$~ThW<}kB60vf6oj}8{ zcoMEl(H!=Xj%&V>-1TtpxKpUJiFrb8d~?-!*`>=l&YJc(D(N>9v-;z(QKZJ*hvyqF z#=&HMmHB*QO=_fi>opwSdELMXac2htiPsK&B=F^8>O3m=-3W~i?&NxaUAF=U-5X`A z!%2`S5;0rn0G7YA9}n5qk3uo<|Ms5?R{Sh`6xM?E|E2s6X^a>GMPy)k_I0+ALcGJk z0(>y6(WI}eDe#8Xur7OuQ|+o;)}7wr76i_ZVPz(!Lz&I6tk26=7Lr(-HCl&BYYcq9 zC-bRfdKMoSA=loT^#Z!t12eGTn4RsIJAEzf>M#1mTB=98p9{}SR)g-VAGrOzmD0;W z;%d_9+|`t+Z|L@1_QF*?ajVSyOhe1etcLBV*7cLsB2I+5pWQT!$5`)=p2<{@a3X?o zCBf=Y=P`b5O1)^}=9mrs&#`mJ)>{P+{&g${>J^h57DL>9*9gf!cNnd>{UtiCKS2!=h4`|@I$@z0Bbs3TIAkc<7QLyjZ6S;*Zgml3}`4_}hUpnBl!}5i@p1Ui#1FW9^JCl&bbS1?qiqZ7`=O5p5DPzAx z&6o$F3`PwX_Zvc0XD_ni)ll8@GK|EW_N?oasl#DsAo2M8noV8CKeEgtRCXHY94Y)f zQOJ-*!~S8qx4Z3-XZItLb&vsX=F(c`CEKiyM#UX*Hqt}yBB2oS>WZUG?oZ>(*coE( zJboo}DR%kWr~Ca9q3%Ek_)P1C&(p#{ZCJBJckBzav-j^?+*$jGqvT9VM7RRO>4$Tn zf@^3SuO=^bzn@a@7l$EN1tFnNoO)9{f7=$8r?Y9h4bcrBE<~-m@5OC0;n(c6GxZQ1 z)1KcRm=K^S&C~7uMjr;rJ&h7~UhBMGAJ(uMeFCf>>z?P6F@7GT5-g{J|GQi}{c6#O zP2aK{)*!hfzKeZRLGce+>6=l21`T*^3zVyzyjk9i(VA1WXaM!!1bNp^C zxhgDH-Co~?HM(7P${ls@<aAvXr*rM1uL%{5R>Zx)fW3UqrN@=U+obo0wA;o%OZ zw4vy{6SrVQ>iltdWXEZvFP7vNX$gy}Iomrn>5i2hG4#nM*mV-;ZG5cCy82$c-MT&KMvCfgULmD-}d%=Mj*kND>U!ZF7gJ!}YcIW&a z-)|fBSjei-VLP!D4fG;;;_Tl?f6Ne&uzy{l!FJL9&`~PF=2@^0u|m4Coo5yt=ys;{ z^~gd?=1!zeP$8P=;fjx@m(8otfNv*;FuckokWAOi1Mz`Po+J1D zI}9eQppw@*8{4KHtdLL1k^DFD&zVk9QL*Eii^xQXTi$U|y1MaBtP9|go!-G0$!Rd} z+r#0L*f^bWMRFBk-Mh_dyCxb8Q2FI8`yqu;NZ@Bf zHfd!4U&bb7Z<2}vPFy=C20C@^+j+HpbgYWV5)062wfpW0urYoR1BLClHXDb3jRtnu z{-ClV)qqas(;W@?O|AYz++)xZK$zHpLteD`^r_Lz9_os3>r0Y_yidW$gQZ@mtxNOh z((r^#*b|Lw`yJr68>v?m*^^kl9UG$9=mR1p0BTYQ_ucpCG3^Z*e1g8fDCOLv}q8%oeRorr8<&j?bD zd8Eu{hQ9xgXYlcW2*SM@#*dObxpL*KhcOOgOZcjQyFqo3z(}3f7L2><WMkFNZ-(l>iUU+3uLQ$4YZvV-Fz zGS*)K(63Y;^8ny5FdDht|7RMh6YCQaWnL>0#Sk;RbEXk@GtP+`*fC~4l={}r2O0yT z(KS-M$lBrc8m_;;#jsz7mzi5)P^Sd}P!H>3Y7I{m*zhMOkB*j_glB=2OH*XnQr2fva*m;u74H#Wx6f~6Ok+}?x>^5fw8>Nh13GQ^yfBpJjhyWcI3m7oEETxX=On#Cl zVi)85YJF_x!~;}Po*V1WYMAwpcs#1MeWo`Ho5C!9XwrN3;8H8ONbzGq``cd=*OkO2 zG`@+5#APOq*Q<22I|i(I;V)5il)v&ii>hhs*g#D+U6sI;PZQ@NaJP|M)E_GcMxv~H zW1je|+ft=8zH3AgqU;4Qf1YRaDnD@6^&_l*RlH#^?HFQ?BmUy@_gsy6eRPl)LoVvw zJUHUOBe!tvri8Y+tdr2}nx9?+p|p9&RY(g|s=Vnd<98dajHjoFq4|A#Wd{7WHx1I< z9)`$Cm*2wykgLK#oRz#H5C#zENqr3FOWG%l(qZ%3qo=)YE}|MY9ga`g6?-m-8<-%xDQczzsPoZbVB%exI{Q5_k>! zzV>N}tTNB>mXt3_3PJ$Q3Tttw9WJR0Cr-G!L;8j@*1q*NQBWinVqV00VxG>SJ z@KCR|=8WBlwI`Q7@N;tY2S=^~t*QP}zY}XuU+ZkY9JH&HPjzp? zyoZ(_%067nI?_>lTsZY9ID9nr6PjjjwCBe3D-%FwM!nGIlDgnA_yRrFFnaVjx+K_# zG$(6KS)=hluPujZ$AtdP;Cw9Asn2> zqUILJ;LnUnk+?Lka0f?*WP$L{%`dbR*uu0TvwDq}1sPsWS#dtG-`fvqZMK=tb+snh zIp>;C&nXXhzb$Q&y^dM@yu>+I#hnueogJ0ePe(Mj z#xG5c=emyMX2sRQvh|$zB1b|t!VZJ6v_&pohnFlT0ibrd@(KWi49Aw69Dsd*0L-k> zwkr#O!v5RmcBYQY-z4IhumN}EYtq`pjc16Un$%Spdau;oTh%aOBBbXvT zt#M^Bw5GoI#bH{+nsSD3IMR=xI6qLB`2%c%r3hEs3%@jh<7pW$XWi6xh|&6NeO~ID zo;2%QpTffY3*Uj4tBU#lH5z_~&#S_3o>z(~_Jk3sk8Kpnj%&#eoS)0eF9ff>;*240 z=KF#`|8tfNs9E~U#c2K%W26>`ytD;w5r%O>DbBHjQ|7?kM$w&AW{S1xm@>pj{IQm> z@Ham(>n0c#N!^S?=YGc=Z{iOc54E8QR=YO+=E5Hj#PX>dbbfyMf-YfmBu?R-%h%Vg zX+=lZvw-b6134_doRR`TkYuUPH8F<88L)U0tkMZMh4NG5SWThirXk#AfhO z+;Llwv4t$@m99f6xm7fNGxqA;=#o{$-l-0Jj^Z6ks7|Ucvr_<339o0@ z0Dp5jaGPPFc01VhtxL^ex#<)lLT#lf#L^We&dgxjl&%=FHy_sb?vK{~-OFq5JA9H0 z$uFlT9BZ>x;t<4M;;caz-R>-jw3f%ibZOx}y;;xmtVfST5(+)G2|5Z+hhM3EpZGr+ z{KN;l?Nf-_x50vgG*Zsm9Sx2vs~?m9R<0ae8%yXWWTY36D{$Nje+%i-96#|>@w6loRX&SzGE=6fmlbN0NsiWHDf`p{4 z4wM=*vfjY@Gg{LUxz}vaVbv4o_L%4)U^oxi4^IkzQV%P0{=!H?%a{@xlb&zz8+}OD$gW67~fuc=75m_Oij(NNzZa^a(w> z9%Lheg=>}k)gD`N&HTQPOD08+!=5~sQCsM4bH@(-)r?GXAWGnRj-oOp$YUpq!4ZOK ziah|hr~gkZ$1^k&x-Hkv&?o1W&QMfgY6UcLBz2$@Xg3zvIidlZGymh^*$#Oh_7xY3 zjaUzU8NEGl*8DSp8gsr^ac_ZOkwd8>s>z0e-1yk|2<)Ey%glldpU*YgNvH4?-yuMJ zOjwUR?d~2VuJC+t5cbaqPL;`J^j&Gh$;PzGNI2nnGoHOFMSB&Z;&axqS_%afJ6kuJ z2XEs;v-|JtH3q`Xd~!eT2Br=i|4k~`QF4*H*F#|h#HIlmAZe!o0VEn`Vv8;*LR8S#1~3m?9G<%T(z zCt-%^=+6}DImfmH!mIV~wRBhPdBGg!q6C0#1YwI9i$EauV)n_(KXMO5pMBbPVA<2W znE=*rAQJQnDulO^1}pL=r=lC$nUc!-f?V0jpC4D3lyx`dlv^CwIIuk@-km@k=~-4G zUTWS7haIc11z6hJZN}bfOgmH0@toPOH>`}zq1r|l1Kz?%il|%-T_bnc6n<@g@o{@0 z-(5o*ese8!uZzpzP>ktF5CW0E+f9;twsKCu_5F^QCrW%N`WEsUbWM<(+Hl%1`Q@w$ zSX;=hK93QySB&ENL#E&9ioI*yDzb9m{TNYei(U9S?NO9q_50SVB2{C)-8*Z%G#Js zfwFW8ZQp`$A%?}%Xz~mxx&Ul)=KI$EEB)S_-+ZKFuHew|?Pg@!-P-NMzlDX&E|J;l zqrls%7nF)TLgHLr?$niFTLuVitcSsKK_=kM>!p3ddQd9uB^B#UZq5c!Ln=$80JIGw zEHc+v{OQ9oK-y%?yvLWA#RR$)2GM27KeHqp>T~VhsCnhy{fFom?poUNsT}jSW4Ana zZ2MWyY>+YL788-&Os~SK@Fo_dj*>P3*q?4MEs0+ay%y)`9m>wKgU(in`*un-r4UrSk%i0oPmL*2rVg9%1iIZ`_~UO zDy$S;@Q7XGMX^y zh3AOOU2AV0FDxa34i&h8FpP|}M!6^&WlctWF656oXSlSvj>%rf^g;zg@zv_~-)lOq z=&3WHd?k0Z52J7sO>?$|SY@k7pUu1aq==Fn>#OnMz9X8o)--=qTP7bV`o+v@w)#dR zcoYwQb5|CtLr<-Hl`=gM$g2$k_J&Kte&+y;xDyZuwOH`*r3T`1yQ;vS<}XWJ9Xz~E zhyhTJtoV@GPaCmqVN{`p05Wv=@%TZWkCA(!M1;-NL^&+%WGgq+!B_dvPsZcHtq7zY1UaRB_UpqViPFYjP*j zi>%Gjs*|#>G(K12a%-p+evWew8}6G{j1ByZuTUSv65MRLx!TTcL%e(j-pc)A+cjZt zPungd7=BC{pR$kKuji$YD#FQ@>HuvbTmZ)T!V!zVQP?xkKd6mQbcU{L8XNNPRcS+MVJh4^m2$xU+dD;&SSn#3Ny?fOJN8g4H#nfrkG^HBg!&qYrK zm#veV|M9Q5?e4j6SIr}KkV};BnP8F=Vs&#gW?CxM;oFqnY^j!`;cT&5mrjf-?#pYs zsu)EFE;y2Mzj8K=E7Q_*Vxk8^p`x{;f3-grJjDd5YbhF5yuiD9I^JtD&)SjMuquT3 zjDFzWuv2nrUUyQg85Dm!KOL$K+x{&TQ*+?s^2tB(xuaiY^iTb)8hb}!5YUP{K_cP& z6$$LD{0DG}qZ$vRSt4J$bAONhZ?)gWQ)w}%vhD^;;nkxk0mC2AQX(;vpW(fv6i!WM z6EU%suwAAcF%^|DB~WdpliF>bbtXZ1V)6aVW2UWG!k|4jH#5+}fp}jOA&9eP-a8RZ zt`h1--FC|s{f_8!oTPYCh%Q?yH)NEx>Ni{ZfWFttaZ*5#4{KlnFl%6F^=d|lM8E6< zNzZw7ZP=TCsPH;`|1wHW)9fDxw_TIS&DNRRl?^$xxqEAW+*f$Delb>EC52qV-T7l) z;mRh%Qm{#?g84@ZpW6!56+5=D_IXK4=y9#{^;^j8WEzmt55OABz3C%C5f(fF@GWY{ z@U-(d)HCf*`4(R%*Yw^`PH>Sj>Oc4X+@(|=zPo3ycFW*tLWcE9hp(ta zL>Ph2tS$gR)ww@d^-=1~T@+?r1gqZc!}A1Pl-&2^|1I`Zc5ghaG_g#cE!Xl%DCgjQ z*jZ6W)kKHb9PWsxZf;7t6#3^nX;(z=fyi)`31=rf!+2-j7V2QIVsW-#q$pzpZ8XIV zHCplWNYo~TLN}XgAuYCGpV^9aJry z3he!XhsLXS&adxNf=nLtOVqnFH;TC2rP>SszPsF8-yFKzNAo=Y7w%mm!?1EqRpm(5 z%_p?}LYgU!k{niQl^t5cli*uEhMhMhvm+?0<)*YwV}IGicwXKaQB2k$IKdbb`m|;0 z6}6XOAU~5%h)dhV^~BratfTIdEvLnHV#haQRvp+$n*8u9~KV^qi5q&&~h`Lz`|MP>&cg`Aip;EF^Od^iPb2 zT*Rj(W0pDI0ou2ZzittiEPH_Y?W`4vY+WxBEzN9s!c(>l^2xX_>x#@`WO#|Nb_SH` zXJkI}y}W~`L&~1v>l30qVtUiPiW$$`g?HA%1g+WyW`L}_f6G79K^0^UgE7uaORebb zC%L>g1zi3At?m>|?q_G4v$Fw?PuP-7?vvKM&l&RRI9B1{ON5FZZG||IW1hT^Rw?Ketsp0g1+@f z+q6$ZnoPAHP_@)!d>dO()X$L&F8Mx zF`<$VbGEnW;M00M(tBWEk%0sI50M?R^{98J;f*lO+T(&6f-c&#^!DF1b&KU~Vo#Ct zFG3DA(8kCB%oM#H(lewj`a@X13q% zThlJrgvxY1D(YSEZ$55wI};p}p$*^iGNuaNoW&Nw&UaR20iAFgJaXZaT3F}?s49F} z@HLb?qX58}+EURspMUaloWK7a{b}#>(Dqax8bf^9`_m~(>r|?*@Y1R?$@S=#cm-)d zX|4V)^1)}6I>ji_{oXA05b`qSWOEJ$8LZB1VS0_SIfW)YkJ?1nI^x|&;Nz$(?0+XF z-(7~PP@XDT3(c1mgxx_&ToefKb~a8j!2n@b*nsB72UoE3H^M&cqUEjD0jI}}pNDCi zbEtq#>)c0@3_vpc$yUuiDXiv~6DiE}!8+7OTU*=r)Aw!oFbs~_1`V5J4Ugm;s>K#k z;E(M>Pt}r5q$;M}{gE=zJBhRQ8fU(a`>I~pLYTd8Hvgr7lX_xDNi6Y1suP)0BzLfO#_Y%IzZ%e!7HPjZuQ?WfP*H}5r-gD%FL0+W} zGCnuy^EUI}zqLm@RNfi^YP3ra)zRwz^}uw2)p{kP6n zBB6DAWIgDO+#RaX+1)Lg!TLq*-s`Qr%aNl$(Spp+tI(nM3HIelnr562VZoGnGz;!2 z)JoxxtvhldYdPT$ajGv-1DQ&v$aOXd;1Ev@bOieZT%qV3Vc?)RiI3QZ54x6U);^V{ z111oY=j(5uPz#LF?B=e7{ERyei{SePg~8J zqaSxL&4j*Lo|SLqI3T`aGweioE$L*A(d_qn;a<^j2cd|o4*evVNAI@$+8jkZokBX6 zRMko%O2TKNV({1bYu8(qms^$t7=c<1y55%HR2`~+ZL`TJ+?l_B zh*iUe*mvvZRtyL0^{w!^!Lm1EF~vpzrr%}-=?m;ATK{J3)E{(JR*oI!;sBgb{Ukf^Ff{{|_H+#<0)>WiWwEa~UyV?h8lG9!o#Pr$JQ?JYInN5+iT(-1RIIxMA zYz4(pfvQ|%EyJZ*lC5Ktlw->IN$JZ(YYp0E@CirX+vrecC5qB5#8$1X8-TIrlgaI0 ziRzF#J3^jmM@nhlYv7J+(aB6JR;}k~$5qQ3r)hAxhPLHBGZoSRBA{Vrc`mAxY ziTb9t4%0IBE|dLVnof;B6qwoIl^>@*Nv3zC8F#3b5?Y4!4bcJM`C3+2?EK85s;z2% zSl7waW1S`(&dnCTCq<4{qB}5SK#kX4XB?)j?Jp#uEIJW zxDJK)=^lJeZL1m*gqBKaHFb2ZhZO*>A1z%&Ll#?&)*9>>a{ub~ry35pm7Qs(dMiSdU z;r_791^`~tXZ8CrR?l>T-t2@Ixwh0KpvI5tSIz~b!=qzW4t%W>pKi)9JkCjfdH-bT zA-wtwG^R0M#kT#HY&PYF+A@Li3}_Ms+7LGUP4TzXFln}Q0852|)wkqT1vM!EIH;&P zapdqU*|BN896&pP3$ZsKe?IQ;&8^+e;a`*7LsRZL&x7CpNq&5R_sg;4d{uu0f(SkJ?a=2jwOoF5x7H`^n*f+==2jkl!-LW78pRNk*X zX#EJLnfza|VG#S^@bfP2aPl47Iq2Kq^94}JBi1k!TDm{r;^tsdqI%}iZrFVZSp3=U z{2I@lv84Dd%_ng&jV8LphfP7c(b`o@^;JscKB)zIPlF|B8hc7}N)cm7*@>_w#oR@X0On6qV8D!pY!PpMzqgzq1t`zI z$~Kvwil39Zqs0a&=$6DEdgEhdUzUK!lG>2R-4pK7`1YKWo7FvnI$jBST3b^`=*zME z+nZeBGN1><{`k2gGmYt8Ld>P_pj2E(MK&Ac62nd7letJpO;d1h;nmSIy zjc5+Bl>> zWv7OXEhTV>W?-i{8Dd^lsKJ9m@7uxE-&=7=zX$tsG!xHjW=~fFS{M(}^8|RyJbVza zzktkKSXwIMw-TtjdcI^!%X1)EIi7d=%-c5|i0T=Kj6i%J7-Y9Ty9wj?&N{k)b}L zi1DyfRLL8yI2Hsj_dUogoAXlKPSwIlrYS*aFXA>G@I_jXsIu@ONaZJ4yL7tt}- zwLXyNzvNp{*yTEg^aHK8`5c7IQnae~jp_^gXjY7#{q$Leo&NnZFhRa*{bEUG007cu z3NV3OMN*kB)n4gLbnEBT+FhKaIkpGYT8FMa#cHr3?u-F_iS9pNs^p>x8={TGVf|-# zz~UWo`$)o75Qrm#+xthK@UvaM@8!+`cU~Tx#pY`Xg||PVRrjg;7Wt>*g+qW)0AH^K zc(*{L&;SryVW{t;F5vx62@Fk&_ersZQ39RDjDXw!tLWN;;l85q`E9IaHLD&W#H$Ea zP}EqDZ9KO^z1CKuCPV~D>X9ARh(yz$)uDr>p4m{c>y;>>UL6sSH6g862qP6F@wSR) z2@=NG-u!>(o_o&seRJoY@6NqyxoSgRZq&2i;!)F-zC!iZ&-ha}5!azVG!dIFhUXHh9@01l(fHBW# zIGn*-LA#PhpNdqU4sgH%%hDIY{ej^B?3%6uu6N_GF)fLa9cKg}D6Moyr_!CB)&DRF zZ(&7Rw`4C_U*Kt#$Pqe!JyT5%^z9G!O0WaxBo9xU*C=d=ELIjPDVhLB3PKH z4K3Apt#AN;9xkx=`W*vjzXss@(AO@RT&DP~Cdk-P|FR|~G%`MYcz9Q}&VdNHA{F=} zb#E4|C)o<-Qp{qicrhBt-c^s8Xd?)TC5-}%l@joK*$3ll9W?dw;ba0%d)fP5XGm2X zr<#%PhK4yLt49QP9fPr%`%g$B+MxP)aHD8*R^>Q5;4B_!mP55gx0||SINX|`87i`Y za0)<=I~kkfwGV}|$2r@&Ab9d3gf+N_0Y3``>q}Jd=Z-4Rai{tp2I;)KNCC^V6d|ig zfPm;uCE%~bL9&s3h1^l4xu2(aZF04Uv)?aGNVm!Y`~X&jXgX%yY@)5P`-7{AD}(L z@#dXfl;%MIjD>VIdq-);6|u-aB*2@K+I^-r*GmxBqdqt2sC2YBJqf_iAmAEHOZM#2 zDWmCCIkrpFh%}OFZ-{u8_26ppvh)n>p(k-I5yi@QnFS}zp2o%-Q0^OuPTej~e0%*% zP8(ATktal(c(3AXRDo&`v@mtC0N)pCccFvunzoxv)M+M{pqQb2cnpJ-5!g)XLzra5L5hoNt;( z{k^=+ISmx53Iqk6^F8L7#X|g0{=g8U)UVk;vtnePdjIGT08U}raQFuwq-aG{3Qu}) zXN@kqGzC9_AKRA%W?#wlu1L0Hq$5I}u4LJ4b;W-I5G}v5J-sP3RoP|{>}n-Bx9G+- z2z%$N9?ajw$Sv8Yg1CXLtPNr3tPB90^htM{ijautX#|{NI3Tn^YgO1=+$G-Lc(-;L zphL6mNPQUti5VFj>^f?Or-_3SdqRqfa9|=3dEG64mmXChftE8cXWDwecAplV>HWn= zEzCFQX=9L%Z8~!II7Ju!&A*0X@|Ldv<%UT1lv{ zYy#r2))~3kD5v(|u(xEv1J@=WUnQgv=Bzk(v!;F)gPY|&#wBHxOnP?=(lU55eBB#d H!?^zgX+z-F From 20411fd9fd4b93b458ffb7737f17fa9560c235a6 Mon Sep 17 00:00:00 2001 From: Afonso Jorge Ramos Date: Thu, 18 Apr 2024 01:53:28 +0100 Subject: [PATCH 011/251] build: remove `pr-to-homebrew` job (#1043) --- .github/workflows/on-tag.yml | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/.github/workflows/on-tag.yml b/.github/workflows/on-tag.yml index 0360bba2a..1bff521a6 100644 --- a/.github/workflows/on-tag.yml +++ b/.github/workflows/on-tag.yml @@ -5,22 +5,6 @@ on: tags: 'v*' jobs: - pr-to-homebrew: - name: Homebrew - runs-on: macos-14 - steps: - # Ensure our Homebrew/homebrew-cask fork repository is in-sync with the upstream to avoid conflicts - # during automated commit and PR creation in the brew bump-cask-pr step below. - - run: gh repo sync setchy/homebrew-cask -b master - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} - - uses: Homebrew/actions/setup-homebrew@master - - id: version - run: echo "version=$(echo ${{ github.ref }} | sed 's/refs\/tags\/v//')" >> $GITHUB_OUTPUT - - run: brew bump-cask-pr gitify --version=${{ steps.version.outputs.version }} --message="Bump gitify to ${{ steps.version.outputs.version }}" - env: - HOMEBREW_GITHUB_API_TOKEN: ${{ secrets.GH_TOKEN }} - update-website: name: Website runs-on: ubuntu-latest From e01eaec949cc91c4aa146fd8d14dba091e868acc Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Thu, 18 Apr 2024 09:30:16 -0400 Subject: [PATCH 012/251] refactor: icons util with color enum (#1042) --- src/components/NotificationRow.tsx | 4 +-- src/types.ts | 7 +++++ .../__snapshots__/github-api.test.ts.snap | 31 ------------------- src/utils/__snapshots__/icons.test.ts.snap | 31 +++++++++++++++++++ .../{github-api.test.ts => icons.test.ts} | 7 ++--- src/utils/{github-api.ts => icons.ts} | 11 ++++--- 6 files changed, 48 insertions(+), 43 deletions(-) delete mode 100644 src/utils/__snapshots__/github-api.test.ts.snap create mode 100644 src/utils/__snapshots__/icons.test.ts.snap rename src/utils/{github-api.test.ts => icons.test.ts} (98%) rename src/utils/{github-api.ts => icons.ts} (93%) diff --git a/src/components/NotificationRow.tsx b/src/components/NotificationRow.tsx index ed5b3f543..517b5d7f9 100644 --- a/src/components/NotificationRow.tsx +++ b/src/components/NotificationRow.tsx @@ -16,11 +16,11 @@ import { import { AppContext } from '../context/App'; import type { Notification } from '../typesGithub'; import { openExternalLink } from '../utils/comms'; +import { formatForDisplay, openInBrowser } from '../utils/helpers'; import { getNotificationTypeIcon, getNotificationTypeIconColor, -} from '../utils/github-api'; -import { formatForDisplay, openInBrowser } from '../utils/helpers'; +} from '../utils/icons'; import { formatReason } from '../utils/reason'; interface IProps { diff --git a/src/types.ts b/src/types.ts index 1b318fb84..fb4f00fb2 100644 --- a/src/types.ts +++ b/src/types.ts @@ -93,3 +93,10 @@ export interface FormattedReason { title: string; description: string; } + +export enum IconColor { + GREEN = 'text-green-500', + RED = 'text-red-500', + PURPLE = 'text-purple-500', + GRAY = 'text-gray-500 dark:text-gray-300', +} diff --git a/src/utils/__snapshots__/github-api.test.ts.snap b/src/utils/__snapshots__/github-api.test.ts.snap deleted file mode 100644 index 2c5335a0f..000000000 --- a/src/utils/__snapshots__/github-api.test.ts.snap +++ /dev/null @@ -1,31 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`utils/github-api.ts getNotificationTypeIconColor should format the notification color for check suite 1`] = `"text-gray-500 dark:text-gray-300"`; - -exports[`utils/github-api.ts getNotificationTypeIconColor should format the notification color for check suite 2`] = `"text-red-500"`; - -exports[`utils/github-api.ts getNotificationTypeIconColor should format the notification color for check suite 3`] = `"text-gray-500 dark:text-gray-300"`; - -exports[`utils/github-api.ts getNotificationTypeIconColor should format the notification color for check suite 4`] = `"text-green-500"`; - -exports[`utils/github-api.ts getNotificationTypeIconColor should format the notification color for check suite 5`] = `"text-gray-500 dark:text-gray-300"`; - -exports[`utils/github-api.ts getNotificationTypeIconColor should format the notification color for state 1`] = `"text-green-500"`; - -exports[`utils/github-api.ts getNotificationTypeIconColor should format the notification color for state 2`] = `"text-red-500"`; - -exports[`utils/github-api.ts getNotificationTypeIconColor should format the notification color for state 3`] = `"text-purple-500"`; - -exports[`utils/github-api.ts getNotificationTypeIconColor should format the notification color for state 4`] = `"text-gray-500 dark:text-gray-300"`; - -exports[`utils/github-api.ts getNotificationTypeIconColor should format the notification color for state 5`] = `"text-purple-500"`; - -exports[`utils/github-api.ts getNotificationTypeIconColor should format the notification color for state 6`] = `"text-gray-500 dark:text-gray-300"`; - -exports[`utils/github-api.ts getNotificationTypeIconColor should format the notification color for state 7`] = `"text-green-500"`; - -exports[`utils/github-api.ts getNotificationTypeIconColor should format the notification color for state 8`] = `"text-green-500"`; - -exports[`utils/github-api.ts getNotificationTypeIconColor should format the notification color for state 9`] = `"text-purple-500"`; - -exports[`utils/github-api.ts getNotificationTypeIconColor should format the notification color for state 10`] = `"text-gray-500 dark:text-gray-300"`; diff --git a/src/utils/__snapshots__/icons.test.ts.snap b/src/utils/__snapshots__/icons.test.ts.snap new file mode 100644 index 000000000..40d0bfd9a --- /dev/null +++ b/src/utils/__snapshots__/icons.test.ts.snap @@ -0,0 +1,31 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`utils/icons.ts getNotificationTypeIconColor should format the notification color for check suite 1`] = `"text-gray-500 dark:text-gray-300"`; + +exports[`utils/icons.ts getNotificationTypeIconColor should format the notification color for check suite 2`] = `"text-red-500"`; + +exports[`utils/icons.ts getNotificationTypeIconColor should format the notification color for check suite 3`] = `"text-gray-500 dark:text-gray-300"`; + +exports[`utils/icons.ts getNotificationTypeIconColor should format the notification color for check suite 4`] = `"text-green-500"`; + +exports[`utils/icons.ts getNotificationTypeIconColor should format the notification color for check suite 5`] = `"text-gray-500 dark:text-gray-300"`; + +exports[`utils/icons.ts getNotificationTypeIconColor should format the notification color for state 1`] = `"text-green-500"`; + +exports[`utils/icons.ts getNotificationTypeIconColor should format the notification color for state 2`] = `"text-red-500"`; + +exports[`utils/icons.ts getNotificationTypeIconColor should format the notification color for state 3`] = `"text-purple-500"`; + +exports[`utils/icons.ts getNotificationTypeIconColor should format the notification color for state 4`] = `"text-gray-500 dark:text-gray-300"`; + +exports[`utils/icons.ts getNotificationTypeIconColor should format the notification color for state 5`] = `"text-purple-500"`; + +exports[`utils/icons.ts getNotificationTypeIconColor should format the notification color for state 6`] = `"text-gray-500 dark:text-gray-300"`; + +exports[`utils/icons.ts getNotificationTypeIconColor should format the notification color for state 7`] = `"text-green-500"`; + +exports[`utils/icons.ts getNotificationTypeIconColor should format the notification color for state 8`] = `"text-green-500"`; + +exports[`utils/icons.ts getNotificationTypeIconColor should format the notification color for state 9`] = `"text-purple-500"`; + +exports[`utils/icons.ts getNotificationTypeIconColor should format the notification color for state 10`] = `"text-gray-500 dark:text-gray-300"`; diff --git a/src/utils/github-api.test.ts b/src/utils/icons.test.ts similarity index 98% rename from src/utils/github-api.test.ts rename to src/utils/icons.test.ts index 70ebd6b3a..f80e600ae 100644 --- a/src/utils/github-api.test.ts +++ b/src/utils/icons.test.ts @@ -1,10 +1,7 @@ import type { StateType, Subject, SubjectType } from '../typesGithub'; -import { - getNotificationTypeIcon, - getNotificationTypeIconColor, -} from './github-api'; +import { getNotificationTypeIcon, getNotificationTypeIconColor } from './icons'; -describe('utils/github-api.ts', () => { +describe('utils/icons.ts', () => { describe('getNotificationTypeIcon - should get the notification type icon', () => { expect( getNotificationTypeIcon( diff --git a/src/utils/github-api.ts b/src/utils/icons.ts similarity index 93% rename from src/utils/github-api.ts rename to src/utils/icons.ts index f392fdfe4..a7cef5e02 100644 --- a/src/utils/github-api.ts +++ b/src/utils/icons.ts @@ -24,6 +24,7 @@ import { XIcon, } from '@primer/octicons-react'; import type { FC } from 'react'; +import { IconColor } from '../types'; import type { Subject } from '../typesGithub'; export function getNotificationTypeIcon(subject: Subject): FC { @@ -92,21 +93,21 @@ export function getNotificationTypeIcon(subject: Subject): FC { } } -export function getNotificationTypeIconColor(subject: Subject): string { +export function getNotificationTypeIconColor(subject: Subject): IconColor { switch (subject.state) { case 'open': case 'reopened': case 'ANSWERED': case 'success': - return 'text-green-500'; + return IconColor.GREEN; case 'closed': case 'failure': - return 'text-red-500'; + return IconColor.RED; case 'completed': case 'RESOLVED': case 'merged': - return 'text-purple-500'; + return IconColor.PURPLE; default: - return 'text-gray-500 dark:text-gray-300'; + return IconColor.GRAY; } } From 636eb3b7f4c727592d8a499cb9ae238b3977a259 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Thu, 18 Apr 2024 15:10:32 -0400 Subject: [PATCH 013/251] docs: update version --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 161711370..55ce5b450 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -38,6 +38,7 @@ body: label: Gitify Version description: What version of Gitify are you using? options: + - 5.4.0 - 5.3.0 - 5.2.0 - 5.1.0 From f81bf635fba0d127fe6596543b991f369716ba62 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 Apr 2024 03:12:51 -0400 Subject: [PATCH 014/251] chore(deps): update pnpm to v9.0.4 (#1050) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5b5f3a302..b761fa217 100644 --- a/package.json +++ b/package.json @@ -154,7 +154,7 @@ "webpack-cli": "5.1.4", "webpack-merge": "5.10.0" }, - "packageManager": "pnpm@9.0.2", + "packageManager": "pnpm@9.0.4", "lint-staged": { "*.{html,js,json,md,ts,tsx}": "biome format --write" } From 389a3651759876c6a2dd86511c045d10ab502b86 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 Apr 2024 03:13:06 -0400 Subject: [PATCH 015/251] chore(deps): update dependency electron to v30.0.1 (#1049) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index b761fa217..5b6b26139 100644 --- a/package.json +++ b/package.json @@ -136,7 +136,7 @@ "@types/react-transition-group": "4.4.10", "autoprefixer": "10.4.19", "css-loader": "7.1.1", - "electron": "30.0.0", + "electron": "30.0.1", "electron-builder": "24.13.3", "husky": "9.0.11", "jest": "29.7.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bfedd70f7..666a9514d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: '@electron/remote': specifier: 2.1.2 - version: 2.1.2(electron@30.0.0) + version: 2.1.2(electron@30.0.1) '@primer/octicons-react': specifier: 19.9.0 version: 19.9.0(react@18.2.0) @@ -28,7 +28,7 @@ importers: version: 4.20.10 menubar: specifier: 9.4.0 - version: 9.4.0(electron@30.0.0) + version: 9.4.0(electron@30.0.1) nprogress: specifier: 0.2.0 version: 0.2.0 @@ -91,8 +91,8 @@ importers: specifier: 7.1.1 version: 7.1.1(webpack@5.91.0(webpack-cli@5.1.4)) electron: - specifier: 30.0.0 - version: 30.0.0 + specifier: 30.0.1 + version: 30.0.1 electron-builder: specifier: 24.13.3 version: 24.13.3(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3)) @@ -1367,8 +1367,8 @@ packages: electron-updater@6.1.8: resolution: {integrity: sha512-hhOTfaFAd6wRHAfUaBhnAOYc+ymSGCWJLtFkw4xJqOvtpHmIdNHnXDV9m1MHC+A6q08Abx4Ykgyz/R5DGKNAMQ==} - electron@30.0.0: - resolution: {integrity: sha512-GRwKphq/TUhSlb44OwSckXKl50f5OR/pm9MvF3rBLyqcxwfu7L11xejrZ0hDea1eKyCkzGd4B+cIqaQiDguPEA==} + electron@30.0.1: + resolution: {integrity: sha512-iwxkI/n2wBd29NH7TH0ZY8aWGzCoKpzJz+D10u7aGSJi1TV6d4MSM3rWyKvT/UkAHkTKOEgYfUyCa2vWQm8L0g==} engines: {node: '>= 12.20.55'} hasBin: true @@ -3469,9 +3469,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@electron/remote@2.1.2(electron@30.0.0)': + '@electron/remote@2.1.2(electron@30.0.1)': dependencies: - electron: 30.0.0 + electron: 30.0.1 '@electron/universal@1.5.1': dependencies: @@ -4708,7 +4708,7 @@ snapshots: transitivePeerDependencies: - supports-color - electron@30.0.0: + electron@30.0.1: dependencies: '@electron/get': 2.0.3 '@types/node': 20.12.7 @@ -5672,9 +5672,9 @@ snapshots: escape-string-regexp: 4.0.0 optional: true - menubar@9.4.0(electron@30.0.0): + menubar@9.4.0(electron@30.0.1): dependencies: - electron: 30.0.0 + electron: 30.0.1 electron-positioner: 4.1.0 merge-stream@2.0.0: {} From d55a8743aaad58b18c519e4113653ed118337fac Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 19 Apr 2024 07:19:42 -0400 Subject: [PATCH 016/251] test(utils/subject): improve mocks and test cases (#1047) tests(subject): improve mocks --- src/__mocks__/partial-mocks.ts | 22 + src/utils/subject.test.ts | 1145 ++++++++++++++++++-------------- src/utils/subject.ts | 28 +- 3 files changed, 681 insertions(+), 514 deletions(-) create mode 100644 src/__mocks__/partial-mocks.ts diff --git a/src/__mocks__/partial-mocks.ts b/src/__mocks__/partial-mocks.ts new file mode 100644 index 000000000..e61e0d129 --- /dev/null +++ b/src/__mocks__/partial-mocks.ts @@ -0,0 +1,22 @@ +import type { Notification, Subject, User } from '../typesGithub'; + +export function partialMockNotification( + subject: Partial, +): Notification { + const mockNotification: Partial = { + subject: subject as Subject, + }; + + return mockNotification as Notification; +} + +export function partialMockUser(login: string): User { + const mockUser: Partial = { + login: login, + html_url: `https://github.com/${login}`, + avatar_url: 'https://avatars.githubusercontent.com/u/583231?v=4', + type: 'User', + }; + + return mockUser as User; +} diff --git a/src/utils/subject.test.ts b/src/utils/subject.test.ts index 6ce486041..8a26b8b7f 100644 --- a/src/utils/subject.test.ts +++ b/src/utils/subject.test.ts @@ -3,15 +3,32 @@ import nock from 'nock'; import { mockAccounts } from '../__mocks__/mock-state'; import { - mockedNotificationUser, - mockedSingleNotification, -} from '../__mocks__/mockedData'; -import type { SubjectType } from '../typesGithub'; + partialMockNotification, + partialMockUser, +} from '../__mocks__/partial-mocks'; +import type { + Discussion, + DiscussionAuthor, + DiscussionStateType, + Notification, + Repository, + ViewerSubscription, +} from '../typesGithub'; import { getCheckSuiteAttributes, getGitifySubjectDetails, getWorkflowRunAttributes, } from './subject'; + +const mockAuthor = partialMockUser('some-author'); +const mockCommenter = partialMockUser('some-commenter'); +const mockDiscussionAuthor: DiscussionAuthor = { + login: 'discussion-author', + url: 'https://github.com/discussion-author', + avatar_url: 'https://avatars.githubusercontent.com/u/583231?v=4', + type: 'User', +}; + describe('utils/subject.ts', () => { beforeEach(() => { // axios will default to using the XHR adapter which can't be intercepted @@ -19,218 +36,209 @@ describe('utils/subject.ts', () => { axios.defaults.adapter = 'http'; }); - describe('getCheckSuiteState', () => { - it('cancelled check suite state', async () => { - const mockNotification = { - ...mockedSingleNotification, - subject: { - ...mockedSingleNotification.subject, + describe('getGitifySubjectDetails', () => { + describe('CheckSuites - GitHub Actions', () => { + it('cancelled check suite state', async () => { + const mockNotification = partialMockNotification({ title: 'Demo workflow run cancelled for main branch', - }, - }; + type: 'CheckSuite', + }); - const result = getCheckSuiteAttributes(mockNotification); + const result = await getGitifySubjectDetails( + mockNotification, + mockAccounts.token, + ); - expect(result.workflowName).toBe('Demo'); - expect(result.attemptNumber).toBeNull(); - expect(result.status).toBe('cancelled'); - expect(result.branchName).toBe('main'); - }); + expect(result).toEqual({ + state: 'cancelled', + user: null, + }); + }); - it('failed check suite state', async () => { - const mockNotification = { - ...mockedSingleNotification, - subject: { - ...mockedSingleNotification.subject, + it('failed check suite state', async () => { + const mockNotification = partialMockNotification({ title: 'Demo workflow run failed for main branch', - }, - }; + type: 'CheckSuite', + }); - const result = getCheckSuiteAttributes(mockNotification); + const result = await getGitifySubjectDetails( + mockNotification, + mockAccounts.token, + ); - expect(result.workflowName).toBe('Demo'); - expect(result.attemptNumber).toBeNull(); - expect(result.status).toBe('failure'); - expect(result.branchName).toBe('main'); - }); + expect(result).toEqual({ + state: 'failure', + user: null, + }); + }); - it('multiple attempts failed check suite state', async () => { - const mockNotification = { - ...mockedSingleNotification, - subject: { - ...mockedSingleNotification.subject, + it('multiple attempts failed check suite state', async () => { + const mockNotification = partialMockNotification({ title: 'Demo workflow run, Attempt #3 failed for main branch', - }, - }; + type: 'CheckSuite', + }); - const result = getCheckSuiteAttributes(mockNotification); + const result = await getGitifySubjectDetails( + mockNotification, + mockAccounts.token, + ); - expect(result.workflowName).toBe('Demo'); - expect(result.attemptNumber).toBe(3); - expect(result.status).toBe('failure'); - expect(result.branchName).toBe('main'); - }); + expect(result).toEqual({ + state: 'failure', + user: null, + }); + }); - it('skipped check suite state', async () => { - const mockNotification = { - ...mockedSingleNotification, - subject: { - ...mockedSingleNotification.subject, + it('skipped check suite state', async () => { + const mockNotification = partialMockNotification({ title: 'Demo workflow run skipped for main branch', - }, - }; + type: 'CheckSuite', + }); - const result = getCheckSuiteAttributes(mockNotification); + const result = await getGitifySubjectDetails( + mockNotification, + mockAccounts.token, + ); - expect(result.workflowName).toBe('Demo'); - expect(result.attemptNumber).toBeNull(); - expect(result.status).toBe('skipped'); - expect(result.branchName).toBe('main'); - }); + expect(result).toEqual({ + state: 'skipped', + user: null, + }); + }); - it('successful check suite state', async () => { - const mockNotification = { - ...mockedSingleNotification, - subject: { - ...mockedSingleNotification.subject, + it('successful check suite state', async () => { + const mockNotification = partialMockNotification({ title: 'Demo workflow run succeeded for main branch', - }, - }; + type: 'CheckSuite', + }); - const result = getCheckSuiteAttributes(mockNotification); + const result = await getGitifySubjectDetails( + mockNotification, + mockAccounts.token, + ); - expect(result.workflowName).toBe('Demo'); - expect(result.attemptNumber).toBeNull(); - expect(result.status).toBe('success'); - expect(result.branchName).toBe('main'); - }); + expect(result).toEqual({ + state: 'success', + user: null, + }); + }); - it('unknown check suite state', async () => { - const mockNotification = { - ...mockedSingleNotification, - subject: { - ...mockedSingleNotification.subject, + it('unknown check suite state', async () => { + const mockNotification = partialMockNotification({ title: 'Demo workflow run unknown-status for main branch', - }, - }; + type: 'CheckSuite', + }); - const result = getCheckSuiteAttributes(mockNotification); + const result = await getGitifySubjectDetails( + mockNotification, + mockAccounts.token, + ); - expect(result.workflowName).toBe('Demo'); - expect(result.attemptNumber).toBeNull(); - expect(result.status).toBeNull(); - expect(result.branchName).toBe('main'); - }); + expect(result).toBeNull(); + }); - it('unhandled check suite title', async () => { - const mockNotification = { - ...mockedSingleNotification, - subject: { - ...mockedSingleNotification.subject, + it('unhandled check suite title', async () => { + const mockNotification = partialMockNotification({ title: 'A title that is not in the structure we expect', - }, - }; + type: 'CheckSuite', + }); - const result = getCheckSuiteAttributes(mockNotification); + const result = await getGitifySubjectDetails( + mockNotification, + mockAccounts.token, + ); - expect(result).toBeNull(); + expect(result).toBeNull(); + }); }); - }); - - describe('getGitifySubjectDetails', () => { describe('Commits', () => { it('get commit commenter', async () => { - const mockNotification = { - ...mockedSingleNotification, - subject: { - title: 'This is a commit with comments', - url: 'https://api.github.com/repos/manosim/notifications-test/commits/d2a86d80e3d24ea9510d5de6c147e53c30f313a8', - latest_comment_url: - 'https://api.github.com/repos/manosim/notifications-test/comments/141012658', - type: 'Commit' as SubjectType, - }, - }; + const mockNotification = partialMockNotification({ + title: 'This is a commit with comments', + type: 'Commit', + url: 'https://api.github.com/repos/gitify-app/notifications-test/commits/d2a86d80e3d24ea9510d5de6c147e53c30f313a8', + latest_comment_url: + 'https://api.github.com/repos/gitify-app/notifications-test/comments/141012658', + }); nock('https://api.github.com') .get( - '/repos/manosim/notifications-test/commits/d2a86d80e3d24ea9510d5de6c147e53c30f313a8', + '/repos/gitify-app/notifications-test/commits/d2a86d80e3d24ea9510d5de6c147e53c30f313a8', ) - .reply(200, { author: { login: 'some-author' } }); + .reply(200, { author: mockAuthor }); nock('https://api.github.com') - .get('/repos/manosim/notifications-test/comments/141012658') - .reply(200, { user: { login: 'some-commenter' } }); + .get('/repos/gitify-app/notifications-test/comments/141012658') + .reply(200, { user: mockCommenter }); const result = await getGitifySubjectDetails( mockNotification, mockAccounts.token, ); - expect(result.state).toBeNull(); - expect(result.user).toEqual({ login: 'some-commenter' }); + expect(result).toEqual({ + state: null, + user: { + login: mockCommenter.login, + html_url: mockCommenter.html_url, + avatar_url: mockCommenter.avatar_url, + type: mockCommenter.type, + }, + }); }); it('get commit without commenter', async () => { - const mockNotification = { - ...mockedSingleNotification, - subject: { - title: 'This is a commit with comments', - url: 'https://api.github.com/repos/manosim/notifications-test/commits/d2a86d80e3d24ea9510d5de6c147e53c30f313a8', - latest_comment_url: null, - type: 'Commit' as SubjectType, - }, - }; + const mockNotification = partialMockNotification({ + title: 'This is a commit with comments', + type: 'Commit', + url: 'https://api.github.com/repos/gitify-app/notifications-test/commits/d2a86d80e3d24ea9510d5de6c147e53c30f313a8', + latest_comment_url: null, + }); nock('https://api.github.com') .get( - '/repos/manosim/notifications-test/commits/d2a86d80e3d24ea9510d5de6c147e53c30f313a8', + '/repos/gitify-app/notifications-test/commits/d2a86d80e3d24ea9510d5de6c147e53c30f313a8', ) - .reply(200, { author: { login: 'some-author' } }); + .reply(200, { author: mockAuthor }); const result = await getGitifySubjectDetails( mockNotification, mockAccounts.token, ); - expect(result.state).toBeNull(); - expect(result.user).toEqual({ login: 'some-author' }); + expect(result).toEqual({ + state: null, + user: { + login: mockAuthor.login, + html_url: mockAuthor.html_url, + avatar_url: mockAuthor.avatar_url, + type: mockAuthor.type, + }, + }); }); }); describe('Discussions', () => { - it('answered discussion state', async () => { - const mockNotification = { - ...mockedSingleNotification, - subject: { - ...mockedSingleNotification.subject, - title: 'This is an answered discussion', - type: 'Discussion' as SubjectType, - }, - }; + const partialRepository: Partial = { + full_name: 'gitify-app/notifications-test', + }; + const mockNotification = partialMockNotification({ + title: 'This is a mocked discussion', + type: 'Discussion', + }); + mockNotification.updated_at = '2024-01-01T00:00:00Z'; + mockNotification.repository = { + ...(partialRepository as Repository), + }; + + it('answered discussion state', async () => { nock('https://api.github.com') .post('/graphql') .reply(200, { data: { search: { - nodes: [ - { - title: 'This is an answered discussion', - viewerSubscription: 'SUBSCRIBED', - stateReason: null, - isAnswered: true, - author: { - login: 'discussion-creator', - url: 'https://github.com/discussion-creator', - avatar_url: - 'https://avatars.githubusercontent.com/u/583231?v=4', - type: 'User', - }, - comments: { - nodes: [], //TODO - Update this to have real data - }, - }, - ], + nodes: [mockDiscussionNode('SUBSCRIBED', null, true)], }, }, }); @@ -240,48 +248,24 @@ describe('utils/subject.ts', () => { mockAccounts.token, ); - expect(result.state).toBe('ANSWERED'); - expect(result.user).toEqual({ - login: 'discussion-creator', - html_url: 'https://github.com/discussion-creator', - avatar_url: 'https://avatars.githubusercontent.com/u/583231?v=4', - type: 'User', + expect(result).toEqual({ + state: 'ANSWERED', + user: { + login: mockDiscussionAuthor.login, + html_url: mockDiscussionAuthor.url, + avatar_url: mockDiscussionAuthor.avatar_url, + type: mockDiscussionAuthor.type, + }, }); }); it('duplicate discussion state', async () => { - const mockNotification = { - ...mockedSingleNotification, - subject: { - ...mockedSingleNotification.subject, - title: 'This is a duplicate discussion', - type: 'Discussion' as SubjectType, - }, - }; - nock('https://api.github.com') .post('/graphql') .reply(200, { data: { search: { - nodes: [ - { - title: 'This is a duplicate discussion', - viewerSubscription: 'SUBSCRIBED', - stateReason: 'DUPLICATE', - isAnswered: false, - author: { - login: 'discussion-creator', - url: 'https://github.com/discussion-creator', - avatar_url: - 'https://avatars.githubusercontent.com/u/583231?v=4', - type: 'User', - }, - comments: { - nodes: [], //TODO - Update this to have real data - }, - }, - ], + nodes: [mockDiscussionNode('SUBSCRIBED', 'DUPLICATE', false)], }, }, }); @@ -291,48 +275,24 @@ describe('utils/subject.ts', () => { mockAccounts.token, ); - expect(result.state).toBe('DUPLICATE'); - expect(result.user).toEqual({ - login: 'discussion-creator', - html_url: 'https://github.com/discussion-creator', - avatar_url: 'https://avatars.githubusercontent.com/u/583231?v=4', - type: 'User', + expect(result).toEqual({ + state: 'DUPLICATE', + user: { + login: mockDiscussionAuthor.login, + html_url: mockDiscussionAuthor.url, + avatar_url: mockDiscussionAuthor.avatar_url, + type: mockDiscussionAuthor.type, + }, }); }); it('open discussion state', async () => { - const mockNotification = { - ...mockedSingleNotification, - subject: { - ...mockedSingleNotification.subject, - title: 'This is an open discussion', - type: 'Discussion' as SubjectType, - }, - }; - nock('https://api.github.com') .post('/graphql') .reply(200, { data: { search: { - nodes: [ - { - title: 'This is an open discussion', - viewerSubscription: 'SUBSCRIBED', - stateReason: null, - isAnswered: false, - author: { - login: 'discussion-creator', - url: 'https://github.com/discussion-creator', - avatar_url: - 'https://avatars.githubusercontent.com/u/583231?v=4', - type: 'User', - }, - comments: { - nodes: [], //TODO - Update this to have real data - }, - }, - ], + nodes: [mockDiscussionNode('SUBSCRIBED', null, false)], }, }, }); @@ -342,48 +302,24 @@ describe('utils/subject.ts', () => { mockAccounts.token, ); - expect(result.state).toBe('OPEN'); - expect(result.user).toEqual({ - login: 'discussion-creator', - html_url: 'https://github.com/discussion-creator', - avatar_url: 'https://avatars.githubusercontent.com/u/583231?v=4', - type: 'User', + expect(result).toEqual({ + state: 'OPEN', + user: { + login: mockDiscussionAuthor.login, + html_url: mockDiscussionAuthor.url, + avatar_url: mockDiscussionAuthor.avatar_url, + type: mockDiscussionAuthor.type, + }, }); }); it('outdated discussion state', async () => { - const mockNotification = { - ...mockedSingleNotification, - subject: { - ...mockedSingleNotification.subject, - title: 'This is an outdated discussion', - type: 'Discussion' as SubjectType, - }, - }; - nock('https://api.github.com') .post('/graphql') .reply(200, { data: { search: { - nodes: [ - { - title: 'This is an outdated discussion', - viewerSubscription: 'SUBSCRIBED', - stateReason: 'OUTDATED', - isAnswered: false, - author: { - login: 'discussion-creator', - url: 'https://github.com/discussion-creator', - avatar_url: - 'https://avatars.githubusercontent.com/u/583231?v=4', - type: 'User', - }, - comments: { - nodes: [], //TODO - Update this to have real data - }, - }, - ], + nodes: [mockDiscussionNode('SUBSCRIBED', 'OUTDATED', false)], }, }, }); @@ -393,48 +329,24 @@ describe('utils/subject.ts', () => { mockAccounts.token, ); - expect(result.state).toBe('OUTDATED'); - expect(result.user).toEqual({ - login: 'discussion-creator', - html_url: 'https://github.com/discussion-creator', - avatar_url: 'https://avatars.githubusercontent.com/u/583231?v=4', - type: 'User', + expect(result).toEqual({ + state: 'OUTDATED', + user: { + login: mockDiscussionAuthor.login, + html_url: mockDiscussionAuthor.url, + avatar_url: mockDiscussionAuthor.avatar_url, + type: mockDiscussionAuthor.type, + }, }); }); it('reopened discussion state', async () => { - const mockNotification = { - ...mockedSingleNotification, - subject: { - ...mockedSingleNotification.subject, - title: 'This is a reopened discussion', - type: 'Discussion' as SubjectType, - }, - }; - nock('https://api.github.com') .post('/graphql') .reply(200, { data: { search: { - nodes: [ - { - title: 'This is a reopened discussion', - viewerSubscription: 'SUBSCRIBED', - stateReason: 'REOPENED', - isAnswered: false, - author: { - login: 'discussion-creator', - url: 'https://github.com/discussion-creator', - avatar_url: - 'https://avatars.githubusercontent.com/u/583231?v=4', - type: 'User', - }, - comments: { - nodes: [], //TODO - Update this to have real data - }, - }, - ], + nodes: [mockDiscussionNode('SUBSCRIBED', 'REOPENED', false)], }, }, }); @@ -444,48 +356,24 @@ describe('utils/subject.ts', () => { mockAccounts.token, ); - expect(result.state).toBe('REOPENED'); - expect(result.user).toEqual({ - login: 'discussion-creator', - html_url: 'https://github.com/discussion-creator', - avatar_url: 'https://avatars.githubusercontent.com/u/583231?v=4', - type: 'User', + expect(result).toEqual({ + state: 'REOPENED', + user: { + login: mockDiscussionAuthor.login, + html_url: mockDiscussionAuthor.url, + avatar_url: mockDiscussionAuthor.avatar_url, + type: mockDiscussionAuthor.type, + }, }); }); it('resolved discussion state', async () => { - const mockNotification = { - ...mockedSingleNotification, - subject: { - ...mockedSingleNotification.subject, - title: 'This is a resolved discussion', - type: 'Discussion' as SubjectType, - }, - }; - nock('https://api.github.com') .post('/graphql') .reply(200, { data: { search: { - nodes: [ - { - title: 'This is a resolved discussion', - viewerSubscription: 'SUBSCRIBED', - stateReason: 'RESOLVED', - isAnswered: false, - author: { - login: 'discussion-creator', - url: 'https://github.com/discussion-creator', - avatar_url: - 'https://avatars.githubusercontent.com/u/583231?v=4', - type: 'User', - }, - comments: { - nodes: [], //TODO - Update this to have real data - }, - }, - ], + nodes: [mockDiscussionNode('SUBSCRIBED', 'RESOLVED', true)], }, }, }); @@ -495,63 +383,26 @@ describe('utils/subject.ts', () => { mockAccounts.token, ); - expect(result.state).toBe('RESOLVED'); - expect(result.user).toEqual({ - login: 'discussion-creator', - html_url: 'https://github.com/discussion-creator', - avatar_url: 'https://avatars.githubusercontent.com/u/583231?v=4', - type: 'User', + expect(result).toEqual({ + state: 'RESOLVED', + user: { + login: mockDiscussionAuthor.login, + html_url: mockDiscussionAuthor.url, + avatar_url: mockDiscussionAuthor.avatar_url, + type: mockDiscussionAuthor.type, + }, }); }); it('filtered response by subscribed', async () => { - const mockNotification = { - ...mockedSingleNotification, - subject: { - ...mockedSingleNotification.subject, - title: 'This is a discussion', - type: 'Discussion' as SubjectType, - }, - }; - nock('https://api.github.com') .post('/graphql') .reply(200, { data: { search: { nodes: [ - { - title: 'This is a discussion', - viewerSubscription: 'SUBSCRIBED', - stateReason: null, - isAnswered: false, - author: { - login: 'discussion-creator', - url: 'https://github.com/discussion-creator', - avatar_url: - 'https://avatars.githubusercontent.com/u/583231?v=4', - type: 'User', - }, - comments: { - nodes: [], //TODO - Update this to have real data - }, - }, - { - title: 'This is a discussion', - viewerSubscription: 'IGNORED', - stateReason: null, - isAnswered: true, - author: { - login: 'discussion-creator', - url: 'https://github.com/discussion-creator', - avatar_url: - 'https://avatars.githubusercontent.com/u/583231?v=4', - type: 'User', - }, - comments: { - nodes: [], //TODO - Update this to have real data - }, - }, + mockDiscussionNode('SUBSCRIBED', null, false), + mockDiscussionNode('IGNORED', null, true), ], }, }, @@ -562,344 +413,607 @@ describe('utils/subject.ts', () => { mockAccounts.token, ); - expect(result.state).toBe('OPEN'); - expect(result.user).toEqual({ - login: 'discussion-creator', - html_url: 'https://github.com/discussion-creator', - avatar_url: 'https://avatars.githubusercontent.com/u/583231?v=4', - type: 'User', + expect(result).toEqual({ + state: 'OPEN', + user: { + login: mockDiscussionAuthor.login, + html_url: mockDiscussionAuthor.url, + avatar_url: mockDiscussionAuthor.avatar_url, + type: mockDiscussionAuthor.type, + }, }); }); }); describe('Issues', () => { + let mockNotification: Notification; + beforeEach(() => { + mockNotification = partialMockNotification({ + title: 'This is a mocked issue', + type: 'Issue', + url: 'https://api.github.com/repos/gitify-app/notifications-test/issues/1', + latest_comment_url: + 'https://api.github.com/repos/gitify-app/notifications-test/issues/comments/302888448', + }); + }); + it('open issue state', async () => { nock('https://api.github.com') - .get('/repos/manosim/notifications-test/issues/1') - .reply(200, { state: 'open', user: { login: 'some-user' } }); + .get('/repos/gitify-app/notifications-test/issues/1') + .reply(200, { state: 'open', user: mockAuthor }); nock('https://api.github.com') - .get('/repos/manosim/notifications-test/issues/comments/302888448') - .reply(200, { user: { login: 'some-commenter' } }); + .get('/repos/gitify-app/notifications-test/issues/comments/302888448') + .reply(200, { user: mockCommenter }); const result = await getGitifySubjectDetails( - mockedSingleNotification, + mockNotification, mockAccounts.token, ); - expect(result.state).toBe('open'); - expect(result.user).toEqual({ login: 'some-commenter' }); + expect(result).toEqual({ + state: 'open', + user: { + login: mockCommenter.login, + html_url: mockCommenter.html_url, + avatar_url: mockCommenter.avatar_url, + type: mockCommenter.type, + }, + }); }); it('closed issue state', async () => { nock('https://api.github.com') - .get('/repos/manosim/notifications-test/issues/1') - .reply(200, { state: 'closed', user: { login: 'some-user' } }); + .get('/repos/gitify-app/notifications-test/issues/1') + .reply(200, { state: 'closed', user: mockAuthor }); nock('https://api.github.com') - .get('/repos/manosim/notifications-test/issues/comments/302888448') - .reply(200, { user: { login: 'some-commenter' } }); + .get('/repos/gitify-app/notifications-test/issues/comments/302888448') + .reply(200, { user: mockCommenter }); const result = await getGitifySubjectDetails( - mockedSingleNotification, + mockNotification, mockAccounts.token, ); - expect(result.state).toBe('closed'); - expect(result.user).toEqual({ login: 'some-commenter' }); + expect(result).toEqual({ + state: 'closed', + user: { + login: mockCommenter.login, + html_url: mockCommenter.html_url, + avatar_url: mockCommenter.avatar_url, + type: mockCommenter.type, + }, + }); }); it('completed issue state', async () => { nock('https://api.github.com') - .get('/repos/manosim/notifications-test/issues/1') + .get('/repos/gitify-app/notifications-test/issues/1') .reply(200, { state: 'closed', state_reason: 'completed', - user: { login: 'some-user' }, + user: mockAuthor, }); nock('https://api.github.com') - .get('/repos/manosim/notifications-test/issues/comments/302888448') - .reply(200, { user: { login: 'some-commenter' } }); + .get('/repos/gitify-app/notifications-test/issues/comments/302888448') + .reply(200, { user: mockCommenter }); const result = await getGitifySubjectDetails( - mockedSingleNotification, + mockNotification, mockAccounts.token, ); - expect(result.state).toBe('completed'); - expect(result.user).toEqual({ login: 'some-commenter' }); + expect(result).toEqual({ + state: 'completed', + user: { + login: mockCommenter.login, + html_url: mockCommenter.html_url, + avatar_url: mockCommenter.avatar_url, + type: mockCommenter.type, + }, + }); }); it('not_planned issue state', async () => { nock('https://api.github.com') - .get('/repos/manosim/notifications-test/issues/1') + .get('/repos/gitify-app/notifications-test/issues/1') .reply(200, { state: 'open', state_reason: 'not_planned', - user: { login: 'some-user' }, + user: mockAuthor, }); nock('https://api.github.com') - .get('/repos/manosim/notifications-test/issues/comments/302888448') - .reply(200, { user: { login: 'some-commenter' } }); + .get('/repos/gitify-app/notifications-test/issues/comments/302888448') + .reply(200, { user: mockCommenter }); const result = await getGitifySubjectDetails( - mockedSingleNotification, + mockNotification, mockAccounts.token, ); - expect(result.state).toBe('not_planned'); - expect(result.user).toEqual({ login: 'some-commenter' }); + expect(result).toEqual({ + state: 'not_planned', + user: { + login: mockCommenter.login, + html_url: mockCommenter.html_url, + avatar_url: mockCommenter.avatar_url, + type: mockCommenter.type, + }, + }); }); it('reopened issue state', async () => { nock('https://api.github.com') - .get('/repos/manosim/notifications-test/issues/1') + .get('/repos/gitify-app/notifications-test/issues/1') .reply(200, { state: 'open', state_reason: 'reopened', - user: { login: 'some-user' }, + user: mockAuthor, }); nock('https://api.github.com') - .get('/repos/manosim/notifications-test/issues/comments/302888448') - .reply(200, { user: { login: 'some-commenter' } }); + .get('/repos/gitify-app/notifications-test/issues/comments/302888448') + .reply(200, { user: mockCommenter }); const result = await getGitifySubjectDetails( - mockedSingleNotification, + mockNotification, mockAccounts.token, ); - expect(result.state).toBe('reopened'); - expect(result.user).toEqual({ login: 'some-commenter' }); + expect(result).toEqual({ + state: 'reopened', + user: { + login: mockCommenter.login, + html_url: mockCommenter.html_url, + avatar_url: mockCommenter.avatar_url, + type: mockCommenter.type, + }, + }); }); it('handle issues without latest_comment_url', async () => { + mockNotification.subject.latest_comment_url = null; + nock('https://api.github.com') - .get('/repos/manosim/notifications-test/issues/1') + .get('/repos/gitify-app/notifications-test/issues/1') .reply(200, { state: 'open', draft: false, merged: false, - user: { login: 'some-user' }, + user: mockAuthor, }); const result = await getGitifySubjectDetails( - { - ...mockedSingleNotification, - subject: { - ...mockedSingleNotification.subject, - latest_comment_url: null, - }, - }, + mockNotification, mockAccounts.token, ); - expect(result.state).toBe('open'); - expect(result.user).toEqual({ login: 'some-user' }); + expect(result).toEqual({ + state: 'open', + user: { + login: mockAuthor.login, + html_url: mockAuthor.html_url, + avatar_url: mockAuthor.avatar_url, + type: mockAuthor.type, + }, + }); }); }); describe('Pull Requests', () => { - const mockNotification = { - ...mockedSingleNotification, - subject: { - ...mockedSingleNotification.subject, - type: 'PullRequest' as SubjectType, - }, - }; + let mockNotification: Notification; + + beforeEach(() => { + mockNotification = partialMockNotification({ + title: 'This is a mocked pull request', + type: 'PullRequest', + url: 'https://api.github.com/repos/gitify-app/notifications-test/issues/1', + latest_comment_url: + 'https://api.github.com/repos/gitify-app/notifications-test/issues/comments/302888448', + }); + }); it('closed pull request state', async () => { nock('https://api.github.com') - .get('/repos/manosim/notifications-test/issues/1') + .get('/repos/gitify-app/notifications-test/issues/1') .reply(200, { state: 'closed', draft: false, merged: false, - user: { login: 'some-user' }, + user: mockAuthor, }); nock('https://api.github.com') - .get('/repos/manosim/notifications-test/issues/comments/302888448') - .reply(200, { user: { login: 'some-commenter' } }); + .get('/repos/gitify-app/notifications-test/issues/comments/302888448') + .reply(200, { user: mockCommenter }); const result = await getGitifySubjectDetails( mockNotification, mockAccounts.token, ); - expect(result.state).toBe('closed'); - expect(result.user).toEqual({ login: 'some-commenter' }); + expect(result).toEqual({ + state: 'closed', + user: { + login: mockCommenter.login, + html_url: mockCommenter.html_url, + avatar_url: mockCommenter.avatar_url, + type: mockCommenter.type, + }, + }); }); it('draft pull request state', async () => { nock('https://api.github.com') - .get('/repos/manosim/notifications-test/issues/1') + .get('/repos/gitify-app/notifications-test/issues/1') .reply(200, { state: 'open', draft: true, merged: false, - user: { login: 'some-user' }, + user: mockAuthor, }); nock('https://api.github.com') - .get('/repos/manosim/notifications-test/issues/comments/302888448') - .reply(200, { user: { login: 'some-commenter' } }); + .get('/repos/gitify-app/notifications-test/issues/comments/302888448') + .reply(200, { user: mockCommenter }); const result = await getGitifySubjectDetails( mockNotification, mockAccounts.token, ); - expect(result.state).toBe('draft'); - expect(result.user).toEqual({ login: 'some-commenter' }); + expect(result).toEqual({ + state: 'draft', + user: { + login: mockCommenter.login, + html_url: mockCommenter.html_url, + avatar_url: mockCommenter.avatar_url, + type: mockCommenter.type, + }, + }); }); it('merged pull request state', async () => { nock('https://api.github.com') - .get('/repos/manosim/notifications-test/issues/1') + .get('/repos/gitify-app/notifications-test/issues/1') .reply(200, { state: 'open', draft: false, merged: true, - user: { login: 'some-user' }, + user: mockAuthor, }); nock('https://api.github.com') - .get('/repos/manosim/notifications-test/issues/comments/302888448') - .reply(200, { user: { login: 'some-commenter' } }); + .get('/repos/gitify-app/notifications-test/issues/comments/302888448') + .reply(200, { user: mockCommenter }); const result = await getGitifySubjectDetails( mockNotification, mockAccounts.token, ); - expect(result.state).toBe('merged'); - expect(result.user).toEqual({ login: 'some-commenter' }); + expect(result).toEqual({ + state: 'merged', + user: { + login: mockCommenter.login, + html_url: mockCommenter.html_url, + avatar_url: mockCommenter.avatar_url, + type: mockCommenter.type, + }, + }); }); it('open pull request state', async () => { nock('https://api.github.com') - .get('/repos/manosim/notifications-test/issues/1') + .get('/repos/gitify-app/notifications-test/issues/1') .reply(200, { state: 'open', draft: false, merged: false, - user: { login: 'some-user' }, + user: mockAuthor, }); nock('https://api.github.com') - .get('/repos/manosim/notifications-test/issues/comments/302888448') - .reply(200, { user: { login: 'some-commenter' } }); + .get('/repos/gitify-app/notifications-test/issues/comments/302888448') + .reply(200, { user: mockCommenter }); const result = await getGitifySubjectDetails( mockNotification, mockAccounts.token, ); - expect(result.state).toBe('open'); - expect(result.user).toEqual({ login: 'some-commenter' }); + expect(result).toEqual({ + state: 'open', + user: { + login: mockCommenter.login, + html_url: mockCommenter.html_url, + avatar_url: mockCommenter.avatar_url, + type: mockCommenter.type, + }, + }); }); it('handle pull request without latest_comment_url', async () => { + mockNotification.subject.latest_comment_url = null; + nock('https://api.github.com') - .get('/repos/manosim/notifications-test/issues/1') + .get('/repos/gitify-app/notifications-test/issues/1') .reply(200, { state: 'open', draft: false, merged: false, - user: { login: 'some-user' }, + user: mockAuthor, }); const result = await getGitifySubjectDetails( - { - ...mockNotification, - subject: { - ...mockNotification.subject, - latest_comment_url: null, - }, + mockNotification, + mockAccounts.token, + ); + + expect(result).toEqual({ + state: 'open', + user: { + login: mockAuthor.login, + html_url: mockAuthor.html_url, + avatar_url: mockAuthor.avatar_url, + type: mockAuthor.type, + }, + }); + }); + }); + + describe('Releases', () => { + it('release notification', async () => { + const mockNotification = partialMockNotification({ + title: 'This is a mocked release', + type: 'Release', + url: 'https://api.github.com/repos/gitify-app/notifications-test/releases/1', + latest_comment_url: + 'https://api.github.com/repos/gitify-app/notifications-test/releases/1', + }); + + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/releases/1') + .reply(200, { author: mockAuthor }); + + const result = await getGitifySubjectDetails( + mockNotification, + mockAccounts.token, + ); + + expect(result).toEqual({ + state: null, + user: { + login: mockAuthor.login, + html_url: mockAuthor.html_url, + avatar_url: mockAuthor.avatar_url, + type: mockAuthor.type, }, + }); + }); + }); + + describe('WorkflowRuns - GitHub Actions', () => { + it('deploy review workflow run state', async () => { + const mockNotification = partialMockNotification({ + title: 'some-user requested your review to deploy to an environment', + type: 'WorkflowRun', + }); + + const result = await getGitifySubjectDetails( + mockNotification, + mockAccounts.token, + ); + + expect(result).toEqual({ + state: 'waiting', + user: null, + }); + }); + + it('unknown workflow run state', async () => { + const mockNotification = partialMockNotification({ + title: + 'some-user requested your unknown-state to deploy to an environment', + type: 'WorkflowRun', + }); + + const result = await getGitifySubjectDetails( + mockNotification, + mockAccounts.token, + ); + + expect(result).toBeNull(); + }); + + it('unhandled workflow run title', async () => { + const mockNotification = partialMockNotification({ + title: 'unhandled workflow run structure', + type: 'WorkflowRun', + }); + + const result = await getGitifySubjectDetails( + mockNotification, + mockAccounts.token, + ); + + expect(result).toBeNull(); + }); + }); + + describe('Default', () => { + it('unhandled subject details', async () => { + const mockNotification = partialMockNotification({ + title: + 'There is no special subject handling for this notification type', + type: 'RepositoryInvitation', + }); + + const result = await getGitifySubjectDetails( + mockNotification, mockAccounts.token, ); - expect(result.state).toBe('open'); - expect(result.user).toEqual({ login: 'some-user' }); + expect(result).toBeNull(); }); }); }); - describe('getGitifySubjectForRelease', () => { - it('release notification', async () => { - const mockNotification = { - ...mockedSingleNotification, - subject: { - ...mockedSingleNotification.subject, - type: 'Release' as SubjectType, - url: 'https://api.github.com/repos/manosim/notifications-test/releases/1', - latest_comment_url: - 'https://api.github.com/repos/manosim/notifications-test/releases/1', - }, - }; + describe('getCheckSuiteState', () => { + it('cancelled check suite state', async () => { + const mockNotification = partialMockNotification({ + title: 'Demo workflow run cancelled for feature/foo branch', + type: 'CheckSuite', + }); + + const result = getCheckSuiteAttributes(mockNotification); + + expect(result).toEqual({ + workflowName: 'Demo', + attemptNumber: null, + status: 'cancelled', + statusDisplayName: 'cancelled', + branchName: 'feature/foo', + }); + }); + + it('failed check suite state', async () => { + const mockNotification = partialMockNotification({ + title: 'Demo workflow run failed for main branch', + type: 'CheckSuite', + }); + + const result = getCheckSuiteAttributes(mockNotification); + + expect(result).toEqual({ + workflowName: 'Demo', + attemptNumber: null, + status: 'failure', + statusDisplayName: 'failed', + branchName: 'main', + }); + }); + + it('multiple attempts failed check suite state', async () => { + const mockNotification = partialMockNotification({ + title: 'Demo workflow run, Attempt #3 failed for main branch', + type: 'CheckSuite', + }); + + const result = getCheckSuiteAttributes(mockNotification); + + expect(result).toEqual({ + workflowName: 'Demo', + attemptNumber: 3, + status: 'failure', + statusDisplayName: 'failed', + branchName: 'main', + }); + }); + + it('skipped check suite state', async () => { + const mockNotification = partialMockNotification({ + title: 'Demo workflow run skipped for main branch', + type: 'CheckSuite', + }); - nock('https://api.github.com') - .get('/repos/manosim/notifications-test/releases/1') - .reply(200, { author: mockedNotificationUser }); + const result = getCheckSuiteAttributes(mockNotification); + + expect(result).toEqual({ + workflowName: 'Demo', + attemptNumber: null, + status: 'skipped', + statusDisplayName: 'skipped', + branchName: 'main', + }); + }); + + it('successful check suite state', async () => { + const mockNotification = partialMockNotification({ + title: 'Demo workflow run succeeded for main branch', + type: 'CheckSuite', + }); - const result = await getGitifySubjectDetails( - mockNotification, - mockAccounts.token, - ); + const result = getCheckSuiteAttributes(mockNotification); - expect(result.user).toEqual({ - login: 'octocat', - html_url: 'https://github.com/octocat', - avatar_url: 'https://avatars.githubusercontent.com/u/583231?v=4', - type: 'User', + expect(result).toEqual({ + workflowName: 'Demo', + attemptNumber: null, + status: 'success', + statusDisplayName: 'succeeded', + branchName: 'main', }); }); + + it('unknown check suite state', async () => { + const mockNotification = partialMockNotification({ + title: 'Demo workflow run unknown-status for main branch', + type: 'CheckSuite', + }); + + const result = getCheckSuiteAttributes(mockNotification); + + expect(result).toEqual({ + workflowName: 'Demo', + attemptNumber: null, + status: null, + statusDisplayName: 'unknown-status', + branchName: 'main', + }); + }); + + it('unhandled check suite title', async () => { + const mockNotification = partialMockNotification({ + title: 'A title that is not in the structure we expect', + type: 'CheckSuite', + }); + + const result = getCheckSuiteAttributes(mockNotification); + + expect(result).toBeNull(); + }); }); describe('getWorkflowRunState', () => { it('deploy review workflow run state', async () => { - const mockNotification = { - ...mockedSingleNotification, - subject: { - ...mockedSingleNotification.subject, - title: 'some-user requested your review to deploy to an environment', - }, - }; + const mockNotification = partialMockNotification({ + title: 'some-user requested your review to deploy to an environment', + type: 'WorkflowRun', + }); const result = getWorkflowRunAttributes(mockNotification); - expect(result.status).toBe('waiting'); - expect(result.user).toBe('some-user'); + expect(result).toEqual({ + status: 'waiting', + statusDisplayName: 'review', + user: 'some-user', + }); }); it('unknown workflow run state', async () => { - const mockNotification = { - ...mockedSingleNotification, - subject: { - ...mockedSingleNotification.subject, - title: - 'some-user requested your unknown-state to deploy to an environment', - }, - }; + const mockNotification = partialMockNotification({ + title: + 'some-user requested your unknown-state to deploy to an environment', + type: 'WorkflowRun', + }); const result = getWorkflowRunAttributes(mockNotification); - expect(result.status).toBeNull(); - expect(result.user).toBe('some-user'); + expect(result).toEqual({ + status: null, + statusDisplayName: 'unknown-state', + user: 'some-user', + }); }); it('unhandled workflow run title', async () => { - const mockNotification = { - ...mockedSingleNotification, - subject: { - ...mockedSingleNotification.subject, - title: 'unhandled workflow run structure', - }, - }; + const mockNotification = partialMockNotification({ + title: 'unhandled workflow run structure', + type: 'WorkflowRun', + }); const result = getWorkflowRunAttributes(mockNotification); @@ -907,3 +1021,22 @@ describe('utils/subject.ts', () => { }); }); }); + +function mockDiscussionNode( + subscription: ViewerSubscription, + state: DiscussionStateType, + isAnswered: boolean, +): Discussion { + return { + title: 'This is a mocked discussion', + url: 'https://github.com/gitify-app/notifications-test/discussions/1', + viewerSubscription: subscription, + stateReason: state, + isAnswered: isAnswered, + author: mockDiscussionAuthor, + comments: { + //TODO - Update this to have real data + nodes: [], + }, + }; +} diff --git a/src/utils/subject.ts b/src/utils/subject.ts index 1ddba3d2c..2eda8469f 100644 --- a/src/utils/subject.ts +++ b/src/utils/subject.ts @@ -88,10 +88,16 @@ function getCheckSuiteStatus(statusDisplayName: string): CheckSuiteStatus { function getGitifySubjectForCheckSuite( notification: Notification, ): GitifySubject { - return { - state: getCheckSuiteAttributes(notification)?.status, - user: null, - }; + const state = getCheckSuiteAttributes(notification)?.status; + + if (state) { + return { + state: state, + user: null, + }; + } + + return null; } async function getGitifySubjectForCommit( @@ -238,10 +244,16 @@ async function getGitifySubjectForRelease( function getGitifySubjectForWorkflowRun( notification: Notification, ): GitifySubject { - return { - state: getWorkflowRunAttributes(notification)?.status, - user: null, - }; + const state = getWorkflowRunAttributes(notification)?.status; + + if (state) { + return { + state: state, + user: null, + }; + } + + return null; } /** From c223c6dbee0f8f4ff6eac9eae42cbf436866e1bf Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 19 Apr 2024 08:04:57 -0400 Subject: [PATCH 017/251] refactor(api/errors): move error function and tests out (#1046) --- src/hooks/useNotifications.test.ts | 430 +++++------------------------ src/hooks/useNotifications.ts | 39 +-- src/utils/api/errors.test.ts | 123 +++++++++ src/utils/api/errors.ts | 40 +++ 4 files changed, 228 insertions(+), 404 deletions(-) create mode 100644 src/utils/api/errors.test.ts create mode 100644 src/utils/api/errors.ts diff --git a/src/hooks/useNotifications.test.ts b/src/hooks/useNotifications.test.ts index f4cd786ed..6eb889fc6 100644 --- a/src/hooks/useNotifications.test.ts +++ b/src/hooks/useNotifications.test.ts @@ -49,270 +49,48 @@ describe('hooks/useNotifications.ts', () => { expect(result.current.notifications[1].hostname).toBe('github.com'); }); - describe('should fetch notifications with failures - github.com & enterprise', () => { - it('network error', async () => { - const code = AxiosError.ERR_NETWORK; - - nock('https://api.github.com/') - .get('/notifications?participating=false') - .replyWithError({ - code: code, - }); - - nock('https://github.gitify.io/api/v3/') - .get('/notifications?participating=false') - .replyWithError({ - code: code, - }); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.fetchNotifications(mockAccounts, mockSettings); - }); - - await waitFor(() => { - expect(result.current.requestFailed).toBe(true); - expect(result.current.errorDetails).toBe(Errors.NETWORK); - }); - }); - - describe('bad request errors', () => { - it('bad credentials', async () => { - const code = AxiosError.ERR_BAD_REQUEST; - const status = 401; - const message = 'Bad credentials'; - - nock('https://api.github.com/') - .get('/notifications?participating=false') - .replyWithError({ - code, - response: { - status, - data: { - message, - }, - }, - }); - - nock('https://github.gitify.io/api/v3/') - .get('/notifications?participating=false') - .replyWithError({ - code, - response: { - status, - data: { - message, - }, - }, - }); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.fetchNotifications(mockAccounts, mockSettings); - }); - - await waitFor(() => { - expect(result.current.requestFailed).toBe(true); - expect(result.current.errorDetails).toBe(Errors.BAD_CREDENTIALS); - }); - }); - - it('missing scopes', async () => { - const code = AxiosError.ERR_BAD_REQUEST; - const status = 403; - const message = "Missing the 'notifications' scope"; - - nock('https://api.github.com/') - .get('/notifications?participating=false') - .replyWithError({ - code, - response: { - status, - data: { - message, - }, - }, - }); - - nock('https://github.gitify.io/api/v3/') - .get('/notifications?participating=false') - .replyWithError({ - code, - response: { - status, - data: { - message, - }, - }, - }); - - const { result } = renderHook(() => useNotifications()); + it('should fetch notifications with failures - github.com & enterprise', async () => { + const code = AxiosError.ERR_BAD_REQUEST; + const status = 400; + const message = 'Oops! Something went wrong.'; - act(() => { - result.current.fetchNotifications(mockAccounts, mockSettings); - }); - - await waitFor(() => { - expect(result.current.requestFailed).toBe(true); - expect(result.current.errorDetails).toBe(Errors.MISSING_SCOPES); - }); - }); - - it('rate limited - primary', async () => { - const code = AxiosError.ERR_BAD_REQUEST; - const status = 403; - const message = 'API rate limit exceeded'; - - nock('https://api.github.com/') - .get('/notifications?participating=false') - .replyWithError({ - code, - response: { - status, - data: { - message, - }, - }, - }); - - nock('https://github.gitify.io/api/v3/') - .get('/notifications?participating=false') - .replyWithError({ - code, - response: { - status, - data: { - message, - }, - }, - }); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.fetchNotifications(mockAccounts, mockSettings); - }); - - await waitFor(() => { - expect(result.current.requestFailed).toBe(true); - expect(result.current.errorDetails).toBe(Errors.RATE_LIMITED); - }); + nock('https://api.github.com/') + .get('/notifications?participating=false') + .replyWithError({ + code, + response: { + status, + data: { + message, + }, + }, }); - it('rate limited - secondary', async () => { - const code = AxiosError.ERR_BAD_REQUEST; - const status = 403; - const message = 'You have exceeded a secondary rate limit'; - - nock('https://api.github.com/') - .get('/notifications?participating=false') - .replyWithError({ - code, - response: { - status, - data: { - message, - }, - }, - }); - - nock('https://github.gitify.io/api/v3/') - .get('/notifications?participating=false') - .replyWithError({ - code, - response: { - status, - data: { - message, - }, - }, - }); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.fetchNotifications(mockAccounts, mockSettings); - }); - - await waitFor(() => { - expect(result.current.requestFailed).toBe(true); - expect(result.current.errorDetails).toBe(Errors.RATE_LIMITED); - }); + nock('https://github.gitify.io/api/v3/') + .get('/notifications?participating=false') + .replyWithError({ + code, + response: { + status, + data: { + message, + }, + }, }); - it('unhandled bad request error', async () => { - const code = AxiosError.ERR_BAD_REQUEST; - const status = 400; - const message = 'Oops! Something went wrong.'; - - nock('https://api.github.com/') - .get('/notifications?participating=false') - .replyWithError({ - code, - response: { - status, - data: { - message, - }, - }, - }); - - nock('https://github.gitify.io/api/v3/') - .get('/notifications?participating=false') - .replyWithError({ - code, - response: { - status, - data: { - message, - }, - }, - }); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.fetchNotifications(mockAccounts, mockSettings); - }); - - expect(result.current.isFetching).toBe(true); - - await waitFor(() => { - expect(result.current.isFetching).toBe(false); - }); + const { result } = renderHook(() => useNotifications()); - expect(result.current.requestFailed).toBe(true); - }); + act(() => { + result.current.fetchNotifications(mockAccounts, mockSettings); }); - it('unknown error', async () => { - const code = 'anything'; - - nock('https://api.github.com/') - .get('/notifications?participating=false') - .replyWithError({ - code: code, - }); - - nock('https://github.gitify.io/api/v3/') - .get('/notifications?participating=false') - .replyWithError({ - code: code, - }); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.fetchNotifications(mockAccounts, mockSettings); - }); + expect(result.current.isFetching).toBe(true); - await waitFor(() => { - expect(result.current.requestFailed).toBe(true); - expect(result.current.errorDetails).toBe(Errors.UNKNOWN); - }); + await waitFor(() => { + expect(result.current.isFetching).toBe(false); }); + + expect(result.current.requestFailed).toBe(true); }); }); @@ -355,7 +133,15 @@ describe('hooks/useNotifications.ts', () => { nock('https://github.gitify.io/api/v3/') .get('/notifications?participating=false') - .reply(400, { message: 'Oops! Something went wrong.' }); + .replyWithError({ + code: AxiosError.ERR_BAD_REQUEST, + response: { + status: 400, + data: { + message: 'Oops! Something went wrong.', + }, + }, + }); const { result } = renderHook(() => useNotifications()); @@ -399,125 +185,33 @@ describe('hooks/useNotifications.ts', () => { expect(result.current.notifications[0].notifications.length).toBe(2); }); - describe('should fetch notifications with failures - github.com only', () => { - it('bad credentials', async () => { - const status = 401; - const message = 'Bad credentials'; - const accounts: AuthState = { - ...mockAccounts, - enterpriseAccounts: [], - }; - - nock('https://api.github.com/') - .get('/notifications?participating=false') - .reply(status, { message }); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.fetchNotifications(accounts, mockSettings); - }); - - await waitFor(() => { - expect(result.current.requestFailed).toBe(true); - expect(result.current.errorDetails).toBe(Errors.BAD_CREDENTIALS); - }); - }); - - it('missing scopes', async () => { - const status = 403; - const message = "Missing the 'notifications' scope"; - const accounts: AuthState = { - ...mockAccounts, - enterpriseAccounts: [], - }; - - nock('https://api.github.com/') - .get('/notifications?participating=false') - .reply(status, { message }); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.fetchNotifications(accounts, mockSettings); - }); - - await waitFor(() => { - expect(result.current.requestFailed).toBe(true); - expect(result.current.errorDetails).toBe(Errors.MISSING_SCOPES); - }); - }); - - it('rate limited - primary', async () => { - const status = 403; - const message = 'API rate limit exceeded'; - const accounts: AuthState = { - ...mockAccounts, - enterpriseAccounts: [], - }; - - nock('https://api.github.com/') - .get('/notifications?participating=false') - .reply(status, { message }); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.fetchNotifications(accounts, mockSettings); - }); + it('should fetch notifications with failures - github.com only', async () => { + const accounts: AuthState = { + ...mockAccounts, + enterpriseAccounts: [], + }; - await waitFor(() => { - expect(result.current.requestFailed).toBe(true); - expect(result.current.errorDetails).toBe(Errors.RATE_LIMITED); + nock('https://api.github.com/') + .get('/notifications?participating=false') + .replyWithError({ + code: AxiosError.ERR_BAD_REQUEST, + response: { + status: 400, + data: { + message: 'Oops! Something went wrong.', + }, + }, }); - }); - - it('rate limited - secondary', async () => { - const status = 403; - const message = 'You have exceeded a secondary rate limit'; - const accounts: AuthState = { - ...mockAccounts, - enterpriseAccounts: [], - }; - - nock('https://api.github.com/') - .get('/notifications?participating=false') - .reply(status, { message }); - - const { result } = renderHook(() => useNotifications()); - act(() => { - result.current.fetchNotifications(accounts, mockSettings); - }); + const { result } = renderHook(() => useNotifications()); - await waitFor(() => { - expect(result.current.requestFailed).toBe(true); - expect(result.current.errorDetails).toBe(Errors.RATE_LIMITED); - }); + act(() => { + result.current.fetchNotifications(accounts, mockSettings); }); - it('default error', async () => { - const status = 400; - const message = 'Oops! Something went wrong.'; - const accounts: AuthState = { - ...mockAccounts, - enterpriseAccounts: [], - }; - - nock('https://api.github.com/') - .get('/notifications?participating=false') - .reply(status, { message }); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.fetchNotifications(accounts, mockSettings); - }); - - await waitFor(() => { - expect(result.current.requestFailed).toBe(true); - expect(result.current.errorDetails).toBe(Errors.UNKNOWN); - }); + await waitFor(() => { + expect(result.current.requestFailed).toBe(true); + expect(result.current.errorDetails).toBe(Errors.UNKNOWN); }); }); }); diff --git a/src/hooks/useNotifications.ts b/src/hooks/useNotifications.ts index 6489147fe..112b6db13 100644 --- a/src/hooks/useNotifications.ts +++ b/src/hooks/useNotifications.ts @@ -1,4 +1,4 @@ -import axios, { AxiosError, type AxiosPromise } from 'axios'; +import axios, { type AxiosError, type AxiosPromise } from 'axios'; import { useCallback, useState } from 'react'; import type { @@ -9,7 +9,8 @@ import type { } from '../types'; import type { GithubRESTError, Notification } from '../typesGithub'; import { apiRequestAuth } from '../utils/api-requests'; -import Constants, { Errors } from '../utils/constants'; +import { determineFailureType } from '../utils/api/errors'; +import Constants from '../utils/constants'; import { generateGitHubAPIUrl, getEnterpriseAccountToken, @@ -403,37 +404,3 @@ export const useNotifications = (): NotificationsState => { markRepoNotificationsDone, }; }; - -function determineFailureType(err: AxiosError): GitifyError { - const code = err.code; - - if (code === AxiosError.ERR_NETWORK) { - return Errors.NETWORK; - } - - if (code !== AxiosError.ERR_BAD_REQUEST) { - return Errors.UNKNOWN; - } - - const status = err.response.status; - const message = err.response.data.message; - - if (status === 401) { - return Errors.BAD_CREDENTIALS; - } - - if (status === 403) { - if (message.includes("Missing the 'notifications' scope")) { - return Errors.MISSING_SCOPES; - } - - if ( - message.includes('API rate limit exceeded') || - message.includes('You have exceeded a secondary rate limit') - ) { - return Errors.RATE_LIMITED; - } - } - - return Errors.UNKNOWN; -} diff --git a/src/utils/api/errors.test.ts b/src/utils/api/errors.test.ts new file mode 100644 index 000000000..dd7d9a328 --- /dev/null +++ b/src/utils/api/errors.test.ts @@ -0,0 +1,123 @@ +import { AxiosError, type AxiosResponse } from 'axios'; +import type { GithubRESTError } from '../../typesGithub'; +import { Errors } from '../constants'; +import { determineFailureType } from './errors'; + +describe('utils/api/errors.ts', () => { + it('network error', async () => { + const mockError: Partial> = { + code: AxiosError.ERR_NETWORK, + }; + + const result = determineFailureType( + mockError as AxiosError, + ); + + expect(result).toBe(Errors.NETWORK); + }); + + describe('bad request errors', () => { + it('bad credentials', async () => { + const mockError: Partial> = { + code: AxiosError.ERR_BAD_REQUEST, + status: 401, + response: createMockResponse(401, 'Bad credentials'), + }; + + const result = determineFailureType( + mockError as AxiosError, + ); + + expect(result).toBe(Errors.BAD_CREDENTIALS); + }); + + it('missing scopes', async () => { + const mockError: Partial> = { + code: AxiosError.ERR_BAD_REQUEST, + status: 403, + response: createMockResponse(403, "Missing the 'notifications' scope"), + }; + + const result = determineFailureType( + mockError as AxiosError, + ); + + expect(result).toBe(Errors.MISSING_SCOPES); + }); + + it('rate limited - primary', async () => { + const mockError: Partial> = { + code: AxiosError.ERR_BAD_REQUEST, + status: 403, + response: createMockResponse(403, 'API rate limit exceeded'), + }; + + const result = determineFailureType( + mockError as AxiosError, + ); + + expect(result).toBe(Errors.RATE_LIMITED); + }); + + it('rate limited - secondary', async () => { + const mockError: Partial> = { + code: AxiosError.ERR_BAD_REQUEST, + status: 403, + response: createMockResponse( + 403, + 'You have exceeded a secondary rate limit', + ), + }; + + const result = determineFailureType( + mockError as AxiosError, + ); + + expect(result).toBe(Errors.RATE_LIMITED); + }); + + it('unhandled bad request error', async () => { + const mockError: Partial> = { + code: AxiosError.ERR_BAD_REQUEST, + status: 400, + response: createMockResponse(403, 'Oops! Something went wrong.'), + }; + + const result = determineFailureType( + mockError as AxiosError, + ); + + expect(result).toBe(Errors.UNKNOWN); + }); + }); + + it('unknown error', async () => { + const mockError: Partial> = { + code: 'anything', + }; + + const result = determineFailureType( + mockError as AxiosError, + ); + + expect(result).toBe(Errors.UNKNOWN); + }); +}); + +function createMockResponse( + status: number, + message: string, +): AxiosResponse { + return { + data: { + message, + documentation_url: 'https://some-url.com', + }, + status, + statusText: 'Some status text', + headers: {}, + config: { + headers: undefined, + }, + }; +} diff --git a/src/utils/api/errors.ts b/src/utils/api/errors.ts new file mode 100644 index 000000000..2c69b2a53 --- /dev/null +++ b/src/utils/api/errors.ts @@ -0,0 +1,40 @@ +import { AxiosError } from 'axios'; +import type { GitifyError } from '../../types'; +import type { GithubRESTError } from '../../typesGithub'; +import { Errors } from '../constants'; + +export function determineFailureType( + err: AxiosError, +): GitifyError { + const code = err.code; + + if (code === AxiosError.ERR_NETWORK) { + return Errors.NETWORK; + } + + if (code !== AxiosError.ERR_BAD_REQUEST) { + return Errors.UNKNOWN; + } + + const status = err.response.status; + const message = err.response.data.message; + + if (status === 401) { + return Errors.BAD_CREDENTIALS; + } + + if (status === 403) { + if (message.includes("Missing the 'notifications' scope")) { + return Errors.MISSING_SCOPES; + } + + if ( + message.includes('API rate limit exceeded') || + message.includes('You have exceeded a secondary rate limit') + ) { + return Errors.RATE_LIMITED; + } + } + + return Errors.UNKNOWN; +} From e0f4394eba19f0a6cb4f9dffdde0bd976bf82ffd Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 19 Apr 2024 08:31:19 -0400 Subject: [PATCH 018/251] verify fix --- .github/workflows/on-tag.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/on-tag.yml b/.github/workflows/on-tag.yml index 1bff521a6..9842e32e5 100644 --- a/.github/workflows/on-tag.yml +++ b/.github/workflows/on-tag.yml @@ -3,6 +3,8 @@ name: On Tag on: push: tags: 'v*' + branches: + - fix/* jobs: update-website: From cbf13a91d13c8d8f4fb3680c373f6e8747713363 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 19 Apr 2024 08:32:45 -0400 Subject: [PATCH 019/251] Revert "verify fix" This reverts commit e0f4394eba19f0a6cb4f9dffdde0bd976bf82ffd. --- .github/workflows/on-tag.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/on-tag.yml b/.github/workflows/on-tag.yml index 9842e32e5..1bff521a6 100644 --- a/.github/workflows/on-tag.yml +++ b/.github/workflows/on-tag.yml @@ -3,8 +3,6 @@ name: On Tag on: push: tags: 'v*' - branches: - - fix/* jobs: update-website: From e0b88e43f588b5e6401cf970501683ca8d41accc Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 19 Apr 2024 10:10:04 -0400 Subject: [PATCH 020/251] docs: release homebrew step --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0e2b34629..fe42a2a32 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,7 @@ The release process is automated. Follow the steps below. 5. Merge your release branch into `main`. 6. Publish the release once you've finalized the release notes and confirmed all assets are there. 7. Merge the open pull request in [gitify-app/website][github-website-pulls] (ie: `bump/v1.2.3`) +8. A new homebrew cask will be automatically published (workflow runs ~3 hours) ### Tests From 9a12faa8e74e5f628ff6a72de941864447f049fa Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 19 Apr 2024 10:46:15 -0400 Subject: [PATCH 021/251] fix: website version bump workflow (#1051) * fix: use correct token var in website version bump workflow * verify fix * verify fix * verify fix * verify fix * verify fix * verify fix * verify fix * verify fix * verify fix * verify fix * verify fix * verify fix * fix: website version bump * fix: website version bump * fix: website version bump * fix: website version bump * fix: website version bump * fix: website version bump * fix: website version bump * fix: website version bump * fix: website version bump * test using github token * fix: website version bump --- .github/workflows/on-tag.yml | 44 +++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/.github/workflows/on-tag.yml b/.github/workflows/on-tag.yml index 1bff521a6..80917d3b2 100644 --- a/.github/workflows/on-tag.yml +++ b/.github/workflows/on-tag.yml @@ -6,31 +6,43 @@ on: jobs: update-website: - name: Website + name: Update Website Version runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - name: Checkout website repository + uses: actions/checkout@v4 with: repository: gitify-app/website token: ${{ secrets.GH_TOKEN }} - - uses: pnpm/action-setup@v3 - - uses: actions/setup-node@v4 + + - name: Setup pnpm + uses: pnpm/action-setup@v3 + + - name: Setup node + uses: actions/setup-node@v4 with: node-version-file: '.nvmrc' - - id: version - run: echo "version=$(echo ${{ github.ref }} | sed 's/refs\/tags\/v//')" >> $GITHUB_OUTPUT - - run: pnpm version ${{ steps.version.outputs.version }} - - uses: peter-evans/create-pull-request@v6 + + - name: Bump version to latest tag + run: echo "GITIFY_VERSION=$(echo ${{ github.ref }} | sed 's/refs\/tags\/v//')" >> $GITHUB_OUTPUT + + - name: Setup git config + run: | + git config user.name github-actions[bot] + git config user.email 41898282+github-actions[bot]@users.noreply.github.com + + - name: Bump version to latest + run: pnpm version ${{ env.GITIFY_VERSION }} + + - name: Create pull request + uses: peter-evans/create-pull-request@v6 with: - token: ${{ secrets.GITHUB_TOKEN }} - commit-message: 'docs: update latest release to ${{ steps.version.outputs.version }}' - committer: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> - author: ${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com> - signoff: false - branch: 'bump/${{ steps.version.outputs.version }}' + token: ${{ secrets.GH_TOKEN }} + branch: "bump/${{ env.GITIFY_VERSION }}" delete-branch: true - title: 'docs: update latest release to ${{ steps.version.outputs.version }}' + title: | + docs: update to latest release version ${{ env.GITIFY_VERSION }} body: | - Update latest release to ${{ steps.version.outputs.version }} + Automated update to latest release version ${{ env.GITIFY_VERSION }} labels: | documentation From 02f211fd80b5f697d0053f04046b12059d72204f Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 19 Apr 2024 14:48:13 -0400 Subject: [PATCH 022/251] docs: renovate badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fe42a2a32..9d3938479 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Gitify [![Build Workflow][build-workflow-badge]][github-actions] [![Release Workflow][release-workflow-badge]][github-actions] [![Coveralls][coveralls-badge]][coveralls] [![Contributors][contributors-badge]][github] [![Downloads - Total][downloads-total-badge]][website] [![Downloads - Latest Release][downloads-latest-badge]][website] [![OSS License][license-badge]][license] [![Latest Release][github-release-badge]][github-releases] [![Homebrew Cask][homebrew-cask-badge]][homebrew-cask] +# Gitify [![Build Workflow][build-workflow-badge]][github-actions] [![Release Workflow][release-workflow-badge]][github-actions] [![Coveralls][coveralls-badge]][coveralls] [![Renovate enabled](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://renovatebot.com/) [![Contributors][contributors-badge]][github] [![Downloads - Total][downloads-total-badge]][website] [![Downloads - Latest Release][downloads-latest-badge]][website] [![OSS License][license-badge]][license] [![Latest Release][github-release-badge]][github-releases] [![Homebrew Cask][homebrew-cask-badge]][homebrew-cask] > GitHub Notifications on your menu bar. Available on macOS, Windows and Linux. From c383bf6d6484de2ad614ec98fe0dc3aa9ef29787 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 19 Apr 2024 14:54:07 -0400 Subject: [PATCH 023/251] docs: renovate badge --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9d3938479..3163015a5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Gitify [![Build Workflow][build-workflow-badge]][github-actions] [![Release Workflow][release-workflow-badge]][github-actions] [![Coveralls][coveralls-badge]][coveralls] [![Renovate enabled](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://renovatebot.com/) [![Contributors][contributors-badge]][github] [![Downloads - Total][downloads-total-badge]][website] [![Downloads - Latest Release][downloads-latest-badge]][website] [![OSS License][license-badge]][license] [![Latest Release][github-release-badge]][github-releases] [![Homebrew Cask][homebrew-cask-badge]][homebrew-cask] +# Gitify [![Build Workflow][build-workflow-badge]][github-actions] [![Release Workflow][release-workflow-badge]][github-actions] [![Coveralls][coveralls-badge]][coveralls] [![Renovate enabled][renovate-badge]][renovate] [![Contributors][contributors-badge]][github] [![Downloads - Total][downloads-total-badge]][website] [![Downloads - Latest Release][downloads-latest-badge]][website] [![OSS License][license-badge]][license] [![Latest Release][github-release-badge]][github-releases] [![Homebrew Cask][homebrew-cask-badge]][homebrew-cask] > GitHub Notifications on your menu bar. Available on macOS, Windows and Linux. @@ -99,3 +99,5 @@ Gitify is licensed under the MIT Open Source license. For more information, see [license-badge]: https://img.shields.io/github/license/gitify-app/gitify [github-release-badge]: https://img.shields.io/github/v/release/gitify-app/gitify [homebrew-cask-badge]: https://img.shields.io/homebrew/cask/v/gitify +[renovate]: https://renovatebot.com/ +[renovate-badge]: https://img.shields.io/badge/renovate-enabled-brightgreen.svg From 669a08737b221a778a1b0bcf09c6dc749e1030fd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 21 Apr 2024 20:51:59 -0400 Subject: [PATCH 024/251] chore(deps): update pnpm to v9.0.5 (#1055) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5b6b26139..3ae53fb69 100644 --- a/package.json +++ b/package.json @@ -154,7 +154,7 @@ "webpack-cli": "5.1.4", "webpack-merge": "5.10.0" }, - "packageManager": "pnpm@9.0.4", + "packageManager": "pnpm@9.0.5", "lint-staged": { "*.{html,js,json,md,ts,tsx}": "biome format --write" } From d328ee3110c1130375c66d8317c197cc001e3eeb Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Mon, 22 Apr 2024 04:03:07 -0400 Subject: [PATCH 025/251] refactor: improve return type (#1054) --- src/hooks/useNotifications.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/hooks/useNotifications.ts b/src/hooks/useNotifications.ts index 112b6db13..a696e8d62 100644 --- a/src/hooks/useNotifications.ts +++ b/src/hooks/useNotifications.ts @@ -74,7 +74,10 @@ export const useNotifications = (): NotificationsState => { const fetchNotifications = useCallback( async (accounts: AuthState, settings: SettingsState) => { - function getNotifications(hostname: string, token: string): AxiosPromise { + function getNotifications( + hostname: string, + token: string, + ): AxiosPromise { const endpointSuffix = `notifications?participating=${settings.participating}`; const url = `${generateGitHubAPIUrl(hostname)}${endpointSuffix}`; return apiRequestAuth(url, 'GET', token); From c65981c63ddc286a4aba25a0b93a61402bf51da0 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Mon, 22 Apr 2024 05:16:07 -0400 Subject: [PATCH 026/251] refactor: use correct case for GitHub (#1053) * refactor: use correct case for GitHub * fix: filename casing --- src/__mocks__/mockedData.ts | 6 ++-- src/__mocks__/partial-mocks.ts | 2 +- src/components/AccountNotifications.test.tsx | 4 +-- src/components/AccountNotifications.tsx | 2 +- src/components/NotificationRow.tsx | 2 +- src/components/Repository.test.tsx | 4 +-- src/components/Repository.tsx | 2 +- src/hooks/useNotifications.ts | 4 +-- src/types.ts | 2 +- src/{typesGithub.ts => typesGitHub.ts} | 2 +- src/utils/api/errors.test.ts | 32 ++++++++++---------- src/utils/api/errors.ts | 4 +-- src/utils/auth.test.ts | 6 ++-- src/utils/auth.ts | 4 +-- src/utils/helpers.test.ts | 2 +- src/utils/helpers.ts | 2 +- src/utils/icons.test.ts | 2 +- src/utils/icons.ts | 2 +- src/utils/notifications.test.ts | 8 ++--- src/utils/notifications.ts | 2 +- src/utils/reason.test.ts | 2 +- src/utils/reason.ts | 2 +- src/utils/subject.test.ts | 2 +- src/utils/subject.ts | 2 +- 24 files changed, 51 insertions(+), 51 deletions(-) rename src/{typesGithub.ts => typesGitHub.ts} (99%) diff --git a/src/__mocks__/mockedData.ts b/src/__mocks__/mockedData.ts index 3db3691a4..24428a97c 100644 --- a/src/__mocks__/mockedData.ts +++ b/src/__mocks__/mockedData.ts @@ -10,7 +10,7 @@ import type { Notification, Repository, User, -} from '../typesGithub'; +} from '../typesGitHub'; import Constants from '../utils/constants'; export const mockedEnterpriseAccounts: EnterpriseAccount[] = [ @@ -199,7 +199,7 @@ export const mockedSingleNotification: Notification = { // 2 Notifications // Repository : 'manosim/notifications-tests' -export const mockedGithubNotifications = [ +export const mockedGitHubNotifications = [ mockedSingleNotification, { id: '148827438', @@ -366,7 +366,7 @@ export const mockedEnterpriseNotifications = [ export const mockedAccountNotifications: AccountNotifications[] = [ { hostname: 'github.com', - notifications: mockedGithubNotifications, + notifications: mockedGitHubNotifications, }, { hostname: 'github.gitify.io', diff --git a/src/__mocks__/partial-mocks.ts b/src/__mocks__/partial-mocks.ts index e61e0d129..2c8b52b72 100644 --- a/src/__mocks__/partial-mocks.ts +++ b/src/__mocks__/partial-mocks.ts @@ -1,4 +1,4 @@ -import type { Notification, Subject, User } from '../typesGithub'; +import type { Notification, Subject, User } from '../typesGitHub'; export function partialMockNotification( subject: Partial, diff --git a/src/components/AccountNotifications.test.tsx b/src/components/AccountNotifications.test.tsx index 69f86c8b7..b18ffa47c 100644 --- a/src/components/AccountNotifications.test.tsx +++ b/src/components/AccountNotifications.test.tsx @@ -1,6 +1,6 @@ import TestRenderer from 'react-test-renderer'; -import { mockedGithubNotifications } from '../__mocks__/mockedData'; +import { mockedGitHubNotifications } from '../__mocks__/mockedData'; import { AccountNotifications } from './AccountNotifications'; jest.mock('./Repository', () => ({ @@ -11,7 +11,7 @@ describe('components/AccountNotifications.tsx', () => { it('should render itself (github.com with notifications)', () => { const props = { hostname: 'github.com', - notifications: mockedGithubNotifications, + notifications: mockedGitHubNotifications, showAccountHostname: true, }; diff --git a/src/components/AccountNotifications.tsx b/src/components/AccountNotifications.tsx index 4c94bac08..b6a09e6b5 100644 --- a/src/components/AccountNotifications.tsx +++ b/src/components/AccountNotifications.tsx @@ -1,6 +1,6 @@ import { ChevronDownIcon, ChevronLeftIcon } from '@primer/octicons-react'; -import type { Notification } from '../typesGithub'; +import type { Notification } from '../typesGitHub'; import { RepositoryNotifications } from './Repository'; interface IProps { diff --git a/src/components/NotificationRow.tsx b/src/components/NotificationRow.tsx index 517b5d7f9..81ce5d998 100644 --- a/src/components/NotificationRow.tsx +++ b/src/components/NotificationRow.tsx @@ -14,7 +14,7 @@ import { } from 'react'; import { AppContext } from '../context/App'; -import type { Notification } from '../typesGithub'; +import type { Notification } from '../typesGitHub'; import { openExternalLink } from '../utils/comms'; import { formatForDisplay, openInBrowser } from '../utils/helpers'; import { diff --git a/src/components/Repository.test.tsx b/src/components/Repository.test.tsx index a2e5d877f..e7d154129 100644 --- a/src/components/Repository.test.tsx +++ b/src/components/Repository.test.tsx @@ -1,6 +1,6 @@ import { fireEvent, render, screen } from '@testing-library/react'; import TestRenderer from 'react-test-renderer'; -import { mockedGithubNotifications } from '../__mocks__/mockedData'; +import { mockedGitHubNotifications } from '../__mocks__/mockedData'; import { AppContext } from '../context/App'; import { RepositoryNotifications } from './Repository'; const { shell } = require('electron'); @@ -16,7 +16,7 @@ describe('components/Repository.tsx', () => { const props = { hostname: 'github.com', repoName: 'manosim/gitify', - repoNotifications: mockedGithubNotifications, + repoNotifications: mockedGitHubNotifications, }; beforeEach(() => { diff --git a/src/components/Repository.tsx b/src/components/Repository.tsx index 28bef678f..0d68875f6 100644 --- a/src/components/Repository.tsx +++ b/src/components/Repository.tsx @@ -4,7 +4,7 @@ import { type FC, useCallback, useContext } from 'react'; import { CSSTransition, TransitionGroup } from 'react-transition-group'; import { AppContext } from '../context/App'; -import type { Notification } from '../typesGithub'; +import type { Notification } from '../typesGitHub'; import { openExternalLink } from '../utils/comms'; import { NotificationRow } from './NotificationRow'; diff --git a/src/hooks/useNotifications.ts b/src/hooks/useNotifications.ts index a696e8d62..c3a1053d1 100644 --- a/src/hooks/useNotifications.ts +++ b/src/hooks/useNotifications.ts @@ -7,7 +7,7 @@ import type { GitifyError, SettingsState, } from '../types'; -import type { GithubRESTError, Notification } from '../typesGithub'; +import type { GitHubRESTError, Notification } from '../typesGitHub'; import { apiRequestAuth } from '../utils/api-requests'; import { determineFailureType } from '../utils/api/errors'; import Constants from '../utils/constants'; @@ -201,7 +201,7 @@ export const useNotifications = (): NotificationsState => { }); }), ) - .catch((err: AxiosError) => { + .catch((err: AxiosError) => { setIsFetching(false); setRequestFailed(true); setErrorDetails(determineFailureType(err)); diff --git a/src/types.ts b/src/types.ts index fb4f00fb2..fde42cc55 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -import type { Notification } from './typesGithub'; +import type { Notification } from './typesGitHub'; export interface AuthState { token?: string; diff --git a/src/typesGithub.ts b/src/typesGitHub.ts similarity index 99% rename from src/typesGithub.ts rename to src/typesGitHub.ts index 0a462d6af..a48fd0f2b 100644 --- a/src/typesGithub.ts +++ b/src/typesGitHub.ts @@ -440,7 +440,7 @@ export interface WorkflowRunAttributes { status: CheckSuiteStatus | null; } -export interface GithubRESTError { +export interface GitHubRESTError { message: string; documentation_url: string; } diff --git a/src/utils/api/errors.test.ts b/src/utils/api/errors.test.ts index dd7d9a328..240eea265 100644 --- a/src/utils/api/errors.test.ts +++ b/src/utils/api/errors.test.ts @@ -1,16 +1,16 @@ import { AxiosError, type AxiosResponse } from 'axios'; -import type { GithubRESTError } from '../../typesGithub'; +import type { GitHubRESTError } from '../../typesGitHub'; import { Errors } from '../constants'; import { determineFailureType } from './errors'; describe('utils/api/errors.ts', () => { it('network error', async () => { - const mockError: Partial> = { + const mockError: Partial> = { code: AxiosError.ERR_NETWORK, }; const result = determineFailureType( - mockError as AxiosError, + mockError as AxiosError, ); expect(result).toBe(Errors.NETWORK); @@ -18,49 +18,49 @@ describe('utils/api/errors.ts', () => { describe('bad request errors', () => { it('bad credentials', async () => { - const mockError: Partial> = { + const mockError: Partial> = { code: AxiosError.ERR_BAD_REQUEST, status: 401, response: createMockResponse(401, 'Bad credentials'), }; const result = determineFailureType( - mockError as AxiosError, + mockError as AxiosError, ); expect(result).toBe(Errors.BAD_CREDENTIALS); }); it('missing scopes', async () => { - const mockError: Partial> = { + const mockError: Partial> = { code: AxiosError.ERR_BAD_REQUEST, status: 403, response: createMockResponse(403, "Missing the 'notifications' scope"), }; const result = determineFailureType( - mockError as AxiosError, + mockError as AxiosError, ); expect(result).toBe(Errors.MISSING_SCOPES); }); it('rate limited - primary', async () => { - const mockError: Partial> = { + const mockError: Partial> = { code: AxiosError.ERR_BAD_REQUEST, status: 403, response: createMockResponse(403, 'API rate limit exceeded'), }; const result = determineFailureType( - mockError as AxiosError, + mockError as AxiosError, ); expect(result).toBe(Errors.RATE_LIMITED); }); it('rate limited - secondary', async () => { - const mockError: Partial> = { + const mockError: Partial> = { code: AxiosError.ERR_BAD_REQUEST, status: 403, response: createMockResponse( @@ -70,21 +70,21 @@ describe('utils/api/errors.ts', () => { }; const result = determineFailureType( - mockError as AxiosError, + mockError as AxiosError, ); expect(result).toBe(Errors.RATE_LIMITED); }); it('unhandled bad request error', async () => { - const mockError: Partial> = { + const mockError: Partial> = { code: AxiosError.ERR_BAD_REQUEST, status: 400, response: createMockResponse(403, 'Oops! Something went wrong.'), }; const result = determineFailureType( - mockError as AxiosError, + mockError as AxiosError, ); expect(result).toBe(Errors.UNKNOWN); @@ -92,12 +92,12 @@ describe('utils/api/errors.ts', () => { }); it('unknown error', async () => { - const mockError: Partial> = { + const mockError: Partial> = { code: 'anything', }; const result = determineFailureType( - mockError as AxiosError, + mockError as AxiosError, ); expect(result).toBe(Errors.UNKNOWN); @@ -107,7 +107,7 @@ describe('utils/api/errors.ts', () => { function createMockResponse( status: number, message: string, -): AxiosResponse { +): AxiosResponse { return { data: { message, diff --git a/src/utils/api/errors.ts b/src/utils/api/errors.ts index 2c69b2a53..7202d5675 100644 --- a/src/utils/api/errors.ts +++ b/src/utils/api/errors.ts @@ -1,10 +1,10 @@ import { AxiosError } from 'axios'; import type { GitifyError } from '../../types'; -import type { GithubRESTError } from '../../typesGithub'; +import type { GitHubRESTError } from '../../typesGitHub'; import { Errors } from '../constants'; export function determineFailureType( - err: AxiosError, + err: AxiosError, ): GitifyError { const code = err.code; diff --git a/src/utils/auth.test.ts b/src/utils/auth.test.ts index 0365677fd..fc80b0454 100644 --- a/src/utils/auth.test.ts +++ b/src/utils/auth.test.ts @@ -15,7 +15,7 @@ describe('utils/auth.tsx', () => { loadURLMock.mockReset(); }); - it('should call authGithub - success', async () => { + it('should call authGitHub - success', async () => { // Casting to jest.Mock avoids Typescript errors, where the spy is expected to match all the original // function's typing. I might fix all that if the return type of this was actually used, or if I was // writing this test for a new feature. Since I'm just upgrading Jest, jest.Mock is a nice escape hatch @@ -44,7 +44,7 @@ describe('utils/auth.tsx', () => { expect(browserWindow.destroy).toHaveBeenCalledTimes(1); }); - it('should call authGithub - failure', async () => { + it('should call authGitHub - failure', async () => { ( jest.spyOn(browserWindow.webContents, 'on') as jest.Mock ).mockImplementation((event, callback): void => { @@ -55,7 +55,7 @@ describe('utils/auth.tsx', () => { }); await expect(async () => await auth.authGitHub()).rejects.toEqual( - "Oops! Something went wrong and we couldn't log you in using Github. Please try again.", + "Oops! Something went wrong and we couldn't log you in using GitHub. Please try again.", ); expect(loadURLMock).toHaveBeenCalledTimes(1); }); diff --git a/src/utils/auth.ts b/src/utils/auth.ts index 68fd9e5b1..61b9b4d61 100644 --- a/src/utils/auth.ts +++ b/src/utils/auth.ts @@ -6,7 +6,7 @@ import type { AuthTokenResponse, GitifyUser, } from '../types'; -import type { UserDetails } from '../typesGithub'; +import type { UserDetails } from '../typesGitHub'; import { apiRequest, apiRequestAuth } from '../utils/api-requests'; import { Constants } from '../utils/constants'; import { generateGitHubAPIUrl, isEnterpriseHost } from './helpers'; @@ -44,7 +44,7 @@ export const authGitHub = ( } else if (error) { reject( "Oops! Something went wrong and we couldn't " + - 'log you in using Github. Please try again.', + 'log you in using GitHub. Please try again.', ); } }; diff --git a/src/utils/helpers.test.ts b/src/utils/helpers.test.ts index b4019e3ff..4fa85c67c 100644 --- a/src/utils/helpers.test.ts +++ b/src/utils/helpers.test.ts @@ -5,7 +5,7 @@ import { mockedSingleNotification, mockedUser, } from '../__mocks__/mockedData'; -import type { SubjectType } from '../typesGithub'; +import type { SubjectType } from '../typesGitHub'; import * as apiRequests from './api-requests'; import { addHours, diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 814023fa1..3ad166fea 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -7,7 +7,7 @@ import type { IssueComments, Notification, PullRequest, -} from '../typesGithub'; +} from '../typesGitHub'; import { apiRequestAuth } from '../utils/api-requests'; import { openExternalLink } from '../utils/comms'; import { Constants } from './constants'; diff --git a/src/utils/icons.test.ts b/src/utils/icons.test.ts index f80e600ae..15fb35651 100644 --- a/src/utils/icons.test.ts +++ b/src/utils/icons.test.ts @@ -1,4 +1,4 @@ -import type { StateType, Subject, SubjectType } from '../typesGithub'; +import type { StateType, Subject, SubjectType } from '../typesGitHub'; import { getNotificationTypeIcon, getNotificationTypeIconColor } from './icons'; describe('utils/icons.ts', () => { diff --git a/src/utils/icons.ts b/src/utils/icons.ts index a7cef5e02..609421457 100644 --- a/src/utils/icons.ts +++ b/src/utils/icons.ts @@ -25,7 +25,7 @@ import { } from '@primer/octicons-react'; import type { FC } from 'react'; import { IconColor } from '../types'; -import type { Subject } from '../typesGithub'; +import type { Subject } from '../typesGitHub'; export function getNotificationTypeIcon(subject: Subject): FC { switch (subject.type) { diff --git a/src/utils/notifications.test.ts b/src/utils/notifications.test.ts index eba592661..d6c408db6 100644 --- a/src/utils/notifications.test.ts +++ b/src/utils/notifications.test.ts @@ -3,7 +3,7 @@ import { ipcRenderer } from 'electron'; import { mockAccounts } from '../__mocks__/mock-state'; import { mockedAccountNotifications, - mockedGithubNotifications, + mockedGitHubNotifications, mockedSingleAccountNotifications, } from '../__mocks__/mockedData'; import { defaultSettings } from '../context/App'; @@ -109,14 +109,14 @@ describe('utils/notifications.ts', () => { const nativeNotification: Notification = notificationsHelpers.raiseNativeNotification( - [mockedGithubNotifications[0]], + [mockedGitHubNotifications[0]], mockAccounts, ); nativeNotification.onclick(null); expect(helpers.openInBrowser).toHaveBeenCalledTimes(1); expect(helpers.openInBrowser).toHaveBeenLastCalledWith( - mockedGithubNotifications[0], + mockedGitHubNotifications[0], mockAccounts, ); expect(ipcRenderer.send).toHaveBeenCalledWith('hide-window'); @@ -124,7 +124,7 @@ describe('utils/notifications.ts', () => { it('should click on a native notification (with more than 1 notification)', () => { const nativeNotification = notificationsHelpers.raiseNativeNotification( - mockedGithubNotifications, + mockedGitHubNotifications, mockAccounts, ); nativeNotification.onclick(null); diff --git a/src/utils/notifications.ts b/src/utils/notifications.ts index 0e1004dee..589f8198a 100644 --- a/src/utils/notifications.ts +++ b/src/utils/notifications.ts @@ -1,5 +1,5 @@ import { ipcRenderer } from 'electron'; -import { Notification } from '../typesGithub'; +import { Notification } from '../typesGitHub'; import { openInBrowser } from '../utils/helpers'; import { updateTrayIcon } from './comms'; diff --git a/src/utils/reason.test.ts b/src/utils/reason.test.ts index 10ed1c505..8d765a8fc 100644 --- a/src/utils/reason.test.ts +++ b/src/utils/reason.test.ts @@ -1,4 +1,4 @@ -import type { Reason } from '../typesGithub'; +import type { Reason } from '../typesGitHub'; import { formatReason } from './reason'; describe('utils/reason.ts', () => { diff --git a/src/utils/reason.ts b/src/utils/reason.ts index 1eab54916..f8486ec0c 100644 --- a/src/utils/reason.ts +++ b/src/utils/reason.ts @@ -1,5 +1,5 @@ import type { FormattedReason } from '../types'; -import type { Reason } from '../typesGithub'; +import type { Reason } from '../typesGitHub'; const FORMATTED_REASONS: Record = { approval_requested: { diff --git a/src/utils/subject.test.ts b/src/utils/subject.test.ts index 8a26b8b7f..3270cf838 100644 --- a/src/utils/subject.test.ts +++ b/src/utils/subject.test.ts @@ -13,7 +13,7 @@ import type { Notification, Repository, ViewerSubscription, -} from '../typesGithub'; +} from '../typesGitHub'; import { getCheckSuiteAttributes, getGitifySubjectDetails, diff --git a/src/utils/subject.ts b/src/utils/subject.ts index 2eda8469f..469ea3b97 100644 --- a/src/utils/subject.ts +++ b/src/utils/subject.ts @@ -13,7 +13,7 @@ import type { SubjectUser, User, WorkflowRunAttributes, -} from '../typesGithub'; +} from '../typesGitHub'; import { apiRequestAuth } from './api-requests'; import { fetchDiscussion, getLatestDiscussionComment } from './helpers'; From 781faf2689e4561a9f0c909bb1ad09c46ee0341d Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Mon, 22 Apr 2024 13:24:37 -0400 Subject: [PATCH 027/251] refactor: clarify unsubscribe behavior (#1057) --- src/components/NotificationRow.test.tsx | 2 +- src/components/NotificationRow.tsx | 8 ++++---- .../__snapshots__/NotificationRow.test.tsx.snap | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/components/NotificationRow.test.tsx b/src/components/NotificationRow.test.tsx index 98cfcdf2a..016f86fbb 100644 --- a/src/components/NotificationRow.test.tsx +++ b/src/components/NotificationRow.test.tsx @@ -165,7 +165,7 @@ describe('components/NotificationRow.tsx', () => { , ); - fireEvent.click(screen.getByTitle('Unsubscribe')); + fireEvent.click(screen.getByTitle('Unsubscribe from Thread')); expect(unsubscribeNotification).toHaveBeenCalledTimes(1); }); diff --git a/src/components/NotificationRow.tsx b/src/components/NotificationRow.tsx index 81ce5d998..410115059 100644 --- a/src/components/NotificationRow.tsx +++ b/src/components/NotificationRow.tsx @@ -50,7 +50,7 @@ export const NotificationRow: FC = ({ notification, hostname }) => { } }, [notifications, notification, accounts, settings]); // notifications required here to prevent weird state issues - const unsubscribe = (event: MouseEvent) => { + const unsubscribeFromThread = (event: MouseEvent) => { // Don't trigger onClick of parent element. event.stopPropagation(); @@ -149,10 +149,10 @@ export const NotificationRow: FC = ({ notification, hostname }) => { -

- manosim/gitify + gitify-app/notifications-test
{ From e19d8df97fd9e4d0d29067b73640fcf9ed66f5cc Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Thu, 2 May 2024 03:03:24 -1000 Subject: [PATCH 053/251] feat: skip fetching PR comments when none exist (#1075) Co-authored-by: Afonso Jorge Ramos --- src/utils/subject.test.ts | 29 +++++++++++++++++++++++++++++ src/utils/subject.ts | 5 ++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/utils/subject.test.ts b/src/utils/subject.test.ts index bb2aaee2c..cb2798604 100644 --- a/src/utils/subject.test.ts +++ b/src/utils/subject.test.ts @@ -736,6 +736,35 @@ describe('utils/subject.ts', () => { }); }); + it('avoid fetching comments if latest_comment_url and url are the same', async () => { + mockNotification.subject.latest_comment_url = + mockNotification.subject.url; + + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/pulls/1') + .reply(200, { + state: 'open', + draft: false, + merged: false, + user: mockAuthor, + }); + + const result = await getGitifySubjectDetails( + mockNotification, + mockAccounts.token, + ); + + expect(result).toEqual({ + state: 'open', + user: { + login: mockAuthor.login, + html_url: mockAuthor.html_url, + avatar_url: mockAuthor.avatar_url, + type: mockAuthor.type, + }, + }); + }); + it('handle pull request without latest_comment_url', async () => { mockNotification.subject.latest_comment_url = null; diff --git a/src/utils/subject.ts b/src/utils/subject.ts index dbf45ada9..a172ad6bb 100644 --- a/src/utils/subject.ts +++ b/src/utils/subject.ts @@ -224,7 +224,10 @@ async function getGitifySubjectForPullRequest( let prCommentUser: User; - if (notification.subject.latest_comment_url) { + if ( + notification.subject.latest_comment_url && + notification.subject.latest_comment_url !== notification.subject.url + ) { const prComment = ( await getIssueOrPullRequestComment( notification.subject.latest_comment_url, From e57925f2e8b2e4091db5073fb230ed6822db0a64 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Thu, 2 May 2024 06:14:24 -1000 Subject: [PATCH 054/251] refactor: extract notification retrieval logic (#1073) * refactor: extract * refactor: extract logic * refactor: extract logic * fix import --- src/hooks/useNotifications.test.ts | 80 ------------------- src/hooks/useNotifications.ts | 119 +++++------------------------ src/utils/notifications.test.ts | 49 +++++++++++- src/utils/notifications.ts | 117 +++++++++++++++++++++++++++- 4 files changed, 181 insertions(+), 184 deletions(-) diff --git a/src/hooks/useNotifications.test.ts b/src/hooks/useNotifications.test.ts index 722217d89..146fa85de 100644 --- a/src/hooks/useNotifications.test.ts +++ b/src/hooks/useNotifications.test.ts @@ -398,86 +398,6 @@ describe('hooks/useNotifications.ts', () => { expect(result.current.notifications[0].notifications.length).toBe(6); }); }); - - describe('showBots', () => { - it('should hide bot notifications when set to false', async () => { - const accounts: AuthState = { - ...mockAccounts, - enterpriseAccounts: [], - user: mockedUser, - }; - - const notifications = [ - { - id: 1, - subject: { - title: 'This is an Issue.', - type: 'Issue', - url: 'https://api.github.com/repos/gitify-app/notifications-test/issues/1', - latest_comment_url: null, - }, - repository: { - full_name: 'gitify-app/notifications-test', - }, - }, - { - id: 2, - subject: { - title: 'This is a Pull Request.', - type: 'PullRequest', - url: 'https://api.github.com/repos/gitify-app/notifications-test/pulls/2', - latest_comment_url: null, - }, - repository: { - full_name: 'gitify-app/notifications-test', - }, - }, - ]; - - nock('https://api.github.com') - .get('/notifications?participating=false') - .reply(200, notifications); - nock('https://api.github.com') - .get('/repos/gitify-app/notifications-test/issues/1') - .reply(200, { - state: 'closed', - merged: true, - user: { - login: 'some-user', - type: 'User', - }, - }); - nock('https://api.github.com') - .get('/repos/gitify-app/notifications-test/pulls/2') - .reply(200, { - state: 'closed', - merged: false, - user: { - login: 'some-bot', - type: 'Bot', - }, - }); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.fetchNotifications(accounts, { - ...mockSettings, - detailedNotifications: true, - showBots: false, - }); - }); - - expect(result.current.status).toBe('loading'); - - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); - - expect(result.current.notifications[0].hostname).toBe('api.github.com'); - expect(result.current.notifications[0].notifications.length).toBe(1); - }); - }); }); describe('removeNotificationFromState', () => { diff --git a/src/hooks/useNotifications.ts b/src/hooks/useNotifications.ts index e0c12a6c7..9558e444c 100644 --- a/src/hooks/useNotifications.ts +++ b/src/hooks/useNotifications.ts @@ -1,4 +1,3 @@ -import type { AxiosError } from 'axios'; import { useCallback, useState } from 'react'; import type { @@ -8,24 +7,21 @@ import type { SettingsState, Status, } from '../types'; -import type { GitHubRESTError, Notification } from '../typesGitHub'; import { ignoreNotificationThreadSubscription, - listNotificationsForAuthenticatedUser, markNotificationThreadAsDone, markNotificationThreadAsRead, markRepositoryNotificationsAsRead, } from '../utils/api/client'; import { determineFailureType } from '../utils/api/errors'; -import Constants from '../utils/constants'; -import { getTokenForHost, isGitHubLoggedIn } from '../utils/helpers'; +import { getTokenForHost } from '../utils/helpers'; import { + getAllNotifications, setTrayIconColor, triggerNativeNotifications, } from '../utils/notifications'; import { removeNotification } from '../utils/remove-notification'; import { removeNotifications } from '../utils/remove-notifications'; -import { getGitifySubjectDetails } from '../utils/subject'; interface NotificationsState { notifications: AccountNotifications[]; @@ -73,107 +69,26 @@ export const useNotifications = (): NotificationsState => { const fetchNotifications = useCallback( async (accounts: AuthState, settings: SettingsState) => { - function getGitHubNotifications() { - if (!isGitHubLoggedIn(accounts)) { - return; - } + setStatus('loading'); - return listNotificationsForAuthenticatedUser( - Constants.DEFAULT_AUTH_OPTIONS.hostname, - accounts.token, + try { + const fetchedNotifications = await getAllNotifications( + accounts, settings, ); - } - function getEnterpriseNotifications() { - return accounts.enterpriseAccounts.map((account) => { - return listNotificationsForAuthenticatedUser( - account.hostname, - account.token, - settings, - ); - }); + setNotifications(fetchedNotifications); + triggerNativeNotifications( + notifications, + fetchedNotifications, + settings, + accounts, + ); + setStatus('success'); + } catch (err) { + setStatus('error'); + setErrorDetails(determineFailureType(err)); } - - setStatus('loading'); - - return Promise.all([ - getGitHubNotifications(), - ...getEnterpriseNotifications(), - ]) - .then(([...responses]) => { - const accountsNotifications: AccountNotifications[] = responses - .filter((response) => !!response) - .map((accountNotifications) => { - const { hostname } = new URL(accountNotifications.config.url); - return { - hostname, - notifications: accountNotifications.data.map( - (notification: Notification) => ({ - ...notification, - hostname, - }), - ), - }; - }); - - Promise.all( - accountsNotifications.map(async (accountNotifications) => { - return { - hostname: accountNotifications.hostname, - notifications: await Promise.all( - accountNotifications.notifications.map( - async (notification: Notification) => { - if (!settings.detailedNotifications) { - return notification; - } - - const token = getTokenForHost( - notification.hostname, - accounts, - ); - - const additionalSubjectDetails = - await getGitifySubjectDetails(notification, token); - - return { - ...notification, - subject: { - ...notification.subject, - ...additionalSubjectDetails, - }, - }; - }, - ), - ).then((notifications) => { - return notifications.filter((notification) => { - if ( - !settings.showBots && - notification.subject?.user?.type === 'Bot' - ) { - return false; - } - - return true; - }); - }), - }; - }), - ).then((parsedNotifications) => { - setNotifications(parsedNotifications); - triggerNativeNotifications( - notifications, - parsedNotifications, - settings, - accounts, - ); - setStatus('success'); - }); - }) - .catch((err: AxiosError) => { - setStatus('error'); - setErrorDetails(determineFailureType(err)); - }); }, [notifications], ); diff --git a/src/utils/notifications.test.ts b/src/utils/notifications.test.ts index d6c408db6..b679131ba 100644 --- a/src/utils/notifications.test.ts +++ b/src/utils/notifications.test.ts @@ -1,15 +1,17 @@ import { ipcRenderer } from 'electron'; -import { mockAccounts } from '../__mocks__/mock-state'; +import { mockAccounts, mockSettings } from '../__mocks__/mock-state'; import { mockedAccountNotifications, mockedGitHubNotifications, mockedSingleAccountNotifications, } from '../__mocks__/mockedData'; +import { partialMockNotification } from '../__mocks__/partial-mocks'; import { defaultSettings } from '../context/App'; import type { SettingsState } from '../types'; import * as helpers from './helpers'; import * as notificationsHelpers from './notifications'; +import { filterNotifications } from './notifications'; describe('utils/notifications.ts', () => { afterEach(() => { @@ -137,4 +139,49 @@ describe('utils/notifications.ts', () => { notificationsHelpers.raiseSoundNotification(); expect(window.Audio.prototype.play).toHaveBeenCalledTimes(1); }); + + describe('filterNotifications', () => { + const mockNotifications = [ + partialMockNotification({ + title: 'User authored notification', + user: { + login: 'user', + html_url: 'https://github.com/user', + avatar_url: + 'https://avatars.githubusercontent.com/u/133795385?s=200&v=4', + type: 'User', + }, + }), + partialMockNotification({ + title: 'Bot authored notification', + user: { + login: 'bot', + html_url: 'https://github.com/bot', + avatar_url: + 'https://avatars.githubusercontent.com/u/133795385?s=200&v=4', + type: 'Bot', + }, + }), + ]; + + it('should hide bot notifications when set to false', async () => { + const result = filterNotifications(mockNotifications, { + ...mockSettings, + showBots: false, + }); + + expect(result.length).toBe(1); + expect(result).toEqual([mockNotifications[0]]); + }); + + it('should show bot notifications when set to true', async () => { + const result = filterNotifications(mockNotifications, { + ...mockSettings, + showBots: true, + }); + + expect(result.length).toBe(2); + expect(result).toEqual(mockNotifications); + }); + }); }); diff --git a/src/utils/notifications.ts b/src/utils/notifications.ts index 589f8198a..142ec3598 100644 --- a/src/utils/notifications.ts +++ b/src/utils/notifications.ts @@ -1,9 +1,16 @@ import { ipcRenderer } from 'electron'; import { Notification } from '../typesGitHub'; -import { openInBrowser } from '../utils/helpers'; +import { + getTokenForHost, + isGitHubLoggedIn, + openInBrowser, +} from '../utils/helpers'; import { updateTrayIcon } from './comms'; import type { AccountNotifications, AuthState, SettingsState } from '../types'; +import { listNotificationsForAuthenticatedUser } from './api/client'; +import Constants from './constants'; +import { getGitifySubjectDetails } from './subject'; export const setTrayIconColor = (notifications: AccountNotifications[]) => { const allNotificationsCount = getNotificationCount(notifications); @@ -101,3 +108,111 @@ export const raiseSoundNotification = () => { audio.volume = 0.2; audio.play(); }; + +function getGitHubNotifications(accounts: AuthState, settings: SettingsState) { + if (!isGitHubLoggedIn(accounts)) { + return; + } + + return listNotificationsForAuthenticatedUser( + Constants.DEFAULT_AUTH_OPTIONS.hostname, + accounts.token, + settings, + ); +} + +function getEnterpriseNotifications( + accounts: AuthState, + settings: SettingsState, +) { + return accounts.enterpriseAccounts.map((account) => { + return listNotificationsForAuthenticatedUser( + account.hostname, + account.token, + settings, + ); + }); +} + +export async function getAllNotifications( + accounts: AuthState, + settings: SettingsState, +): Promise { + const responses = await Promise.all([ + getGitHubNotifications(accounts, settings), + ...getEnterpriseNotifications(accounts, settings), + ]); + + const notifications: AccountNotifications[] = await Promise.all( + responses + .filter((response) => !!response) + .map(async (accountNotifications) => { + const { hostname } = new URL(accountNotifications.config.url); + + let notifications = accountNotifications.data.map( + (notification: Notification) => ({ + ...notification, + hostname, + }), + ); + + notifications = await enrichNotifications( + notifications, + accounts, + settings, + ); + + notifications = filterNotifications(notifications, settings); + + return { + hostname, + notifications: notifications, + }; + }), + ); + + return notifications; +} + +export async function enrichNotifications( + notifications: Notification[], + accounts: AuthState, + settings: SettingsState, +): Promise { + if (!settings.detailedNotifications) { + return notifications; + } + + const enrichedNotifications = await Promise.all( + notifications.map(async (notification: Notification) => { + const token = getTokenForHost(notification.hostname, accounts); + + const additionalSubjectDetails = await getGitifySubjectDetails( + notification, + token, + ); + + return { + ...notification, + subject: { + ...notification.subject, + ...additionalSubjectDetails, + }, + }; + }), + ); + + return enrichedNotifications; +} + +export function filterNotifications( + notifications: Notification[], + settings: SettingsState, +): Notification[] { + return notifications.filter((notification) => { + if (!settings.showBots && notification.subject?.user?.type === 'Bot') { + return false; + } + return true; + }); +} From be53183248151ee56deda1dd4b4a62b7c5bb2906 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 3 May 2024 08:44:37 -1000 Subject: [PATCH 055/251] refactor: alphabetic order for icon color enum --- src/types.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/types.ts b/src/types.ts index 70adfd7a2..001fac7a3 100644 --- a/src/types.ts +++ b/src/types.ts @@ -97,8 +97,8 @@ export interface FormattedReason { } export enum IconColor { + GRAY = 'text-gray-500 dark:text-gray-300', GREEN = 'text-green-500', - RED = 'text-red-500', PURPLE = 'text-purple-500', - GRAY = 'text-gray-500 dark:text-gray-300', + RED = 'text-red-500', } From 2dd1c8147d1017840e9bd35f4edbb3c41bc1518a Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Sun, 5 May 2024 14:48:06 -1000 Subject: [PATCH 056/251] test: add hostname to partial mocks (#1084) --- src/__mocks__/partial-mocks.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/__mocks__/partial-mocks.ts b/src/__mocks__/partial-mocks.ts index 2c8b52b72..f0d2c0ef6 100644 --- a/src/__mocks__/partial-mocks.ts +++ b/src/__mocks__/partial-mocks.ts @@ -1,9 +1,11 @@ import type { Notification, Subject, User } from '../typesGitHub'; +import Constants from '../utils/constants'; export function partialMockNotification( subject: Partial, ): Notification { const mockNotification: Partial = { + hostname: Constants.GITHUB_API_BASE_URL, subject: subject as Subject, }; From 132bf70b77550d18955756e1b2649cb44252ac34 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 01:51:22 +0100 Subject: [PATCH 057/251] chore(deps): update dependency @types/node to v20.12.8 (#1087) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 114 ++++++++++++++++++++++++------------------------- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/package.json b/package.json index 800581ac0..16c224017 100644 --- a/package.json +++ b/package.json @@ -128,7 +128,7 @@ "@electron/notarize": "2.3.0", "@testing-library/react": "15.0.5", "@types/jest": "29.5.12", - "@types/node": "20.12.7", + "@types/node": "20.12.8", "@types/nprogress": "0.2.3", "@types/react": "18.3.1", "@types/react-router-dom": "5.3.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a886610e8..1cf0b82bf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: 29.5.12 version: 29.5.12 '@types/node': - specifier: 20.12.7 - version: 20.12.7 + specifier: 20.12.8 + version: 20.12.8 '@types/nprogress': specifier: 0.2.3 version: 0.2.3 @@ -101,7 +101,7 @@ importers: version: 9.0.11 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)) + version: 29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)) jest-environment-jsdom: specifier: 29.7.0 version: 29.7.0 @@ -125,13 +125,13 @@ importers: version: 4.0.0(webpack@5.91.0(webpack-cli@5.1.4)) tailwindcss: specifier: 3.4.3 - version: 3.4.3(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)) + version: 3.4.3(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)) ts-jest: specifier: 29.1.2 - version: 29.1.2(@babel/core@7.24.3)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)))(typescript@5.4.5) + version: 29.1.2(@babel/core@7.24.3)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)))(typescript@5.4.5) ts-node: specifier: 10.9.2 - version: 10.9.2(@types/node@20.12.7)(typescript@5.4.5) + version: 10.9.2(@types/node@20.12.8)(typescript@5.4.5) webpack: specifier: 5.91.0 version: 5.91.0(webpack-cli@5.1.4) @@ -668,8 +668,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@20.12.7': - resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + '@types/node@20.12.8': + resolution: {integrity: sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w==} '@types/nprogress@0.2.3': resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==} @@ -3510,27 +3510,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.7 + '@types/node': 20.12.8 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))': + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.7 + '@types/node': 20.12.8 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -3555,7 +3555,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.7 + '@types/node': 20.12.8 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -3573,7 +3573,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.12.7 + '@types/node': 20.12.8 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -3595,7 +3595,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.12.7 + '@types/node': 20.12.8 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -3665,7 +3665,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.12.7 + '@types/node': 20.12.8 '@types/yargs': 17.0.32 chalk: 4.1.2 @@ -3802,7 +3802,7 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 20.12.7 + '@types/node': 20.12.8 '@types/responselike': 1.0.3 '@types/debug@4.1.12': @@ -3823,11 +3823,11 @@ snapshots: '@types/fs-extra@9.0.13': dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 '@types/history@4.7.11': {} @@ -3850,7 +3850,7 @@ snapshots: '@types/jsdom@20.0.1': dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 '@types/tough-cookie': 4.0.5 parse5: 7.1.2 @@ -3858,11 +3858,11 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 '@types/ms@0.7.34': {} - '@types/node@20.12.7': + '@types/node@20.12.8': dependencies: undici-types: 5.26.5 @@ -3870,7 +3870,7 @@ snapshots: '@types/plist@3.0.5': dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 xmlbuilder: 15.1.1 optional: true @@ -3906,7 +3906,7 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 '@types/stack-utils@2.0.3': {} @@ -3923,7 +3923,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 optional: true '@webassemblyjs/ast@1.12.1': @@ -4500,13 +4500,13 @@ snapshots: buffer: 5.7.1 optional: true - create-jest@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)): + create-jest@29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -4714,7 +4714,7 @@ snapshots: electron@30.0.1: dependencies: '@electron/get': 2.0.3 - '@types/node': 20.12.7 + '@types/node': 20.12.8 extract-zip: 2.0.1 transitivePeerDependencies: - supports-color @@ -5210,7 +5210,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.7 + '@types/node': 20.12.8 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -5230,16 +5230,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)): + jest-cli@29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)) + create-jest: 29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -5249,7 +5249,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)): + jest-config@29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)): dependencies: '@babel/core': 7.24.3 '@jest/test-sequencer': 29.7.0 @@ -5274,8 +5274,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.12.7 - ts-node: 10.9.2(@types/node@20.12.7)(typescript@5.4.5) + '@types/node': 20.12.8 + ts-node: 10.9.2(@types/node@20.12.8)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -5305,7 +5305,7 @@ snapshots: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 20.12.7 + '@types/node': 20.12.8 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -5319,7 +5319,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.7 + '@types/node': 20.12.8 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -5329,7 +5329,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.12.7 + '@types/node': 20.12.8 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -5368,7 +5368,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.7 + '@types/node': 20.12.8 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -5403,7 +5403,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.7 + '@types/node': 20.12.8 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -5431,7 +5431,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.7 + '@types/node': 20.12.8 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -5477,7 +5477,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.7 + '@types/node': 20.12.8 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -5496,7 +5496,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.7 + '@types/node': 20.12.8 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -5505,23 +5505,23 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)): + jest@29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)) + jest-cli: 29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -5866,13 +5866,13 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.38 - postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)): + postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)): dependencies: lilconfig: 3.1.1 yaml: 2.4.1 optionalDependencies: postcss: 8.4.38 - ts-node: 10.9.2(@types/node@20.12.7)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@20.12.8)(typescript@5.4.5) postcss-loader@8.1.1(postcss@8.4.38)(typescript@5.4.5)(webpack@5.91.0(webpack-cli@5.1.4)): dependencies: @@ -6308,7 +6308,7 @@ snapshots: symbol-tree@3.2.4: {} - tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)): + tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -6327,7 +6327,7 @@ snapshots: postcss: 8.4.38 postcss-import: 15.1.0(postcss@8.4.38) postcss-js: 4.0.1(postcss@8.4.38) - postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)) + postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)) postcss-nested: 6.0.1(postcss@8.4.38) postcss-selector-parser: 6.0.16 resolve: 1.22.8 @@ -6422,11 +6422,11 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.1.2(@babel/core@7.24.3)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)))(typescript@5.4.5): + ts-jest@29.1.2(@babel/core@7.24.3)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)))(typescript@5.4.5): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)) + jest: 29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -6449,14 +6449,14 @@ snapshots: typescript: 5.4.5 webpack: 5.91.0(webpack-cli@5.1.4) - ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5): + ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.12.7 + '@types/node': 20.12.8 acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 From cbc4e841463f493a872890e92bb32a7a4ce4043b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 01:51:36 +0100 Subject: [PATCH 058/251] chore(deps): update dependency @testing-library/react to v15.0.6 (#1086) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 16 +++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 16c224017..1c1aa29cf 100644 --- a/package.json +++ b/package.json @@ -126,7 +126,7 @@ "devDependencies": { "@biomejs/biome": "1.7.2", "@electron/notarize": "2.3.0", - "@testing-library/react": "15.0.5", + "@testing-library/react": "15.0.6", "@types/jest": "29.5.12", "@types/node": "20.12.8", "@types/nprogress": "0.2.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1cf0b82bf..76e1a9c14 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -61,8 +61,8 @@ importers: specifier: 2.3.0 version: 2.3.0 '@testing-library/react': - specifier: 15.0.5 - version: 15.0.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 15.0.6 + version: 15.0.6(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/jest': specifier: 29.5.12 version: 29.5.12 @@ -579,12 +579,16 @@ packages: resolution: {integrity: sha512-PmJPnogldqoVFf+EwbHvbBJ98MmqASV8kLrBYgsDNxQcFMeIS7JFL48sfyXvuMtgmWO/wMhh25odr+8VhDmn4g==} engines: {node: '>=18'} - '@testing-library/react@15.0.5': - resolution: {integrity: sha512-ttodVWYA2i2w4hRa6krKrmS1vKxAEkwDz34y+CwbcrbZUxFzUYN3a5xZyFKo+K6LBseCRCUkwcjATpaNn/UsIA==} + '@testing-library/react@15.0.6': + resolution: {integrity: sha512-UlbazRtEpQClFOiYp+1BapMT+xyqWMnE+hh9tn5DQ6gmlE7AIZWcGpzZukmDZuFk3By01oiqOf8lRedLS4k6xQ==} engines: {node: '>=18'} peerDependencies: + '@types/react': ^18.0.0 react: ^18.0.0 react-dom: ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true '@tootallnate/once@2.0.0': resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} @@ -3757,13 +3761,15 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/react@15.0.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@testing-library/react@15.0.6(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.1 '@testing-library/dom': 10.0.0 '@types/react-dom': 18.2.22 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.1 '@tootallnate/once@2.0.0': {} From b1cb56bbb6ad45c057fd26291e6974a00e857def Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Sun, 5 May 2024 19:04:35 -1000 Subject: [PATCH 059/251] refactor: extract discussions api calls into client (#1085) * refactor: extract discussions api calls into api/client * fix query * update query variable name * update comments --- package.json | 1 + pnpm-lock.yaml | 25 +++++++ src/__mocks__/mockedData.ts | 62 ++++++++-------- src/typesGitHub.ts | 6 +- src/utils/api/client.ts | 32 +++++++++ src/utils/api/graphql/discussions.ts | 59 +++++++++++++++ src/utils/api/utils.test.ts | 29 ++++++++ src/utils/api/utils.ts | 11 +++ src/utils/constants.ts | 1 + src/utils/helpers.test.ts | 37 ++-------- src/utils/helpers.ts | 104 ++++----------------------- 11 files changed, 208 insertions(+), 159 deletions(-) create mode 100644 src/utils/api/graphql/discussions.ts create mode 100644 src/utils/api/utils.test.ts create mode 100644 src/utils/api/utils.ts diff --git a/package.json b/package.json index 1c1aa29cf..24b8e54f5 100644 --- a/package.json +++ b/package.json @@ -138,6 +138,7 @@ "css-loader": "7.1.1", "electron": "30.0.1", "electron-builder": "24.13.3", + "graphql-tag": "2.12.6", "husky": "9.0.11", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 76e1a9c14..752f44923 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -96,6 +96,9 @@ importers: electron-builder: specifier: 24.13.3 version: 24.13.3(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3)) + graphql-tag: + specifier: 2.12.6 + version: 2.12.6(graphql@16.8.1) husky: specifier: 9.0.11 version: 9.0.11 @@ -1654,6 +1657,16 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graphql-tag@2.12.6: + resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} + engines: {node: '>=10'} + peerDependencies: + graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + graphql@16.8.1: + resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -2961,6 +2974,9 @@ packages: '@swc/wasm': optional: true + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} @@ -5014,6 +5030,13 @@ snapshots: graceful-fs@4.2.11: {} + graphql-tag@2.12.6(graphql@16.8.1): + dependencies: + graphql: 16.8.1 + tslib: 2.6.2 + + graphql@16.8.1: {} + has-flag@3.0.0: {} has-flag@4.0.0: {} @@ -6473,6 +6496,8 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + tslib@2.6.2: {} + type-detect@4.0.8: {} type-fest@0.13.1: diff --git a/src/__mocks__/mockedData.ts b/src/__mocks__/mockedData.ts index e7a4dad1e..51f1e514c 100644 --- a/src/__mocks__/mockedData.ts +++ b/src/__mocks__/mockedData.ts @@ -473,41 +473,37 @@ export const mockDiscussionComments: DiscussionComments = { export const mockedGraphQLResponse: GraphQLSearch = { data: { - data: { - search: { - nodes: [ - { - viewerSubscription: 'SUBSCRIBED', - title: '1.16.0', - isAnswered: false, - stateReason: 'OPEN', - url: 'https://github.com/gitify-app/notifications-test/discussions/612', - author: { - login: 'discussion-creator', - url: 'https://github.com/discussion-creator', - avatar_url: - 'https://avatars.githubusercontent.com/u/123456789?v=4', - type: 'User', - }, - comments: mockDiscussionComments, + search: { + nodes: [ + { + viewerSubscription: 'SUBSCRIBED', + title: '1.16.0', + isAnswered: false, + stateReason: 'OPEN', + url: 'https://github.com/gitify-app/notifications-test/discussions/612', + author: { + login: 'discussion-creator', + url: 'https://github.com/discussion-creator', + avatar_url: 'https://avatars.githubusercontent.com/u/123456789?v=4', + type: 'User', }, - { - viewerSubscription: 'IGNORED', - title: '1.16.0', - isAnswered: false, - stateReason: 'ANSWERED', - url: 'https://github.com/gitify-app/notifications-test/discussions/123', - author: { - login: 'discussion-creator', - url: 'https://github.com/discussion-creator', - avatar_url: - 'https://avatars.githubusercontent.com/u/123456789?v=4', - type: 'User', - }, - comments: mockDiscussionComments, + comments: mockDiscussionComments, + }, + { + viewerSubscription: 'IGNORED', + title: '1.16.0', + isAnswered: false, + stateReason: 'ANSWERED', + url: 'https://github.com/gitify-app/notifications-test/discussions/123', + author: { + login: 'discussion-creator', + url: 'https://github.com/discussion-creator', + avatar_url: 'https://avatars.githubusercontent.com/u/123456789?v=4', + type: 'User', }, - ], - }, + comments: mockDiscussionComments, + }, + ], }, }, }; diff --git a/src/typesGitHub.ts b/src/typesGitHub.ts index 19fce0567..3b5509bb0 100644 --- a/src/typesGitHub.ts +++ b/src/typesGitHub.ts @@ -407,10 +407,8 @@ export interface Release { export interface GraphQLSearch { data: { - data: { - search: { - nodes: T[]; - }; + search: { + nodes: T[]; }; }; } diff --git a/src/utils/api/client.ts b/src/utils/api/client.ts index 0849f7e7b..27c90bb5d 100644 --- a/src/utils/api/client.ts +++ b/src/utils/api/client.ts @@ -3,6 +3,8 @@ import type { SettingsState } from '../../types'; import type { Commit, CommitComment, + Discussion, + GraphQLSearch, Issue, IssueOrPullRequestComment, Notification, @@ -15,6 +17,11 @@ import type { import { getGitHubAPIBaseUrl } from '../helpers'; import { apiRequestAuth } from './request'; +import { print } from 'graphql/language/printer'; +import Constants from '../constants'; +import { QUERY_SEARCH_DISCUSSIONS } from './graphql/discussions'; +import { formatSearchQueryString } from './utils'; + /** * Get Hypermedia links to resources accessible in GitHub's REST API * @@ -213,3 +220,28 @@ export async function getHtmlUrl(url: string, token: string): Promise { console.error('Failed to get html url'); } } + +/** + * Search for Discussions that match notification title and repository. + * + * Returns first 10 matching discussions and their latest comments / replies + * + */ +export async function searchDiscussions( + notification: Notification, + token: string, +): AxiosPromise> { + return apiRequestAuth(Constants.GITHUB_API_GRAPHQL_URL, 'POST', token, { + query: print(QUERY_SEARCH_DISCUSSIONS), + variables: { + queryStatement: formatSearchQueryString( + notification.repository.full_name, + notification.subject.title, + notification.updated_at, + ), + firstDiscussions: 10, + lastComments: 100, + lastReplies: 1, + }, + }); +} diff --git a/src/utils/api/graphql/discussions.ts b/src/utils/api/graphql/discussions.ts new file mode 100644 index 000000000..3679367dd --- /dev/null +++ b/src/utils/api/graphql/discussions.ts @@ -0,0 +1,59 @@ +import gql from 'graphql-tag'; + +const FRAGMENT_AUTHOR = gql` + fragment AuthorFields on Actor { + login + url + avatar_url: avatarUrl + type: __typename + } +`; + +const FRAGMENT_COMMENTS = gql` + fragment CommentFields on DiscussionComment { + databaseId + createdAt + author { + ...AuthorFields + } + } + + ${FRAGMENT_AUTHOR} +`; + +export const QUERY_SEARCH_DISCUSSIONS = gql` + query fetchDiscussions( + $queryStatement: String!, + $firstDiscussions: Int, + $lastComments: Int, + $lastReplies: Int + ) { + search(query:$queryStatement, type: DISCUSSION, first: $firstDiscussions) { + nodes { + ... on Discussion { + viewerSubscription + title + stateReason + isAnswered + url + author { + ...AuthorFields + } + comments(last: $lastComments){ + nodes { + ...CommentFields + replies(last: $lastReplies) { + nodes { + ...CommentFields + } + } + } + } + } + } + } + } + + ${FRAGMENT_AUTHOR} + ${FRAGMENT_COMMENTS} +`; diff --git a/src/utils/api/utils.test.ts b/src/utils/api/utils.test.ts new file mode 100644 index 000000000..001b3f3c8 --- /dev/null +++ b/src/utils/api/utils.test.ts @@ -0,0 +1,29 @@ +import { addHours, formatSearchQueryString } from './utils'; + +describe('utils/api/utils.ts', () => { + describe('addHours', () => { + test('adds hours correctly for positive values', () => { + const result = addHours('2024-02-20T12:00:00.000Z', 3); + expect(result).toBe('2024-02-20T15:00:00.000Z'); + }); + + test('adds hours correctly for negative values', () => { + const result = addHours('2024-02-20T12:00:00.000Z', -2); + expect(result).toBe('2024-02-20T10:00:00.000Z'); + }); + }); + + describe('formatSearchQueryString', () => { + test('formats search query string correctly', () => { + const result = formatSearchQueryString( + 'exampleRepo', + 'exampleTitle', + '2024-02-20T12:00:00.000Z', + ); + + expect(result).toBe( + 'exampleTitle in:title repo:exampleRepo updated:>2024-02-20T10:00:00.000Z', + ); + }); + }); +}); diff --git a/src/utils/api/utils.ts b/src/utils/api/utils.ts new file mode 100644 index 000000000..6a833c9fd --- /dev/null +++ b/src/utils/api/utils.ts @@ -0,0 +1,11 @@ +export function formatSearchQueryString( + repo: string, + title: string, + lastUpdated: string, +): string { + return `${title} in:title repo:${repo} updated:>${addHours(lastUpdated, -2)}`; +} + +export function addHours(date: string, hours: number): string { + return new Date(new Date(date).getTime() + hours * 36e5).toISOString(); +} diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 24d8eb0be..e41c0775f 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -11,6 +11,7 @@ export const Constants = { }, GITHUB_API_BASE_URL: 'https://api.github.com', + GITHUB_API_GRAPHQL_URL: 'https://api.github.com/graphql', REPO_SLUG: 'gitify-app/gitify', diff --git a/src/utils/helpers.test.ts b/src/utils/helpers.test.ts index ca7fad00d..d80ab6451 100644 --- a/src/utils/helpers.test.ts +++ b/src/utils/helpers.test.ts @@ -8,10 +8,8 @@ import { import type { SubjectType } from '../typesGitHub'; import * as apiRequests from './api/request'; import { - addHours, addNotificationReferrerIdToUrl, formatForDisplay, - formatSearchQueryString, generateGitHubWebUrl, generateNotificationReferrerId, getGitHubAPIBaseUrl, @@ -102,33 +100,6 @@ describe('utils/helpers.ts', () => { }); }); - describe('addHours', () => { - // Example test using Jest - test('adds hours correctly for positive values', () => { - const result = addHours('2024-02-20T12:00:00.000Z', 3); - expect(result).toBe('2024-02-20T15:00:00.000Z'); - }); - - test('adds hours correctly for negative values', () => { - const result = addHours('2024-02-20T12:00:00.000Z', -2); - expect(result).toBe('2024-02-20T10:00:00.000Z'); - }); - }); - - describe('formatSearchQueryString', () => { - test('formats search query string correctly', () => { - const result = formatSearchQueryString( - 'exampleRepo', - 'exampleTitle', - '2024-02-20T12:00:00.000Z', - ); - - expect(result).toBe( - 'exampleTitle in:title repo:exampleRepo updated:>2024-02-20T10:00:00.000Z', - ); - }); - }); - describe('generateGitHubWebUrl', () => { const mockedHtmlUrl = 'https://github.com/gitify-app/notifications-test/issues/785'; @@ -398,7 +369,7 @@ describe('utils/helpers.ts', () => { ); }); - it('when no subject urls and no discussions found via query, default to linking to repository discussions', async () => { + it('link to matching discussion and comment hash', async () => { const subject = { title: '1.16.0', url: null, @@ -407,7 +378,11 @@ describe('utils/helpers.ts', () => { }; const requestPromise = new Promise((resolve) => - resolve(mockedGraphQLResponse as AxiosResponse), + resolve({ + data: { + ...mockedGraphQLResponse, + }, + } as AxiosResponse), ) as AxiosPromise; apiRequestAuthMock.mockResolvedValue(requestPromise); diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index e84a78879..575e66456 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -2,12 +2,10 @@ import type { AuthState } from '../types'; import type { Discussion, DiscussionComment, - GraphQLSearch, Notification, } from '../typesGitHub'; import { openExternalLink } from '../utils/comms'; -import { getHtmlUrl } from './api/client'; -import { apiRequestAuth } from './api/request'; +import { getHtmlUrl, searchDiscussions } from './api/client'; import { Constants } from './constants'; import { getCheckSuiteAttributes, getWorkflowRunAttributes } from './subject'; @@ -62,18 +60,6 @@ export function generateNotificationReferrerId( return buffer.toString('base64'); } -export function addHours(date: string, hours: number): string { - return new Date(new Date(date).getTime() + hours * 36e5).toISOString(); -} - -export function formatSearchQueryString( - repo: string, - title: string, - lastUpdated: string, -): string { - return `${title} in:title repo:${repo} updated:>${addHours(lastUpdated, -2)}`; -} - export function getCheckSuiteUrl(notification: Notification) { let url = `${notification.repository.html_url}/actions`; const filters = []; @@ -145,85 +131,21 @@ export async function fetchDiscussion( notification: Notification, token: string, ): Promise { - const response: GraphQLSearch = await apiRequestAuth( - 'https://api.github.com/graphql', - 'POST', - token, - { - query: ` - fragment AuthorFields on Actor { - login - url - avatar_url: avatarUrl - type: __typename - } - - fragment CommentFields on DiscussionComment { - databaseId - createdAt - author { - ...AuthorFields - } - } - - query fetchDiscussions( - $queryStatement: String!, - $type: SearchType!, - $firstDiscussions: Int, - $lastComments: Int, - $firstReplies: Int - ) { - search(query:$queryStatement, type: $type, first: $firstDiscussions) { - nodes { - ... on Discussion { - viewerSubscription - title - stateReason - isAnswered - url - author { - ...AuthorFields - } - comments(last: $lastComments){ - nodes { - ...CommentFields - replies(last: $firstReplies) { - nodes { - ...CommentFields - } - } - } - } - } - } - } - } - `, - variables: { - queryStatement: formatSearchQueryString( - notification.repository.full_name, - notification.subject.title, - notification.updated_at, - ), - type: 'DISCUSSION', - firstDiscussions: 10, - lastComments: 100, - firstReplies: 1, - }, - }, - ); + try { + const response = await searchDiscussions(notification, token); - let discussions = - response?.data?.data.search.nodes.filter( - (discussion) => discussion.title === notification.subject.title, - ) || []; + let discussions = + response.data?.data.search.nodes.filter( + (discussion) => discussion.title === notification.subject.title, + ) || []; - if (discussions.length > 1) - discussions = discussions.filter( - (discussion) => discussion.viewerSubscription === 'SUBSCRIBED', - ); + if (discussions.length > 1) + discussions = discussions.filter( + (discussion) => discussion.viewerSubscription === 'SUBSCRIBED', + ); - return discussions[0]; + return discussions[0]; + } catch (err) {} } export function getLatestDiscussionComment( From 88d42ed33a54bccae915dcbdcd58123187ac874c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 00:29:24 -1000 Subject: [PATCH 060/251] chore(deps): update dependency electron to v30.0.2 (#1089) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 24b8e54f5..b241f8e3b 100644 --- a/package.json +++ b/package.json @@ -136,7 +136,7 @@ "@types/react-transition-group": "4.4.10", "autoprefixer": "10.4.19", "css-loader": "7.1.1", - "electron": "30.0.1", + "electron": "30.0.2", "electron-builder": "24.13.3", "graphql-tag": "2.12.6", "husky": "9.0.11", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 752f44923..523c86bfe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: '@electron/remote': specifier: 2.1.2 - version: 2.1.2(electron@30.0.1) + version: 2.1.2(electron@30.0.2) '@primer/octicons-react': specifier: 19.9.0 version: 19.9.0(react@18.3.1) @@ -28,7 +28,7 @@ importers: version: 4.20.10 menubar: specifier: 9.4.0 - version: 9.4.0(electron@30.0.1) + version: 9.4.0(electron@30.0.2) nprogress: specifier: 0.2.0 version: 0.2.0 @@ -91,8 +91,8 @@ importers: specifier: 7.1.1 version: 7.1.1(webpack@5.91.0(webpack-cli@5.1.4)) electron: - specifier: 30.0.1 - version: 30.0.1 + specifier: 30.0.2 + version: 30.0.2 electron-builder: specifier: 24.13.3 version: 24.13.3(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3)) @@ -1374,8 +1374,8 @@ packages: electron-updater@6.1.8: resolution: {integrity: sha512-hhOTfaFAd6wRHAfUaBhnAOYc+ymSGCWJLtFkw4xJqOvtpHmIdNHnXDV9m1MHC+A6q08Abx4Ykgyz/R5DGKNAMQ==} - electron@30.0.1: - resolution: {integrity: sha512-iwxkI/n2wBd29NH7TH0ZY8aWGzCoKpzJz+D10u7aGSJi1TV6d4MSM3rWyKvT/UkAHkTKOEgYfUyCa2vWQm8L0g==} + electron@30.0.2: + resolution: {integrity: sha512-zv7T+GG89J/hyWVkQsLH4Y/rVEfqJG5M/wOBIGNaDdqd8UV9/YZPdS7CuFeaIj0H9LhCt95xkIQNpYB/3svOkQ==} engines: {node: '>= 12.20.55'} hasBin: true @@ -3492,9 +3492,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@electron/remote@2.1.2(electron@30.0.1)': + '@electron/remote@2.1.2(electron@30.0.2)': dependencies: - electron: 30.0.1 + electron: 30.0.2 '@electron/universal@1.5.1': dependencies: @@ -4733,7 +4733,7 @@ snapshots: transitivePeerDependencies: - supports-color - electron@30.0.1: + electron@30.0.2: dependencies: '@electron/get': 2.0.3 '@types/node': 20.12.8 @@ -5704,9 +5704,9 @@ snapshots: escape-string-regexp: 4.0.0 optional: true - menubar@9.4.0(electron@30.0.1): + menubar@9.4.0(electron@30.0.2): dependencies: - electron: 30.0.1 + electron: 30.0.2 electron-positioner: 4.1.0 merge-stream@2.0.0: {} From 53c30b4aad7ce3223daca29577d9fe9b7a039bdc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 00:29:36 -1000 Subject: [PATCH 061/251] chore(deps): update dependency @biomejs/biome to v1.7.3 (#1088) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- biome.json | 2 +- package.json | 2 +- pnpm-lock.yaml | 76 +++++++++++++++++++++++++------------------------- 3 files changed, 40 insertions(+), 40 deletions(-) diff --git a/biome.json b/biome.json index 1044c456a..8431db89a 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/1.7.2/schema.json", + "$schema": "https://biomejs.dev/schemas/1.7.3/schema.json", "organizeImports": { "enabled": true }, diff --git a/package.json b/package.json index b241f8e3b..3e76fccf7 100644 --- a/package.json +++ b/package.json @@ -124,7 +124,7 @@ "typescript": "5.4.5" }, "devDependencies": { - "@biomejs/biome": "1.7.2", + "@biomejs/biome": "1.7.3", "@electron/notarize": "2.3.0", "@testing-library/react": "15.0.6", "@types/jest": "29.5.12", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 523c86bfe..a9fd4208c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -55,8 +55,8 @@ importers: version: 5.4.5 devDependencies: '@biomejs/biome': - specifier: 1.7.2 - version: 1.7.2 + specifier: 1.7.3 + version: 1.7.3 '@electron/notarize': specifier: 2.3.0 version: 2.3.0 @@ -329,55 +329,55 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@biomejs/biome@1.7.2': - resolution: {integrity: sha512-6Skx9N47inLQzYi9RKgJ7PBnUnaHnMe/imqX43cOcJjZtfMnQLxEvfM2Eyo7gChkwrZlwc+VbA4huFRjw2fsYA==} + '@biomejs/biome@1.7.3': + resolution: {integrity: sha512-ogFQI+fpXftr+tiahA6bIXwZ7CSikygASdqMtH07J2cUzrpjyTMVc9Y97v23c7/tL1xCZhM+W9k4hYIBm7Q6cQ==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@1.7.2': - resolution: {integrity: sha512-CrldIueHivWEWmeTkK8bTXajeX53F8i2Rrkkt8cPZyMtzkrwxf8Riq4a/jz3SQBHkxHFT4TqGbSTNMXe3X1ogA==} + '@biomejs/cli-darwin-arm64@1.7.3': + resolution: {integrity: sha512-eDvLQWmGRqrPIRY7AIrkPHkQ3visEItJKkPYSHCscSDdGvKzYjmBJwG1Gu8+QC5ed6R7eiU63LEC0APFBobmfQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@1.7.2': - resolution: {integrity: sha512-UELnLJuJOsTL9meArvn8BtiXDURyPil2Ej9me2uVpEvee8UQdqd/bssP5we400OWShlL1AAML4fn6d2WX5332g==} + '@biomejs/cli-darwin-x64@1.7.3': + resolution: {integrity: sha512-JXCaIseKRER7dIURsVlAJacnm8SG5I0RpxZ4ya3dudASYUc68WGl4+FEN03ABY3KMIq7hcK1tzsJiWlmXyosZg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@1.7.2': - resolution: {integrity: sha512-kKYZiem7Sj7wI0dpVxJlK7C+TFQwzO/ctufIGXGJAyEmUe9vEKSzV8CXpv+JIRiTWyqaZJ4K+eHz4SPdPCv05w==} + '@biomejs/cli-linux-arm64-musl@1.7.3': + resolution: {integrity: sha512-c8AlO45PNFZ1BYcwaKzdt46kYbuP6xPGuGQ6h4j3XiEDpyseRRUy/h+6gxj07XovmyxKnSX9GSZ6nVbZvcVUAw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-arm64@1.7.2': - resolution: {integrity: sha512-Z1CSGQE6fHz55gkiFHv9E8wEAaSUd7dHSRaxSCBa7utonHqpIeMbvj3Evm1w0WfGLFDtRXLV1fTfEdM0FMTOhA==} + '@biomejs/cli-linux-arm64@1.7.3': + resolution: {integrity: sha512-phNTBpo7joDFastnmZsFjYcDYobLTx4qR4oPvc9tJ486Bd1SfEVPHEvJdNJrMwUQK56T+TRClOQd/8X1nnjA9w==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-x64-musl@1.7.2': - resolution: {integrity: sha512-x10LpGMepDrLS+h2TZ6/T7egpHjGKtiI4GuShNylmBQJWfTotbFf9eseHggrqJ4WZf9yrGoVYrtbxXftuB95sQ==} + '@biomejs/cli-linux-x64-musl@1.7.3': + resolution: {integrity: sha512-UdEHKtYGWEX3eDmVWvQeT+z05T9/Sdt2+F/7zmMOFQ7boANeX8pcO6EkJPK3wxMudrApsNEKT26rzqK6sZRTRA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-linux-x64@1.7.2': - resolution: {integrity: sha512-vXXyox8/CQijBxAu0+r8FfSO7JlC4tob3PbaFda8gPJFRz2uFJw39HtxVUwbTV1EcU6wSPh4SiRu5sZfP1VHrQ==} + '@biomejs/cli-linux-x64@1.7.3': + resolution: {integrity: sha512-vnedYcd5p4keT3iD48oSKjOIRPYcjSNNbd8MO1bKo9ajg3GwQXZLAH+0Cvlr+eMsO67/HddWmscSQwTFrC/uPA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-win32-arm64@1.7.2': - resolution: {integrity: sha512-kRXdlKzcU7INf6/ldu0nVmkOgt7bKqmyXRRCUqqaJfA32+9InTbkD8tGrHZEVYIWr+eTuKcg16qZVDsPSDFZ8g==} + '@biomejs/cli-win32-arm64@1.7.3': + resolution: {integrity: sha512-unNCDqUKjujYkkSxs7gFIfdasttbDC4+z0kYmcqzRk6yWVoQBL4dNLcCbdnJS+qvVDNdI9rHp2NwpQ0WAdla4Q==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@1.7.2': - resolution: {integrity: sha512-qHTtpAs+CNglAAuaTy09htoqUhrQyd3nd0aGTuLNqD10h1llMVi8WFZfoa+e5MuDSfYtMK6nW2Tbf6WgzzR1Qw==} + '@biomejs/cli-win32-x64@1.7.3': + resolution: {integrity: sha512-ZmByhbrnmz/UUFYB622CECwhKIPjJLLPr5zr3edhu04LzbfcOrz16VYeNq5dpO1ADG70FORhAJkaIGdaVBG00w==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -3399,39 +3399,39 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@biomejs/biome@1.7.2': + '@biomejs/biome@1.7.3': optionalDependencies: - '@biomejs/cli-darwin-arm64': 1.7.2 - '@biomejs/cli-darwin-x64': 1.7.2 - '@biomejs/cli-linux-arm64': 1.7.2 - '@biomejs/cli-linux-arm64-musl': 1.7.2 - '@biomejs/cli-linux-x64': 1.7.2 - '@biomejs/cli-linux-x64-musl': 1.7.2 - '@biomejs/cli-win32-arm64': 1.7.2 - '@biomejs/cli-win32-x64': 1.7.2 - - '@biomejs/cli-darwin-arm64@1.7.2': + '@biomejs/cli-darwin-arm64': 1.7.3 + '@biomejs/cli-darwin-x64': 1.7.3 + '@biomejs/cli-linux-arm64': 1.7.3 + '@biomejs/cli-linux-arm64-musl': 1.7.3 + '@biomejs/cli-linux-x64': 1.7.3 + '@biomejs/cli-linux-x64-musl': 1.7.3 + '@biomejs/cli-win32-arm64': 1.7.3 + '@biomejs/cli-win32-x64': 1.7.3 + + '@biomejs/cli-darwin-arm64@1.7.3': optional: true - '@biomejs/cli-darwin-x64@1.7.2': + '@biomejs/cli-darwin-x64@1.7.3': optional: true - '@biomejs/cli-linux-arm64-musl@1.7.2': + '@biomejs/cli-linux-arm64-musl@1.7.3': optional: true - '@biomejs/cli-linux-arm64@1.7.2': + '@biomejs/cli-linux-arm64@1.7.3': optional: true - '@biomejs/cli-linux-x64-musl@1.7.2': + '@biomejs/cli-linux-x64-musl@1.7.3': optional: true - '@biomejs/cli-linux-x64@1.7.2': + '@biomejs/cli-linux-x64@1.7.3': optional: true - '@biomejs/cli-win32-arm64@1.7.2': + '@biomejs/cli-win32-arm64@1.7.3': optional: true - '@biomejs/cli-win32-x64@1.7.2': + '@biomejs/cli-win32-x64@1.7.3': optional: true '@cspotcode/source-map-support@0.8.1': From 88fdfd9db140f3ef3f868fe793e4635c9f33209c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 03:05:30 -1000 Subject: [PATCH 062/251] chore(deps): update pnpm to v9.1.0 (#1090) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3e76fccf7..3de9d818a 100644 --- a/package.json +++ b/package.json @@ -155,7 +155,7 @@ "webpack-cli": "5.1.4", "webpack-merge": "5.10.0" }, - "packageManager": "pnpm@9.0.6", + "packageManager": "pnpm@9.1.0", "lint-staged": { "*.{html,js,json,md,ts,tsx}": "biome format --write" } From 454c7da1619e83e4b788002fa9cde2c132610045 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Mon, 6 May 2024 05:41:41 -1000 Subject: [PATCH 063/251] feat: add pr review icons (approved, requested changes, commented, dismissed) (#1078) * feat: add icon for previously approved prs * feat: add pr review icons (approved, requested changes, commented, dismissed) * feat: add pr review icons (approved, requested changes, commented, dismissed) * fix tests * update coverage * feat: move icon to notification row footer. include all reviewers * feat: move icon to notification row footer. include all reviewers * feat: move icon to notification row footer. include all reviewers * feat: move icon to notification row footer. include all reviewers * update commented icon color to green. ensure ordering is consistent * update commented icon color to yellow. ensure ordering is consistent * refactor: alphabetic order for icon color enum * revert token * revert partial mock --- src/__mocks__/mockedData.ts | 17 +++ src/components/NotificationRow.test.tsx | 1 + src/components/NotificationRow.tsx | 26 ++++- .../NotificationRow.test.tsx.snap | 108 ++++++++++++++++++ .../__snapshots__/Notifications.test.tsx.snap | 44 +++++++ src/types.ts | 9 ++ src/typesGitHub.ts | 36 ++++++ src/utils/api/client.ts | 13 +++ src/utils/icons.test.ts | 107 ++++++++++++++++- src/utils/icons.ts | 43 ++++++- src/utils/subject.test.ts | 98 ++++++++++++++++ src/utils/subject.ts | 58 ++++++++++ 12 files changed, 555 insertions(+), 5 deletions(-) diff --git a/src/__mocks__/mockedData.ts b/src/__mocks__/mockedData.ts index 51f1e514c..9bf11ee34 100644 --- a/src/__mocks__/mockedData.ts +++ b/src/__mocks__/mockedData.ts @@ -72,6 +72,20 @@ export const mockedGitHubNotifications: Notification[] = [ 'https://avatars.githubusercontent.com/u/133795385?s=200&v=4', type: 'User', }, + reviews: [ + { + state: 'APPROVED', + users: ['octocat'], + }, + { + state: 'CHANGES_REQUESTED', + users: ['gitify-app'], + }, + { + state: 'PENDING', + users: ['gitify-user'], + }, + ], }, repository: { id: 57216596, @@ -198,6 +212,7 @@ export const mockedGitHubNotifications: Notification[] = [ latest_comment_url: 'https://api.github.com/repos/gitify-app/notifications-test/issues/comments/302885965', type: 'Issue', + reviews: null, }, repository: { id: 57216596, @@ -255,6 +270,7 @@ export const mockedEnterpriseNotifications: Notification[] = [ latest_comment_url: 'https://github.gitify.io/api/v3/repos/myorg/notifications-test/releases/3', type: 'Release', + reviews: null, }, repository: { id: 1, @@ -308,6 +324,7 @@ export const mockedEnterpriseNotifications: Notification[] = [ latest_comment_url: 'https://github.gitify.io/api/v3/repos/myorg/notifications-test/issues/comments/21', type: 'PullRequest', + reviews: null, }, repository: { id: 1, diff --git a/src/components/NotificationRow.test.tsx b/src/components/NotificationRow.test.tsx index 44718c46c..3703b110e 100644 --- a/src/components/NotificationRow.test.tsx +++ b/src/components/NotificationRow.test.tsx @@ -207,6 +207,7 @@ describe('components/NotificationRow.tsx', () => { avatar_url: 'https://avatars.githubusercontent.com/u/123456789?v=4', type: 'User' as UserType, }, + reviews: null, }, }, hostname: 'github.com', diff --git a/src/components/NotificationRow.tsx b/src/components/NotificationRow.tsx index 410115059..75eaa3994 100644 --- a/src/components/NotificationRow.tsx +++ b/src/components/NotificationRow.tsx @@ -20,6 +20,7 @@ import { formatForDisplay, openInBrowser } from '../utils/helpers'; import { getNotificationTypeIcon, getNotificationTypeIconColor, + getPullRequestReviewIcon, } from '../utils/icons'; import { formatReason } from '../utils/reason'; @@ -69,13 +70,14 @@ export const NotificationRow: FC = ({ notification, hostname }) => { const reason = formatReason(notification.reason); const NotificationIcon = getNotificationTypeIcon(notification.subject); const iconColor = getNotificationTypeIconColor(notification.subject); + const updatedAt = formatDistanceToNow(parseISO(notification.updated_at), { addSuffix: true, }); - const updatedLabel = notification.subject.user ? `${notification.subject.user.login} updated ${updatedAt}` : `Updated ${updatedAt}`; + const notificationTitle = formatForDisplay([ notification.subject.state, notification.subject.type, @@ -131,6 +133,28 @@ export const NotificationRow: FC = ({ notification, hostname }) => { {reason.title} {updatedAt} + {notification.subject.reviews + ? notification.subject.reviews.map((review) => { + const icon = getPullRequestReviewIcon(review); + if (!icon) { + return null; + } + + return ( + + + + ); + }) + : null}
diff --git a/src/components/__snapshots__/NotificationRow.test.tsx.snap b/src/components/__snapshots__/NotificationRow.test.tsx.snap index 640cc496f..e9830cdf9 100644 --- a/src/components/__snapshots__/NotificationRow.test.tsx.snap +++ b/src/components/__snapshots__/NotificationRow.test.tsx.snap @@ -79,6 +79,60 @@ exports[`components/NotificationRow.tsx should render itself & its children 1`] > over 6 years ago + + + + + + + + + +
@@ -267,6 +321,60 @@ exports[`components/NotificationRow.tsx should render itself & its children with > over 6 years ago + + + + + + + + + + diff --git a/src/routes/__snapshots__/Notifications.test.tsx.snap b/src/routes/__snapshots__/Notifications.test.tsx.snap index 16d2d9b62..887334d78 100644 --- a/src/routes/__snapshots__/Notifications.test.tsx.snap +++ b/src/routes/__snapshots__/Notifications.test.tsx.snap @@ -172,6 +172,26 @@ exports[`routes/Notifications.tsx should render itself & its children (show acco }, "subject": { "latest_comment_url": "https://api.github.com/repos/gitify-app/notifications-test/issues/comments/302888448", + "reviews": [ + { + "state": "APPROVED", + "users": [ + "octocat", + ], + }, + { + "state": "CHANGES_REQUESTED", + "users": [ + "gitify-app", + ], + }, + { + "state": "PENDING", + "users": [ + "gitify-user", + ], + }, + ], "state": "open", "title": "I am a robot and this is a test!", "type": "Issue", @@ -223,6 +243,7 @@ exports[`routes/Notifications.tsx should render itself & its children (show acco }, "subject": { "latest_comment_url": "https://api.github.com/repos/gitify-app/notifications-test/issues/comments/302885965", + "reviews": null, "title": "Improve the UI", "type": "Issue", "url": "https://api.github.com/repos/gitify-app/notifications-test/issues/4", @@ -321,6 +342,26 @@ exports[`routes/Notifications.tsx should render itself & its children (with noti }, "subject": { "latest_comment_url": "https://api.github.com/repos/gitify-app/notifications-test/issues/comments/302888448", + "reviews": [ + { + "state": "APPROVED", + "users": [ + "octocat", + ], + }, + { + "state": "CHANGES_REQUESTED", + "users": [ + "gitify-app", + ], + }, + { + "state": "PENDING", + "users": [ + "gitify-user", + ], + }, + ], "state": "open", "title": "I am a robot and this is a test!", "type": "Issue", @@ -372,6 +413,7 @@ exports[`routes/Notifications.tsx should render itself & its children (with noti }, "subject": { "latest_comment_url": "https://api.github.com/repos/gitify-app/notifications-test/issues/comments/302885965", + "reviews": null, "title": "Improve the UI", "type": "Issue", "url": "https://api.github.com/repos/gitify-app/notifications-test/issues/4", @@ -424,6 +466,7 @@ exports[`routes/Notifications.tsx should render itself & its children (with noti }, "subject": { "latest_comment_url": "https://github.gitify.io/api/v3/repos/myorg/notifications-test/releases/3", + "reviews": null, "title": "Release 0.0.1", "type": "Release", "url": "https://github.gitify.io/api/v3/repos/myorg/notifications-test/releases/3", @@ -468,6 +511,7 @@ exports[`routes/Notifications.tsx should render itself & its children (with noti }, "subject": { "latest_comment_url": "https://github.gitify.io/api/v3/repos/myorg/notifications-test/issues/comments/21", + "reviews": null, "title": "Bump Version", "type": "PullRequest", "url": "https://github.gitify.io/api/v3/repos/myorg/notifications-test/pulls/4", diff --git a/src/types.ts b/src/types.ts index 001fac7a3..f361b4735 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,3 +1,5 @@ +import type { OcticonProps } from '@primer/octicons-react'; +import type { FC } from 'react'; import type { Notification } from './typesGitHub'; export interface AuthState { @@ -101,4 +103,11 @@ export enum IconColor { GREEN = 'text-green-500', PURPLE = 'text-purple-500', RED = 'text-red-500', + YELLOW = 'text-yellow-500 dark:text-yellow-300', } + +export type PullRequestApprovalIcon = { + type: FC; + color: IconColor; + description: string; +}; diff --git a/src/typesGitHub.ts b/src/typesGitHub.ts index 3b5509bb0..397dc2e92 100644 --- a/src/typesGitHub.ts +++ b/src/typesGitHub.ts @@ -76,6 +76,23 @@ export type CheckSuiteStatus = | 'timed_out' | 'waiting'; +export type PullRequestReviewState = + | 'APPROVED' + | 'CHANGES_REQUESTED' + | 'COMMENTED' + | 'DISMISSED' + | 'PENDING'; + +export type PullRequestReviewAuthorAssociation = + | 'COLLABORATOR' + | 'CONTRIBUTOR' + | 'FIRST_TIMER' + | 'FIRST_TIME_CONTRIBUTOR' + | 'MANNEQUIN' + | 'MEMBER' + | 'NONE' + | 'OWNER'; + export interface Notification { id: string; unread: boolean; @@ -241,6 +258,7 @@ interface GitHubSubject { export interface GitifySubject { state?: StateType; user?: SubjectUser; + reviews?: GitifyPullRequestReview[]; } export interface PullRequest { @@ -281,6 +299,24 @@ export interface PullRequest { changed_files: number; } +export interface GitifyPullRequestReview { + state: PullRequestReviewState; + users: string[]; +} + +export interface PullRequestReview { + id: number; + node_id: string; + user: User; + body: string; + state: PullRequestReviewState; + html_url: string; + pull_request_url: string; + author_association: PullRequestReviewAuthorAssociation; + submitted_at: string; + commit_id: string; +} + export interface Commit { sha: string; node_id: string; diff --git a/src/utils/api/client.ts b/src/utils/api/client.ts index 27c90bb5d..da356f363 100644 --- a/src/utils/api/client.ts +++ b/src/utils/api/client.ts @@ -10,6 +10,7 @@ import type { Notification, NotificationThreadSubscription, PullRequest, + PullRequestReview, Release, RootHypermediaLinks, UserDetails, @@ -200,6 +201,18 @@ export function getPullRequest( return apiRequestAuth(url, 'GET', token); } +/** + * Lists all reviews for a specified pull request. The list of reviews returns in chronological order. + * + * Endpoint documentation: https://docs.github.com/en/rest/pulls/reviews#list-reviews-for-a-pull-request + */ +export function getPullRequestReviews( + url: string, + token: string, +): AxiosPromise { + return apiRequestAuth(url, 'GET', token); +} + /** * Gets a public release with the specified release ID. * diff --git a/src/utils/icons.test.ts b/src/utils/icons.test.ts index 15fb35651..7f1f7747f 100644 --- a/src/utils/icons.test.ts +++ b/src/utils/icons.test.ts @@ -1,5 +1,16 @@ -import type { StateType, Subject, SubjectType } from '../typesGitHub'; -import { getNotificationTypeIcon, getNotificationTypeIconColor } from './icons'; +import { CheckIcon, CommentIcon, FileDiffIcon } from '@primer/octicons-react'; +import { IconColor } from '../types'; +import type { + GitifyPullRequestReview, + StateType, + Subject, + SubjectType, +} from '../typesGitHub'; +import { + getNotificationTypeIcon, + getNotificationTypeIconColor, + getPullRequestReviewIcon, +} from './icons'; describe('utils/icons.ts', () => { describe('getNotificationTypeIcon - should get the notification type icon', () => { @@ -248,6 +259,98 @@ describe('utils/icons.ts', () => { ).toMatchSnapshot(); }); }); + + describe('getPullRequestReviewIcon', () => { + let mockReviewSingleReviewer: GitifyPullRequestReview; + let mockReviewMultipleReviewer: GitifyPullRequestReview; + beforeEach(() => { + mockReviewSingleReviewer = { + state: 'APPROVED', + users: ['user1'], + }; + mockReviewMultipleReviewer = { + state: 'APPROVED', + users: ['user1', 'user2'], + }; + }); + + it('approved', () => { + mockReviewSingleReviewer.state = 'APPROVED'; + mockReviewMultipleReviewer.state = 'APPROVED'; + + expect(getPullRequestReviewIcon(mockReviewSingleReviewer)).toEqual({ + type: CheckIcon, + color: IconColor.GREEN, + description: 'user1 approved these changes', + }); + + expect(getPullRequestReviewIcon(mockReviewMultipleReviewer)).toEqual({ + type: CheckIcon, + color: IconColor.GREEN, + description: 'user1, user2 approved these changes', + }); + }); + + it('changes requested', () => { + mockReviewSingleReviewer.state = 'CHANGES_REQUESTED'; + mockReviewMultipleReviewer.state = 'CHANGES_REQUESTED'; + + expect(getPullRequestReviewIcon(mockReviewSingleReviewer)).toEqual({ + type: FileDiffIcon, + color: IconColor.RED, + description: 'user1 requested changes', + }); + + expect(getPullRequestReviewIcon(mockReviewMultipleReviewer)).toEqual({ + type: FileDiffIcon, + color: IconColor.RED, + description: 'user1, user2 requested changes', + }); + }); + + it('commented', () => { + mockReviewSingleReviewer.state = 'COMMENTED'; + mockReviewMultipleReviewer.state = 'COMMENTED'; + + expect(getPullRequestReviewIcon(mockReviewSingleReviewer)).toEqual({ + type: CommentIcon, + color: IconColor.YELLOW, + description: 'user1 left review comments', + }); + + expect(getPullRequestReviewIcon(mockReviewMultipleReviewer)).toEqual({ + type: CommentIcon, + color: IconColor.YELLOW, + description: 'user1, user2 left review comments', + }); + }); + + it('dismissed', () => { + mockReviewSingleReviewer.state = 'DISMISSED'; + mockReviewMultipleReviewer.state = 'DISMISSED'; + + expect(getPullRequestReviewIcon(mockReviewSingleReviewer)).toEqual({ + type: CommentIcon, + color: IconColor.GRAY, + description: 'user1 review has been dismissed', + }); + + expect(getPullRequestReviewIcon(mockReviewMultipleReviewer)).toEqual({ + type: CommentIcon, + color: IconColor.GRAY, + description: 'user1, user2 reviews have been dismissed', + }); + }); + + it('pending', () => { + mockReviewSingleReviewer.state = 'PENDING'; + mockReviewMultipleReviewer.state = 'PENDING'; + + expect(getPullRequestReviewIcon(mockReviewSingleReviewer)).toBeNull(); + + expect(getPullRequestReviewIcon(mockReviewMultipleReviewer)).toBeNull(); + }); + }); }); function createSubjectMock(mocks: { diff --git a/src/utils/icons.ts b/src/utils/icons.ts index 609421457..b85864e2c 100644 --- a/src/utils/icons.ts +++ b/src/utils/icons.ts @@ -2,9 +2,11 @@ import { AlertIcon, CheckIcon, CommentDiscussionIcon, + CommentIcon, DiscussionClosedIcon, DiscussionDuplicateIcon, DiscussionOutdatedIcon, + FileDiffIcon, GitCommitIcon, GitMergeIcon, GitPullRequestClosedIcon, @@ -24,8 +26,8 @@ import { XIcon, } from '@primer/octicons-react'; import type { FC } from 'react'; -import { IconColor } from '../types'; -import type { Subject } from '../typesGitHub'; +import { IconColor, type PullRequestApprovalIcon } from '../types'; +import type { GitifyPullRequestReview, Subject } from '../typesGitHub'; export function getNotificationTypeIcon(subject: Subject): FC { switch (subject.type) { @@ -111,3 +113,40 @@ export function getNotificationTypeIconColor(subject: Subject): IconColor { return IconColor.GRAY; } } + +export function getPullRequestReviewIcon( + review: GitifyPullRequestReview, +): PullRequestApprovalIcon | null { + const descriptionPrefix = review.users.join(', '); + + switch (review.state) { + case 'APPROVED': + return { + type: CheckIcon, + color: IconColor.GREEN, + description: `${descriptionPrefix} approved these changes`, + }; + case 'CHANGES_REQUESTED': + return { + type: FileDiffIcon, + color: IconColor.RED, + description: `${descriptionPrefix} requested changes`, + }; + case 'COMMENTED': + return { + type: CommentIcon, + color: IconColor.YELLOW, + description: `${descriptionPrefix} left review comments`, + }; + case 'DISMISSED': + return { + type: CommentIcon, + color: IconColor.GRAY, + description: `${descriptionPrefix} ${ + review.users.length > 1 ? 'reviews have' : 'review has' + } been dismissed`, + }; + default: + return null; + } +} diff --git a/src/utils/subject.test.ts b/src/utils/subject.test.ts index cb2798604..560252ba3 100644 --- a/src/utils/subject.test.ts +++ b/src/utils/subject.test.ts @@ -17,6 +17,7 @@ import type { import { getCheckSuiteAttributes, getGitifySubjectDetails, + getLatestReviewForReviewers, getWorkflowRunAttributes, } from './subject'; @@ -630,6 +631,10 @@ describe('utils/subject.ts', () => { .get('/repos/gitify-app/notifications-test/issues/comments/302888448') .reply(200, { user: mockCommenter }); + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/pulls/1/reviews') + .reply(200, []); + const result = await getGitifySubjectDetails( mockNotification, mockAccounts.token, @@ -643,6 +648,7 @@ describe('utils/subject.ts', () => { avatar_url: mockCommenter.avatar_url, type: mockCommenter.type, }, + reviews: null, }); }); @@ -660,6 +666,10 @@ describe('utils/subject.ts', () => { .get('/repos/gitify-app/notifications-test/issues/comments/302888448') .reply(200, { user: mockCommenter }); + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/pulls/1/reviews') + .reply(200, []); + const result = await getGitifySubjectDetails( mockNotification, mockAccounts.token, @@ -673,6 +683,7 @@ describe('utils/subject.ts', () => { avatar_url: mockCommenter.avatar_url, type: mockCommenter.type, }, + reviews: null, }); }); @@ -690,6 +701,10 @@ describe('utils/subject.ts', () => { .get('/repos/gitify-app/notifications-test/issues/comments/302888448') .reply(200, { user: mockCommenter }); + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/pulls/1/reviews') + .reply(200, []); + const result = await getGitifySubjectDetails( mockNotification, mockAccounts.token, @@ -703,6 +718,7 @@ describe('utils/subject.ts', () => { avatar_url: mockCommenter.avatar_url, type: mockCommenter.type, }, + reviews: null, }); }); @@ -720,6 +736,10 @@ describe('utils/subject.ts', () => { .get('/repos/gitify-app/notifications-test/issues/comments/302888448') .reply(200, { user: mockCommenter }); + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/pulls/1/reviews') + .reply(200, []); + const result = await getGitifySubjectDetails( mockNotification, mockAccounts.token, @@ -733,6 +753,7 @@ describe('utils/subject.ts', () => { avatar_url: mockCommenter.avatar_url, type: mockCommenter.type, }, + reviews: null, }); }); @@ -749,6 +770,10 @@ describe('utils/subject.ts', () => { user: mockAuthor, }); + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/pulls/1/reviews') + .reply(200, []); + const result = await getGitifySubjectDetails( mockNotification, mockAccounts.token, @@ -762,6 +787,7 @@ describe('utils/subject.ts', () => { avatar_url: mockAuthor.avatar_url, type: mockAuthor.type, }, + reviews: null, }); }); @@ -777,6 +803,10 @@ describe('utils/subject.ts', () => { user: mockAuthor, }); + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/pulls/1/reviews') + .reply(200, []); + const result = await getGitifySubjectDetails( mockNotification, mockAccounts.token, @@ -790,6 +820,74 @@ describe('utils/subject.ts', () => { avatar_url: mockAuthor.avatar_url, type: mockAuthor.type, }, + reviews: null, + }); + }); + + describe('Pull Request Reviews - Latest Reviews By Reviewer', () => { + it('returns latest review state per reviewer', async () => { + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/pulls/1/reviews') + .reply(200, [ + { + user: { + login: 'reviewer-1', + }, + state: 'REQUESTED_CHANGES', + }, + { + user: { + login: 'reviewer-2', + }, + state: 'COMMENTED', + }, + { + user: { + login: 'reviewer-1', + }, + state: 'APPROVED', + }, + { + user: { + login: 'reviewer-3', + }, + state: 'APPROVED', + }, + ]); + + const result = await getLatestReviewForReviewers( + mockNotification, + mockAccounts.token, + ); + + expect(result).toEqual([ + { state: 'APPROVED', users: ['reviewer-3', 'reviewer-1'] }, + { state: 'COMMENTED', users: ['reviewer-2'] }, + ]); + }); + + it('handles no PR reviews yet', async () => { + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/pulls/1/reviews') + .reply(200, []); + + const result = await getLatestReviewForReviewers( + mockNotification, + mockAccounts.token, + ); + + expect(result).toBeNull(); + }); + + it('returns null when not a PR notification', async () => { + mockNotification.subject.type = 'Issue'; + + const result = await getLatestReviewForReviewers( + mockNotification, + mockAccounts.token, + ); + + expect(result).toBeNull(); }); }); }); diff --git a/src/utils/subject.ts b/src/utils/subject.ts index a172ad6bb..3a94b9574 100644 --- a/src/utils/subject.ts +++ b/src/utils/subject.ts @@ -2,8 +2,10 @@ import type { CheckSuiteAttributes, CheckSuiteStatus, DiscussionStateType, + GitifyPullRequestReview, GitifySubject, Notification, + PullRequestReview, PullRequestStateType, SubjectUser, User, @@ -15,6 +17,7 @@ import { getIssue, getIssueOrPullRequestComment, getPullRequest, + getPullRequestReviews, getRelease, } from './api/client'; import { fetchDiscussion, getLatestDiscussionComment } from './helpers'; @@ -237,6 +240,8 @@ async function getGitifySubjectForPullRequest( prCommentUser = prComment.user; } + const reviews = await getLatestReviewForReviewers(notification, token); + return { state: prState, user: { @@ -245,9 +250,62 @@ async function getGitifySubjectForPullRequest( avatar_url: prCommentUser?.avatar_url ?? pr.user.avatar_url, type: prCommentUser?.type ?? pr.user.type, }, + reviews: reviews, }; } +export async function getLatestReviewForReviewers( + notification: Notification, + token: string, +): Promise | null { + if (notification.subject.type !== 'PullRequest') { + return null; + } + + const prReviews = await getPullRequestReviews( + `${notification.subject.url}/reviews`, + token, + ); + + if (!prReviews.data.length) { + return null; + } + + // Find the most recent review for each reviewer + const latestReviews: PullRequestReview[] = []; + for (const prReview of prReviews.data.reverse()) { + const reviewerFound = latestReviews.find( + (review) => review.user.login === prReview.user.login, + ); + + if (!reviewerFound) { + latestReviews.push(prReview); + } + } + + // Group by the review state + const reviewers: GitifyPullRequestReview[] = []; + for (const prReview of latestReviews) { + const reviewerFound = reviewers.find( + (review) => review.state === prReview.state, + ); + + if (!reviewerFound) { + reviewers.push({ + state: prReview.state, + users: [prReview.user.login], + }); + } else { + reviewerFound.users.push(prReview.user.login); + } + } + + // Sort reviews by state for consistent order when rendering + return reviewers.sort((a, b) => { + return a.state.localeCompare(b.state); + }); +} + async function getGitifySubjectForRelease( notification: Notification, token: string, From 20d45db2e4ffba6cf2f6919469dc636749fc0ebd Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Mon, 6 May 2024 06:07:20 -1000 Subject: [PATCH 064/251] chore: prepare 5.5.0 release (#1091) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3de9d818a..0525a504c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gitify", - "version": "5.4.0", + "version": "5.5.0", "description": "GitHub Notifications on your menu bar.", "main": "main.js", "scripts": { From 2947c0a3798e49e1f777457e29428f701c46afe1 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Wed, 8 May 2024 02:51:16 -1000 Subject: [PATCH 065/251] refactor: add types to helper fns (#1093) --- src/utils/helpers.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 575e66456..4507b1a08 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -28,7 +28,7 @@ export function isEnterpriseHost(hostname: string): boolean { return !hostname.endsWith(Constants.DEFAULT_AUTH_OPTIONS.hostname); } -export function getGitHubAPIBaseUrl(hostname) { +export function getGitHubAPIBaseUrl(hostname: string): string { const isEnterprise = isEnterpriseHost(hostname); return isEnterprise ? `https://${hostname}/api/v3` @@ -60,7 +60,7 @@ export function generateNotificationReferrerId( return buffer.toString('base64'); } -export function getCheckSuiteUrl(notification: Notification) { +export function getCheckSuiteUrl(notification: Notification): string { let url = `${notification.repository.html_url}/actions`; const filters = []; @@ -87,7 +87,7 @@ export function getCheckSuiteUrl(notification: Notification) { return url; } -export function getWorkflowRunUrl(notification: Notification) { +export function getWorkflowRunUrl(notification: Notification): string { let url = `${notification.repository.html_url}/actions`; const filters = []; @@ -197,7 +197,7 @@ export async function generateGitHubWebUrl( return url; } -export function formatForDisplay(text: string[]) { +export function formatForDisplay(text: string[]): string { if (!text) { return ''; } From e41438a3699546574a38c821fd082860c1a2fa1f Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Wed, 8 May 2024 03:05:05 -1000 Subject: [PATCH 066/251] refactor(discussions): use API to get latest comment and reply (#1094) --- src/__mocks__/mockedData.ts | 67 ------------------------------------- src/utils/api/client.ts | 2 +- src/utils/helpers.ts | 20 ++++++----- 3 files changed, 13 insertions(+), 76 deletions(-) diff --git a/src/__mocks__/mockedData.ts b/src/__mocks__/mockedData.ts index 9bf11ee34..f035be230 100644 --- a/src/__mocks__/mockedData.ts +++ b/src/__mocks__/mockedData.ts @@ -404,44 +404,6 @@ const mockDiscussionReplier: DiscussionAuthor = { export const mockDiscussionComments: DiscussionComments = { nodes: [ - { - databaseId: 2215656, - createdAt: '2022-02-20T18:33:39Z', - author: mockDiscussionAuthor, - replies: { - nodes: [], - }, - }, - { - databaseId: 2217789, - createdAt: '2022-02-21T03:30:42Z', - author: mockDiscussionAuthor, - replies: { - nodes: [], - }, - }, - { - databaseId: 2223243, - createdAt: '2022-02-21T18:26:27Z', - author: mockDiscussionAuthor, - replies: { - nodes: [ - { - databaseId: 2232922, - createdAt: '2022-02-23T00:57:58Z', - author: mockDiscussionReplier, - }, - ], - }, - }, - { - databaseId: 2232921, - createdAt: '2022-02-23T00:57:49Z', - author: mockDiscussionAuthor, - replies: { - nodes: [], - }, - }, { databaseId: 2258799, createdAt: '2022-02-27T01:22:20Z', @@ -456,35 +418,6 @@ export const mockDiscussionComments: DiscussionComments = { ], }, }, - { - databaseId: 2297637, - createdAt: '2022-03-04T20:39:44Z', - author: mockDiscussionAuthor, - - replies: { - nodes: [ - { - databaseId: 2300893, - createdAt: '2022-03-05T17:41:04Z', - author: mockDiscussionReplier, - }, - ], - }, - }, - { - databaseId: 2299763, - createdAt: '2022-03-05T11:05:42Z', - author: mockDiscussionAuthor, - replies: { - nodes: [ - { - databaseId: 2300895, - createdAt: '2022-03-05T17:41:44Z', - author: mockDiscussionReplier, - }, - ], - }, - }, ], }; diff --git a/src/utils/api/client.ts b/src/utils/api/client.ts index da356f363..e2e476cf4 100644 --- a/src/utils/api/client.ts +++ b/src/utils/api/client.ts @@ -253,7 +253,7 @@ export async function searchDiscussions( notification.updated_at, ), firstDiscussions: 10, - lastComments: 100, + lastComments: 1, lastReplies: 1, }, }); diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 4507b1a08..970d9d021 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -117,10 +117,10 @@ async function getDiscussionUrl( const comments = discussion.comments.nodes; - const latestCommentId = getLatestDiscussionComment(comments)?.databaseId; + const latestComment = getLatestDiscussionComment(comments); - if (latestCommentId) { - url += `#discussioncomment-${latestCommentId}`; + if (latestComment) { + url += `#discussioncomment-${latestComment.databaseId}`; } } @@ -139,10 +139,11 @@ export async function fetchDiscussion( (discussion) => discussion.title === notification.subject.title, ) || []; - if (discussions.length > 1) + if (discussions.length > 1) { discussions = discussions.filter( (discussion) => discussion.viewerSubscription === 'SUBSCRIBED', ); + } return discussions[0]; } catch (err) {} @@ -155,10 +156,13 @@ export function getLatestDiscussionComment( return null; } - return comments - .flatMap((comment) => comment.replies.nodes) - .concat([comments[comments.length - 1]]) - .reduce((a, b) => (a.createdAt > b.createdAt ? a : b)); + // Return latest reply if available + if (comments[0].replies.nodes.length === 1) { + return comments[0].replies.nodes[0]; + } + + // Return latest comment if no replies + return comments[0]; } export async function generateGitHubWebUrl( From cec22f718306eacd0bba67c676fa6c22225da7f0 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Thu, 9 May 2024 03:18:47 -1000 Subject: [PATCH 067/251] refactor: remove async from ipc handlers (#1099) --- main.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/main.js b/main.js index a9e12ffa9..1cb8e2cfc 100644 --- a/main.js +++ b/main.js @@ -60,12 +60,8 @@ menubarApp.on('ready', () => { } }); - ipcMain.handle('get-platform', async () => { - return process.platform; - }); - ipcMain.handle('get-app-version', async () => { - return app.getVersion(); - }); + ipcMain.handle('get-platform', () => process.platform); + ipcMain.handle('get-app-version', () => app.getVersion()); ipcMain.on('reopen-window', () => menubarApp.showWindow()); ipcMain.on('hide-window', () => menubarApp.hideWindow()); From 6c33a26e0de65aff45e3e0fa96fb349d19efd09a Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Thu, 9 May 2024 03:19:54 -1000 Subject: [PATCH 068/251] refactor: update enterprise host test data (#1096) --- src/utils/helpers.test.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/utils/helpers.test.ts b/src/utils/helpers.test.ts index d80ab6451..f9482891b 100644 --- a/src/utils/helpers.test.ts +++ b/src/utils/helpers.test.ts @@ -29,8 +29,8 @@ describe('utils/helpers.ts', () => { }); describe('isEnterpriseHost', () => { it('should return true for enterprise host', () => { - expect(isEnterpriseHost('github.manos.im')).toBe(true); - expect(isEnterpriseHost('api.github.manos.im')).toBe(true); + expect(isEnterpriseHost('github.gitify.app')).toBe(true); + expect(isEnterpriseHost('api.github.gitify.app')).toBe(true); }); it('should return false for non-enterprise host', () => { @@ -95,8 +95,8 @@ describe('utils/helpers.ts', () => { }); it('should generate a GitHub API url - enterprise', () => { - const result = getGitHubAPIBaseUrl('github.manos.im'); - expect(result).toBe('https://github.manos.im/api/v3'); + const result = getGitHubAPIBaseUrl('github.gitify.app'); + expect(result).toBe('https://github.gitify.app/api/v3'); }); }); From c5b33a990587a01f8455f271c5341673a0cfb4c0 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Thu, 9 May 2024 03:30:52 -1000 Subject: [PATCH 069/251] refactor: use URL object instead of strings (#1095) * refactor: use URL object instead of strings * refactor: use URL object instead of strings --------- Co-authored-by: Afonso Jorge Ramos --- src/utils/api/client.test.ts | 2 +- src/utils/api/client.ts | 42 ++++++++++---------- src/utils/api/utils.test.ts | 32 +++++++++++---- src/utils/api/utils.ts | 13 +++++++ src/utils/helpers.test.ts | 51 ------------------------ src/utils/helpers.ts | 75 +++++++++++++++--------------------- 6 files changed, 91 insertions(+), 124 deletions(-) diff --git a/src/utils/api/client.test.ts b/src/utils/api/client.test.ts index e0d864e99..58fb92777 100644 --- a/src/utils/api/client.test.ts +++ b/src/utils/api/client.test.ts @@ -43,7 +43,7 @@ describe('utils/api/client.ts', () => { await getRootHypermediaLinks(mockEnterpriseHostname, mockToken); expect(axios).toHaveBeenCalledWith({ - url: 'https://example.com/api/v3', + url: 'https://example.com/api/v3/', method: 'GET', data: {}, }); diff --git a/src/utils/api/client.ts b/src/utils/api/client.ts index e2e476cf4..3401851dc 100644 --- a/src/utils/api/client.ts +++ b/src/utils/api/client.ts @@ -15,13 +15,12 @@ import type { RootHypermediaLinks, UserDetails, } from '../../typesGitHub'; -import { getGitHubAPIBaseUrl } from '../helpers'; import { apiRequestAuth } from './request'; import { print } from 'graphql/language/printer'; import Constants from '../constants'; import { QUERY_SEARCH_DISCUSSIONS } from './graphql/discussions'; -import { formatSearchQueryString } from './utils'; +import { formatSearchQueryString, getGitHubAPIBaseUrl } from './utils'; /** * Get Hypermedia links to resources accessible in GitHub's REST API @@ -32,8 +31,7 @@ export function getRootHypermediaLinks( hostname: string, token: string, ): AxiosPromise { - const baseUrl = getGitHubAPIBaseUrl(hostname); - const url = new URL(baseUrl); + const url = getGitHubAPIBaseUrl(hostname); return apiRequestAuth(url.toString(), 'GET', token); } @@ -46,8 +44,9 @@ export function getAuthenticatedUser( hostname: string, token: string, ): AxiosPromise { - const baseUrl = getGitHubAPIBaseUrl(hostname); - const url = new URL(`${baseUrl}/user`); + const url = getGitHubAPIBaseUrl(hostname); + url.pathname += 'user'; + return apiRequestAuth(url.toString(), 'GET', token); } @@ -56,8 +55,9 @@ export function headNotifications( hostname: string, token: string, ): AxiosPromise { - const baseUrl = getGitHubAPIBaseUrl(hostname); - const url = new URL(`${baseUrl}/notifications`); + const url = getGitHubAPIBaseUrl(hostname); + url.pathname += 'notifications'; + return apiRequestAuth(url.toString(), 'HEAD', token); } @@ -71,8 +71,8 @@ export function listNotificationsForAuthenticatedUser( token: string, settings: SettingsState, ): AxiosPromise { - const baseUrl = getGitHubAPIBaseUrl(hostname); - const url = new URL(`${baseUrl}/notifications`); + const url = getGitHubAPIBaseUrl(hostname); + url.pathname += 'notifications'; url.searchParams.append('participating', String(settings.participating)); return apiRequestAuth(url.toString(), 'GET', token); @@ -89,8 +89,9 @@ export function markNotificationThreadAsRead( hostname: string, token: string, ): AxiosPromise { - const baseUrl = getGitHubAPIBaseUrl(hostname); - const url = new URL(`${baseUrl}/notifications/threads/${threadId}`); + const url = getGitHubAPIBaseUrl(hostname); + url.pathname += `notifications/threads/${threadId}`; + return apiRequestAuth(url.toString(), 'PATCH', token, {}); } @@ -105,8 +106,9 @@ export function markNotificationThreadAsDone( hostname: string, token: string, ): AxiosPromise { - const baseUrl = getGitHubAPIBaseUrl(hostname); - const url = new URL(`${baseUrl}/notifications/threads/${threadId}`); + const url = getGitHubAPIBaseUrl(hostname); + url.pathname += `notifications/threads/${threadId}`; + return apiRequestAuth(url.toString(), 'DELETE', token, {}); } @@ -120,10 +122,9 @@ export function ignoreNotificationThreadSubscription( hostname: string, token: string, ): AxiosPromise { - const baseUrl = getGitHubAPIBaseUrl(hostname); - const url = new URL( - `${baseUrl}/notifications/threads/${threadId}/subscription`, - ); + const url = getGitHubAPIBaseUrl(hostname); + url.pathname += `notifications/threads/${threadId}/subscription`; + return apiRequestAuth(url.toString(), 'PUT', token, { ignored: true }); } @@ -140,8 +141,9 @@ export function markRepositoryNotificationsAsRead( hostname: string, token: string, ): AxiosPromise { - const baseUrl = getGitHubAPIBaseUrl(hostname); - const url = new URL(`${baseUrl}/repos/${repoSlug}/notifications`); + const url = getGitHubAPIBaseUrl(hostname); + url.pathname += `repos/${repoSlug}/notifications`; + return apiRequestAuth(url.toString(), 'PUT', token, {}); } diff --git a/src/utils/api/utils.test.ts b/src/utils/api/utils.test.ts index 001b3f3c8..54af2e1ea 100644 --- a/src/utils/api/utils.test.ts +++ b/src/utils/api/utils.test.ts @@ -1,15 +1,19 @@ -import { addHours, formatSearchQueryString } from './utils'; +import { + addHours, + formatSearchQueryString, + getGitHubAPIBaseUrl, +} from './utils'; describe('utils/api/utils.ts', () => { - describe('addHours', () => { - test('adds hours correctly for positive values', () => { - const result = addHours('2024-02-20T12:00:00.000Z', 3); - expect(result).toBe('2024-02-20T15:00:00.000Z'); + describe('generateGitHubAPIUrl', () => { + it('should generate a GitHub API url - non enterprise', () => { + const result = getGitHubAPIBaseUrl('github.com'); + expect(result.toString()).toBe('https://api.github.com/'); }); - test('adds hours correctly for negative values', () => { - const result = addHours('2024-02-20T12:00:00.000Z', -2); - expect(result).toBe('2024-02-20T10:00:00.000Z'); + it('should generate a GitHub API url - enterprise', () => { + const result = getGitHubAPIBaseUrl('github.manos.im'); + expect(result.toString()).toBe('https://github.manos.im/api/v3/'); }); }); @@ -26,4 +30,16 @@ describe('utils/api/utils.ts', () => { ); }); }); + + describe('addHours', () => { + test('adds hours correctly for positive values', () => { + const result = addHours('2024-02-20T12:00:00.000Z', 3); + expect(result).toBe('2024-02-20T15:00:00.000Z'); + }); + + test('adds hours correctly for negative values', () => { + const result = addHours('2024-02-20T12:00:00.000Z', -2); + expect(result).toBe('2024-02-20T10:00:00.000Z'); + }); + }); }); diff --git a/src/utils/api/utils.ts b/src/utils/api/utils.ts index 6a833c9fd..954704b07 100644 --- a/src/utils/api/utils.ts +++ b/src/utils/api/utils.ts @@ -1,3 +1,16 @@ +import Constants from '../constants'; +import { isEnterpriseHost } from '../helpers'; + +export function getGitHubAPIBaseUrl(hostname: string): URL { + const url = new URL(Constants.GITHUB_API_BASE_URL); + + if (isEnterpriseHost(hostname)) { + url.hostname = hostname; + url.pathname = '/api/v3/'; + } + return url; +} + export function formatSearchQueryString( repo: string, title: string, diff --git a/src/utils/helpers.test.ts b/src/utils/helpers.test.ts index f9482891b..1adbdfcbe 100644 --- a/src/utils/helpers.test.ts +++ b/src/utils/helpers.test.ts @@ -8,11 +8,9 @@ import { import type { SubjectType } from '../typesGitHub'; import * as apiRequests from './api/request'; import { - addNotificationReferrerIdToUrl, formatForDisplay, generateGitHubWebUrl, generateNotificationReferrerId, - getGitHubAPIBaseUrl, isEnterpriseHost, isGitHubLoggedIn, } from './helpers'; @@ -39,43 +37,6 @@ describe('utils/helpers.ts', () => { }); }); - describe('addNotificationReferrerIdToUrl', () => { - it('should add notification_referrer_id to the URL', () => { - // Mock data - const url = 'https://github.com/gitify-app/notifications-test'; - const notificationId = '123'; - const userId = 456; - - const result = addNotificationReferrerIdToUrl( - url, - notificationId, - userId, - ); - - expect(result).toEqual( - 'https://github.com/gitify-app/notifications-test?notification_referrer_id=MDE4Ok5vdGlmaWNhdGlvblRocmVhZDEyMzo0NTY%3D', - ); - }); - - it('should add notification_referrer_id to the URL, preserving anchor tags', () => { - // Mock data - const url = - 'https://github.com/gitify-app/notifications-test/pull/123#issuecomment-1951055051'; - const notificationId = '123'; - const userId = 456; - - const result = addNotificationReferrerIdToUrl( - url, - notificationId, - userId, - ); - - expect(result).toEqual( - 'https://github.com/gitify-app/notifications-test/pull/123?notification_referrer_id=MDE4Ok5vdGlmaWNhdGlvblRocmVhZDEyMzo0NTY%3D#issuecomment-1951055051', - ); - }); - }); - describe('generateNotificationReferrerId', () => { it('should generate the notification_referrer_id', () => { const referrerId = generateNotificationReferrerId( @@ -88,18 +49,6 @@ describe('utils/helpers.ts', () => { }); }); - describe('generateGitHubAPIUrl', () => { - it('should generate a GitHub API url - non enterprise', () => { - const result = getGitHubAPIBaseUrl('github.com'); - expect(result).toBe('https://api.github.com'); - }); - - it('should generate a GitHub API url - enterprise', () => { - const result = getGitHubAPIBaseUrl('github.gitify.app'); - expect(result).toBe('https://github.gitify.app/api/v3'); - }); - }); - describe('generateGitHubWebUrl', () => { const mockedHtmlUrl = 'https://github.com/gitify-app/notifications-test/issues/785'; diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 970d9d021..b6501bd61 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -28,28 +28,6 @@ export function isEnterpriseHost(hostname: string): boolean { return !hostname.endsWith(Constants.DEFAULT_AUTH_OPTIONS.hostname); } -export function getGitHubAPIBaseUrl(hostname: string): string { - const isEnterprise = isEnterpriseHost(hostname); - return isEnterprise - ? `https://${hostname}/api/v3` - : Constants.GITHUB_API_BASE_URL; -} - -export function addNotificationReferrerIdToUrl( - url: string, - notificationId: string, - userId: number, -): string { - const parsedUrl = new URL(url); - - parsedUrl.searchParams.set( - 'notification_referrer_id', - generateNotificationReferrerId(notificationId, userId), - ); - - return parsedUrl.href; -} - export function generateNotificationReferrerId( notificationId: string, userId: number, @@ -61,7 +39,6 @@ export function generateNotificationReferrerId( } export function getCheckSuiteUrl(notification: Notification): string { - let url = `${notification.repository.html_url}/actions`; const filters = []; const checkSuiteAttributes = getCheckSuiteAttributes(notification); @@ -80,15 +57,10 @@ export function getCheckSuiteUrl(notification: Notification): string { filters.push(`branch:${checkSuiteAttributes.branchName}`); } - if (filters.length > 0) { - url += `?query=${filters.join('+')}`; - } - - return url; + return actionsURL(notification.repository.html_url, filters); } export function getWorkflowRunUrl(notification: Notification): string { - let url = `${notification.repository.html_url}/actions`; const filters = []; const workflowRunAttributes = getWorkflowRunAttributes(notification); @@ -97,34 +69,46 @@ export function getWorkflowRunUrl(notification: Notification): string { filters.push(`is:${workflowRunAttributes.status}`); } + return actionsURL(notification.repository.html_url, filters); +} + +/** + * Construct a GitHub Actions URL for a repository with optional filters. + */ +export function actionsURL(repositoryURL: string, filters: string[]): string { + const url = new URL(repositoryURL); + url.pathname += '/actions'; + if (filters.length > 0) { - url += `?query=${filters.join('+')}`; + url.searchParams.append('query', filters.join('+')); } - return url; + // Note: the GitHub Actions UI cannot handle encoded '+' characters. + return url.toString().replace(/%2B/g, '+'); } async function getDiscussionUrl( notification: Notification, token: string, ): Promise { - let url = `${notification.repository.html_url}/discussions`; + const url = new URL(notification.repository.html_url); + url.pathname += '/discussions'; const discussion = await fetchDiscussion(notification, token); if (discussion) { - url = discussion.url; + url.href = discussion.url; const comments = discussion.comments.nodes; const latestComment = getLatestDiscussionComment(comments); if (latestComment) { - url += `#discussioncomment-${latestComment.databaseId}`; + url.hash = `#discussioncomment-${latestComment.databaseId}`; } } - return url; + return url.toString(); } export async function fetchDiscussion( @@ -169,36 +153,39 @@ export async function generateGitHubWebUrl( notification: Notification, accounts: AuthState, ): Promise { - let url = notification.repository.html_url; + const url = new URL(notification.repository.html_url); const token = getTokenForHost(notification.hostname, accounts); if (notification.subject.latest_comment_url) { - url = await getHtmlUrl(notification.subject.latest_comment_url, token); + url.href = await getHtmlUrl(notification.subject.latest_comment_url, token); } else if (notification.subject.url) { - url = await getHtmlUrl(notification.subject.url, token); + url.href = await getHtmlUrl(notification.subject.url, token); } else { // Perform any specific notification type handling (only required for a few special notification scenarios) switch (notification.subject.type) { case 'CheckSuite': - url = getCheckSuiteUrl(notification); + url.href = getCheckSuiteUrl(notification); break; case 'Discussion': - url = await getDiscussionUrl(notification, token); + url.href = await getDiscussionUrl(notification, token); break; case 'RepositoryInvitation': - url = `${notification.repository.html_url}/invitations`; + url.pathname += '/invitations'; break; case 'WorkflowRun': - url = getWorkflowRunUrl(notification); + url.href = getWorkflowRunUrl(notification); break; default: break; } } - url = addNotificationReferrerIdToUrl(url, notification.id, accounts.user?.id); + url.searchParams.set( + 'notification_referrer_id', + generateNotificationReferrerId(notification.id, accounts.user?.id), + ); - return url; + return url.toString(); } export function formatForDisplay(text: string[]): string { From 9c2248c39830efa099c96bb76e033c9f6662fa3c Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Thu, 9 May 2024 03:38:16 -1000 Subject: [PATCH 070/251] feat: delay notification removal (#1092) * feat: delay notification removal * feat: delay notification removal * feat: delay notification removal * feat: delay notification removal * chore: remove comment --- src/__mocks__/mock-state.ts | 1 + src/components/NotificationRow.tsx | 7 +- .../NotificationRow.test.tsx.snap | 2 + src/context/App.test.tsx | 12 +- src/context/App.tsx | 17 ++- src/hooks/useNotifications.test.ts | 117 +++++++++++++++--- src/hooks/useNotifications.ts | 54 ++++++-- src/routes/Settings.test.tsx | 28 +++++ src/routes/Settings.tsx | 17 +++ .../__snapshots__/Settings.test.tsx.snap | 47 +++++++ src/types.ts | 1 + src/utils/constants.ts | 2 + src/utils/remove-notification.test.ts | 24 ++++ src/utils/remove-notification.ts | 10 +- 14 files changed, 305 insertions(+), 34 deletions(-) diff --git a/src/__mocks__/mock-state.ts b/src/__mocks__/mock-state.ts index 01cb113a3..6594be1d0 100644 --- a/src/__mocks__/mock-state.ts +++ b/src/__mocks__/mock-state.ts @@ -18,4 +18,5 @@ export const mockSettings: SettingsState = { detailedNotifications: false, markAsDoneOnOpen: false, showAccountHostname: false, + delayNotificationState: false, }; diff --git a/src/components/NotificationRow.tsx b/src/components/NotificationRow.tsx index 75eaa3994..bae5af4bc 100644 --- a/src/components/NotificationRow.tsx +++ b/src/components/NotificationRow.tsx @@ -47,7 +47,7 @@ export const NotificationRow: FC = ({ notification, hostname }) => { markNotificationDone(notification.id, hostname); } else { // no need to mark as read, github does it by default when opening it - removeNotificationFromState(notification.id, hostname); + removeNotificationFromState(settings, notification.id, hostname); } }, [notifications, notification, accounts, settings]); // notifications required here to prevent weird state issues @@ -84,7 +84,10 @@ export const NotificationRow: FC = ({ notification, hostname }) => { ]); return ( -
+
{ expect(markNotificationReadMock).toHaveBeenCalledTimes(1); expect(markNotificationReadMock).toHaveBeenCalledWith( - { enterpriseAccounts: [], token: null, user: null }, + { + enterpriseAccounts: [], + token: null, + user: null, + }, + mockSettings, '123-456', 'github.com', ); @@ -160,6 +165,7 @@ describe('context/App.tsx', () => { expect(markNotificationDoneMock).toHaveBeenCalledTimes(1); expect(markNotificationDoneMock).toHaveBeenCalledWith( { enterpriseAccounts: [], token: null, user: null }, + mockSettings, '123-456', 'github.com', ); @@ -188,6 +194,7 @@ describe('context/App.tsx', () => { expect(unsubscribeNotificationMock).toHaveBeenCalledTimes(1); expect(unsubscribeNotificationMock).toHaveBeenCalledWith( { enterpriseAccounts: [], token: null, user: null }, + mockSettings, '123-456', 'github.com', ); @@ -221,6 +228,7 @@ describe('context/App.tsx', () => { expect(markRepoNotificationsMock).toHaveBeenCalledTimes(1); expect(markRepoNotificationsMock).toHaveBeenCalledWith( { enterpriseAccounts: [], token: null, user: null }, + mockSettings, 'gitify-app/notifications-test', 'github.com', ); @@ -325,6 +333,7 @@ describe('context/App.tsx', () => { detailedNotifications: false, markAsDoneOnOpen: false, showAccountHostname: false, + delayNotificationState: false, }, ); }); @@ -369,6 +378,7 @@ describe('context/App.tsx', () => { detailedNotifications: false, markAsDoneOnOpen: false, showAccountHostname: false, + delayNotificationState: false, }, ); }); diff --git a/src/context/App.tsx b/src/context/App.tsx index c240cc85f..45eacda12 100644 --- a/src/context/App.tsx +++ b/src/context/App.tsx @@ -44,6 +44,7 @@ export const defaultSettings: SettingsState = { detailedNotifications: false, markAsDoneOnOpen: false, showAccountHostname: false, + delayNotificationState: false, }; interface AppContextState { @@ -57,7 +58,11 @@ interface AppContextState { notifications: AccountNotifications[]; status: Status; errorDetails: GitifyError; - removeNotificationFromState: (id: string, hostname: string) => void; + removeNotificationFromState: ( + settings: SettingsState, + id: string, + hostname: string, + ) => void; fetchNotifications: () => Promise; markNotificationRead: (id: string, hostname: string) => Promise; markNotificationDone: (id: string, hostname: string) => Promise; @@ -199,31 +204,31 @@ export const AppProvider = ({ children }: { children: ReactNode }) => { const markNotificationReadWithAccounts = useCallback( async (id: string, hostname: string) => - await markNotificationRead(accounts, id, hostname), + await markNotificationRead(accounts, settings, id, hostname), [accounts, notifications], ); const markNotificationDoneWithAccounts = useCallback( async (id: string, hostname: string) => - await markNotificationDone(accounts, id, hostname), + await markNotificationDone(accounts, settings, id, hostname), [accounts, notifications], ); const unsubscribeNotificationWithAccounts = useCallback( async (id: string, hostname: string) => - await unsubscribeNotification(accounts, id, hostname), + await unsubscribeNotification(accounts, settings, id, hostname), [accounts, notifications], ); const markRepoNotificationsWithAccounts = useCallback( async (repoSlug: string, hostname: string) => - await markRepoNotifications(accounts, repoSlug, hostname), + await markRepoNotifications(accounts, settings, repoSlug, hostname), [accounts, notifications], ); const markRepoNotificationsDoneWithAccounts = useCallback( async (repoSlug: string, hostname: string) => - await markRepoNotificationsDone(accounts, repoSlug, hostname), + await markRepoNotificationsDone(accounts, settings, repoSlug, hostname), [accounts, notifications], ); diff --git a/src/hooks/useNotifications.test.ts b/src/hooks/useNotifications.test.ts index 146fa85de..053cf0cdf 100644 --- a/src/hooks/useNotifications.test.ts +++ b/src/hooks/useNotifications.test.ts @@ -427,6 +427,7 @@ describe('hooks/useNotifications.ts', () => { act(() => { result.current.removeNotificationFromState( + mockSettings, result.current.notifications[0].notifications[0].id, result.current.notifications[0].hostname, ); @@ -451,7 +452,12 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.markNotificationRead(accounts, id, hostname); + result.current.markNotificationRead( + accounts, + mockSettings, + id, + hostname, + ); }); await waitFor(() => { @@ -469,7 +475,12 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.markNotificationRead(accounts, id, hostname); + result.current.markNotificationRead( + accounts, + mockSettings, + id, + hostname, + ); }); await waitFor(() => { @@ -492,7 +503,12 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.markNotificationRead(accounts, id, hostname); + result.current.markNotificationRead( + accounts, + mockSettings, + id, + hostname, + ); }); await waitFor(() => { @@ -510,7 +526,12 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.markNotificationRead(accounts, id, hostname); + result.current.markNotificationRead( + accounts, + mockSettings, + id, + hostname, + ); }); await waitFor(() => { @@ -537,7 +558,12 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.markNotificationDone(accounts, id, hostname); + result.current.markNotificationDone( + accounts, + mockSettings, + id, + hostname, + ); }); await waitFor(() => { @@ -555,7 +581,12 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.markNotificationDone(accounts, id, hostname); + result.current.markNotificationDone( + accounts, + mockSettings, + id, + hostname, + ); }); await waitFor(() => { @@ -578,7 +609,12 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.markNotificationDone(accounts, id, hostname); + result.current.markNotificationDone( + accounts, + mockSettings, + id, + hostname, + ); }); await waitFor(() => { @@ -596,7 +632,12 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.markNotificationDone(accounts, id, hostname); + result.current.markNotificationDone( + accounts, + mockSettings, + id, + hostname, + ); }); await waitFor(() => { @@ -629,7 +670,12 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.unsubscribeNotification(accounts, id, hostname); + result.current.unsubscribeNotification( + accounts, + mockSettings, + id, + hostname, + ); }); await waitFor(() => { @@ -653,7 +699,12 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.unsubscribeNotification(accounts, id, hostname); + result.current.unsubscribeNotification( + accounts, + mockSettings, + id, + hostname, + ); }); await waitFor(() => { @@ -682,7 +733,12 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.unsubscribeNotification(accounts, id, hostname); + result.current.unsubscribeNotification( + accounts, + mockSettings, + id, + hostname, + ); }); await waitFor(() => { @@ -706,7 +762,12 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.unsubscribeNotification(accounts, id, hostname); + result.current.unsubscribeNotification( + accounts, + mockSettings, + id, + hostname, + ); }); await waitFor(() => { @@ -733,7 +794,12 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.markRepoNotifications(accounts, repoSlug, hostname); + result.current.markRepoNotifications( + accounts, + mockSettings, + repoSlug, + hostname, + ); }); await waitFor(() => { @@ -751,7 +817,12 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.markRepoNotifications(accounts, repoSlug, hostname); + result.current.markRepoNotifications( + accounts, + mockSettings, + repoSlug, + hostname, + ); }); await waitFor(() => { @@ -774,7 +845,12 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.markRepoNotifications(accounts, repoSlug, hostname); + result.current.markRepoNotifications( + accounts, + mockSettings, + repoSlug, + hostname, + ); }); await waitFor(() => { @@ -792,7 +868,12 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.markRepoNotifications(accounts, repoSlug, hostname); + result.current.markRepoNotifications( + accounts, + mockSettings, + repoSlug, + hostname, + ); }); await waitFor(() => { @@ -822,6 +903,7 @@ describe('hooks/useNotifications.ts', () => { act(() => { result.current.markRepoNotificationsDone( accounts, + mockSettings, repoSlug, hostname, ); @@ -844,6 +926,7 @@ describe('hooks/useNotifications.ts', () => { act(() => { result.current.markRepoNotificationsDone( accounts, + mockSettings, repoSlug, hostname, ); @@ -871,6 +954,7 @@ describe('hooks/useNotifications.ts', () => { act(() => { result.current.markRepoNotificationsDone( accounts, + mockSettings, repoSlug, hostname, ); @@ -893,6 +977,7 @@ describe('hooks/useNotifications.ts', () => { act(() => { result.current.markRepoNotificationsDone( accounts, + mockSettings, repoSlug, hostname, ); diff --git a/src/hooks/useNotifications.ts b/src/hooks/useNotifications.ts index 9558e444c..13824685f 100644 --- a/src/hooks/useNotifications.ts +++ b/src/hooks/useNotifications.ts @@ -25,33 +25,42 @@ import { removeNotifications } from '../utils/remove-notifications'; interface NotificationsState { notifications: AccountNotifications[]; - removeNotificationFromState: (id: string, hostname: string) => void; + removeNotificationFromState: ( + settings: SettingsState, + id: string, + hostname: string, + ) => void; fetchNotifications: ( accounts: AuthState, settings: SettingsState, ) => Promise; markNotificationRead: ( accounts: AuthState, + settings: SettingsState, id: string, hostname: string, ) => Promise; markNotificationDone: ( accounts: AuthState, + settings: SettingsState, id: string, hostname: string, ) => Promise; unsubscribeNotification: ( accounts: AuthState, + settings: SettingsState, id: string, hostname: string, ) => Promise; markRepoNotifications: ( accounts: AuthState, + settings: SettingsState, repoSlug: string, hostname: string, ) => Promise; markRepoNotificationsDone: ( accounts: AuthState, + settings: SettingsState, repoSlug: string, hostname: string, ) => Promise; @@ -94,7 +103,12 @@ export const useNotifications = (): NotificationsState => { ); const markNotificationRead = useCallback( - async (accounts: AuthState, id: string, hostname: string) => { + async ( + accounts: AuthState, + settings: SettingsState, + id: string, + hostname: string, + ) => { setStatus('loading'); const token = getTokenForHost(hostname, accounts); @@ -103,6 +117,7 @@ export const useNotifications = (): NotificationsState => { await markNotificationThreadAsRead(id, hostname, token); const updatedNotifications = removeNotification( + settings, id, notifications, hostname, @@ -119,7 +134,12 @@ export const useNotifications = (): NotificationsState => { ); const markNotificationDone = useCallback( - async (accounts: AuthState, id: string, hostname: string) => { + async ( + accounts: AuthState, + settings: SettingsState, + id: string, + hostname: string, + ) => { setStatus('loading'); const token = getTokenForHost(hostname, accounts); @@ -128,6 +148,7 @@ export const useNotifications = (): NotificationsState => { await markNotificationThreadAsDone(id, hostname, token); const updatedNotifications = removeNotification( + settings, id, notifications, hostname, @@ -144,14 +165,19 @@ export const useNotifications = (): NotificationsState => { ); const unsubscribeNotification = useCallback( - async (accounts: AuthState, id: string, hostname: string) => { + async ( + accounts: AuthState, + settings: SettingsState, + id: string, + hostname: string, + ) => { setStatus('loading'); const token = getTokenForHost(hostname, accounts); try { await ignoreNotificationThreadSubscription(id, hostname, token); - await markNotificationRead(accounts, id, hostname); + await markNotificationRead(accounts, settings, id, hostname); setStatus('success'); } catch (err) { setStatus('success'); @@ -161,7 +187,12 @@ export const useNotifications = (): NotificationsState => { ); const markRepoNotifications = useCallback( - async (accounts: AuthState, repoSlug: string, hostname: string) => { + async ( + accounts: AuthState, + settings: SettingsState, + repoSlug: string, + hostname: string, + ) => { setStatus('loading'); const token = getTokenForHost(hostname, accounts); @@ -185,7 +216,12 @@ export const useNotifications = (): NotificationsState => { ); const markRepoNotificationsDone = useCallback( - async (accounts: AuthState, repoSlug: string, hostname: string) => { + async ( + accounts: AuthState, + settings: SettingsState, + repoSlug: string, + hostname: string, + ) => { setStatus('loading'); try { @@ -204,6 +240,7 @@ export const useNotifications = (): NotificationsState => { notificationsToRemove.map((notification) => markNotificationDone( accounts, + settings, notification.id, notifications[accountIndex].hostname, ), @@ -228,8 +265,9 @@ export const useNotifications = (): NotificationsState => { ); const removeNotificationFromState = useCallback( - (id: string, hostname: string) => { + (settings: SettingsState, id: string, hostname: string) => { const updatedNotifications = removeNotification( + settings, id, notifications, hostname, diff --git a/src/routes/Settings.test.tsx b/src/routes/Settings.test.tsx index 94b8e5e2f..22d88f833 100644 --- a/src/routes/Settings.test.tsx +++ b/src/routes/Settings.test.tsx @@ -336,6 +336,34 @@ describe('routes/Settings.tsx', () => { expect(updateSetting).toHaveBeenCalledTimes(1); expect(updateSetting).toHaveBeenCalledWith('markAsDoneOnOpen', false); }); + + it('should toggle the delayNotificationState checkbox', async () => { + await act(async () => { + render( + + + + + , + ); + }); + + fireEvent.click(screen.getByLabelText('Delay notification state'), { + target: { checked: true }, + }); + + expect(updateSetting).toHaveBeenCalledTimes(1); + expect(updateSetting).toHaveBeenCalledWith( + 'delayNotificationState', + false, + ); + }); }); describe('System section', () => { diff --git a/src/routes/Settings.tsx b/src/routes/Settings.tsx index 1145bc9a0..9709b136a 100644 --- a/src/routes/Settings.tsx +++ b/src/routes/Settings.tsx @@ -236,6 +236,23 @@ export const SettingsRoute: FC = () => { updateSetting('markAsDoneOnOpen', evt.target.checked) } /> + + updateSetting('delayNotificationState', evt.target.checked) + } + tooltip={ +
+
+ Keep the notification within Gitify window upon interaction + (click, mark as read, mark as done, etc) until the next + refresh window (scheduled or user initiated) +
+
+ } + />
diff --git a/src/routes/__snapshots__/Settings.test.tsx.snap b/src/routes/__snapshots__/Settings.test.tsx.snap index fd658a36a..f8a185eb6 100644 --- a/src/routes/__snapshots__/Settings.test.tsx.snap +++ b/src/routes/__snapshots__/Settings.test.tsx.snap @@ -380,6 +380,53 @@ exports[`routes/Settings.tsx General should render itself & its children 1`] = `
+
+
+
+ +
+
+ +
+
+
= { diff --git a/src/utils/remove-notification.test.ts b/src/utils/remove-notification.test.ts index dfbf8a8a9..625d00d4f 100644 --- a/src/utils/remove-notification.test.ts +++ b/src/utils/remove-notification.test.ts @@ -1,7 +1,9 @@ +import { mockSettings } from '../__mocks__/mock-state'; import { mockedSingleAccountNotifications, mockedSingleNotification, } from '../__mocks__/mockedData'; +import Constants from './constants'; import { removeNotification } from './remove-notification'; describe('utils/remove-notification.ts', () => { @@ -12,6 +14,7 @@ describe('utils/remove-notification.ts', () => { expect(mockedSingleAccountNotifications[0].notifications.length).toBe(1); const result = removeNotification( + { ...mockSettings, delayNotificationState: false }, notificationId, mockedSingleAccountNotifications, hostname, @@ -19,4 +22,25 @@ describe('utils/remove-notification.ts', () => { expect(result[0].notifications.length).toBe(0); }); + + it('should set notification as opaque if delayNotificationState enabled', () => { + const mockElement = document.createElement('div'); + mockElement.id = mockedSingleAccountNotifications[0].notifications[0].id; + jest.spyOn(document, 'getElementById').mockReturnValue(mockElement); + + expect(mockedSingleAccountNotifications[0].notifications.length).toBe(1); + + const result = removeNotification( + { ...mockSettings, delayNotificationState: true }, + notificationId, + mockedSingleAccountNotifications, + hostname, + ); + + expect(result[0].notifications.length).toBe(1); + expect(document.getElementById).toHaveBeenCalledWith( + mockedSingleAccountNotifications[0].notifications[0].id, + ); + expect(mockElement.className).toContain(Constants.READ_CLASS_NAME); + }); }); diff --git a/src/utils/remove-notification.ts b/src/utils/remove-notification.ts index c7cd69899..4e93cbe5f 100644 --- a/src/utils/remove-notification.ts +++ b/src/utils/remove-notification.ts @@ -1,10 +1,18 @@ -import type { AccountNotifications } from '../types'; +import type { AccountNotifications, SettingsState } from '../types'; +import Constants from './constants'; export const removeNotification = ( + settings: SettingsState, id: string, notifications: AccountNotifications[], hostname: string, ): AccountNotifications[] => { + if (settings.delayNotificationState) { + const notificationRow = document.getElementById(id); + notificationRow.className += ` ${Constants.READ_CLASS_NAME}`; + return notifications; + } + const accountIndex = notifications.findIndex( (accountNotifications) => accountNotifications.hostname === hostname, ); From 903ff0f1976c5123ffb2b6eb8de98f9f5fce3634 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 May 2024 09:57:08 -0400 Subject: [PATCH 071/251] chore(deps): update dependency node to v20.13.0 (#1102) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .nvmrc | 2 +- package.json | 2 +- pnpm-lock.yaml | 114 ++++++++++++++++++++++++------------------------- 3 files changed, 59 insertions(+), 59 deletions(-) diff --git a/.nvmrc b/.nvmrc index 5802c69cb..f03c4db80 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20.12.2 \ No newline at end of file +20.13.0 \ No newline at end of file diff --git a/package.json b/package.json index 0525a504c..87f8ae094 100644 --- a/package.json +++ b/package.json @@ -128,7 +128,7 @@ "@electron/notarize": "2.3.0", "@testing-library/react": "15.0.6", "@types/jest": "29.5.12", - "@types/node": "20.12.8", + "@types/node": "20.12.11", "@types/nprogress": "0.2.3", "@types/react": "18.3.1", "@types/react-router-dom": "5.3.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a9fd4208c..8f981e9d5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: 29.5.12 version: 29.5.12 '@types/node': - specifier: 20.12.8 - version: 20.12.8 + specifier: 20.12.11 + version: 20.12.11 '@types/nprogress': specifier: 0.2.3 version: 0.2.3 @@ -104,7 +104,7 @@ importers: version: 9.0.11 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)) + version: 29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)) jest-environment-jsdom: specifier: 29.7.0 version: 29.7.0 @@ -128,13 +128,13 @@ importers: version: 4.0.0(webpack@5.91.0(webpack-cli@5.1.4)) tailwindcss: specifier: 3.4.3 - version: 3.4.3(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)) + version: 3.4.3(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)) ts-jest: specifier: 29.1.2 - version: 29.1.2(@babel/core@7.24.3)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)))(typescript@5.4.5) + version: 29.1.2(@babel/core@7.24.3)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)))(typescript@5.4.5) ts-node: specifier: 10.9.2 - version: 10.9.2(@types/node@20.12.8)(typescript@5.4.5) + version: 10.9.2(@types/node@20.12.11)(typescript@5.4.5) webpack: specifier: 5.91.0 version: 5.91.0(webpack-cli@5.1.4) @@ -675,8 +675,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@20.12.8': - resolution: {integrity: sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w==} + '@types/node@20.12.11': + resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==} '@types/nprogress@0.2.3': resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==} @@ -3530,27 +3530,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.8 + '@types/node': 20.12.11 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5))': + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.8 + '@types/node': 20.12.11 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -3575,7 +3575,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.8 + '@types/node': 20.12.11 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -3593,7 +3593,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.12.8 + '@types/node': 20.12.11 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -3615,7 +3615,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.12.8 + '@types/node': 20.12.11 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -3685,7 +3685,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.12.8 + '@types/node': 20.12.11 '@types/yargs': 17.0.32 chalk: 4.1.2 @@ -3824,7 +3824,7 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 20.12.8 + '@types/node': 20.12.11 '@types/responselike': 1.0.3 '@types/debug@4.1.12': @@ -3845,11 +3845,11 @@ snapshots: '@types/fs-extra@9.0.13': dependencies: - '@types/node': 20.12.8 + '@types/node': 20.12.11 '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 20.12.8 + '@types/node': 20.12.11 '@types/history@4.7.11': {} @@ -3872,7 +3872,7 @@ snapshots: '@types/jsdom@20.0.1': dependencies: - '@types/node': 20.12.8 + '@types/node': 20.12.11 '@types/tough-cookie': 4.0.5 parse5: 7.1.2 @@ -3880,11 +3880,11 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 20.12.8 + '@types/node': 20.12.11 '@types/ms@0.7.34': {} - '@types/node@20.12.8': + '@types/node@20.12.11': dependencies: undici-types: 5.26.5 @@ -3892,7 +3892,7 @@ snapshots: '@types/plist@3.0.5': dependencies: - '@types/node': 20.12.8 + '@types/node': 20.12.11 xmlbuilder: 15.1.1 optional: true @@ -3928,7 +3928,7 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 20.12.8 + '@types/node': 20.12.11 '@types/stack-utils@2.0.3': {} @@ -3945,7 +3945,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 20.12.8 + '@types/node': 20.12.11 optional: true '@webassemblyjs/ast@1.12.1': @@ -4522,13 +4522,13 @@ snapshots: buffer: 5.7.1 optional: true - create-jest@29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)): + create-jest@29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -4736,7 +4736,7 @@ snapshots: electron@30.0.2: dependencies: '@electron/get': 2.0.3 - '@types/node': 20.12.8 + '@types/node': 20.12.11 extract-zip: 2.0.1 transitivePeerDependencies: - supports-color @@ -5239,7 +5239,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.8 + '@types/node': 20.12.11 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -5259,16 +5259,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)): + jest-cli@29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)) + create-jest: 29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -5278,7 +5278,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)): + jest-config@29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)): dependencies: '@babel/core': 7.24.3 '@jest/test-sequencer': 29.7.0 @@ -5303,8 +5303,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.12.8 - ts-node: 10.9.2(@types/node@20.12.8)(typescript@5.4.5) + '@types/node': 20.12.11 + ts-node: 10.9.2(@types/node@20.12.11)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -5334,7 +5334,7 @@ snapshots: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 20.12.8 + '@types/node': 20.12.11 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -5348,7 +5348,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.8 + '@types/node': 20.12.11 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -5358,7 +5358,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.12.8 + '@types/node': 20.12.11 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -5397,7 +5397,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.8 + '@types/node': 20.12.11 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -5432,7 +5432,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.8 + '@types/node': 20.12.11 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -5460,7 +5460,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.8 + '@types/node': 20.12.11 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -5506,7 +5506,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.8 + '@types/node': 20.12.11 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -5525,7 +5525,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.8 + '@types/node': 20.12.11 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -5534,23 +5534,23 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 20.12.8 + '@types/node': 20.12.11 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 20.12.8 + '@types/node': 20.12.11 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)): + jest@29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)) + jest-cli: 29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -5895,13 +5895,13 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.38 - postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)): + postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)): dependencies: lilconfig: 3.1.1 yaml: 2.4.1 optionalDependencies: postcss: 8.4.38 - ts-node: 10.9.2(@types/node@20.12.8)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@20.12.11)(typescript@5.4.5) postcss-loader@8.1.1(postcss@8.4.38)(typescript@5.4.5)(webpack@5.91.0(webpack-cli@5.1.4)): dependencies: @@ -6337,7 +6337,7 @@ snapshots: symbol-tree@3.2.4: {} - tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)): + tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -6356,7 +6356,7 @@ snapshots: postcss: 8.4.38 postcss-import: 15.1.0(postcss@8.4.38) postcss-js: 4.0.1(postcss@8.4.38) - postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)) + postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)) postcss-nested: 6.0.1(postcss@8.4.38) postcss-selector-parser: 6.0.16 resolve: 1.22.8 @@ -6451,11 +6451,11 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.1.2(@babel/core@7.24.3)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)))(typescript@5.4.5): + ts-jest@29.1.2(@babel/core@7.24.3)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)))(typescript@5.4.5): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.12.8)(ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5)) + jest: 29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -6478,14 +6478,14 @@ snapshots: typescript: 5.4.5 webpack: 5.91.0(webpack-cli@5.1.4) - ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5): + ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.12.8 + '@types/node': 20.12.11 acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 From a9f79df857dc7b2606c92b88860277faa2e8da9c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 May 2024 09:57:24 -0400 Subject: [PATCH 072/251] chore(deps): update dependency electron to v30.0.3 (#1101) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 87f8ae094..2e7970aa2 100644 --- a/package.json +++ b/package.json @@ -136,7 +136,7 @@ "@types/react-transition-group": "4.4.10", "autoprefixer": "10.4.19", "css-loader": "7.1.1", - "electron": "30.0.2", + "electron": "30.0.3", "electron-builder": "24.13.3", "graphql-tag": "2.12.6", "husky": "9.0.11", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8f981e9d5..101929982 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: '@electron/remote': specifier: 2.1.2 - version: 2.1.2(electron@30.0.2) + version: 2.1.2(electron@30.0.3) '@primer/octicons-react': specifier: 19.9.0 version: 19.9.0(react@18.3.1) @@ -28,7 +28,7 @@ importers: version: 4.20.10 menubar: specifier: 9.4.0 - version: 9.4.0(electron@30.0.2) + version: 9.4.0(electron@30.0.3) nprogress: specifier: 0.2.0 version: 0.2.0 @@ -91,8 +91,8 @@ importers: specifier: 7.1.1 version: 7.1.1(webpack@5.91.0(webpack-cli@5.1.4)) electron: - specifier: 30.0.2 - version: 30.0.2 + specifier: 30.0.3 + version: 30.0.3 electron-builder: specifier: 24.13.3 version: 24.13.3(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3)) @@ -1374,8 +1374,8 @@ packages: electron-updater@6.1.8: resolution: {integrity: sha512-hhOTfaFAd6wRHAfUaBhnAOYc+ymSGCWJLtFkw4xJqOvtpHmIdNHnXDV9m1MHC+A6q08Abx4Ykgyz/R5DGKNAMQ==} - electron@30.0.2: - resolution: {integrity: sha512-zv7T+GG89J/hyWVkQsLH4Y/rVEfqJG5M/wOBIGNaDdqd8UV9/YZPdS7CuFeaIj0H9LhCt95xkIQNpYB/3svOkQ==} + electron@30.0.3: + resolution: {integrity: sha512-h+suwx6e0fnv/9wi0/cmCMtG+4LrPzJZa+3DEEpxcPcP+pcWnBI70t8QspxgMNIh2wzXLMD9XVqrLkEbiBAInw==} engines: {node: '>= 12.20.55'} hasBin: true @@ -3492,9 +3492,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@electron/remote@2.1.2(electron@30.0.2)': + '@electron/remote@2.1.2(electron@30.0.3)': dependencies: - electron: 30.0.2 + electron: 30.0.3 '@electron/universal@1.5.1': dependencies: @@ -4733,7 +4733,7 @@ snapshots: transitivePeerDependencies: - supports-color - electron@30.0.2: + electron@30.0.3: dependencies: '@electron/get': 2.0.3 '@types/node': 20.12.11 @@ -5704,9 +5704,9 @@ snapshots: escape-string-regexp: 4.0.0 optional: true - menubar@9.4.0(electron@30.0.2): + menubar@9.4.0(electron@30.0.3): dependencies: - electron: 30.0.2 + electron: 30.0.3 electron-positioner: 4.1.0 merge-stream@2.0.0: {} From 7e1b999719e2fb8f22d1d4a3fd0b76f483d89b62 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 May 2024 09:57:37 -0400 Subject: [PATCH 073/251] chore(deps): update dependency @testing-library/react to v15.0.7 (#1100) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 2e7970aa2..c2161ccd8 100644 --- a/package.json +++ b/package.json @@ -126,7 +126,7 @@ "devDependencies": { "@biomejs/biome": "1.7.3", "@electron/notarize": "2.3.0", - "@testing-library/react": "15.0.6", + "@testing-library/react": "15.0.7", "@types/jest": "29.5.12", "@types/node": "20.12.11", "@types/nprogress": "0.2.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 101929982..7d3fa2c1e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -61,8 +61,8 @@ importers: specifier: 2.3.0 version: 2.3.0 '@testing-library/react': - specifier: 15.0.6 - version: 15.0.6(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 15.0.7 + version: 15.0.7(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/jest': specifier: 29.5.12 version: 29.5.12 @@ -582,8 +582,8 @@ packages: resolution: {integrity: sha512-PmJPnogldqoVFf+EwbHvbBJ98MmqASV8kLrBYgsDNxQcFMeIS7JFL48sfyXvuMtgmWO/wMhh25odr+8VhDmn4g==} engines: {node: '>=18'} - '@testing-library/react@15.0.6': - resolution: {integrity: sha512-UlbazRtEpQClFOiYp+1BapMT+xyqWMnE+hh9tn5DQ6gmlE7AIZWcGpzZukmDZuFk3By01oiqOf8lRedLS4k6xQ==} + '@testing-library/react@15.0.7': + resolution: {integrity: sha512-cg0RvEdD1TIhhkm1IeYMQxrzy0MtUNfa3minv4MjbgcYzJAZ7yD0i0lwoPOTPr+INtiXFezt2o8xMSnyHhEn2Q==} engines: {node: '>=18'} peerDependencies: '@types/react': ^18.0.0 @@ -3777,7 +3777,7 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/react@15.0.6(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@testing-library/react@15.0.7(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.1 '@testing-library/dom': 10.0.0 From 3b650196e54468b1878790241a0e6f992716e670 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 13:20:23 -1000 Subject: [PATCH 074/251] fix(deps): update dependency react-router-dom to v6.23.1 (#1107) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index c2161ccd8..8109d94ed 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "react": "18.3.1", "react-dom": "18.3.1", "react-final-form": "6.5.9", - "react-router-dom": "6.23.0", + "react-router-dom": "6.23.1", "react-transition-group": "4.4.5", "ts-loader": "9.5.1", "typescript": "5.4.5" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7d3fa2c1e..53a2377f4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -42,8 +42,8 @@ importers: specifier: 6.5.9 version: 6.5.9(final-form@4.20.10)(react@18.3.1) react-router-dom: - specifier: 6.23.0 - version: 6.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 6.23.1 + version: 6.23.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-transition-group: specifier: 4.4.5 version: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -557,8 +557,8 @@ packages: peerDependencies: react: '>=16.3' - '@remix-run/router@1.16.0': - resolution: {integrity: sha512-Quz1KOffeEf/zwkCBM3kBtH4ZoZ+pT3xIXBG4PPW/XFtDP7EGhtTiC2+gpL9GnR7+Qdet5Oa6cYSvwKYg6kN9Q==} + '@remix-run/router@1.16.1': + resolution: {integrity: sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==} engines: {node: '>=14.0.0'} '@sinclair/typebox@0.27.8': @@ -2544,15 +2544,15 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-router-dom@6.23.0: - resolution: {integrity: sha512-Q9YaSYvubwgbal2c9DJKfx6hTNoBp3iJDsl+Duva/DwxoJH+OTXkxGpql4iUK2sla/8z4RpjAm6EWx1qUDuopQ==} + react-router-dom@6.23.1: + resolution: {integrity: sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' - react-router@6.23.0: - resolution: {integrity: sha512-wPMZ8S2TuPadH0sF5irFGjkNLIcRvOSaEe7v+JER8508dyJumm6XZB1u5kztlX0RVq6AzRVndzqcUh6sFIauzA==} + react-router@6.23.1: + resolution: {integrity: sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' @@ -3748,7 +3748,7 @@ snapshots: dependencies: react: 18.3.1 - '@remix-run/router@1.16.0': {} + '@remix-run/router@1.16.1': {} '@sinclair/typebox@0.27.8': {} @@ -6030,16 +6030,16 @@ snapshots: react-is@18.3.1: {} - react-router-dom@6.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-router-dom@6.23.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@remix-run/router': 1.16.0 + '@remix-run/router': 1.16.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router: 6.23.0(react@18.3.1) + react-router: 6.23.1(react@18.3.1) - react-router@6.23.0(react@18.3.1): + react-router@6.23.1(react@18.3.1): dependencies: - '@remix-run/router': 1.16.0 + '@remix-run/router': 1.16.1 react: 18.3.1 react-shallow-renderer@16.15.0(react@18.3.1): From e6a188582191b49ce177a5414acf9dd552498341 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 13:20:32 -1000 Subject: [PATCH 075/251] chore(deps): update dependency rimraf to v5.0.6 (#1106) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 8109d94ed..1e4441652 100644 --- a/package.json +++ b/package.json @@ -146,7 +146,7 @@ "postcss": "8.4.38", "postcss-loader": "8.1.1", "react-test-renderer": "18.3.1", - "rimraf": "5.0.5", + "rimraf": "5.0.6", "style-loader": "4.0.0", "tailwindcss": "3.4.3", "ts-jest": "29.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 53a2377f4..6dbb90c3a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -121,8 +121,8 @@ importers: specifier: 18.3.1 version: 18.3.1(react@18.3.1) rimraf: - specifier: 5.0.5 - version: 5.0.5 + specifier: 5.0.6 + version: 5.0.6 style-loader: specifier: 4.0.0 version: 4.0.0(webpack@5.91.0(webpack-cli@5.1.4)) @@ -2646,8 +2646,8 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@5.0.5: - resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==} + rimraf@5.0.6: + resolution: {integrity: sha512-X72SgyOf+1lFnGM6gYcmZ4+jMOwuT4E4SajKQzUIlI7EoR5eFHMhS/wf8Ll0mN+w2bxcIVldrJQ6xT7HFQywjg==} engines: {node: '>=14'} hasBin: true @@ -6141,7 +6141,7 @@ snapshots: reusify@1.0.4: {} - rimraf@5.0.5: + rimraf@5.0.6: dependencies: glob: 10.3.10 From 1dcfcd0bf6cbf374df56b982ba9c1c4e92425126 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 13:20:49 -1000 Subject: [PATCH 076/251] chore(deps): update dependency node to v20.13.1 (#1105) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index f03c4db80..297d47ba0 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20.13.0 \ No newline at end of file +20.13.1 \ No newline at end of file From a013411f282b8ecaf49f88a7e610710c8f08192e Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Sat, 11 May 2024 18:17:08 -0400 Subject: [PATCH 077/251] docs: update issue template --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 55ce5b450..56c7895c1 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -38,6 +38,7 @@ body: label: Gitify Version description: What version of Gitify are you using? options: + - 5.5.0 - 5.4.0 - 5.3.0 - 5.2.0 From 01b99a39a4567909b2cc601fcd72e0b16d5e419e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 12 May 2024 05:50:18 -1000 Subject: [PATCH 078/251] chore(deps): update dependency @types/react to v18.3.2 (#1109) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 26 +++++++++++++------------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 1e4441652..530e82055 100644 --- a/package.json +++ b/package.json @@ -130,7 +130,7 @@ "@types/jest": "29.5.12", "@types/node": "20.12.11", "@types/nprogress": "0.2.3", - "@types/react": "18.3.1", + "@types/react": "18.3.2", "@types/react-router-dom": "5.3.3", "@types/react-test-renderer": "18.3.0", "@types/react-transition-group": "4.4.10", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6dbb90c3a..a1c0d8d86 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -62,7 +62,7 @@ importers: version: 2.3.0 '@testing-library/react': specifier: 15.0.7 - version: 15.0.7(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 15.0.7(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/jest': specifier: 29.5.12 version: 29.5.12 @@ -73,8 +73,8 @@ importers: specifier: 0.2.3 version: 0.2.3 '@types/react': - specifier: 18.3.1 - version: 18.3.1 + specifier: 18.3.2 + version: 18.3.2 '@types/react-router-dom': specifier: 5.3.3 version: 5.3.3 @@ -702,8 +702,8 @@ packages: '@types/react-transition-group@4.4.10': resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==} - '@types/react@18.3.1': - resolution: {integrity: sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==} + '@types/react@18.3.2': + resolution: {integrity: sha512-Btgg89dAnqD4vV7R3hlwOxgqobUQKgx3MmrQRi0yYbs/P0ym8XozIAlkqVilPqHQwXs4e9Tf63rrCgl58BcO4w==} '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} @@ -3777,7 +3777,7 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/react@15.0.7(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@testing-library/react@15.0.7(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.1 '@testing-library/dom': 10.0.0 @@ -3785,7 +3785,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.2 '@tootallnate/once@2.0.0': {} @@ -3900,28 +3900,28 @@ snapshots: '@types/react-dom@18.2.22': dependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.2 '@types/react-router-dom@5.3.3': dependencies: '@types/history': 4.7.11 - '@types/react': 18.3.1 + '@types/react': 18.3.2 '@types/react-router': 5.1.20 '@types/react-router@5.1.20': dependencies: '@types/history': 4.7.11 - '@types/react': 18.3.1 + '@types/react': 18.3.2 '@types/react-test-renderer@18.3.0': dependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.2 '@types/react-transition-group@4.4.10': dependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.2 - '@types/react@18.3.1': + '@types/react@18.3.2': dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 From 97189226e4914e473f105c59c7c2b1fd4c65a564 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 12 May 2024 14:45:25 -1000 Subject: [PATCH 079/251] chore(deps): update dependency rimraf to v5.0.7 (#1110) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 530e82055..a8025f75b 100644 --- a/package.json +++ b/package.json @@ -146,7 +146,7 @@ "postcss": "8.4.38", "postcss-loader": "8.1.1", "react-test-renderer": "18.3.1", - "rimraf": "5.0.6", + "rimraf": "5.0.7", "style-loader": "4.0.0", "tailwindcss": "3.4.3", "ts-jest": "29.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a1c0d8d86..462476dfc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -121,8 +121,8 @@ importers: specifier: 18.3.1 version: 18.3.1(react@18.3.1) rimraf: - specifier: 5.0.6 - version: 5.0.6 + specifier: 5.0.7 + version: 5.0.7 style-loader: specifier: 4.0.0 version: 4.0.0(webpack@5.91.0(webpack-cli@5.1.4)) @@ -2646,9 +2646,9 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@5.0.6: - resolution: {integrity: sha512-X72SgyOf+1lFnGM6gYcmZ4+jMOwuT4E4SajKQzUIlI7EoR5eFHMhS/wf8Ll0mN+w2bxcIVldrJQ6xT7HFQywjg==} - engines: {node: '>=14'} + rimraf@5.0.7: + resolution: {integrity: sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==} + engines: {node: '>=14.18'} hasBin: true roarr@2.15.4: @@ -6141,7 +6141,7 @@ snapshots: reusify@1.0.4: {} - rimraf@5.0.6: + rimraf@5.0.7: dependencies: glob: 10.3.10 From cd08d43fd83c8a6061744df95347b956e09a1877 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 12 May 2024 16:24:15 -1000 Subject: [PATCH 080/251] chore(deps): update pnpm to v9.1.1 (#1111) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a8025f75b..b695b6d5c 100644 --- a/package.json +++ b/package.json @@ -155,7 +155,7 @@ "webpack-cli": "5.1.4", "webpack-merge": "5.10.0" }, - "packageManager": "pnpm@9.1.0", + "packageManager": "pnpm@9.1.1", "lint-staged": { "*.{html,js,json,md,ts,tsx}": "biome format --write" } From b6c9ae1e92fccb38cb62973cc11f2f72f2605899 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Mon, 13 May 2024 06:36:14 -1000 Subject: [PATCH 081/251] feat: add comment count icon (#1108) --- src/__mocks__/mockedData.ts | 1 + src/components/NotificationRow.test.tsx | 398 +++++---- src/components/NotificationRow.tsx | 15 + .../NotificationRow.test.tsx.snap | 783 ++++++++++++++++++ src/typesGitHub.ts | 2 + src/utils/api/graphql/discussions.ts | 1 + src/utils/subject.test.ts | 8 + src/utils/subject.ts | 3 + 8 files changed, 1040 insertions(+), 171 deletions(-) diff --git a/src/__mocks__/mockedData.ts b/src/__mocks__/mockedData.ts index f035be230..776a07873 100644 --- a/src/__mocks__/mockedData.ts +++ b/src/__mocks__/mockedData.ts @@ -419,6 +419,7 @@ export const mockDiscussionComments: DiscussionComments = { }, }, ], + totalCount: 2, }; export const mockedGraphQLResponse: GraphQLSearch = { diff --git a/src/components/NotificationRow.test.tsx b/src/components/NotificationRow.test.tsx index 3703b110e..8daa2e44d 100644 --- a/src/components/NotificationRow.test.tsx +++ b/src/components/NotificationRow.test.tsx @@ -51,183 +51,239 @@ describe('components/NotificationRow.tsx', () => { expect(tree).toMatchSnapshot(); }); - it('should open a notification in the browser - click', () => { - const removeNotificationFromState = jest.fn(); - - const props = { - notification: mockedSingleNotification, - hostname: 'github.com', - }; - - render( - - - , - ); - - fireEvent.click(screen.getByRole('main')); - expect(helpers.openInBrowser).toHaveBeenCalledTimes(1); - expect(removeNotificationFromState).toHaveBeenCalledTimes(1); - }); - - it('should open a notification in the browser - key down', () => { - const removeNotificationFromState = jest.fn(); - - const props = { - notification: mockedSingleNotification, - hostname: 'github.com', - }; - - render( - - - , - ); - - fireEvent.keyDown(screen.getByRole('main')); - expect(helpers.openInBrowser).toHaveBeenCalledTimes(1); - expect(removeNotificationFromState).toHaveBeenCalledTimes(1); + describe('rendering for notification comments count', () => { + it('should render when no comments', async () => { + jest + .spyOn(global.Date, 'now') + .mockImplementation(() => new Date('2024').valueOf()); + + const mockNotification = mockedSingleNotification; + mockNotification.subject.comments = null; + + const props = { + notification: mockNotification, + hostname: 'github.com', + }; + + const tree = TestRenderer.create(); + expect(tree).toMatchSnapshot(); + }); + + it('should render when 1 comment', async () => { + jest + .spyOn(global.Date, 'now') + .mockImplementation(() => new Date('2024').valueOf()); + + const mockNotification = mockedSingleNotification; + mockNotification.subject.comments = 1; + + const props = { + notification: mockNotification, + hostname: 'github.com', + }; + + const tree = TestRenderer.create(); + expect(tree).toMatchSnapshot(); + }); + + it('should render when more than 1 comments', async () => { + jest + .spyOn(global.Date, 'now') + .mockImplementation(() => new Date('2024').valueOf()); + + const mockNotification = mockedSingleNotification; + mockNotification.subject.comments = 2; + + const props = { + notification: mockNotification, + hostname: 'github.com', + }; + + const tree = TestRenderer.create(); + expect(tree).toMatchSnapshot(); + }); }); - it('should open a notification in browser & mark it as done', () => { - const markNotificationDone = jest.fn(); - - const props = { - notification: mockedSingleNotification, - hostname: 'github.com', - }; - - render( - - - , - ); - - fireEvent.click(screen.getByRole('main')); - expect(helpers.openInBrowser).toHaveBeenCalledTimes(1); - expect(markNotificationDone).toHaveBeenCalledTimes(1); - }); - - it('should mark a notification as read', () => { - const markNotificationRead = jest.fn(); - - const props = { - notification: mockedSingleNotification, - hostname: 'github.com', - }; - - render( - - + describe('notification interactions', () => { + it('should open a notification in the browser - click', () => { + const removeNotificationFromState = jest.fn(); + + const props = { + notification: mockedSingleNotification, + hostname: 'github.com', + }; + + render( + - - , - ); - - fireEvent.click(screen.getByTitle('Mark as Read')); - expect(markNotificationRead).toHaveBeenCalledTimes(1); - }); - - it('should mark a notification as done', () => { - const markNotificationDone = jest.fn(); - - const props = { - notification: mockedSingleNotification, - hostname: 'github.com', - }; - - render( - - + , + ); + + fireEvent.click(screen.getByRole('main')); + expect(helpers.openInBrowser).toHaveBeenCalledTimes(1); + expect(removeNotificationFromState).toHaveBeenCalledTimes(1); + }); + + it('should open a notification in the browser - key down', () => { + const removeNotificationFromState = jest.fn(); + + const props = { + notification: mockedSingleNotification, + hostname: 'github.com', + }; + + render( + - - , - ); - - fireEvent.click(screen.getByTitle('Mark as Done')); - expect(markNotificationDone).toHaveBeenCalledTimes(1); - }); - - it('should unsubscribe from a notification thread', () => { - const unsubscribeNotification = jest.fn(); - - const props = { - notification: mockedSingleNotification, - hostname: 'github.com', - }; - - render( - - + , + ); + + fireEvent.keyDown(screen.getByRole('main')); + expect(helpers.openInBrowser).toHaveBeenCalledTimes(1); + expect(removeNotificationFromState).toHaveBeenCalledTimes(1); + }); + + it('should open a notification in browser & mark it as done', () => { + const markNotificationDone = jest.fn(); + + const props = { + notification: mockedSingleNotification, + hostname: 'github.com', + }; + + render( + - - , - ); - fireEvent.click(screen.getByTitle('Unsubscribe from Thread')); - expect(unsubscribeNotification).toHaveBeenCalledTimes(1); - }); - - it('should open notification user profile', () => { - const props = { - notification: { - ...mockedSingleNotification, - subject: { - ...mockedSingleNotification.subject, - user: { - login: 'some-user', - html_url: 'https://github.com/some-user', - avatar_url: 'https://avatars.githubusercontent.com/u/123456789?v=4', - type: 'User' as UserType, + , + ); + + fireEvent.click(screen.getByRole('main')); + expect(helpers.openInBrowser).toHaveBeenCalledTimes(1); + expect(markNotificationDone).toHaveBeenCalledTimes(1); + }); + + it('should mark a notification as read', () => { + const markNotificationRead = jest.fn(); + + const props = { + notification: mockedSingleNotification, + hostname: 'github.com', + }; + + render( + + + + + , + ); + + fireEvent.click(screen.getByTitle('Mark as Read')); + expect(markNotificationRead).toHaveBeenCalledTimes(1); + }); + + it('should mark a notification as done', () => { + const markNotificationDone = jest.fn(); + + const props = { + notification: mockedSingleNotification, + hostname: 'github.com', + }; + + render( + + + + + , + ); + + fireEvent.click(screen.getByTitle('Mark as Done')); + expect(markNotificationDone).toHaveBeenCalledTimes(1); + }); + + it('should unsubscribe from a notification thread', () => { + const unsubscribeNotification = jest.fn(); + + const props = { + notification: mockedSingleNotification, + hostname: 'github.com', + }; + + render( + + + + + , + ); + fireEvent.click(screen.getByTitle('Unsubscribe from Thread')); + expect(unsubscribeNotification).toHaveBeenCalledTimes(1); + }); + + it('should open notification user profile', () => { + const props = { + notification: { + ...mockedSingleNotification, + subject: { + ...mockedSingleNotification.subject, + user: { + login: 'some-user', + html_url: 'https://github.com/some-user', + avatar_url: + 'https://avatars.githubusercontent.com/u/123456789?v=4', + type: 'User' as UserType, + }, + reviews: null, }, - reviews: null, }, - }, - hostname: 'github.com', - }; - - render( - - - , - ); - - fireEvent.click(screen.getByTitle('View User Profile')); - expect(shell.openExternal).toHaveBeenCalledTimes(1); - expect(shell.openExternal).toHaveBeenCalledWith( - props.notification.subject.user.html_url, - ); + hostname: 'github.com', + }; + + render( + + + , + ); + + fireEvent.click(screen.getByTitle('View User Profile')); + expect(shell.openExternal).toHaveBeenCalledTimes(1); + expect(shell.openExternal).toHaveBeenCalledWith( + props.notification.subject.user.html_url, + ); + }); }); }); diff --git a/src/components/NotificationRow.tsx b/src/components/NotificationRow.tsx index bae5af4bc..848f48666 100644 --- a/src/components/NotificationRow.tsx +++ b/src/components/NotificationRow.tsx @@ -1,6 +1,7 @@ import { BellSlashIcon, CheckIcon, + CommentIcon, FeedPersonIcon, ReadIcon, } from '@primer/octicons-react'; @@ -14,6 +15,7 @@ import { } from 'react'; import { AppContext } from '../context/App'; +import { IconColor } from '../types'; import type { Notification } from '../typesGitHub'; import { openExternalLink } from '../utils/comms'; import { formatForDisplay, openInBrowser } from '../utils/helpers'; @@ -83,6 +85,10 @@ export const NotificationRow: FC = ({ notification, hostname }) => { notification.subject.type, ]); + const commentsLabel = `${notification.subject.comments} ${ + notification.subject.comments > 1 ? 'comments' : 'comment' + }`; + return (
= ({ notification, hostname }) => { ); }) : null} + {notification.subject?.comments > 0 && ( + + + + )}
diff --git a/src/components/__snapshots__/NotificationRow.test.tsx.snap b/src/components/__snapshots__/NotificationRow.test.tsx.snap index 2dd1b9f71..cc5d79ecd 100644 --- a/src/components/__snapshots__/NotificationRow.test.tsx.snap +++ b/src/components/__snapshots__/NotificationRow.test.tsx.snap @@ -1,5 +1,788 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`components/NotificationRow.tsx rendering for notification comments count should render when 1 comment 1`] = ` +
+
+ + + + +
+
+
+ I am a robot and this is a test! +
+
+ + + + + + + Updated + + + over 6 years ago + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+
+`; + +exports[`components/NotificationRow.tsx rendering for notification comments count should render when more than 1 comments 1`] = ` +
+
+ + + + +
+
+
+ I am a robot and this is a test! +
+
+ + + + + + + Updated + + + over 6 years ago + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+
+`; + +exports[`components/NotificationRow.tsx rendering for notification comments count should render when no comments 1`] = ` +
+
+ + + + +
+
+
+ I am a robot and this is a test! +
+
+ + + + + + + Updated + + + over 6 years ago + + + + + + + + + + + + + +
+
+
+ + + +
+
+`; + exports[`components/NotificationRow.tsx should render itself & its children 1`] = `
{ avatar_url: mockDiscussionAuthor.avatar_url, type: mockDiscussionAuthor.type, }, + comments: 0, }); }); @@ -284,6 +285,7 @@ describe('utils/subject.ts', () => { avatar_url: mockDiscussionAuthor.avatar_url, type: mockDiscussionAuthor.type, }, + comments: 0, }); }); @@ -311,6 +313,7 @@ describe('utils/subject.ts', () => { avatar_url: mockDiscussionAuthor.avatar_url, type: mockDiscussionAuthor.type, }, + comments: 0, }); }); @@ -338,6 +341,7 @@ describe('utils/subject.ts', () => { avatar_url: mockDiscussionAuthor.avatar_url, type: mockDiscussionAuthor.type, }, + comments: 0, }); }); @@ -365,6 +369,7 @@ describe('utils/subject.ts', () => { avatar_url: mockDiscussionAuthor.avatar_url, type: mockDiscussionAuthor.type, }, + comments: 0, }); }); @@ -392,6 +397,7 @@ describe('utils/subject.ts', () => { avatar_url: mockDiscussionAuthor.avatar_url, type: mockDiscussionAuthor.type, }, + comments: 0, }); }); @@ -422,6 +428,7 @@ describe('utils/subject.ts', () => { avatar_url: mockDiscussionAuthor.avatar_url, type: mockDiscussionAuthor.type, }, + comments: 0, }); }); }); @@ -1189,6 +1196,7 @@ function mockDiscussionNode( author: mockDiscussionAuthor, comments: { nodes: [], + totalCount: 0, }, }; } diff --git a/src/utils/subject.ts b/src/utils/subject.ts index 3a94b9574..391cfe2c7 100644 --- a/src/utils/subject.ts +++ b/src/utils/subject.ts @@ -180,6 +180,7 @@ async function getGitifySubjectForDiscussion( return { state: discussionState, user: discussionUser, + comments: discussion.comments.totalCount, }; } @@ -209,6 +210,7 @@ async function getGitifySubjectForIssue( avatar_url: issueCommentUser?.avatar_url ?? issue.user.avatar_url, type: issueCommentUser?.type ?? issue.user.type, }, + comments: issue.comments, }; } @@ -251,6 +253,7 @@ async function getGitifySubjectForPullRequest( type: prCommentUser?.type ?? pr.user.type, }, reviews: reviews, + comments: pr.comments, }; } From b40e1ace01a4d73a31a94f35007b30a27d8e335b Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Mon, 13 May 2024 06:38:22 -1000 Subject: [PATCH 082/251] feat: use `last_read_at` timestamp when available (#1103) --- src/components/NotificationRow.test.tsx | 17 ++ src/components/NotificationRow.tsx | 11 +- .../NotificationRow.test.tsx.snap | 232 ++++++++++++++++++ src/utils/helpers.ts | 11 + 4 files changed, 266 insertions(+), 5 deletions(-) diff --git a/src/components/NotificationRow.test.tsx b/src/components/NotificationRow.test.tsx index 8daa2e44d..4677f92d5 100644 --- a/src/components/NotificationRow.test.tsx +++ b/src/components/NotificationRow.test.tsx @@ -34,6 +34,23 @@ describe('components/NotificationRow.tsx', () => { expect(tree).toMatchSnapshot(); }); + it('should render itself & its children when last_read_at is null', async () => { + jest + .spyOn(global.Date, 'now') + .mockImplementation(() => new Date('2024').valueOf()); + + const mockNotification = mockedSingleNotification; + mockNotification.last_read_at = null; + + const props = { + notification: mockNotification, + hostname: 'github.com', + }; + + const tree = TestRenderer.create(); + expect(tree).toMatchSnapshot(); + }); + it('should render itself & its children without avatar', async () => { jest .spyOn(global.Date, 'now') diff --git a/src/components/NotificationRow.tsx b/src/components/NotificationRow.tsx index 848f48666..8ea831e1c 100644 --- a/src/components/NotificationRow.tsx +++ b/src/components/NotificationRow.tsx @@ -5,7 +5,6 @@ import { FeedPersonIcon, ReadIcon, } from '@primer/octicons-react'; -import { formatDistanceToNow, parseISO } from 'date-fns'; import { type FC, type KeyboardEvent, @@ -18,7 +17,11 @@ import { AppContext } from '../context/App'; import { IconColor } from '../types'; import type { Notification } from '../typesGitHub'; import { openExternalLink } from '../utils/comms'; -import { formatForDisplay, openInBrowser } from '../utils/helpers'; +import { + formatForDisplay, + formatNotificationUpdatedAt, + openInBrowser, +} from '../utils/helpers'; import { getNotificationTypeIcon, getNotificationTypeIconColor, @@ -73,9 +76,7 @@ export const NotificationRow: FC = ({ notification, hostname }) => { const NotificationIcon = getNotificationTypeIcon(notification.subject); const iconColor = getNotificationTypeIconColor(notification.subject); - const updatedAt = formatDistanceToNow(parseISO(notification.updated_at), { - addSuffix: true, - }); + const updatedAt = formatNotificationUpdatedAt(notification); const updatedLabel = notification.subject.user ? `${notification.subject.user.login} updated ${updatedAt}` : `Updated ${updatedAt}`; diff --git a/src/components/__snapshots__/NotificationRow.test.tsx.snap b/src/components/__snapshots__/NotificationRow.test.tsx.snap index cc5d79ecd..02855d65b 100644 --- a/src/components/__snapshots__/NotificationRow.test.tsx.snap +++ b/src/components/__snapshots__/NotificationRow.test.tsx.snap @@ -1015,6 +1015,238 @@ exports[`components/NotificationRow.tsx should render itself & its children 1`]
`; +exports[`components/NotificationRow.tsx should render itself & its children when last_read_at is null 1`] = ` +
+
+ + + + +
+
+
+ I am a robot and this is a test! +
+
+ + + + gitify-app's avatar + + + Updated + + + over 6 years ago + + + + + + + + + + + + + +
+
+
+ + + +
+
+`; + exports[`components/NotificationRow.tsx should render itself & its children without avatar 1`] = `
Date: Tue, 14 May 2024 01:06:30 -1000 Subject: [PATCH 083/251] fix(discussions): simplify search syntax and avoid over filtering for edge cases (#1104) --- src/__mocks__/mockedData.ts | 15 ------- src/hooks/useNotifications.test.ts | 1 - src/typesGitHub.ts | 3 -- src/utils/api/client.ts | 27 ++++++++++--- src/utils/api/graphql/discussions.ts | 1 - src/utils/api/graphql/utils.test.ts | 11 ++++++ src/utils/api/graphql/utils.ts | 6 +++ src/utils/api/utils.test.ts | 32 +-------------- src/utils/api/utils.ts | 12 ------ src/utils/helpers.ts | 58 +++++----------------------- src/utils/subject.test.ts | 46 +++------------------- src/utils/subject.ts | 21 +++++++++- 12 files changed, 74 insertions(+), 159 deletions(-) create mode 100644 src/utils/api/graphql/utils.test.ts create mode 100644 src/utils/api/graphql/utils.ts diff --git a/src/__mocks__/mockedData.ts b/src/__mocks__/mockedData.ts index 776a07873..085fa8e1a 100644 --- a/src/__mocks__/mockedData.ts +++ b/src/__mocks__/mockedData.ts @@ -427,7 +427,6 @@ export const mockedGraphQLResponse: GraphQLSearch = { search: { nodes: [ { - viewerSubscription: 'SUBSCRIBED', title: '1.16.0', isAnswered: false, stateReason: 'OPEN', @@ -440,20 +439,6 @@ export const mockedGraphQLResponse: GraphQLSearch = { }, comments: mockDiscussionComments, }, - { - viewerSubscription: 'IGNORED', - title: '1.16.0', - isAnswered: false, - stateReason: 'ANSWERED', - url: 'https://github.com/gitify-app/notifications-test/discussions/123', - author: { - login: 'discussion-creator', - url: 'https://github.com/discussion-creator', - avatar_url: 'https://avatars.githubusercontent.com/u/123456789?v=4', - type: 'User', - }, - comments: mockDiscussionComments, - }, ], }, }, diff --git a/src/hooks/useNotifications.test.ts b/src/hooks/useNotifications.test.ts index 053cf0cdf..11b96b296 100644 --- a/src/hooks/useNotifications.test.ts +++ b/src/hooks/useNotifications.test.ts @@ -319,7 +319,6 @@ describe('hooks/useNotifications.ts', () => { nodes: [ { title: 'This is a Discussion.', - viewerSubscription: 'SUBSCRIBED', stateReason: null, isAnswered: true, url: 'https://github.com/gitify-app/notifications-test/discussions/612', diff --git a/src/typesGitHub.ts b/src/typesGitHub.ts index cb099bffd..b9889cef7 100644 --- a/src/typesGitHub.ts +++ b/src/typesGitHub.ts @@ -59,8 +59,6 @@ export type StateType = | IssueStateReasonType | PullRequestStateType; -export type ViewerSubscription = 'IGNORED' | 'SUBSCRIBED' | 'UNSUBSCRIBED'; - export type CheckSuiteStatus = | 'action_required' | 'cancelled' @@ -451,7 +449,6 @@ export interface GraphQLSearch { } export interface Discussion { - viewerSubscription: ViewerSubscription; title: string; stateReason: DiscussionStateType; isAnswered: boolean; diff --git a/src/utils/api/client.ts b/src/utils/api/client.ts index 3401851dc..e1bd63db2 100644 --- a/src/utils/api/client.ts +++ b/src/utils/api/client.ts @@ -20,7 +20,8 @@ import { apiRequestAuth } from './request'; import { print } from 'graphql/language/printer'; import Constants from '../constants'; import { QUERY_SEARCH_DISCUSSIONS } from './graphql/discussions'; -import { formatSearchQueryString, getGitHubAPIBaseUrl } from './utils'; +import { formatAsGitHubSearchSyntax } from './graphql/utils'; +import { getGitHubAPIBaseUrl } from './utils'; /** * Get Hypermedia links to resources accessible in GitHub's REST API @@ -239,7 +240,7 @@ export async function getHtmlUrl(url: string, token: string): Promise { /** * Search for Discussions that match notification title and repository. * - * Returns first 10 matching discussions and their latest comments / replies + * Returns the latest discussion and their latest comments / replies * */ export async function searchDiscussions( @@ -249,14 +250,30 @@ export async function searchDiscussions( return apiRequestAuth(Constants.GITHUB_API_GRAPHQL_URL, 'POST', token, { query: print(QUERY_SEARCH_DISCUSSIONS), variables: { - queryStatement: formatSearchQueryString( + queryStatement: formatAsGitHubSearchSyntax( notification.repository.full_name, notification.subject.title, - notification.updated_at, ), - firstDiscussions: 10, + firstDiscussions: 1, lastComments: 1, lastReplies: 1, }, }); } + +/** + * Return the latest discussion that matches the notification title and repository. + */ +export async function getLatestDiscussion( + notification: Notification, + token: string, +): Promise { + try { + const response = await searchDiscussions(notification, token); + return ( + response.data?.data.search.nodes.filter( + (discussion) => discussion.title === notification.subject.title, + )[0] ?? null + ); + } catch (err) {} +} diff --git a/src/utils/api/graphql/discussions.ts b/src/utils/api/graphql/discussions.ts index 405337ae5..7472f10a0 100644 --- a/src/utils/api/graphql/discussions.ts +++ b/src/utils/api/graphql/discussions.ts @@ -31,7 +31,6 @@ export const QUERY_SEARCH_DISCUSSIONS = gql` search(query:$queryStatement, type: DISCUSSION, first: $firstDiscussions) { nodes { ... on Discussion { - viewerSubscription title stateReason isAnswered diff --git a/src/utils/api/graphql/utils.test.ts b/src/utils/api/graphql/utils.test.ts new file mode 100644 index 000000000..5d1439888 --- /dev/null +++ b/src/utils/api/graphql/utils.test.ts @@ -0,0 +1,11 @@ +import { formatAsGitHubSearchSyntax } from './utils'; + +describe('utils/api/graphql/utils.ts', () => { + describe('formatAsGitHubCodeSearchSyntax', () => { + test('formats search query string correctly', () => { + const result = formatAsGitHubSearchSyntax('exampleRepo', 'exampleTitle'); + + expect(result).toBe('exampleTitle in:title repo:exampleRepo'); + }); + }); +}); diff --git a/src/utils/api/graphql/utils.ts b/src/utils/api/graphql/utils.ts new file mode 100644 index 000000000..6cc36a0d7 --- /dev/null +++ b/src/utils/api/graphql/utils.ts @@ -0,0 +1,6 @@ +export function formatAsGitHubSearchSyntax( + repo: string, + title: string, +): string { + return `${title} in:title repo:${repo}`; +} diff --git a/src/utils/api/utils.test.ts b/src/utils/api/utils.test.ts index 54af2e1ea..551b3caf6 100644 --- a/src/utils/api/utils.test.ts +++ b/src/utils/api/utils.test.ts @@ -1,8 +1,4 @@ -import { - addHours, - formatSearchQueryString, - getGitHubAPIBaseUrl, -} from './utils'; +import { getGitHubAPIBaseUrl } from './utils'; describe('utils/api/utils.ts', () => { describe('generateGitHubAPIUrl', () => { @@ -16,30 +12,4 @@ describe('utils/api/utils.ts', () => { expect(result.toString()).toBe('https://github.manos.im/api/v3/'); }); }); - - describe('formatSearchQueryString', () => { - test('formats search query string correctly', () => { - const result = formatSearchQueryString( - 'exampleRepo', - 'exampleTitle', - '2024-02-20T12:00:00.000Z', - ); - - expect(result).toBe( - 'exampleTitle in:title repo:exampleRepo updated:>2024-02-20T10:00:00.000Z', - ); - }); - }); - - describe('addHours', () => { - test('adds hours correctly for positive values', () => { - const result = addHours('2024-02-20T12:00:00.000Z', 3); - expect(result).toBe('2024-02-20T15:00:00.000Z'); - }); - - test('adds hours correctly for negative values', () => { - const result = addHours('2024-02-20T12:00:00.000Z', -2); - expect(result).toBe('2024-02-20T10:00:00.000Z'); - }); - }); }); diff --git a/src/utils/api/utils.ts b/src/utils/api/utils.ts index 954704b07..3b35b300e 100644 --- a/src/utils/api/utils.ts +++ b/src/utils/api/utils.ts @@ -10,15 +10,3 @@ export function getGitHubAPIBaseUrl(hostname: string): URL { } return url; } - -export function formatSearchQueryString( - repo: string, - title: string, - lastUpdated: string, -): string { - return `${title} in:title repo:${repo} updated:>${addHours(lastUpdated, -2)}`; -} - -export function addHours(date: string, hours: number): string { - return new Date(new Date(date).getTime() + hours * 36e5).toISOString(); -} diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 535f17725..7a8a1ee57 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -1,14 +1,14 @@ import { formatDistanceToNow, parseISO } from 'date-fns'; import type { AuthState } from '../types'; -import type { - Discussion, - DiscussionComment, - Notification, -} from '../typesGitHub'; +import type { Notification } from '../typesGitHub'; import { openExternalLink } from '../utils/comms'; -import { getHtmlUrl, searchDiscussions } from './api/client'; +import { getHtmlUrl, getLatestDiscussion } from './api/client'; import { Constants } from './constants'; -import { getCheckSuiteAttributes, getWorkflowRunAttributes } from './subject'; +import { + getCheckSuiteAttributes, + getLatestDiscussionComment, + getWorkflowRunAttributes, +} from './subject'; export function isGitHubLoggedIn(accounts: AuthState): boolean { return accounts.token != null; @@ -95,14 +95,12 @@ async function getDiscussionUrl( const url = new URL(notification.repository.html_url); url.pathname += '/discussions'; - const discussion = await fetchDiscussion(notification, token); + const discussion = await getLatestDiscussion(notification, token); if (discussion) { url.href = discussion.url; - const comments = discussion.comments.nodes; - - const latestComment = getLatestDiscussionComment(comments); + const latestComment = getLatestDiscussionComment(discussion.comments.nodes); if (latestComment) { url.hash = `#discussioncomment-${latestComment.databaseId}`; @@ -112,44 +110,6 @@ async function getDiscussionUrl( return url.toString(); } -export async function fetchDiscussion( - notification: Notification, - token: string, -): Promise { - try { - const response = await searchDiscussions(notification, token); - - let discussions = - response.data?.data.search.nodes.filter( - (discussion) => discussion.title === notification.subject.title, - ) || []; - - if (discussions.length > 1) { - discussions = discussions.filter( - (discussion) => discussion.viewerSubscription === 'SUBSCRIBED', - ); - } - - return discussions[0]; - } catch (err) {} -} - -export function getLatestDiscussionComment( - comments: DiscussionComment[], -): DiscussionComment | null { - if (!comments || comments.length === 0) { - return null; - } - - // Return latest reply if available - if (comments[0].replies.nodes.length === 1) { - return comments[0].replies.nodes[0]; - } - - // Return latest comment if no replies - return comments[0]; -} - export async function generateGitHubWebUrl( notification: Notification, accounts: AuthState, diff --git a/src/utils/subject.test.ts b/src/utils/subject.test.ts index db1729ece..758f13919 100644 --- a/src/utils/subject.test.ts +++ b/src/utils/subject.test.ts @@ -12,7 +12,6 @@ import type { DiscussionStateType, Notification, Repository, - ViewerSubscription, } from '../typesGitHub'; import { getCheckSuiteAttributes, @@ -239,7 +238,7 @@ describe('utils/subject.ts', () => { .reply(200, { data: { search: { - nodes: [mockDiscussionNode('SUBSCRIBED', null, true)], + nodes: [mockDiscussionNode(null, true)], }, }, }); @@ -267,7 +266,7 @@ describe('utils/subject.ts', () => { .reply(200, { data: { search: { - nodes: [mockDiscussionNode('SUBSCRIBED', 'DUPLICATE', false)], + nodes: [mockDiscussionNode('DUPLICATE', false)], }, }, }); @@ -295,7 +294,7 @@ describe('utils/subject.ts', () => { .reply(200, { data: { search: { - nodes: [mockDiscussionNode('SUBSCRIBED', null, false)], + nodes: [mockDiscussionNode(null, false)], }, }, }); @@ -323,7 +322,7 @@ describe('utils/subject.ts', () => { .reply(200, { data: { search: { - nodes: [mockDiscussionNode('SUBSCRIBED', 'OUTDATED', false)], + nodes: [mockDiscussionNode('OUTDATED', false)], }, }, }); @@ -351,7 +350,7 @@ describe('utils/subject.ts', () => { .reply(200, { data: { search: { - nodes: [mockDiscussionNode('SUBSCRIBED', 'REOPENED', false)], + nodes: [mockDiscussionNode('REOPENED', false)], }, }, }); @@ -379,7 +378,7 @@ describe('utils/subject.ts', () => { .reply(200, { data: { search: { - nodes: [mockDiscussionNode('SUBSCRIBED', 'RESOLVED', true)], + nodes: [mockDiscussionNode('RESOLVED', true)], }, }, }); @@ -400,37 +399,6 @@ describe('utils/subject.ts', () => { comments: 0, }); }); - - it('filtered response by subscribed', async () => { - nock('https://api.github.com') - .post('/graphql') - .reply(200, { - data: { - search: { - nodes: [ - mockDiscussionNode('SUBSCRIBED', null, false), - mockDiscussionNode('IGNORED', null, true), - ], - }, - }, - }); - - const result = await getGitifySubjectDetails( - mockNotification, - mockAccounts.token, - ); - - expect(result).toEqual({ - state: 'OPEN', - user: { - login: mockDiscussionAuthor.login, - html_url: mockDiscussionAuthor.url, - avatar_url: mockDiscussionAuthor.avatar_url, - type: mockDiscussionAuthor.type, - }, - comments: 0, - }); - }); }); describe('Issues', () => { @@ -1183,14 +1151,12 @@ describe('utils/subject.ts', () => { }); function mockDiscussionNode( - subscription: ViewerSubscription, state: DiscussionStateType, isAnswered: boolean, ): Discussion { return { title: 'This is a mocked discussion', url: 'https://github.com/gitify-app/notifications-test/discussions/1', - viewerSubscription: subscription, stateReason: state, isAnswered: isAnswered, author: mockDiscussionAuthor, diff --git a/src/utils/subject.ts b/src/utils/subject.ts index 391cfe2c7..d899e7eac 100644 --- a/src/utils/subject.ts +++ b/src/utils/subject.ts @@ -1,6 +1,7 @@ import type { CheckSuiteAttributes, CheckSuiteStatus, + DiscussionComment, DiscussionStateType, GitifyPullRequestReview, GitifySubject, @@ -16,11 +17,11 @@ import { getCommitComment, getIssue, getIssueOrPullRequestComment, + getLatestDiscussion, getPullRequest, getPullRequestReviews, getRelease, } from './api/client'; -import { fetchDiscussion, getLatestDiscussionComment } from './helpers'; export async function getGitifySubjectDetails( notification: Notification, @@ -145,7 +146,7 @@ async function getGitifySubjectForDiscussion( notification: Notification, token: string, ): Promise { - const discussion = await fetchDiscussion(notification, token); + const discussion = await getLatestDiscussion(notification, token); let discussionState: DiscussionStateType = 'OPEN'; if (discussion) { @@ -184,6 +185,22 @@ async function getGitifySubjectForDiscussion( }; } +export function getLatestDiscussionComment( + comments: DiscussionComment[], +): DiscussionComment | null { + if (!comments || comments.length === 0) { + return null; + } + + // Return latest reply if available + if (comments[0].replies.nodes.length === 1) { + return comments[0].replies.nodes[0]; + } + + // Return latest comment if no replies + return comments[0]; +} + async function getGitifySubjectForIssue( notification: Notification, token: string, From 2e95afa6519b66ff6c71bc83794af9f21a1a90b9 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Tue, 14 May 2024 01:08:04 -1000 Subject: [PATCH 084/251] refactor: main script (#1098) --- main.js | 92 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 45 insertions(+), 47 deletions(-) diff --git a/main.js b/main.js index 1cb8e2cfc..99bb36006 100644 --- a/main.js +++ b/main.js @@ -1,4 +1,4 @@ -const { ipcMain, app, nativeTheme } = require('electron'); +const { ipcMain: ipc, app, nativeTheme } = require('electron'); const { menubar } = require('menubar'); const { autoUpdater } = require('electron-updater'); const { onFirstRunMaybe } = require('./first-run'); @@ -6,8 +6,6 @@ const path = require('node:path'); require('@electron/remote/main').initialize(); -app.setAppUserModelId('com.electron.gitify'); - const iconIdle = path.join( __dirname, 'assets', @@ -34,7 +32,7 @@ app.on('ready', async () => { await onFirstRunMaybe(); }); -const menubarApp = menubar({ +const mb = menubar({ icon: iconIdle, index: `file://${__dirname}/index.html`, browserWindow: browserWindowOpts, @@ -42,69 +40,69 @@ const menubarApp = menubar({ showDockIcon: false, }); -menubarApp.on('ready', () => { +mb.on('ready', () => { + mb.app.setAppUserModelId('com.electron.gitify'); + mb.tray.setIgnoreDoubleClickEvents(true); // Force the window to retrieve its previous zoom factor - menubarApp.window.webContents.setZoomFactor( - menubarApp.window.webContents.getZoomFactor(), - ); + mb.window.webContents.setZoomFactor(mb.window.webContents.getZoomFactor()); + + mb.window.webContents.on('devtools-opened', () => { + mb.window.setSize(800, 600); + mb.window.center(); + mb.window.resizable = true; + }); - menubarApp.tray.setIgnoreDoubleClickEvents(true); + mb.window.webContents.on('devtools-closed', () => { + const trayBounds = mb.tray.getBounds(); + mb.window.setSize(browserWindowOpts.width, browserWindowOpts.height); + mb.positioner.move('trayCenter', trayBounds); + mb.window.resizable = false; + }); + + mb.window.webContents.on('before-input-event', (event, input) => { + if (input.key === 'Escape') { + mb.window.hide(); + event.preventDefault(); + } + }); autoUpdater.checkForUpdatesAndNotify(); nativeTheme.on('updated', () => { if (nativeTheme.shouldUseDarkColors) { - menubarApp.window.webContents.send('update-native-theme', 'DARK'); + mb.window.webContents.send('update-native-theme', 'DARK'); } else { - menubarApp.window.webContents.send('update-native-theme', 'LIGHT'); + mb.window.webContents.send('update-native-theme', 'LIGHT'); } }); - ipcMain.handle('get-platform', () => process.platform); - ipcMain.handle('get-app-version', () => app.getVersion()); + ipc.handle('get-platform', () => process.platform); + + ipc.handle('get-app-version', () => app.getVersion()); + + ipc.on('reopen-window', () => mb.showWindow()); + + ipc.on('hide-window', () => mb.hideWindow()); - ipcMain.on('reopen-window', () => menubarApp.showWindow()); - ipcMain.on('hide-window', () => menubarApp.hideWindow()); + ipc.on('app-quit', () => mb.app.quit()); - ipcMain.on('app-quit', () => menubarApp.app.quit()); - ipcMain.on('update-icon', (_, arg) => { - if (!menubarApp.tray.isDestroyed()) { + ipc.on('update-icon', (_, arg) => { + if (!mb.tray.isDestroyed()) { if (arg === 'TrayActive') { - menubarApp.tray.setImage(iconActive); + mb.tray.setImage(iconActive); } else { - menubarApp.tray.setImage(iconIdle); + mb.tray.setImage(iconIdle); } } }); - ipcMain.on('update-title', (_, title) => { - if (!menubarApp.tray.isDestroyed()) { - menubarApp.tray.setTitle(title); - } - }); - ipcMain.on('set-login-item-settings', (event, settings) => { - app.setLoginItemSettings(settings); - }); - - menubarApp.window.webContents.on('devtools-opened', () => { - menubarApp.window.setSize(800, 600); - menubarApp.window.center(); - menubarApp.window.resizable = true; - }); - menubarApp.window.webContents.on('devtools-closed', () => { - const trayBounds = menubarApp.tray.getBounds(); - menubarApp.window.setSize( - browserWindowOpts.width, - browserWindowOpts.height, - ); - menubarApp.positioner.move('trayCenter', trayBounds); - menubarApp.window.resizable = false; + ipc.on('update-title', (_, title) => { + if (!mb.tray.isDestroyed()) { + mb.tray.setTitle(title); + } }); - menubarApp.window.webContents.on('before-input-event', (event, input) => { - if (input.key === 'Escape') { - menubarApp.window.hide(); - event.preventDefault(); - } + ipc.on('set-login-item-settings', (_, settings) => { + app.setLoginItemSettings(settings); }); }); From 7a083abe1a4fe8f3a99c02adba74d6a3adf136a0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 May 2024 10:24:38 -0400 Subject: [PATCH 085/251] chore(deps): update dependency electron to v30.0.4 (#1114) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index b695b6d5c..f9202a95d 100644 --- a/package.json +++ b/package.json @@ -136,7 +136,7 @@ "@types/react-transition-group": "4.4.10", "autoprefixer": "10.4.19", "css-loader": "7.1.1", - "electron": "30.0.3", + "electron": "30.0.4", "electron-builder": "24.13.3", "graphql-tag": "2.12.6", "husky": "9.0.11", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 462476dfc..a758cd7a7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: '@electron/remote': specifier: 2.1.2 - version: 2.1.2(electron@30.0.3) + version: 2.1.2(electron@30.0.4) '@primer/octicons-react': specifier: 19.9.0 version: 19.9.0(react@18.3.1) @@ -28,7 +28,7 @@ importers: version: 4.20.10 menubar: specifier: 9.4.0 - version: 9.4.0(electron@30.0.3) + version: 9.4.0(electron@30.0.4) nprogress: specifier: 0.2.0 version: 0.2.0 @@ -91,8 +91,8 @@ importers: specifier: 7.1.1 version: 7.1.1(webpack@5.91.0(webpack-cli@5.1.4)) electron: - specifier: 30.0.3 - version: 30.0.3 + specifier: 30.0.4 + version: 30.0.4 electron-builder: specifier: 24.13.3 version: 24.13.3(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3)) @@ -1374,8 +1374,8 @@ packages: electron-updater@6.1.8: resolution: {integrity: sha512-hhOTfaFAd6wRHAfUaBhnAOYc+ymSGCWJLtFkw4xJqOvtpHmIdNHnXDV9m1MHC+A6q08Abx4Ykgyz/R5DGKNAMQ==} - electron@30.0.3: - resolution: {integrity: sha512-h+suwx6e0fnv/9wi0/cmCMtG+4LrPzJZa+3DEEpxcPcP+pcWnBI70t8QspxgMNIh2wzXLMD9XVqrLkEbiBAInw==} + electron@30.0.4: + resolution: {integrity: sha512-z8tGQeiVM6CHj0t8PKWVhAB4FZTRNN0vSrd1jA4edX1aOjBztddk4d0Gyw91pQb4arIVf2RGPu0hYbHG2+vDcA==} engines: {node: '>= 12.20.55'} hasBin: true @@ -3492,9 +3492,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@electron/remote@2.1.2(electron@30.0.3)': + '@electron/remote@2.1.2(electron@30.0.4)': dependencies: - electron: 30.0.3 + electron: 30.0.4 '@electron/universal@1.5.1': dependencies: @@ -4733,7 +4733,7 @@ snapshots: transitivePeerDependencies: - supports-color - electron@30.0.3: + electron@30.0.4: dependencies: '@electron/get': 2.0.3 '@types/node': 20.12.11 @@ -5704,9 +5704,9 @@ snapshots: escape-string-regexp: 4.0.0 optional: true - menubar@9.4.0(electron@30.0.3): + menubar@9.4.0(electron@30.0.4): dependencies: - electron: 30.0.3 + electron: 30.0.4 electron-positioner: 4.1.0 merge-stream@2.0.0: {} From 8b222b5824471e19f5dac777e6d6aa3e357a1278 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 May 2024 10:32:17 -0400 Subject: [PATCH 086/251] chore(deps): update dependency @types/node to v20.12.12 (#1113) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 114 ++++++++++++++++++++++++------------------------- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/package.json b/package.json index f9202a95d..95ede2721 100644 --- a/package.json +++ b/package.json @@ -128,7 +128,7 @@ "@electron/notarize": "2.3.0", "@testing-library/react": "15.0.7", "@types/jest": "29.5.12", - "@types/node": "20.12.11", + "@types/node": "20.12.12", "@types/nprogress": "0.2.3", "@types/react": "18.3.2", "@types/react-router-dom": "5.3.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a758cd7a7..c85fe9c6c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: 29.5.12 version: 29.5.12 '@types/node': - specifier: 20.12.11 - version: 20.12.11 + specifier: 20.12.12 + version: 20.12.12 '@types/nprogress': specifier: 0.2.3 version: 0.2.3 @@ -104,7 +104,7 @@ importers: version: 9.0.11 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)) + version: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)) jest-environment-jsdom: specifier: 29.7.0 version: 29.7.0 @@ -128,13 +128,13 @@ importers: version: 4.0.0(webpack@5.91.0(webpack-cli@5.1.4)) tailwindcss: specifier: 3.4.3 - version: 3.4.3(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)) + version: 3.4.3(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)) ts-jest: specifier: 29.1.2 - version: 29.1.2(@babel/core@7.24.3)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)))(typescript@5.4.5) + version: 29.1.2(@babel/core@7.24.3)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)))(typescript@5.4.5) ts-node: specifier: 10.9.2 - version: 10.9.2(@types/node@20.12.11)(typescript@5.4.5) + version: 10.9.2(@types/node@20.12.12)(typescript@5.4.5) webpack: specifier: 5.91.0 version: 5.91.0(webpack-cli@5.1.4) @@ -675,8 +675,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@20.12.11': - resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==} + '@types/node@20.12.12': + resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} '@types/nprogress@0.2.3': resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==} @@ -3530,27 +3530,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.11 + '@types/node': 20.12.12 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5))': + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.11 + '@types/node': 20.12.12 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -3575,7 +3575,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.11 + '@types/node': 20.12.12 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -3593,7 +3593,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.12.11 + '@types/node': 20.12.12 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -3615,7 +3615,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.12.11 + '@types/node': 20.12.12 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -3685,7 +3685,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.12.11 + '@types/node': 20.12.12 '@types/yargs': 17.0.32 chalk: 4.1.2 @@ -3824,7 +3824,7 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 20.12.11 + '@types/node': 20.12.12 '@types/responselike': 1.0.3 '@types/debug@4.1.12': @@ -3845,11 +3845,11 @@ snapshots: '@types/fs-extra@9.0.13': dependencies: - '@types/node': 20.12.11 + '@types/node': 20.12.12 '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 20.12.11 + '@types/node': 20.12.12 '@types/history@4.7.11': {} @@ -3872,7 +3872,7 @@ snapshots: '@types/jsdom@20.0.1': dependencies: - '@types/node': 20.12.11 + '@types/node': 20.12.12 '@types/tough-cookie': 4.0.5 parse5: 7.1.2 @@ -3880,11 +3880,11 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 20.12.11 + '@types/node': 20.12.12 '@types/ms@0.7.34': {} - '@types/node@20.12.11': + '@types/node@20.12.12': dependencies: undici-types: 5.26.5 @@ -3892,7 +3892,7 @@ snapshots: '@types/plist@3.0.5': dependencies: - '@types/node': 20.12.11 + '@types/node': 20.12.12 xmlbuilder: 15.1.1 optional: true @@ -3928,7 +3928,7 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 20.12.11 + '@types/node': 20.12.12 '@types/stack-utils@2.0.3': {} @@ -3945,7 +3945,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 20.12.11 + '@types/node': 20.12.12 optional: true '@webassemblyjs/ast@1.12.1': @@ -4522,13 +4522,13 @@ snapshots: buffer: 5.7.1 optional: true - create-jest@29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)): + create-jest@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -4736,7 +4736,7 @@ snapshots: electron@30.0.4: dependencies: '@electron/get': 2.0.3 - '@types/node': 20.12.11 + '@types/node': 20.12.12 extract-zip: 2.0.1 transitivePeerDependencies: - supports-color @@ -5239,7 +5239,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.11 + '@types/node': 20.12.12 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -5259,16 +5259,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)): + jest-cli@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)) + create-jest: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -5278,7 +5278,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)): + jest-config@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)): dependencies: '@babel/core': 7.24.3 '@jest/test-sequencer': 29.7.0 @@ -5303,8 +5303,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.12.11 - ts-node: 10.9.2(@types/node@20.12.11)(typescript@5.4.5) + '@types/node': 20.12.12 + ts-node: 10.9.2(@types/node@20.12.12)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -5334,7 +5334,7 @@ snapshots: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 20.12.11 + '@types/node': 20.12.12 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -5348,7 +5348,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.11 + '@types/node': 20.12.12 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -5358,7 +5358,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.12.11 + '@types/node': 20.12.12 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -5397,7 +5397,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.11 + '@types/node': 20.12.12 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -5432,7 +5432,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.11 + '@types/node': 20.12.12 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -5460,7 +5460,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.11 + '@types/node': 20.12.12 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -5506,7 +5506,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.11 + '@types/node': 20.12.12 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -5525,7 +5525,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.11 + '@types/node': 20.12.12 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -5534,23 +5534,23 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 20.12.11 + '@types/node': 20.12.12 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 20.12.11 + '@types/node': 20.12.12 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)): + jest@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)) + jest-cli: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -5895,13 +5895,13 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.38 - postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)): + postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)): dependencies: lilconfig: 3.1.1 yaml: 2.4.1 optionalDependencies: postcss: 8.4.38 - ts-node: 10.9.2(@types/node@20.12.11)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@20.12.12)(typescript@5.4.5) postcss-loader@8.1.1(postcss@8.4.38)(typescript@5.4.5)(webpack@5.91.0(webpack-cli@5.1.4)): dependencies: @@ -6337,7 +6337,7 @@ snapshots: symbol-tree@3.2.4: {} - tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)): + tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -6356,7 +6356,7 @@ snapshots: postcss: 8.4.38 postcss-import: 15.1.0(postcss@8.4.38) postcss-js: 4.0.1(postcss@8.4.38) - postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)) + postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)) postcss-nested: 6.0.1(postcss@8.4.38) postcss-selector-parser: 6.0.16 resolve: 1.22.8 @@ -6451,11 +6451,11 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.1.2(@babel/core@7.24.3)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)))(typescript@5.4.5): + ts-jest@29.1.2(@babel/core@7.24.3)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)))(typescript@5.4.5): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.12.11)(ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5)) + jest: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -6478,14 +6478,14 @@ snapshots: typescript: 5.4.5 webpack: 5.91.0(webpack-cli@5.1.4) - ts-node@10.9.2(@types/node@20.12.11)(typescript@5.4.5): + ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.12.11 + '@types/node': 20.12.12 acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 From 1b09d9f69c36cc56c9adfe1eb94e85e9c02e11d8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 May 2024 00:29:08 -1000 Subject: [PATCH 087/251] chore(deps): update dependency @electron/notarize to v2.3.2 (#1115) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 95ede2721..038815508 100644 --- a/package.json +++ b/package.json @@ -125,7 +125,7 @@ }, "devDependencies": { "@biomejs/biome": "1.7.3", - "@electron/notarize": "2.3.0", + "@electron/notarize": "2.3.2", "@testing-library/react": "15.0.7", "@types/jest": "29.5.12", "@types/node": "20.12.12", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c85fe9c6c..53407e58c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -58,8 +58,8 @@ importers: specifier: 1.7.3 version: 1.7.3 '@electron/notarize': - specifier: 2.3.0 - version: 2.3.0 + specifier: 2.3.2 + version: 2.3.2 '@testing-library/react': specifier: 15.0.7 version: 15.0.7(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -407,8 +407,8 @@ packages: resolution: {integrity: sha512-aL+bFMIkpR0cmmj5Zgy0LMKEpgy43/hw5zadEArgmAMWWlKc5buwFvFT9G/o/YJkvXAJm5q3iuTuLaiaXW39sg==} engines: {node: '>= 10.0.0'} - '@electron/notarize@2.3.0': - resolution: {integrity: sha512-EiTBU0BwE7HZZjAG1fFWQaiQpCuPrVGn7jPss1kUjD6eTTdXXd29RiZqEqkgN7xqt/Pgn4g3I7Saqovanrfj3w==} + '@electron/notarize@2.3.2': + resolution: {integrity: sha512-zfayxCe19euNwRycCty1C7lF7snk9YwfRpB5M8GLr1a4ICH63znxaPNAubrMvj0yDvVozqfgsdYpXVUnpWBDpg==} engines: {node: '>= 10.0.0'} '@electron/osx-sign@1.0.5': @@ -3473,7 +3473,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@electron/notarize@2.3.0': + '@electron/notarize@2.3.2': dependencies: debug: 4.3.4 fs-extra: 9.1.0 From 7b0317aa67a9700b29ec8c9d8cbd415988af1069 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Wed, 15 May 2024 11:55:01 -0400 Subject: [PATCH 088/251] docs: readme link labels --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 3163015a5..3c21ef485 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,8 @@ Please visit our [Gitify FAQs][faqs] for all commonly asked questions. Gitify is licensed under the MIT Open Source license. For more information, see [LICENSE](LICENSE). + + [website]: https://www.gitify.io [faqs]: https://www.gitify.io/faqs [github]: https://github.com/gitify-app/gitify From e96fca2f2dd2ecdc65eeccc7c55772d8b3f26841 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 May 2024 23:30:11 -1000 Subject: [PATCH 089/251] chore(deps): update dependency electron to v30.0.6 (#1116) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 038815508..14a329a42 100644 --- a/package.json +++ b/package.json @@ -136,7 +136,7 @@ "@types/react-transition-group": "4.4.10", "autoprefixer": "10.4.19", "css-loader": "7.1.1", - "electron": "30.0.4", + "electron": "30.0.6", "electron-builder": "24.13.3", "graphql-tag": "2.12.6", "husky": "9.0.11", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 53407e58c..ff914ab34 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: '@electron/remote': specifier: 2.1.2 - version: 2.1.2(electron@30.0.4) + version: 2.1.2(electron@30.0.6) '@primer/octicons-react': specifier: 19.9.0 version: 19.9.0(react@18.3.1) @@ -28,7 +28,7 @@ importers: version: 4.20.10 menubar: specifier: 9.4.0 - version: 9.4.0(electron@30.0.4) + version: 9.4.0(electron@30.0.6) nprogress: specifier: 0.2.0 version: 0.2.0 @@ -91,8 +91,8 @@ importers: specifier: 7.1.1 version: 7.1.1(webpack@5.91.0(webpack-cli@5.1.4)) electron: - specifier: 30.0.4 - version: 30.0.4 + specifier: 30.0.6 + version: 30.0.6 electron-builder: specifier: 24.13.3 version: 24.13.3(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3)) @@ -1374,8 +1374,8 @@ packages: electron-updater@6.1.8: resolution: {integrity: sha512-hhOTfaFAd6wRHAfUaBhnAOYc+ymSGCWJLtFkw4xJqOvtpHmIdNHnXDV9m1MHC+A6q08Abx4Ykgyz/R5DGKNAMQ==} - electron@30.0.4: - resolution: {integrity: sha512-z8tGQeiVM6CHj0t8PKWVhAB4FZTRNN0vSrd1jA4edX1aOjBztddk4d0Gyw91pQb4arIVf2RGPu0hYbHG2+vDcA==} + electron@30.0.6: + resolution: {integrity: sha512-PkhEPFdpYcTzjAO3gMHZ+map7g2+xCrMDedo/L1i0ir2BRXvAB93IkTJX497U6Srb/09r2cFt+k20VPNVCdw3Q==} engines: {node: '>= 12.20.55'} hasBin: true @@ -3492,9 +3492,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@electron/remote@2.1.2(electron@30.0.4)': + '@electron/remote@2.1.2(electron@30.0.6)': dependencies: - electron: 30.0.4 + electron: 30.0.6 '@electron/universal@1.5.1': dependencies: @@ -4733,7 +4733,7 @@ snapshots: transitivePeerDependencies: - supports-color - electron@30.0.4: + electron@30.0.6: dependencies: '@electron/get': 2.0.3 '@types/node': 20.12.12 @@ -5704,9 +5704,9 @@ snapshots: escape-string-regexp: 4.0.0 optional: true - menubar@9.4.0(electron@30.0.4): + menubar@9.4.0(electron@30.0.6): dependencies: - electron: 30.0.4 + electron: 30.0.6 electron-positioner: 4.1.0 merge-stream@2.0.0: {} From 95d931a4a9d3bd62a00aa4a502580fbffea46dbb Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 17 May 2024 22:19:08 -1000 Subject: [PATCH 090/251] feat: support discussions for github server (#1118) * feat: support discussions for github server * update tests --- src/utils/api/client.ts | 6 +++--- src/utils/api/utils.test.ts | 20 ++++++++++++++++---- src/utils/api/utils.ts | 11 +++++++++++ 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/utils/api/client.ts b/src/utils/api/client.ts index e1bd63db2..75fcd7ddb 100644 --- a/src/utils/api/client.ts +++ b/src/utils/api/client.ts @@ -18,10 +18,9 @@ import type { import { apiRequestAuth } from './request'; import { print } from 'graphql/language/printer'; -import Constants from '../constants'; import { QUERY_SEARCH_DISCUSSIONS } from './graphql/discussions'; import { formatAsGitHubSearchSyntax } from './graphql/utils'; -import { getGitHubAPIBaseUrl } from './utils'; +import { getGitHubAPIBaseUrl, getGitHubGraphQLUrl } from './utils'; /** * Get Hypermedia links to resources accessible in GitHub's REST API @@ -247,7 +246,8 @@ export async function searchDiscussions( notification: Notification, token: string, ): AxiosPromise> { - return apiRequestAuth(Constants.GITHUB_API_GRAPHQL_URL, 'POST', token, { + const url = getGitHubGraphQLUrl(notification.hostname); + return apiRequestAuth(url.toString(), 'POST', token, { query: print(QUERY_SEARCH_DISCUSSIONS), variables: { queryStatement: formatAsGitHubSearchSyntax( diff --git a/src/utils/api/utils.test.ts b/src/utils/api/utils.test.ts index 551b3caf6..8c05e4acd 100644 --- a/src/utils/api/utils.test.ts +++ b/src/utils/api/utils.test.ts @@ -1,15 +1,27 @@ -import { getGitHubAPIBaseUrl } from './utils'; +import { getGitHubAPIBaseUrl, getGitHubGraphQLUrl } from './utils'; describe('utils/api/utils.ts', () => { - describe('generateGitHubAPIUrl', () => { + describe('getGitHubAPIBaseUrl', () => { it('should generate a GitHub API url - non enterprise', () => { const result = getGitHubAPIBaseUrl('github.com'); expect(result.toString()).toBe('https://api.github.com/'); }); it('should generate a GitHub API url - enterprise', () => { - const result = getGitHubAPIBaseUrl('github.manos.im'); - expect(result.toString()).toBe('https://github.manos.im/api/v3/'); + const result = getGitHubAPIBaseUrl('github.gitify.io'); + expect(result.toString()).toBe('https://github.gitify.io/api/v3/'); + }); + }); + + describe('getGitHubGraphQLUrl', () => { + it('should generate a GitHub GraphQL url - non enterprise', () => { + const result = getGitHubGraphQLUrl('github.com'); + expect(result.toString()).toBe('https://api.github.com/graphql'); + }); + + it('should generate a GitHub GraphQL url - enterprise', () => { + const result = getGitHubGraphQLUrl('github.gitify.io'); + expect(result.toString()).toBe('https://github.gitify.io/api/graphql'); }); }); }); diff --git a/src/utils/api/utils.ts b/src/utils/api/utils.ts index 3b35b300e..f217ef6d9 100644 --- a/src/utils/api/utils.ts +++ b/src/utils/api/utils.ts @@ -10,3 +10,14 @@ export function getGitHubAPIBaseUrl(hostname: string): URL { } return url; } + +export function getGitHubGraphQLUrl(hostname: string): URL { + const url = new URL(Constants.GITHUB_API_GRAPHQL_URL); + + if (isEnterpriseHost(hostname)) { + url.hostname = hostname; + url.pathname = '/api/graphql'; + } + + return url; +} From 49249fe1a218b3cbb131c68602374f2dd3559404 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 17 May 2024 22:19:37 -1000 Subject: [PATCH 091/251] feat(auth): add `create oauth app` link to enterprise route (#1119) * feat(auth): add `create oauth app` link to enterprise route * feat(auth): add `create oauth app` link to enterprise route * feat(auth): add `create oauth app` link to enterprise route * feat(auth): add `create oauth app` link to enterprise route --- src/routes/LoginEnterprise.test.tsx | 37 +++++++++++++++++++ src/routes/LoginEnterprise.tsx | 27 +++++++++++++- .../LoginEnterprise.test.tsx.snap | 27 ++++++++++++++ src/utils/auth.test.ts | 19 ++++++++++ src/utils/auth.ts | 22 +++++++++++ 5 files changed, 131 insertions(+), 1 deletion(-) diff --git a/src/routes/LoginEnterprise.test.tsx b/src/routes/LoginEnterprise.test.tsx index fbacb1dda..2936fe77e 100644 --- a/src/routes/LoginEnterprise.test.tsx +++ b/src/routes/LoginEnterprise.test.tsx @@ -2,6 +2,7 @@ import { fireEvent, render, screen } from '@testing-library/react'; import { MemoryRouter } from 'react-router-dom'; import * as TestRenderer from 'react-test-renderer'; const { ipcRenderer } = require('electron'); +import { shell } from 'electron'; import { mockedEnterpriseAccounts } from '../__mocks__/mockedData'; import { AppContext } from '../context/App'; import type { AuthState } from '../types'; @@ -14,6 +15,8 @@ jest.mock('react-router-dom', () => ({ })); describe('routes/LoginEnterprise.tsx', () => { + const openExternalMock = jest.spyOn(shell, 'openExternal'); + const mockAccounts: AuthState = { enterpriseAccounts: [], user: null, @@ -75,6 +78,40 @@ describe('routes/LoginEnterprise.tsx', () => { expect(validate(values).clientSecret).toBe('Invalid client secret.'); }); + describe("'Create new OAuth App' button", () => { + it('should be disabled if no hostname configured', async () => { + render( + + + + + , + ); + + fireEvent.click(screen.getByText('Create new OAuth App')); + + expect(openExternalMock).toHaveBeenCalledTimes(0); + }); + + it('should open in browser if hostname configured', async () => { + render( + + + + + , + ); + + fireEvent.change(screen.getByLabelText('Hostname'), { + target: { value: 'company.github.com' }, + }); + + fireEvent.click(screen.getByText('Create new OAuth App')); + + expect(openExternalMock).toHaveBeenCalledTimes(1); + }); + }); + it('should receive a logged-in enterprise account', () => { const { rerender } = render( diff --git a/src/routes/LoginEnterprise.tsx b/src/routes/LoginEnterprise.tsx index c025ba327..b38d77f22 100644 --- a/src/routes/LoginEnterprise.tsx +++ b/src/routes/LoginEnterprise.tsx @@ -9,6 +9,8 @@ import { useNavigate } from 'react-router-dom'; import { FieldInput } from '../components/fields/FieldInput'; import { AppContext } from '../context/App'; import type { AuthOptions } from '../types'; +import { getNewOAuthAppURL } from '../utils/auth'; +import { openExternalLink } from '../utils/comms'; interface IValues { hostname?: string; @@ -65,8 +67,15 @@ export const LoginEnterpriseRoute: FC = () => { } }, [enterpriseAccounts]); + const openLink = useCallback((url: string) => { + openExternalLink(url); + }, []); + const renderForm = (formProps: FormRenderProps) => { - const { handleSubmit, submitting, pristine } = formProps; + const { handleSubmit, submitting, pristine, values } = formProps; + + const buttonClasses = + 'rounded bg-gray-300 font-semibold rounded text-sm text-center hover:bg-gray-500 hover:text-white dark:text-black focus:outline-none cursor-pointer'; return (
@@ -74,6 +83,22 @@ export const LoginEnterpriseRoute: FC = () => { name="hostname" label="Hostname" placeholder="github.company.com" + helpText={ +
+
+ {' '} + then{' '} + generate a new client secret. +
+
+ } /> diff --git a/src/routes/__snapshots__/LoginEnterprise.test.tsx.snap b/src/routes/__snapshots__/LoginEnterprise.test.tsx.snap index 0efd39df5..50381c371 100644 --- a/src/routes/__snapshots__/LoginEnterprise.test.tsx.snap +++ b/src/routes/__snapshots__/LoginEnterprise.test.tsx.snap @@ -69,6 +69,33 @@ exports[`routes/LoginEnterprise.tsx renders correctly 1`] = ` type="text" value="" /> +
+
+
+ + + then + + + generate a new client secret + + . +
+
+
{ describe('authGitHub', () => { @@ -130,4 +131,22 @@ describe('utils/auth.tsx', () => { }); }); }); + + describe('getNewOAuthAppURL', () => { + it('should generate new oauth app url - github cloud', () => { + expect( + getNewOAuthAppURL('github.com').startsWith( + 'https://github.com/settings/applications/new', + ), + ).toBeTruthy(); + }); + + it('should generate new oauth app url - github server', () => { + expect( + getNewOAuthAppURL('github.gitify.io').startsWith( + 'https://github.gitify.io/settings/applications/new', + ), + ).toBeTruthy(); + }); + }); }); diff --git a/src/utils/auth.ts b/src/utils/auth.ts index 222e1900d..4d27fea27 100644 --- a/src/utils/auth.ts +++ b/src/utils/auth.ts @@ -1,5 +1,6 @@ import { BrowserWindow } from '@electron/remote'; +import { format } from 'date-fns'; import type { AuthResponse, AuthState, @@ -136,3 +137,24 @@ export const addAccount = ( ], }; }; + +export function getNewOAuthAppURL(hostname: string): string { + const date = format(new Date(), 'PP p'); + const newOAuthAppURL = new URL( + `https://${hostname}/settings/applications/new`, + ); + newOAuthAppURL.searchParams.append( + 'oauth_application[name]', + `Gitify (Created on ${date})`, + ); + newOAuthAppURL.searchParams.append( + 'oauth_application[url]', + 'https://www.gitify.io', + ); + newOAuthAppURL.searchParams.append( + 'oauth_application[callback_url]', + 'https://www.gitify.io/callback', + ); + + return newOAuthAppURL.toString(); +} From be905964a130ce4e21ecaa98172ce25ab7a7fcc4 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 17 May 2024 22:19:49 -1000 Subject: [PATCH 092/251] feat(auth): disable `generate a pat` if no hostname (#1120) --- src/routes/LoginWithToken.test.tsx | 40 ++++++++++++++----- src/routes/LoginWithToken.tsx | 1 + .../LoginWithToken.test.tsx.snap | 1 + 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/src/routes/LoginWithToken.test.tsx b/src/routes/LoginWithToken.test.tsx index cb50d13db..3c8067721 100644 --- a/src/routes/LoginWithToken.test.tsx +++ b/src/routes/LoginWithToken.test.tsx @@ -72,18 +72,38 @@ describe('routes/LoginWithToken.tsx', () => { expect(validate(values).token).toBe('Invalid token.'); }); - it("should click on the 'Generate a PAT' link and open the browser", async () => { - render( - - - - - , - ); + describe("'Generate a PAT' button", () => { + it('should be disabled if no hostname configured', async () => { + render( + + + + + , + ); - fireEvent.click(screen.getByText('Generate a PAT')); + fireEvent.change(screen.getByLabelText('Hostname'), { + target: { value: '' }, + }); + + fireEvent.click(screen.getByText('Generate a PAT')); + + expect(openExternalMock).toHaveBeenCalledTimes(0); + }); - expect(openExternalMock).toHaveBeenCalledTimes(1); + it('should open in browser if hostname configured', async () => { + render( + + + + + , + ); + + fireEvent.click(screen.getByText('Generate a PAT')); + + expect(openExternalMock).toHaveBeenCalledTimes(1); + }); }); it('should login using a token - success', async () => { diff --git a/src/routes/LoginWithToken.tsx b/src/routes/LoginWithToken.tsx index d249190ad..bd4c4969b 100644 --- a/src/routes/LoginWithToken.tsx +++ b/src/routes/LoginWithToken.tsx @@ -70,6 +70,7 @@ export const LoginWithToken: FC = () => { +
+
+ +
+
+ +
+
); }; diff --git a/src/routes/LoginWithToken.test.tsx b/src/routes/LoginWithToken.test.tsx index 3c8067721..eb969083f 100644 --- a/src/routes/LoginWithToken.test.tsx +++ b/src/routes/LoginWithToken.test.tsx @@ -124,7 +124,7 @@ describe('routes/LoginWithToken.tsx', () => { target: { value: 'github.com' }, }); - fireEvent.submit(screen.getByTitle('Submit Button')); + fireEvent.submit(screen.getByTitle('Login')); await waitFor(() => expect(mockValidateToken).toHaveBeenCalledTimes(1)); @@ -150,7 +150,7 @@ describe('routes/LoginWithToken.tsx', () => { fireEvent.change(screen.getByLabelText('Hostname'), { target: { value: 'github.com' }, }); - fireEvent.submit(screen.getByTitle('Submit Button')); + fireEvent.submit(screen.getByTitle('Login')); }); await waitFor(() => expect(mockValidateToken).toHaveBeenCalledTimes(1)); @@ -173,9 +173,23 @@ describe('routes/LoginWithToken.tsx', () => { target: { value: '123' }, }); - fireEvent.submit(screen.getByTitle('Submit Button')); + fireEvent.submit(screen.getByTitle('Login')); expect(screen.getByText('Invalid hostname.')).toBeDefined(); expect(screen.getByText('Invalid token.')).toBeDefined(); }); + + it('should open help docs in the browser', async () => { + render( + + + + + , + ); + + fireEvent.click(screen.getByLabelText('GitHub Docs')); + + expect(openExternalMock).toHaveBeenCalledTimes(1); + }); }); diff --git a/src/routes/LoginWithToken.tsx b/src/routes/LoginWithToken.tsx index bd4c4969b..f7d567f21 100644 --- a/src/routes/LoginWithToken.tsx +++ b/src/routes/LoginWithToken.tsx @@ -1,4 +1,4 @@ -import { ArrowLeftIcon } from '@primer/octicons-react'; +import { ArrowLeftIcon, BookIcon, SignInIcon } from '@primer/octicons-react'; import { type FC, useCallback, useContext, useState } from 'react'; import { Form, type FormRenderProps } from 'react-final-form'; @@ -12,6 +12,9 @@ import { Constants } from '../utils/constants'; import { format } from 'date-fns'; +const GITHUB_DOCS_URL = + 'https://docs.github.com/en/enterprise-server@3.13/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens'; + interface IValues { token?: string; hostname?: string; @@ -104,14 +107,28 @@ export const LoginWithToken: FC = () => {
)} - +
+
+ +
+
+ +
+
); }; diff --git a/src/routes/__snapshots__/LoginEnterprise.test.tsx.snap b/src/routes/__snapshots__/LoginEnterprise.test.tsx.snap index 50381c371..23943ff52 100644 --- a/src/routes/__snapshots__/LoginEnterprise.test.tsx.snap +++ b/src/routes/__snapshots__/LoginEnterprise.test.tsx.snap @@ -141,14 +141,76 @@ exports[`routes/LoginEnterprise.tsx renders correctly 1`] = ` value="" />
- +
+ +
+
+ +
+
diff --git a/src/routes/__snapshots__/LoginWithToken.test.tsx.snap b/src/routes/__snapshots__/LoginWithToken.test.tsx.snap index cac0708b4..45269da79 100644 --- a/src/routes/__snapshots__/LoginWithToken.test.tsx.snap +++ b/src/routes/__snapshots__/LoginWithToken.test.tsx.snap @@ -129,14 +129,76 @@ exports[`routes/LoginWithToken.tsx renders correctly 1`] = ` - +
+ +
+
+ +
+ From 2f74b2cea61919207a1209b3d3675600c0db4947 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Sat, 18 May 2024 09:10:05 -0400 Subject: [PATCH 094/251] refactor: get new token url --- src/routes/LoginWithToken.tsx | 13 ++----------- src/utils/auth.test.ts | 20 +++++++++++++++++++- src/utils/auth.ts | 9 +++++++++ 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/routes/LoginWithToken.tsx b/src/routes/LoginWithToken.tsx index f7d567f21..12ad023b9 100644 --- a/src/routes/LoginWithToken.tsx +++ b/src/routes/LoginWithToken.tsx @@ -10,7 +10,7 @@ import type { AuthTokenOptions } from '../types'; import { openExternalLink } from '../utils/comms'; import { Constants } from '../utils/constants'; -import { format } from 'date-fns'; +import { getNewTokenURL } from '../utils/auth'; const GITHUB_DOCS_URL = 'https://docs.github.com/en/enterprise-server@3.13/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens'; @@ -74,7 +74,7 @@ export const LoginWithToken: FC = () => { type="button" className={`px-2 py-1 text-xs ${buttonClasses}`} disabled={!values.hostname} - onClick={() => openLink(getNewTokenURL())} + onClick={() => openLink(getNewTokenURL(values.hostname))} > Generate a PAT {' '} @@ -179,12 +179,3 @@ export const LoginWithToken: FC = () => { ); }; - -function getNewTokenURL(): string { - const date = format(new Date(), 'PP p'); - const newTokenURL = new URL('https://github.com/settings/tokens/new'); - newTokenURL.searchParams.append('description', `Gitify (Created on ${date})`); - newTokenURL.searchParams.append('scopes', Constants.AUTH_SCOPE.join(',')); - - return newTokenURL.toString(); -} diff --git a/src/utils/auth.test.ts b/src/utils/auth.test.ts index abaf57d0c..e92ac835c 100644 --- a/src/utils/auth.test.ts +++ b/src/utils/auth.test.ts @@ -6,7 +6,7 @@ const browserWindow = new remote.BrowserWindow(); import type { AuthState } from '../types'; import * as apiRequests from './api/request'; import * as auth from './auth'; -import { getNewOAuthAppURL } from './auth'; +import { getNewOAuthAppURL, getNewTokenURL } from './auth'; describe('utils/auth.tsx', () => { describe('authGitHub', () => { @@ -132,6 +132,24 @@ describe('utils/auth.tsx', () => { }); }); + describe('getNewTokenURL', () => { + it('should generate new PAT url - github cloud', () => { + expect( + getNewTokenURL('github.com').startsWith( + 'https://github.com/settings/tokens/new', + ), + ).toBeTruthy(); + }); + + it('should generate new PAT url - github server', () => { + expect( + getNewTokenURL('github.gitify.io').startsWith( + 'https://github.gitify.io/settings/tokens/new', + ), + ).toBeTruthy(); + }); + }); + describe('getNewOAuthAppURL', () => { it('should generate new oauth app url - github cloud', () => { expect( diff --git a/src/utils/auth.ts b/src/utils/auth.ts index 4d27fea27..fba2e2c01 100644 --- a/src/utils/auth.ts +++ b/src/utils/auth.ts @@ -138,6 +138,15 @@ export const addAccount = ( }; }; +export function getNewTokenURL(hostname: string): string { + const date = format(new Date(), 'PP p'); + const newTokenURL = new URL(`https://${hostname}/settings/tokens/new`); + newTokenURL.searchParams.append('description', `Gitify (Created on ${date})`); + newTokenURL.searchParams.append('scopes', Constants.AUTH_SCOPE.join(',')); + + return newTokenURL.toString(); +} + export function getNewOAuthAppURL(hostname: string): string { const date = format(new Date(), 'PP p'); const newOAuthAppURL = new URL( From c3cbdb8d5a7236b8e46864bc7e4e843ba98b0a2e Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Sat, 18 May 2024 09:12:50 -0400 Subject: [PATCH 095/251] refactor: github docs urls --- src/routes/LoginEnterprise.tsx | 6 ++---- src/routes/LoginWithToken.tsx | 5 +---- src/utils/constants.ts | 8 ++++++++ 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/routes/LoginEnterprise.tsx b/src/routes/LoginEnterprise.tsx index 52127944c..fa32fd192 100644 --- a/src/routes/LoginEnterprise.tsx +++ b/src/routes/LoginEnterprise.tsx @@ -11,9 +11,7 @@ import { AppContext } from '../context/App'; import type { AuthOptions } from '../types'; import { getNewOAuthAppURL } from '../utils/auth'; import { openExternalLink } from '../utils/comms'; - -const GITHUB_DOCS_URL = - 'https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app'; +import Constants from '../utils/constants'; interface IValues { hostname?: string; @@ -118,7 +116,7 @@ export const LoginEnterpriseRoute: FC = () => { type="button" aria-label="GitHub Docs" className={`px-2 py-1 text-xs ${buttonClasses}`} - onClick={() => openLink(GITHUB_DOCS_URL)} + onClick={() => openLink(Constants.GITHUB_DOCS.OAUTH_URL)} > Docs diff --git a/src/routes/LoginWithToken.tsx b/src/routes/LoginWithToken.tsx index 12ad023b9..a21448431 100644 --- a/src/routes/LoginWithToken.tsx +++ b/src/routes/LoginWithToken.tsx @@ -12,9 +12,6 @@ import { Constants } from '../utils/constants'; import { getNewTokenURL } from '../utils/auth'; -const GITHUB_DOCS_URL = - 'https://docs.github.com/en/enterprise-server@3.13/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens'; - interface IValues { token?: string; hostname?: string; @@ -113,7 +110,7 @@ export const LoginWithToken: FC = () => { type="button" aria-label="GitHub Docs" className={`px-2 py-1 text-xs ${buttonClasses}`} - onClick={() => openLink(GITHUB_DOCS_URL)} + onClick={() => openLink(Constants.GITHUB_DOCS.PAT_URL)} > Docs diff --git a/src/utils/constants.ts b/src/utils/constants.ts index b8aea32f5..c6a92a41d 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -23,6 +23,14 @@ export const Constants = { FETCH_INTERVAL: 60000, READ_CLASS_NAME: 'opacity-50 dark:opacity-50', + + // GitHub Docs + GITHUB_DOCS: { + OAUTH_URL: + 'https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app', + PAT_URL: + 'https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens', + }, }; export const Errors: Record = { From 76918ca3b26761a14b92c1f6a405e148e564da51 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Sat, 18 May 2024 09:25:35 -0400 Subject: [PATCH 096/251] feat(fields): add button component --- src/components/fields/Button.test.tsx | 42 ++++++++++++++++++ src/components/fields/Button.tsx | 30 +++++++++++++ .../fields/__snapshots__/Button.test.tsx.snap | 44 +++++++++++++++++++ 3 files changed, 116 insertions(+) create mode 100644 src/components/fields/Button.test.tsx create mode 100644 src/components/fields/Button.tsx create mode 100644 src/components/fields/__snapshots__/Button.test.tsx.snap diff --git a/src/components/fields/Button.test.tsx b/src/components/fields/Button.test.tsx new file mode 100644 index 000000000..937a6542f --- /dev/null +++ b/src/components/fields/Button.test.tsx @@ -0,0 +1,42 @@ +import { fireEvent, render, screen } from '@testing-library/react'; + +import * as TestRenderer from 'react-test-renderer'; + +import { MarkGithubIcon } from '@primer/octicons-react'; +import { shell } from 'electron'; +import { Button, type IButton } from './Button'; + +describe('components/fields/Button.tsx', () => { + const openExternalMock = jest.spyOn(shell, 'openExternal'); + + const props: IButton = { + name: 'Button', + label: 'button', + size: 16, + }; + + beforeEach(() => { + openExternalMock.mockReset(); + }); + + it('should render without icon', () => { + const tree = TestRenderer.create( + ); +}; diff --git a/src/components/fields/__snapshots__/Button.test.tsx.snap b/src/components/fields/__snapshots__/Button.test.tsx.snap new file mode 100644 index 000000000..5a62f9d0b --- /dev/null +++ b/src/components/fields/__snapshots__/Button.test.tsx.snap @@ -0,0 +1,44 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`components/fields/Button.tsx should render with icon 1`] = ` + +`; + +exports[`components/fields/Button.tsx should render without icon 1`] = ` + +`; From 514c75c73a88c0e02244b08a899a509576e654de Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Sat, 18 May 2024 09:36:52 -0400 Subject: [PATCH 097/251] feat(fields): add button component --- src/components/fields/Button.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/fields/Button.tsx b/src/components/fields/Button.tsx index 5a931c3ab..e566a811a 100644 --- a/src/components/fields/Button.tsx +++ b/src/components/fields/Button.tsx @@ -10,6 +10,7 @@ export interface IButton { size?: number; class?: string; disabled?: boolean; + type?: 'button' | 'submit'; } export const Button: FC = (props: IButton) => { @@ -17,7 +18,7 @@ export const Button: FC = (props: IButton) => { 'rounded bg-gray-300 font-semibold rounded text-sm text-center hover:bg-gray-500 hover:text-white dark:text-black focus:outline-none cursor-pointer'; return ( - - on GitHub and paste above. -
- The required scopes will be selected for you. + Change only if you are using GitHub Enterprise Server.
@@ -98,33 +86,42 @@ exports[`routes/LoginWithToken.tsx renders correctly 1`] = ` >
- Defaults to github.com. + + + on GitHub and paste above.
- Change only if you are using GitHub Enterprise Server. + The required scopes will be selected for you.
From 615c461dc0d59d9c890bee3e61293fdaae66f495 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Sat, 18 May 2024 10:32:27 -0400 Subject: [PATCH 099/251] refactor(login): use button component --- src/components/fields/Button.tsx | 1 + .../fields/__snapshots__/Button.test.tsx.snap | 2 + src/routes/LoginEnterprise.tsx | 60 +++++++++---------- src/routes/LoginWithToken.tsx | 60 +++++++++---------- .../LoginEnterprise.test.tsx.snap | 38 ++++++++++-- .../LoginWithToken.test.tsx.snap | 38 ++++++++++-- 6 files changed, 127 insertions(+), 72 deletions(-) diff --git a/src/components/fields/Button.tsx b/src/components/fields/Button.tsx index e566a811a..eb669725e 100644 --- a/src/components/fields/Button.tsx +++ b/src/components/fields/Button.tsx @@ -19,6 +19,7 @@ export const Button: FC = (props: IButton) => { return ( {' '} + icon={PersonIcon} + size={12} + url={getNewOAuthAppURL(values.hostname)} + />{' '} then{' '} generate a new client secret. @@ -112,24 +111,25 @@ export const LoginEnterpriseRoute: FC = () => {
- +
- + />
diff --git a/src/routes/LoginWithToken.tsx b/src/routes/LoginWithToken.tsx index 862d428d7..919706d54 100644 --- a/src/routes/LoginWithToken.tsx +++ b/src/routes/LoginWithToken.tsx @@ -1,4 +1,9 @@ -import { ArrowLeftIcon, BookIcon, SignInIcon } from '@primer/octicons-react'; +import { + ArrowLeftIcon, + BookIcon, + KeyIcon, + SignInIcon, +} from '@primer/octicons-react'; import { type FC, useCallback, useContext, useState } from 'react'; import { Form, type FormRenderProps } from 'react-final-form'; @@ -7,9 +12,9 @@ import { useNavigate } from 'react-router-dom'; import { FieldInput } from '../components/fields/FieldInput'; import { AppContext } from '../context/App'; import type { AuthTokenOptions } from '../types'; -import { openExternalLink } from '../utils/comms'; import { Constants } from '../utils/constants'; +import { Button } from '../components/fields/Button'; import { getNewTokenURL } from '../utils/auth'; interface IValues { @@ -48,16 +53,9 @@ export const LoginWithToken: FC = () => { const navigate = useNavigate(); const [isValidToken, setIsValidToken] = useState(true); - const openLink = useCallback((url: string) => { - openExternalLink(url); - }, []); - const renderForm = (formProps: FormRenderProps) => { const { handleSubmit, submitting, pristine, values } = formProps; - const buttonClasses = - 'rounded bg-gray-300 font-semibold rounded text-sm text-center hover:bg-gray-500 hover:text-white dark:text-black focus:outline-none cursor-pointer'; - return (
{ helpText={
- {' '} + icon={KeyIcon} + size={12} + url={getNewTokenURL(values.hostname)} + />{' '} on GitHub and paste above.
@@ -105,24 +104,25 @@ export const LoginWithToken: FC = () => {
- +
- + />
diff --git a/src/routes/__snapshots__/LoginEnterprise.test.tsx.snap b/src/routes/__snapshots__/LoginEnterprise.test.tsx.snap index 23943ff52..b5a7bc654 100644 --- a/src/routes/__snapshots__/LoginEnterprise.test.tsx.snap +++ b/src/routes/__snapshots__/LoginEnterprise.test.tsx.snap @@ -77,11 +77,34 @@ exports[`routes/LoginEnterprise.tsx renders correctly 1`] = ` className="mb-1" > @@ -151,14 +174,15 @@ exports[`routes/LoginEnterprise.tsx renders correctly 1`] = ` aria-label="GitHub Docs" className="px-2 py-1 text-xs rounded bg-gray-300 font-semibold rounded text-sm text-center hover:bg-gray-500 hover:text-white dark:text-black focus:outline-none cursor-pointer" onClick={[Function]} + title="GitHub Docs" type="button" > - Docs + Docs
diff --git a/src/routes/__snapshots__/LoginWithToken.test.tsx.snap b/src/routes/__snapshots__/LoginWithToken.test.tsx.snap index 78b791282..d92a91a2b 100644 --- a/src/routes/__snapshots__/LoginWithToken.test.tsx.snap +++ b/src/routes/__snapshots__/LoginWithToken.test.tsx.snap @@ -108,11 +108,34 @@ exports[`routes/LoginWithToken.tsx renders correctly 1`] = `
@@ -136,14 +159,15 @@ exports[`routes/LoginWithToken.tsx renders correctly 1`] = ` aria-label="GitHub Docs" className="px-2 py-1 text-xs rounded bg-gray-300 font-semibold rounded text-sm text-center hover:bg-gray-500 hover:text-white dark:text-black focus:outline-none cursor-pointer" onClick={[Function]} + title="GitHub Docs" type="button" > - Docs + Docs
From 4f9fb2e66b629258a3cc472e9fdf0a97565381a5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 May 2024 16:08:44 -0400 Subject: [PATCH 100/251] fix(deps): update dependency axios to v1.7.1 (#1123) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 14a329a42..1e6c9c46b 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,7 @@ "dependencies": { "@electron/remote": "2.1.2", "@primer/octicons-react": "19.9.0", - "axios": "1.6.8", + "axios": "1.7.1", "date-fns": "3.6.0", "electron-updater": "6.1.8", "final-form": "4.20.10", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ff914ab34..f0e8abd8f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,8 +15,8 @@ importers: specifier: 19.9.0 version: 19.9.0(react@18.3.1) axios: - specifier: 1.6.8 - version: 1.6.8 + specifier: 1.7.1 + version: 1.7.1 date-fns: specifier: 3.6.0 version: 3.6.0 @@ -940,8 +940,8 @@ packages: peerDependencies: postcss: ^8.1.0 - axios@1.6.8: - resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} + axios@1.7.1: + resolution: {integrity: sha512-+LV37nQcd1EpFalkXksWNBiA17NZ5m5/WspmHGmZmdx1qBOg/VNq/c4eRJiA9VQQHBOs+N0ZhhdU10h2TyNK7Q==} babel-jest@29.7.0: resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} @@ -4214,7 +4214,7 @@ snapshots: postcss: 8.4.38 postcss-value-parser: 4.2.0 - axios@1.6.8: + axios@1.7.1: dependencies: follow-redirects: 1.15.6 form-data: 4.0.0 From 638c0b8b6b6d1120d84851b0a7695e5b189813ef Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Tue, 21 May 2024 09:21:43 -1000 Subject: [PATCH 101/251] refactor(auth): remove repo scopes check (#1127) --- src/routes/Settings.test.tsx | 54 +------------------ src/routes/Settings.tsx | 23 +------- .../__snapshots__/Settings.test.tsx.snap | 49 ----------------- src/typesGitHub.ts | 35 ------------ .../api/__snapshots__/client.test.ts.snap | 18 ------- src/utils/api/client.test.ts | 27 ---------- src/utils/api/client.ts | 14 ----- 7 files changed, 3 insertions(+), 217 deletions(-) diff --git a/src/routes/Settings.test.tsx b/src/routes/Settings.test.tsx index 22d88f833..1539de752 100644 --- a/src/routes/Settings.test.tsx +++ b/src/routes/Settings.test.tsx @@ -91,13 +91,7 @@ describe('routes/Settings.tsx', () => { expect(updateSetting).toHaveBeenCalledWith('theme', 'LIGHT'); }); - it('should be able to enable detailed notifications', async () => { - jest.spyOn(apiRequests, 'apiRequestAuth').mockResolvedValue({ - headers: { - 'x-oauth-scopes': Constants.AUTH_SCOPE.join(', '), - }, - } as unknown as AxiosResponse); - + it('should toggle detailed notifications checkbox', async () => { await act(async () => { render( { expect(updateSetting).toHaveBeenCalledTimes(1); expect(updateSetting).toHaveBeenCalledWith('detailedNotifications', true); }); - - it('should not be able to enable detailed notifications due to missing scope', async () => { - jest.spyOn(apiRequests, 'apiRequestAuth').mockResolvedValue({ - headers: { - 'x-oauth-scopes': 'read:user, notifications', - }, - } as unknown as AxiosResponse); - - await act(async () => { - render( - - - - - , - ); - }); - - expect( - screen - .getByLabelText('Detailed notifications (requires repo scope)') - .closest('input'), - ).toHaveProperty('disabled', true); - - // click the checkbox - fireEvent.click( - screen.getByLabelText('Detailed notifications (requires repo scope)'), - ); - - // check if the checkbox is still unchecked - expect(updateSetting).not.toHaveBeenCalled(); - expect( - screen.getByLabelText('Detailed notifications (requires repo scope)'), - ).not.toBe('checked'); - - expect( - screen.getByLabelText('Detailed notifications (requires repo scope)') - .parentNode.parentNode, - ).toMatchSnapshot(); - }); }); describe('Notifications section', () => { diff --git a/src/routes/Settings.tsx b/src/routes/Settings.tsx index 9709b136a..c39ddfa53 100644 --- a/src/routes/Settings.tsx +++ b/src/routes/Settings.tsx @@ -12,7 +12,6 @@ import { useCallback, useContext, useEffect, - useMemo, useState, } from 'react'; import { useNavigate } from 'react-router-dom'; @@ -21,7 +20,6 @@ import { Checkbox } from '../components/fields/Checkbox'; import { RadioGroup } from '../components/fields/RadioGroup'; import { AppContext } from '../context/App'; import { Theme } from '../types'; -import { getRootHypermediaLinks } from '../utils/api/client'; import { openExternalLink, updateTrayIcon, @@ -37,7 +35,6 @@ export const SettingsRoute: FC = () => { const [isLinux, setIsLinux] = useState(false); const [isMacOS, setIsMacOS] = useState(false); const [appVersion, setAppVersion] = useState(null); - const [repoScope, setRepoScope] = useState(false); const openGitHubReleaseNotes = useCallback((version) => { openExternalLink( @@ -73,18 +70,6 @@ export const SettingsRoute: FC = () => { }); }, []); - useMemo(() => { - (async () => { - const response = await getRootHypermediaLinks( - Constants.DEFAULT_AUTH_OPTIONS.hostname, - accounts.token, - ); - - if (response.headers['x-oauth-scopes'].includes('repo')) - setRepoScope(true); - })(); - }, [accounts.token]); - const logoutUser = useCallback(() => { logout(); navigate(-1); @@ -145,15 +130,11 @@ export const SettingsRoute: FC = () => { /> - repoScope && updateSetting('detailedNotifications', evt.target.checked) } - disabled={!repoScope} tooltip={
diff --git a/src/routes/__snapshots__/Settings.test.tsx.snap b/src/routes/__snapshots__/Settings.test.tsx.snap index f8a185eb6..232a45311 100644 --- a/src/routes/__snapshots__/Settings.test.tsx.snap +++ b/src/routes/__snapshots__/Settings.test.tsx.snap @@ -1,53 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`routes/Settings.tsx Appearance section should not be able to enable detailed notifications due to missing scope 1`] = ` -
-
- -
-
- -
-
-`; - exports[`routes/Settings.tsx General should render itself & its children 1`] = `
Detailed notifications { jest.resetAllMocks(); }); - describe('getRootHypermediaLinks', () => { - it('should fetch root hypermedia links - github', async () => { - await getRootHypermediaLinks(mockGitHubHostname, mockToken); - - expect(axios).toHaveBeenCalledWith({ - url: 'https://api.github.com/', - method: 'GET', - data: {}, - }); - - expect(axios.defaults.headers.common).toMatchSnapshot(); - }); - - it('should fetch root hypermedia links - enterprise', async () => { - await getRootHypermediaLinks(mockEnterpriseHostname, mockToken); - - expect(axios).toHaveBeenCalledWith({ - url: 'https://example.com/api/v3/', - method: 'GET', - data: {}, - }); - - expect(axios.defaults.headers.common).toMatchSnapshot(); - }); - }); - describe('getAuthenticatedUser', () => { it('should fetch authenticated user - github', async () => { await getAuthenticatedUser(mockGitHubHostname, mockToken); diff --git a/src/utils/api/client.ts b/src/utils/api/client.ts index 75fcd7ddb..dd8626541 100644 --- a/src/utils/api/client.ts +++ b/src/utils/api/client.ts @@ -12,7 +12,6 @@ import type { PullRequest, PullRequestReview, Release, - RootHypermediaLinks, UserDetails, } from '../../typesGitHub'; import { apiRequestAuth } from './request'; @@ -22,19 +21,6 @@ import { QUERY_SEARCH_DISCUSSIONS } from './graphql/discussions'; import { formatAsGitHubSearchSyntax } from './graphql/utils'; import { getGitHubAPIBaseUrl, getGitHubGraphQLUrl } from './utils'; -/** - * Get Hypermedia links to resources accessible in GitHub's REST API - * - * Endpoint documentation: https://docs.github.com/en/rest/meta/meta#github-api-root - */ -export function getRootHypermediaLinks( - hostname: string, - token: string, -): AxiosPromise { - const url = getGitHubAPIBaseUrl(hostname); - return apiRequestAuth(url.toString(), 'GET', token); -} - /** * Get the authenticated user * From 92471bf44a15df2d60e01db8bc254bdfb6890c7b Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Tue, 21 May 2024 09:36:58 -1000 Subject: [PATCH 102/251] refactor(auth): update ux and terminology (#1122) --- src/app.tsx | 11 +- src/components/fields/Button.tsx | 19 +- .../fields/__snapshots__/Button.test.tsx.snap | 8 +- src/routes/Login.test.tsx | 21 +- src/routes/Login.tsx | 55 ++-- ...se.test.tsx => LoginWithOAuthApp.test.tsx} | 20 +- ...inEnterprise.tsx => LoginWithOAuthApp.tsx} | 74 +++-- ... => LoginWithPersonalAccessToken.test.tsx} | 23 +- ...n.tsx => LoginWithPersonalAccessToken.tsx} | 69 +++-- src/routes/Settings.test.tsx | 6 +- src/routes/Settings.tsx | 13 +- src/routes/__snapshots__/Login.test.tsx.snap | 63 ++++- .../LoginEnterprise.test.tsx.snap | 243 ----------------- .../LoginWithOAuthApp.test.tsx.snap | 254 ++++++++++++++++++ ...oginWithPersonalAccessToken.test.tsx.snap} | 165 ++++++------ .../__snapshots__/Settings.test.tsx.snap | 4 +- 16 files changed, 565 insertions(+), 483 deletions(-) rename src/routes/{LoginEnterprise.test.tsx => LoginWithOAuthApp.test.tsx} (92%) rename src/routes/{LoginEnterprise.tsx => LoginWithOAuthApp.tsx} (70%) rename src/routes/{LoginWithToken.test.tsx => LoginWithPersonalAccessToken.test.tsx} (90%) rename src/routes/{LoginWithToken.tsx => LoginWithPersonalAccessToken.tsx} (76%) delete mode 100644 src/routes/__snapshots__/LoginEnterprise.test.tsx.snap create mode 100644 src/routes/__snapshots__/LoginWithOAuthApp.test.tsx.snap rename src/routes/__snapshots__/{LoginWithToken.test.tsx.snap => LoginWithPersonalAccessToken.test.tsx.snap} (53%) diff --git a/src/app.tsx b/src/app.tsx index 9ae971b14..2980aa530 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -11,8 +11,8 @@ import { Loading } from './components/Loading'; import { Sidebar } from './components/Sidebar'; import { AppContext, AppProvider } from './context/App'; import { LoginRoute } from './routes/Login'; -import { LoginEnterpriseRoute } from './routes/LoginEnterprise'; -import { LoginWithToken } from './routes/LoginWithToken'; +import { LoginWithOAuthApp } from './routes/LoginWithOAuthApp'; +import { LoginWithPersonalAccessToken } from './routes/LoginWithPersonalAccessToken'; import { NotificationsRoute } from './routes/Notifications'; import { SettingsRoute } from './routes/Settings'; @@ -51,12 +51,13 @@ export const App = () => { } /> + } /> } + path="/login-personal-access-token" + element={} /> - } /> + } />
diff --git a/src/components/fields/Button.tsx b/src/components/fields/Button.tsx index eb669725e..4b54cafb8 100644 --- a/src/components/fields/Button.tsx +++ b/src/components/fields/Button.tsx @@ -5,17 +5,18 @@ import { openExternalLink } from '../../utils/comms'; export interface IButton { name: string; label: string; + class?: string; icon?: Icon; - url?: string; size?: number; - class?: string; + url?: string; + onClick?: () => void; disabled?: boolean; type?: 'button' | 'submit'; } export const Button: FC = (props: IButton) => { const baseClass = - 'rounded bg-gray-300 font-semibold rounded text-sm text-center hover:bg-gray-500 hover:text-white dark:text-black focus:outline-none cursor-pointer'; + 'rounded bg-gray-300 font-semibold text-xs text-center hover:bg-gray-500 hover:text-white dark:text-black focus:outline-none cursor-pointer px-2 py-1'; return ( ); diff --git a/src/components/fields/__snapshots__/Button.test.tsx.snap b/src/components/fields/__snapshots__/Button.test.tsx.snap index b85c1edc7..42d15e21c 100644 --- a/src/components/fields/__snapshots__/Button.test.tsx.snap +++ b/src/components/fields/__snapshots__/Button.test.tsx.snap @@ -3,7 +3,7 @@ exports[`components/fields/Button.tsx should render with icon 1`] = ` */ + /> + */ } - - - +
); }; diff --git a/src/routes/LoginEnterprise.test.tsx b/src/routes/LoginWithOAuthApp.test.tsx similarity index 92% rename from src/routes/LoginEnterprise.test.tsx rename to src/routes/LoginWithOAuthApp.test.tsx index 97b313640..63f7a256a 100644 --- a/src/routes/LoginEnterprise.test.tsx +++ b/src/routes/LoginWithOAuthApp.test.tsx @@ -6,7 +6,7 @@ import { shell } from 'electron'; import { mockedEnterpriseAccounts } from '../__mocks__/mockedData'; import { AppContext } from '../context/App'; import type { AuthState } from '../types'; -import { LoginEnterpriseRoute, validate } from './LoginEnterprise'; +import { LoginWithOAuthApp, validate } from './LoginWithOAuthApp'; const mockNavigate = jest.fn(); jest.mock('react-router-dom', () => ({ @@ -14,7 +14,7 @@ jest.mock('react-router-dom', () => ({ useNavigate: () => mockNavigate, })); -describe('routes/LoginEnterprise.tsx', () => { +describe('routes/LoginWithOAuthApp.tsx', () => { const openExternalMock = jest.spyOn(shell, 'openExternal'); const mockAccounts: AuthState = { @@ -33,7 +33,7 @@ describe('routes/LoginEnterprise.tsx', () => { const tree = TestRenderer.create( - + , ); @@ -45,7 +45,7 @@ describe('routes/LoginEnterprise.tsx', () => { render( - + , ); @@ -84,7 +84,7 @@ describe('routes/LoginEnterprise.tsx', () => { render( - + , ); @@ -98,7 +98,7 @@ describe('routes/LoginEnterprise.tsx', () => { render( - + , ); @@ -117,7 +117,7 @@ describe('routes/LoginEnterprise.tsx', () => { const { rerender } = render( - + , ); @@ -132,7 +132,7 @@ describe('routes/LoginEnterprise.tsx', () => { }} > - + , ); @@ -146,7 +146,7 @@ describe('routes/LoginEnterprise.tsx', () => { render( - + , ); @@ -172,7 +172,7 @@ describe('routes/LoginEnterprise.tsx', () => { render( - + , ); diff --git a/src/routes/LoginEnterprise.tsx b/src/routes/LoginWithOAuthApp.tsx similarity index 70% rename from src/routes/LoginEnterprise.tsx rename to src/routes/LoginWithOAuthApp.tsx index a91c7e0ec..a51057da7 100644 --- a/src/routes/LoginEnterprise.tsx +++ b/src/routes/LoginWithOAuthApp.tsx @@ -32,6 +32,7 @@ interface IFormErrors { export const validate = (values: IValues): IFormErrors => { const errors: IFormErrors = {}; + if (!values.hostname) { errors.hostname = 'Required'; } else if ( @@ -59,7 +60,7 @@ export const validate = (values: IValues): IFormErrors => { return errors; }; -export const LoginEnterpriseRoute: FC = () => { +export const LoginWithOAuthApp: FC = () => { const { accounts: { enterpriseAccounts }, loginEnterprise, @@ -83,20 +84,17 @@ export const LoginEnterpriseRoute: FC = () => { label="Hostname" placeholder="github.company.com" helpText={ -
-
-
+
+
} /> @@ -109,28 +107,25 @@ export const LoginEnterpriseRoute: FC = () => { placeholder="ABC123DEF456" /> -
-
-
-
-
+
+
); @@ -160,7 +155,10 @@ export const LoginEnterpriseRoute: FC = () => { /> -

Login with GitHub Enterprise

+

+ + Login with OAuth App +

diff --git a/src/routes/LoginWithToken.test.tsx b/src/routes/LoginWithPersonalAccessToken.test.tsx similarity index 90% rename from src/routes/LoginWithToken.test.tsx rename to src/routes/LoginWithPersonalAccessToken.test.tsx index eb969083f..6c0a4eae5 100644 --- a/src/routes/LoginWithToken.test.tsx +++ b/src/routes/LoginWithPersonalAccessToken.test.tsx @@ -11,7 +11,10 @@ import { MemoryRouter } from 'react-router-dom'; import TestRenderer from 'react-test-renderer'; import { AppContext } from '../context/App'; -import { LoginWithToken, validate } from './LoginWithToken'; +import { + LoginWithPersonalAccessToken, + validate, +} from './LoginWithPersonalAccessToken'; const mockNavigate = jest.fn(); jest.mock('react-router-dom', () => ({ @@ -19,7 +22,7 @@ jest.mock('react-router-dom', () => ({ useNavigate: () => mockNavigate, })); -describe('routes/LoginWithToken.tsx', () => { +describe('routes/LoginWithPersonalAccessToken.tsx', () => { const openExternalMock = jest.spyOn(shell, 'openExternal'); const mockValidateToken = jest.fn(); @@ -33,7 +36,7 @@ describe('routes/LoginWithToken.tsx', () => { it('renders correctly', () => { const tree = TestRenderer.create( - + , ); @@ -43,7 +46,7 @@ describe('routes/LoginWithToken.tsx', () => { it('let us go back', () => { render( - + , ); @@ -77,7 +80,7 @@ describe('routes/LoginWithToken.tsx', () => { render( - + , ); @@ -95,7 +98,7 @@ describe('routes/LoginWithToken.tsx', () => { render( - + , ); @@ -112,7 +115,7 @@ describe('routes/LoginWithToken.tsx', () => { render( - + , ); @@ -138,7 +141,7 @@ describe('routes/LoginWithToken.tsx', () => { render( - + , ); @@ -162,7 +165,7 @@ describe('routes/LoginWithToken.tsx', () => { it('should render the form with errors', () => { render( - + , ); @@ -183,7 +186,7 @@ describe('routes/LoginWithToken.tsx', () => { render( - + , ); diff --git a/src/routes/LoginWithToken.tsx b/src/routes/LoginWithPersonalAccessToken.tsx similarity index 76% rename from src/routes/LoginWithToken.tsx rename to src/routes/LoginWithPersonalAccessToken.tsx index 919706d54..5fc1b6ac9 100644 --- a/src/routes/LoginWithToken.tsx +++ b/src/routes/LoginWithPersonalAccessToken.tsx @@ -29,11 +29,6 @@ interface IFormErrors { export const validate = (values: IValues): IFormErrors => { const errors: IFormErrors = {}; - if (!values.token) { - errors.token = 'Required'; - } else if (!/^[A-Z0-9_]{40}$/i.test(values.token)) { - errors.token = 'Invalid token.'; - } if (!values.hostname) { errors.hostname = 'Required'; @@ -45,10 +40,16 @@ export const validate = (values: IValues): IFormErrors => { errors.hostname = 'Invalid hostname.'; } + if (!values.token) { + errors.token = 'Required'; + } else if (!/^[A-Z0-9_]{40}$/i.test(values.token)) { + errors.token = 'Invalid token.'; + } + return errors; }; -export const LoginWithToken: FC = () => { +export const LoginWithPersonalAccessToken: FC = () => { const { validateToken } = useContext(AppContext); const navigate = useNavigate(); const [isValidToken, setIsValidToken] = useState(true); @@ -63,10 +64,8 @@ export const LoginWithToken: FC = () => { label="Hostname" placeholder="github.company.com" helpText={ -
-
- Change only if you are using GitHub Enterprise Server. -
+
+ Change only if you are using GitHub Enterprise Server.
} /> @@ -81,7 +80,6 @@ export const LoginWithToken: FC = () => {
)} -
-
-
-
-
+
+
); }; - const submit = useCallback(async (data: IValues) => { + const login = useCallback(async (data: IValues) => { setIsValidToken(true); try { await validateToken(data as AuthTokenOptions); @@ -155,7 +149,8 @@ export const LoginWithToken: FC = () => { /> -

+

+ Login with Personal Access Token

@@ -163,10 +158,10 @@ export const LoginWithToken: FC = () => {
{renderForm} diff --git a/src/routes/Settings.test.tsx b/src/routes/Settings.test.tsx index 1539de752..9f2566057 100644 --- a/src/routes/Settings.test.tsx +++ b/src/routes/Settings.test.tsx @@ -447,7 +447,7 @@ describe('routes/Settings.tsx', () => { ); }); - it('should go to the enterprise login route', async () => { + it('should go to the login with oauth app route', async () => { await act(async () => { render( { ); }); - fireEvent.click(screen.getByTitle('Login with GitHub Enterprise')); - expect(mockNavigate).toHaveBeenNthCalledWith(1, '/login-enterprise', { + fireEvent.click(screen.getByTitle('Login with OAuth App')); + expect(mockNavigate).toHaveBeenNthCalledWith(1, '/login-oauth-app', { replace: true, }); }); diff --git a/src/routes/Settings.tsx b/src/routes/Settings.tsx index c39ddfa53..910569b0b 100644 --- a/src/routes/Settings.tsx +++ b/src/routes/Settings.tsx @@ -81,8 +81,8 @@ export const SettingsRoute: FC = () => { ipcRenderer.send('app-quit'); }, []); - const goToEnterprise = useCallback(() => { - return navigate('/login-enterprise', { replace: true }); + const loginWithOAuthApp = useCallback(() => { + return navigate('/login-oauth-app', { replace: true }); }, []); const footerButtonClass = @@ -293,13 +293,10 @@ export const SettingsRoute: FC = () => {
+
+ Login with +
`; diff --git a/src/routes/__snapshots__/LoginEnterprise.test.tsx.snap b/src/routes/__snapshots__/LoginEnterprise.test.tsx.snap deleted file mode 100644 index b5a7bc654..000000000 --- a/src/routes/__snapshots__/LoginEnterprise.test.tsx.snap +++ /dev/null @@ -1,243 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`routes/LoginEnterprise.tsx renders correctly 1`] = ` -
-
- -

- Login with GitHub Enterprise -

-
-
- -
- - -
-
-
- - - then - - - generate a new client secret - - . -
-
-
-
-
- - -
-
- - -
-
-
- -
-
- -
-
- -
-
-`; diff --git a/src/routes/__snapshots__/LoginWithOAuthApp.test.tsx.snap b/src/routes/__snapshots__/LoginWithOAuthApp.test.tsx.snap new file mode 100644 index 000000000..dc9f6d4dd --- /dev/null +++ b/src/routes/__snapshots__/LoginWithOAuthApp.test.tsx.snap @@ -0,0 +1,254 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`routes/LoginWithOAuthApp.tsx renders correctly 1`] = ` +
+
+ +

+ + Login with OAuth App +

+
+
+
+
+ + +
+
+ + + on GitHub then paste your + + + client id and client secret + + below. +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+`; diff --git a/src/routes/__snapshots__/LoginWithToken.test.tsx.snap b/src/routes/__snapshots__/LoginWithPersonalAccessToken.test.tsx.snap similarity index 53% rename from src/routes/__snapshots__/LoginWithToken.test.tsx.snap rename to src/routes/__snapshots__/LoginWithPersonalAccessToken.test.tsx.snap index d92a91a2b..64ac93269 100644 --- a/src/routes/__snapshots__/LoginWithToken.test.tsx.snap +++ b/src/routes/__snapshots__/LoginWithPersonalAccessToken.test.tsx.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`routes/LoginWithToken.tsx renders correctly 1`] = ` +exports[`routes/LoginWithPersonalAccessToken.tsx renders correctly 1`] = `
@@ -37,8 +37,29 @@ exports[`routes/LoginWithToken.tsx renders correctly 1`] = `

+ Login with Personal Access Token

@@ -72,12 +93,10 @@ exports[`routes/LoginWithToken.tsx renders correctly 1`] = `
-
-
- Change only if you are using GitHub Enterprise Server. -
+
+ Change only if you are using GitHub Enterprise Server.
@@ -109,7 +128,7 @@ exports[`routes/LoginWithToken.tsx renders correctly 1`] = `
-
- -
-
- + -
+ } + viewBox="0 0 16 16" + width={16} + > + + + Login +
diff --git a/src/routes/__snapshots__/Settings.test.tsx.snap b/src/routes/__snapshots__/Settings.test.tsx.snap index 232a45311..ad0209460 100644 --- a/src/routes/__snapshots__/Settings.test.tsx.snap +++ b/src/routes/__snapshots__/Settings.test.tsx.snap @@ -514,11 +514,11 @@ exports[`routes/Settings.tsx General should render itself & its children 1`] = `
+ + + +
+
- -
- -
+
- - - -
+
+ + + + + + + Updated + + + over 6 years ago + + + + + + + + + + + + + + + + + + +
+ +
- - - -
- + + + + + + , + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; exports[`components/NotificationRow.tsx rendering for notification comments count should render when more than 1 comments 1`] = ` -
-
- - - - -
-
-
- I am a robot and this is a test! -
-
- +
+
- - - - - - Updated - - + + +
+
+
- over 6 years ago - - +
+ + + + + + + Updated + + + over 6 years ago + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
-
-
- -
+
- - - -
+
+ + + + + + + Updated + + + over 6 years ago + + + + + + + + + + + + + + + + + + +
+
+
- - - -
-
+ + + + + + , + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; exports[`components/NotificationRow.tsx rendering for notification comments count should render when no comments 1`] = ` -
-
- - - - -
-
-
- I am a robot and this is a test! -
-
- +
+
- - + + + + +
+
+
+ I am a robot and this is a test! +
+
+ + + + + + + Updated + + + over 6 years ago + + + + + + + + + + + + + +
+
+
+ +
+
-
-
- -
+
- - - -
+
+ + + + + + + Updated + + + over 6 years ago + + + + + + + + + + + + + +
+
+
- - - -
- + + + + + + , + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; exports[`components/NotificationRow.tsx should render itself & its children 1`] = ` -
-
- - - - -
-
-
- I am a robot and this is a test! -
-
- +
+
- - - gitify-app's avatar - - + +
+
+
- Updated - - +
- over 6 years ago - - + + + gitify-app's avatar + + + Updated + + + over 6 years ago + + + + + + + + + + + + + +
+
+
+ + +
+
-
-
- -
+
- - - -
+
+ + + + gitify-app's avatar + + + Updated + + + over 6 years ago + + + + + + + + + + + + + +
+
+
- - - -
-
+ + + + + + , + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; exports[`components/NotificationRow.tsx should render itself & its children when last_read_at is null 1`] = ` -
-
- - - - -
-
-
- I am a robot and this is a test! -
-
- +
+
- - - gitify-app's avatar - - + +
+
+
- Updated - - +
- over 6 years ago - - + + + gitify-app's avatar + + + Updated + + + over 6 years ago + + + + + + + + + + + + + +
+
+
+ + +
+
-
-
- -
+
- - - -
+
+ + + + gitify-app's avatar + + + Updated + + + over 6 years ago + + + + + + + + + + + + + +
+
+
- - - -
-
+ + + + + + , + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; exports[`components/NotificationRow.tsx should render itself & its children without avatar 1`] = ` -
-
- - - - -
-
-
- I am a robot and this is a test! -
-
- +
+
- - + + + + +
+
+
+ I am a robot and this is a test! +
+
+ + + + + + + Updated + + + over 6 years ago + + + + + + + + + + + + + +
+
+
+ +
+
-
-
- -
+
- - - -
+
+ + + + + + + Updated + + + over 6 years ago + + + + + + + + + + + + + +
+
+
- - - -
- + + + + + + , + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; diff --git a/src/components/__snapshots__/Oops.test.tsx.snap b/src/components/__snapshots__/Oops.test.tsx.snap index 614aca51f..ea0bc4ef2 100644 --- a/src/components/__snapshots__/Oops.test.tsx.snap +++ b/src/components/__snapshots__/Oops.test.tsx.snap @@ -1,23 +1,102 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`components/Oops.tsx should render itself & its children 1`] = ` -
-

- 🔥 -

-

- Error title -

-
- Error description -
-
+{ + "asFragment": [Function], + "baseElement": +
+
+

+ 🔥 +

+

+ Error title +

+
+ Error description +
+
+
+ , + "container":
+
+

+ 🔥 +

+

+ Error title +

+
+ Error description +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; diff --git a/src/components/__snapshots__/Repository.test.tsx.snap b/src/components/__snapshots__/Repository.test.tsx.snap index 8f294df78..07de95e6c 100644 --- a/src/components/__snapshots__/Repository.test.tsx.snap +++ b/src/components/__snapshots__/Repository.test.tsx.snap @@ -1,213 +1,445 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`components/Repository.tsx should render itself & its children 1`] = ` -[ -
-
- gitify-app/notifications-test's avatar - +
+
- gitify-app/notifications-test - +
+ gitify-app/notifications-test's avatar + + gitify-app/notifications-test + +
+
+ +
+ +
+
+
+
+ NotificationRow +
+
+ NotificationRow +
+
+ , + "container":
- + gitify-app/notifications-test + +
- -
-
, -
-
- NotificationRow + + + + +
+ +
- NotificationRow +
+ NotificationRow +
+
+ NotificationRow +
, -] + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; exports[`components/Repository.tsx should use default repository icon when avatar is not available 1`] = ` -[ -
-
- - +
+
- gitify-app/notifications-test - +
+ + + gitify-app/notifications-test + +
+
+ +
+ +
+
+
+
+ NotificationRow +
+
+ NotificationRow +
+
+ , + "container":
- + + gitify-app/notifications-test + +
- -
-
, -
-
- NotificationRow + + + + +
+ +
- NotificationRow +
+ NotificationRow +
+
+ NotificationRow +
, -] + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; diff --git a/src/components/__snapshots__/Sidebar.test.tsx.snap b/src/components/__snapshots__/Sidebar.test.tsx.snap index c563023a8..887d0fb44 100644 --- a/src/components/__snapshots__/Sidebar.test.tsx.snap +++ b/src/components/__snapshots__/Sidebar.test.tsx.snap @@ -1,257 +1,555 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`components/Sidebar.tsx should render itself & its children (logged in) 1`] = ` -
-
- + +
+
+ +
+
+
+ , + "container":
+
- - - + - - - - - + + + + + + + + + + + - -
-
- +
+
- - - -
-
+ +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; exports[`components/Sidebar.tsx should render itself & its children (logged out) 1`] = ` -
-
- + +
+
+ +
+
+
+ , + "container":
+
- - - + - - - - - + + + + + + + + + + + - -
-
- +
+
- - - -
-
+ +
+ + , + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; diff --git a/src/components/fields/Button.test.tsx b/src/components/fields/Button.test.tsx index 937a6542f..cc4855466 100644 --- a/src/components/fields/Button.test.tsx +++ b/src/components/fields/Button.test.tsx @@ -1,7 +1,5 @@ import { fireEvent, render, screen } from '@testing-library/react'; -import * as TestRenderer from 'react-test-renderer'; - import { MarkGithubIcon } from '@primer/octicons-react'; import { shell } from 'electron'; import { Button, type IButton } from './Button'; @@ -20,14 +18,12 @@ describe('components/fields/Button.tsx', () => { }); it('should render without icon', () => { - const tree = TestRenderer.create( +{ + "asFragment": [Function], + "baseElement": +
+ +
+ , + "container":
+ +
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; exports[`components/fields/Button.tsx should render without icon 1`] = ` - +{ + "asFragment": [Function], + "baseElement": +
+ +
+ , + "container":
+ +
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; diff --git a/src/components/fields/__snapshots__/Checkbox.test.tsx.snap b/src/components/fields/__snapshots__/Checkbox.test.tsx.snap index 0138d82b1..8d0e7fc1f 100644 --- a/src/components/fields/__snapshots__/Checkbox.test.tsx.snap +++ b/src/components/fields/__snapshots__/Checkbox.test.tsx.snap @@ -1,38 +1,130 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`components/fields/Checkbox.tsx should render 1`] = ` -
-
-
- +{ + "asFragment": [Function], + "baseElement": +
+
+
+
+ +
+
+ +
+
+
+ This is some helper text +
+
+ , + "container":
-
+
- Appearance - + This is some helper text +
-
-
- This is some helper text -
-
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; diff --git a/src/components/fields/__snapshots__/FieldInput.test.tsx.snap b/src/components/fields/__snapshots__/FieldInput.test.tsx.snap index 59a421197..8338ba73f 100644 --- a/src/components/fields/__snapshots__/FieldInput.test.tsx.snap +++ b/src/components/fields/__snapshots__/FieldInput.test.tsx.snap @@ -1,35 +1,114 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`components/fields/FieldInput.tsx should render 1`] = ` - -
- - -
- This is some helper text +{ + "asFragment": [Function], + "baseElement": +
+ +
+ + +
+ This is some helper text +
+
+
-
- + , + "container":
+
+
+ + +
+ This is some helper text +
+
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; diff --git a/src/components/fields/__snapshots__/RadioGroup.test.tsx.snap b/src/components/fields/__snapshots__/RadioGroup.test.tsx.snap index 4d6589d90..b8996bf54 100644 --- a/src/components/fields/__snapshots__/RadioGroup.test.tsx.snap +++ b/src/components/fields/__snapshots__/RadioGroup.test.tsx.snap @@ -1,148 +1,389 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`components/fields/RadioGroup.tsx should render 1`] = ` -
-
-
-
-
- This is some helper text -
-
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; exports[`components/fields/RadioGroup.tsx should render as disabled 1`] = ` -
-
-
-
-
- This is some helper text -
-
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; diff --git a/src/components/fields/__snapshots__/Tooltip.test.tsx.snap b/src/components/fields/__snapshots__/Tooltip.test.tsx.snap index e4586a879..2fe780fc4 100644 --- a/src/components/fields/__snapshots__/Tooltip.test.tsx.snap +++ b/src/components/fields/__snapshots__/Tooltip.test.tsx.snap @@ -56,33 +56,104 @@ exports[`components/fields/Tooltip.tsx should display on mouse enter / leave 2`] `; exports[`components/fields/Tooltip.tsx should render 1`] = ` - - - +{ + "asFragment": [Function], + "baseElement": +
+ + + +
+ , + "container":
+ + + +
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; diff --git a/src/routes/Login.test.tsx b/src/routes/Login.test.tsx index f9aecf086..588d2e5e1 100644 --- a/src/routes/Login.test.tsx +++ b/src/routes/Login.test.tsx @@ -1,6 +1,5 @@ import { fireEvent, render, screen } from '@testing-library/react'; import { MemoryRouter } from 'react-router-dom'; -import TestRenderer from 'react-test-renderer'; const { ipcRenderer } = require('electron'); import { AppContext } from '../context/App'; import { LoginRoute } from './Login'; @@ -18,7 +17,7 @@ describe('routes/Login.tsx', () => { }); it('should render itself & its children', () => { - const tree = TestRenderer.create( + const tree = render( , diff --git a/src/routes/LoginWithOAuthApp.test.tsx b/src/routes/LoginWithOAuthApp.test.tsx index 63f7a256a..0f25f652b 100644 --- a/src/routes/LoginWithOAuthApp.test.tsx +++ b/src/routes/LoginWithOAuthApp.test.tsx @@ -1,6 +1,5 @@ import { fireEvent, render, screen } from '@testing-library/react'; import { MemoryRouter } from 'react-router-dom'; -import * as TestRenderer from 'react-test-renderer'; const { ipcRenderer } = require('electron'); import { shell } from 'electron'; import { mockedEnterpriseAccounts } from '../__mocks__/mockedData'; @@ -30,7 +29,7 @@ describe('routes/LoginWithOAuthApp.tsx', () => { }); it('renders correctly', () => { - const tree = TestRenderer.create( + const tree = render( diff --git a/src/routes/LoginWithPersonalAccessToken.test.tsx b/src/routes/LoginWithPersonalAccessToken.test.tsx index 6c0a4eae5..4d149ec4d 100644 --- a/src/routes/LoginWithPersonalAccessToken.test.tsx +++ b/src/routes/LoginWithPersonalAccessToken.test.tsx @@ -8,7 +8,6 @@ import { import { shell } from 'electron'; import { MemoryRouter } from 'react-router-dom'; -import TestRenderer from 'react-test-renderer'; import { AppContext } from '../context/App'; import { @@ -34,7 +33,7 @@ describe('routes/LoginWithPersonalAccessToken.tsx', () => { }); it('renders correctly', () => { - const tree = TestRenderer.create( + const tree = render( , diff --git a/src/routes/Notifications.test.tsx b/src/routes/Notifications.test.tsx index 155a274be..6e0a856c8 100644 --- a/src/routes/Notifications.test.tsx +++ b/src/routes/Notifications.test.tsx @@ -1,5 +1,4 @@ -import TestRenderer from 'react-test-renderer'; - +import { render } from '@testing-library/react'; import { mockSettings } from '../__mocks__/mock-state'; import { mockedAccountNotifications } from '../__mocks__/mockedData'; import { AppContext } from '../context/App'; @@ -20,7 +19,7 @@ jest.mock('../components/Oops', () => ({ describe('routes/Notifications.tsx', () => { it('should render itself & its children (with notifications)', () => { - const tree = TestRenderer.create( + const tree = render( @@ -32,7 +31,7 @@ describe('routes/Notifications.tsx', () => { }); it('should render itself & its children (all read notifications)', () => { - const tree = TestRenderer.create( + const tree = render( , @@ -41,7 +40,7 @@ describe('routes/Notifications.tsx', () => { }); it('should render itself & its children (show account hostname)', () => { - const tree = TestRenderer.create( + const tree = render( { describe('should render itself & its children (error conditions - oops)', () => { it('bad credentials', () => { - const tree = TestRenderer.create( + const tree = render( { }); it('missing scopes', () => { - const tree = TestRenderer.create( + const tree = render( { }); it('rate limited', () => { - const tree = TestRenderer.create( + const tree = render( { }); it('unknown error', () => { - const tree = TestRenderer.create( + const tree = render( { }); it('default error', () => { - const tree = TestRenderer.create( + const tree = render( - - - +
+
- - - - - + + + + + + + + + + +
+ GitHub Notifications +
+ on your menu bar. +
+
+ Login with +
+ + +
+
+ , + "container":
+
- - - -
- GitHub Notifications -
- on your menu bar. -
-
- Login with -
- - -
+ + + + + + + + + + +
+ GitHub Notifications +
+ on your menu bar. +
+
+ Login with +
+ + +
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; diff --git a/src/routes/__snapshots__/LoginWithOAuthApp.test.tsx.snap b/src/routes/__snapshots__/LoginWithOAuthApp.test.tsx.snap index dc9f6d4dd..0b21d7712 100644 --- a/src/routes/__snapshots__/LoginWithOAuthApp.test.tsx.snap +++ b/src/routes/__snapshots__/LoginWithOAuthApp.test.tsx.snap @@ -1,254 +1,458 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`routes/LoginWithOAuthApp.tsx renders correctly 1`] = ` -
-
- -

- - Login with OAuth App -

-
-
-
+{ + "asFragment": [Function], + "baseElement": +
- -
-
- - - on GitHub then paste your - - + + +

+

+ + + Login with OAuth App +
-
-
- - -
-
- - + +
+ + +
+
+ + + on GitHub then paste your + + + client id and client secret + + below. +
+
+
+
+ + +
+
+ + +
+
+ + +
+ +
+
+ , + "container":
+
- + Login with OAuth App + +
+
+
+
+ + +
+
+ + + on GitHub then paste your + + + client id and client secret + + below. +
+
+
+
+ + +
+
+ + +
+
+ + +
+
- -
-
+
+ , + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; diff --git a/src/routes/__snapshots__/LoginWithPersonalAccessToken.test.tsx.snap b/src/routes/__snapshots__/LoginWithPersonalAccessToken.test.tsx.snap index 64ac93269..63cafcd99 100644 --- a/src/routes/__snapshots__/LoginWithPersonalAccessToken.test.tsx.snap +++ b/src/routes/__snapshots__/LoginWithPersonalAccessToken.test.tsx.snap @@ -1,239 +1,434 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`routes/LoginWithPersonalAccessToken.tsx renders correctly 1`] = ` -
-
- -

- - Login with Personal Access Token -

-
-
-
+{ + "asFragment": [Function], + "baseElement": +
- -
-
- Change only if you are using GitHub Enterprise Server. -
+ + + + +

+ + Login with Personal Access Token +

-
-
- -
-
-
+ +
+ + +
+
+ Change only if you are using GitHub Enterprise Server. +
+
+
+
+ + +
+
+
+ + + on GitHub and paste above. +
+
+ The required scopes will be selected for you. +
+
+
+
+
+ - - on GitHub and paste above. -
-
- The required scopes will be selected for you.
-
+
+
+ , + "container":
+
- + Login with Personal Access Token + +
+
+
+
+ + +
+
+ Change only if you are using GitHub Enterprise Server. +
+
+
+
+ + +
+
+
+ + + on GitHub and paste above. +
+
+ The required scopes will be selected for you. +
+
+
+
+
+ + +
+
- -
-
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; diff --git a/src/routes/__snapshots__/Notifications.test.tsx.snap b/src/routes/__snapshots__/Notifications.test.tsx.snap index 887334d78..1d947c756 100644 --- a/src/routes/__snapshots__/Notifications.test.tsx.snap +++ b/src/routes/__snapshots__/Notifications.test.tsx.snap @@ -1,529 +1,577 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`routes/Notifications.tsx should render itself & its children (all read notifications) 1`] = ``; +exports[`routes/Notifications.tsx should render itself & its children (all read notifications) 1`] = ` +{ + "asFragment": [Function], + "baseElement": +
+ +
+ , + "container":
+ +
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; exports[`routes/Notifications.tsx should render itself & its children (error conditions - oops) bad credentials 1`] = ` - +{ + "asFragment": [Function], + "baseElement": +
+ +
+ , + "container":
+ +
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; exports[`routes/Notifications.tsx should render itself & its children (error conditions - oops) default error 1`] = ` - +{ + "asFragment": [Function], + "baseElement": +
+ +
+ , + "container":
+ +
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; exports[`routes/Notifications.tsx should render itself & its children (error conditions - oops) missing scopes 1`] = ` - +{ + "asFragment": [Function], + "baseElement": +
+ +
+ , + "container":
+ +
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; exports[`routes/Notifications.tsx should render itself & its children (error conditions - oops) rate limited 1`] = ` - +{ + "asFragment": [Function], + "baseElement": +
+ +
+ , + "container":
+ +
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; exports[`routes/Notifications.tsx should render itself & its children (error conditions - oops) unknown error 1`] = ` - +{ + "asFragment": [Function], + "baseElement": +
+ +
+ , + "container":
+ +
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; exports[`routes/Notifications.tsx should render itself & its children (show account hostname) 1`] = ` -
- -
+{ + "asFragment": [Function], + "baseElement": +
+
+ +
+
+ , + "container":
+
+ +
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; exports[`routes/Notifications.tsx should render itself & its children (with notifications) 1`] = ` -
- - -
+{ + "asFragment": [Function], + "baseElement": +
+
+ + +
+
+ , + "container":
+
+ + +
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} `; From 739b5cd1a143f3c8c122651311c23ef4ea64b73a Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Sun, 26 May 2024 07:53:48 -0400 Subject: [PATCH 116/251] refactor: update imports --- src/app.tsx | 1 - src/components/AccountNotifications.tsx | 1 - src/components/AllRead.test.tsx | 3 +-- src/components/Loading.test.tsx | 1 - src/components/Loading.tsx | 1 - src/components/Logo.test.tsx | 1 - src/components/NotificationRow.test.tsx | 4 +--- src/components/Oops.tsx | 1 - src/components/Repository.tsx | 2 -- src/components/Sidebar.tsx | 2 -- src/components/fields/Button.test.tsx | 3 +-- src/components/fields/RadioGroup.test.tsx | 1 - src/components/fields/Tooltip.test.tsx | 1 - src/context/App.test.tsx | 1 - src/context/App.tsx | 1 - src/hooks/useNotifications.test.ts | 1 - src/hooks/useNotifications.ts | 1 - src/routes/Login.tsx | 4 +--- src/routes/LoginWithOAuthApp.tsx | 3 --- src/routes/LoginWithPersonalAccessToken.test.tsx | 2 -- src/routes/LoginWithPersonalAccessToken.tsx | 7 ++----- src/routes/Notifications.tsx | 1 - src/routes/Settings.test.tsx | 3 --- src/routes/Settings.tsx | 2 -- src/utils/api/client.ts | 5 ++--- src/utils/auth.test.ts | 7 +++---- src/utils/auth.ts | 1 - src/utils/notifications.test.ts | 1 - src/utils/notifications.ts | 5 ++--- src/utils/subject.test.ts | 1 - 30 files changed, 13 insertions(+), 55 deletions(-) diff --git a/src/app.tsx b/src/app.tsx index 2980aa530..3beb15806 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -6,7 +6,6 @@ import { Routes, useLocation, } from 'react-router-dom'; - import { Loading } from './components/Loading'; import { Sidebar } from './components/Sidebar'; import { AppContext, AppProvider } from './context/App'; diff --git a/src/components/AccountNotifications.tsx b/src/components/AccountNotifications.tsx index b6a09e6b5..50affd7df 100644 --- a/src/components/AccountNotifications.tsx +++ b/src/components/AccountNotifications.tsx @@ -1,5 +1,4 @@ import { ChevronDownIcon, ChevronLeftIcon } from '@primer/octicons-react'; - import type { Notification } from '../typesGitHub'; import { RepositoryNotifications } from './Repository'; diff --git a/src/components/AllRead.test.tsx b/src/components/AllRead.test.tsx index 0d03709b7..d2ec0f3aa 100644 --- a/src/components/AllRead.test.tsx +++ b/src/components/AllRead.test.tsx @@ -1,7 +1,6 @@ -import { mockMathRandom } from './test-utils'; - import { render } from '@testing-library/react'; import { AllRead } from './AllRead'; +import { mockMathRandom } from './test-utils'; describe('components/AllRead.tsx', () => { // The read emoji randomly rotates, but then the snapshots would never match diff --git a/src/components/Loading.test.tsx b/src/components/Loading.test.tsx index 7880133d7..ed0f1a3cb 100644 --- a/src/components/Loading.test.tsx +++ b/src/components/Loading.test.tsx @@ -1,6 +1,5 @@ import { render } from '@testing-library/react'; import NProgress from 'nprogress'; - import { AppContext } from '../context/App'; import { Loading } from './Loading'; diff --git a/src/components/Loading.tsx b/src/components/Loading.tsx index ad1fc4c20..acde575b9 100644 --- a/src/components/Loading.tsx +++ b/src/components/Loading.tsx @@ -1,6 +1,5 @@ import NProgress from 'nprogress'; import { useContext, useEffect } from 'react'; - import { AppContext } from '../context/App'; export const Loading = () => { diff --git a/src/components/Logo.test.tsx b/src/components/Logo.test.tsx index c9e3df24f..e19b8c5ee 100644 --- a/src/components/Logo.test.tsx +++ b/src/components/Logo.test.tsx @@ -1,5 +1,4 @@ import { fireEvent, render, screen } from '@testing-library/react'; - import { Logo } from './Logo'; describe('components/Logo.tsx', () => { diff --git a/src/components/NotificationRow.test.tsx b/src/components/NotificationRow.test.tsx index 4ae93162a..b751bfd11 100644 --- a/src/components/NotificationRow.test.tsx +++ b/src/components/NotificationRow.test.tsx @@ -1,12 +1,10 @@ import { fireEvent, render, screen } from '@testing-library/react'; - -import * as helpers from '../utils/helpers'; - import { shell } from 'electron'; import { mockAccounts, mockSettings } from '../__mocks__/mock-state'; import { mockedSingleNotification } from '../__mocks__/mockedData'; import { AppContext } from '../context/App'; import type { UserType } from '../typesGitHub'; +import * as helpers from '../utils/helpers'; import { NotificationRow } from './NotificationRow'; describe('components/NotificationRow.tsx', () => { diff --git a/src/components/Oops.tsx b/src/components/Oops.tsx index e7a0201ab..30d3c681f 100644 --- a/src/components/Oops.tsx +++ b/src/components/Oops.tsx @@ -1,5 +1,4 @@ import { type FC, useMemo } from 'react'; - import type { GitifyError } from '../types'; interface IProps { diff --git a/src/components/Repository.tsx b/src/components/Repository.tsx index 0d68875f6..47074f314 100644 --- a/src/components/Repository.tsx +++ b/src/components/Repository.tsx @@ -1,8 +1,6 @@ import { CheckIcon, MarkGithubIcon, ReadIcon } from '@primer/octicons-react'; - import { type FC, useCallback, useContext } from 'react'; import { CSSTransition, TransitionGroup } from 'react-transition-group'; - import { AppContext } from '../context/App'; import type { Notification } from '../typesGitHub'; import { openExternalLink } from '../utils/comms'; diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx index 7117e193b..927d59f06 100644 --- a/src/components/Sidebar.tsx +++ b/src/components/Sidebar.tsx @@ -5,10 +5,8 @@ import { XCircleIcon, } from '@primer/octicons-react'; import { ipcRenderer } from 'electron'; - import { type FC, useCallback, useContext, useMemo } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; - import { Logo } from '../components/Logo'; import { AppContext } from '../context/App'; import { openExternalLink } from '../utils/comms'; diff --git a/src/components/fields/Button.test.tsx b/src/components/fields/Button.test.tsx index cc4855466..e0472eb46 100644 --- a/src/components/fields/Button.test.tsx +++ b/src/components/fields/Button.test.tsx @@ -1,6 +1,5 @@ -import { fireEvent, render, screen } from '@testing-library/react'; - import { MarkGithubIcon } from '@primer/octicons-react'; +import { fireEvent, render, screen } from '@testing-library/react'; import { shell } from 'electron'; import { Button, type IButton } from './Button'; diff --git a/src/components/fields/RadioGroup.test.tsx b/src/components/fields/RadioGroup.test.tsx index dd5bffd9d..99a9ec1d5 100644 --- a/src/components/fields/RadioGroup.test.tsx +++ b/src/components/fields/RadioGroup.test.tsx @@ -1,5 +1,4 @@ import { fireEvent, render, screen } from '@testing-library/react'; - import { type IRadioGroup, RadioGroup } from './RadioGroup'; describe('components/fields/RadioGroup.tsx', () => { diff --git a/src/components/fields/Tooltip.test.tsx b/src/components/fields/Tooltip.test.tsx index 528a14dc6..c6649f68d 100644 --- a/src/components/fields/Tooltip.test.tsx +++ b/src/components/fields/Tooltip.test.tsx @@ -1,5 +1,4 @@ import { fireEvent, render, screen } from '@testing-library/react'; - import { type ITooltip, Tooltip } from './Tooltip'; describe('components/fields/Tooltip.tsx', () => { diff --git a/src/context/App.test.tsx b/src/context/App.test.tsx index bf8c297f7..7d569dbf6 100644 --- a/src/context/App.test.tsx +++ b/src/context/App.test.tsx @@ -1,6 +1,5 @@ import { act, fireEvent, render, waitFor } from '@testing-library/react'; import { useContext } from 'react'; - import { mockAccounts, mockSettings } from '../__mocks__/mock-state'; import { useNotifications } from '../hooks/useNotifications'; import type { AuthState, SettingsState } from '../types'; diff --git a/src/context/App.tsx b/src/context/App.tsx index 77c32fe23..fd7396af9 100644 --- a/src/context/App.tsx +++ b/src/context/App.tsx @@ -6,7 +6,6 @@ import { useMemo, useState, } from 'react'; - import { useInterval } from '../hooks/useInterval'; import { useNotifications } from '../hooks/useNotifications'; import { diff --git a/src/hooks/useNotifications.test.ts b/src/hooks/useNotifications.test.ts index 29e4be3bd..30539cd45 100644 --- a/src/hooks/useNotifications.test.ts +++ b/src/hooks/useNotifications.test.ts @@ -1,7 +1,6 @@ import { act, renderHook, waitFor } from '@testing-library/react'; import axios, { AxiosError } from 'axios'; import nock from 'nock'; - import { mockAccounts, mockSettings } from '../__mocks__/mock-state'; import { mockedNotificationUser, mockedUser } from '../__mocks__/mockedData'; import type { AuthState } from '../types'; diff --git a/src/hooks/useNotifications.ts b/src/hooks/useNotifications.ts index 13824685f..70bb372b1 100644 --- a/src/hooks/useNotifications.ts +++ b/src/hooks/useNotifications.ts @@ -1,5 +1,4 @@ import { useCallback, useState } from 'react'; - import type { AccountNotifications, AuthState, diff --git a/src/routes/Login.tsx b/src/routes/Login.tsx index b6741bc12..3e9506dcd 100644 --- a/src/routes/Login.tsx +++ b/src/routes/Login.tsx @@ -1,9 +1,7 @@ const { ipcRenderer } = require('electron'); - +import { KeyIcon, PersonIcon } from '@primer/octicons-react'; import { type FC, useContext, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; - -import { KeyIcon, PersonIcon } from '@primer/octicons-react'; import { Logo } from '../components/Logo'; import { Button } from '../components/fields/Button'; import { AppContext } from '../context/App'; diff --git a/src/routes/LoginWithOAuthApp.tsx b/src/routes/LoginWithOAuthApp.tsx index 79d40e00d..c4e35fa09 100644 --- a/src/routes/LoginWithOAuthApp.tsx +++ b/src/routes/LoginWithOAuthApp.tsx @@ -1,16 +1,13 @@ const ipcRenderer = require('electron').ipcRenderer; - import { ArrowLeftIcon, BookIcon, PersonIcon, SignInIcon, } from '@primer/octicons-react'; - import { type FC, useCallback, useContext, useEffect } from 'react'; import { Form, type FormRenderProps } from 'react-final-form'; import { useNavigate } from 'react-router-dom'; - import { Button } from '../components/fields/Button'; import { FieldInput } from '../components/fields/FieldInput'; import { AppContext } from '../context/App'; diff --git a/src/routes/LoginWithPersonalAccessToken.test.tsx b/src/routes/LoginWithPersonalAccessToken.test.tsx index 4d149ec4d..04fe33a30 100644 --- a/src/routes/LoginWithPersonalAccessToken.test.tsx +++ b/src/routes/LoginWithPersonalAccessToken.test.tsx @@ -6,9 +6,7 @@ import { waitFor, } from '@testing-library/react'; import { shell } from 'electron'; - import { MemoryRouter } from 'react-router-dom'; - import { AppContext } from '../context/App'; import { LoginWithPersonalAccessToken, diff --git a/src/routes/LoginWithPersonalAccessToken.tsx b/src/routes/LoginWithPersonalAccessToken.tsx index 55726ed6f..1f53d09a5 100644 --- a/src/routes/LoginWithPersonalAccessToken.tsx +++ b/src/routes/LoginWithPersonalAccessToken.tsx @@ -4,18 +4,15 @@ import { KeyIcon, SignInIcon, } from '@primer/octicons-react'; - import { type FC, useCallback, useContext, useState } from 'react'; import { Form, type FormRenderProps } from 'react-final-form'; import { useNavigate } from 'react-router-dom'; - +import { Button } from '../components/fields/Button'; import { FieldInput } from '../components/fields/FieldInput'; import { AppContext } from '../context/App'; import type { AuthTokenOptions } from '../types'; -import { Constants } from '../utils/constants'; - -import { Button } from '../components/fields/Button'; import { getNewTokenURL, isValidHostname, isValidToken } from '../utils/auth'; +import { Constants } from '../utils/constants'; interface IValues { token?: string; diff --git a/src/routes/Notifications.tsx b/src/routes/Notifications.tsx index 54d375baf..b8b5f83da 100644 --- a/src/routes/Notifications.tsx +++ b/src/routes/Notifications.tsx @@ -1,5 +1,4 @@ import { type FC, useContext, useMemo } from 'react'; - import { AccountNotifications } from '../components/AccountNotifications'; import { AllRead } from '../components/AllRead'; import { Oops } from '../components/Oops'; diff --git a/src/routes/Settings.test.tsx b/src/routes/Settings.test.tsx index b670f4297..cbeb5b006 100644 --- a/src/routes/Settings.test.tsx +++ b/src/routes/Settings.test.tsx @@ -1,9 +1,6 @@ import { act, fireEvent, render, screen } from '@testing-library/react'; - import { MemoryRouter } from 'react-router-dom'; - const { ipcRenderer } = require('electron'); - import { shell } from 'electron'; import { mockAccounts, mockSettings } from '../__mocks__/mock-state'; import { AppContext } from '../context/App'; diff --git a/src/routes/Settings.tsx b/src/routes/Settings.tsx index d4503f48a..442e8251e 100644 --- a/src/routes/Settings.tsx +++ b/src/routes/Settings.tsx @@ -7,7 +7,6 @@ import { XCircleIcon, } from '@primer/octicons-react'; import { ipcRenderer } from 'electron'; - import { type FC, type MouseEvent, @@ -17,7 +16,6 @@ import { useState, } from 'react'; import { useNavigate } from 'react-router-dom'; - import { Checkbox } from '../components/fields/Checkbox'; import { RadioGroup } from '../components/fields/RadioGroup'; import { AppContext } from '../context/App'; diff --git a/src/utils/api/client.ts b/src/utils/api/client.ts index dd8626541..ae9549a6e 100644 --- a/src/utils/api/client.ts +++ b/src/utils/api/client.ts @@ -1,4 +1,5 @@ import type { AxiosPromise } from 'axios'; +import { print } from 'graphql/language/printer'; import type { SettingsState } from '../../types'; import type { Commit, @@ -14,11 +15,9 @@ import type { Release, UserDetails, } from '../../typesGitHub'; -import { apiRequestAuth } from './request'; - -import { print } from 'graphql/language/printer'; import { QUERY_SEARCH_DISCUSSIONS } from './graphql/discussions'; import { formatAsGitHubSearchSyntax } from './graphql/utils'; +import { apiRequestAuth } from './request'; import { getGitHubAPIBaseUrl, getGitHubGraphQLUrl } from './utils'; /** diff --git a/src/utils/auth.test.ts b/src/utils/auth.test.ts index d2e904a74..df900dd53 100644 --- a/src/utils/auth.test.ts +++ b/src/utils/auth.test.ts @@ -1,13 +1,12 @@ -import type { AxiosPromise, AxiosResponse } from 'axios'; - import remote from '@electron/remote'; -const browserWindow = new remote.BrowserWindow(); - +import type { AxiosPromise, AxiosResponse } from 'axios'; import type { AuthState } from '../types'; import * as apiRequests from './api/request'; import * as auth from './auth'; import { getNewOAuthAppURL, getNewTokenURL } from './auth'; +const browserWindow = new remote.BrowserWindow(); + describe('utils/auth.tsx', () => { describe('authGitHub', () => { const loadURLMock = jest.spyOn(browserWindow, 'loadURL'); diff --git a/src/utils/auth.ts b/src/utils/auth.ts index 62a052bac..951c9f51d 100644 --- a/src/utils/auth.ts +++ b/src/utils/auth.ts @@ -1,5 +1,4 @@ import { BrowserWindow } from '@electron/remote'; - import { format } from 'date-fns'; import type { AuthResponse, diff --git a/src/utils/notifications.test.ts b/src/utils/notifications.test.ts index b679131ba..667f08187 100644 --- a/src/utils/notifications.test.ts +++ b/src/utils/notifications.test.ts @@ -1,5 +1,4 @@ import { ipcRenderer } from 'electron'; - import { mockAccounts, mockSettings } from '../__mocks__/mock-state'; import { mockedAccountNotifications, diff --git a/src/utils/notifications.ts b/src/utils/notifications.ts index 9b6b34094..4856b6c2b 100644 --- a/src/utils/notifications.ts +++ b/src/utils/notifications.ts @@ -1,14 +1,13 @@ import { ipcRenderer } from 'electron'; +import type { AccountNotifications, AuthState, SettingsState } from '../types'; import { Notification } from '../typesGitHub'; import { getTokenForHost, isPersonalAccessTokenLoggedIn, openInBrowser, } from '../utils/helpers'; -import { updateTrayIcon } from './comms'; - -import type { AccountNotifications, AuthState, SettingsState } from '../types'; import { listNotificationsForAuthenticatedUser } from './api/client'; +import { updateTrayIcon } from './comms'; import Constants from './constants'; import { getGitifySubjectDetails } from './subject'; diff --git a/src/utils/subject.test.ts b/src/utils/subject.test.ts index 758f13919..497c6686f 100644 --- a/src/utils/subject.test.ts +++ b/src/utils/subject.test.ts @@ -1,6 +1,5 @@ import axios from 'axios'; import nock from 'nock'; - import { mockAccounts } from '../__mocks__/mock-state'; import { partialMockNotification, From 7a3b09c56714d2e78865a3a37368bfa65108e1f4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 26 May 2024 02:40:39 -1000 Subject: [PATCH 117/251] chore(deps): update dependency electron to v30.0.8 (#1146) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 24 +++++++++++++----------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 3dbe84ddc..a8707e323 100644 --- a/package.json +++ b/package.json @@ -135,7 +135,7 @@ "@types/react-transition-group": "4.4.10", "autoprefixer": "10.4.19", "css-loader": "7.1.1", - "electron": "30.0.6", + "electron": "30.0.8", "electron-builder": "24.13.3", "graphql-tag": "2.12.6", "husky": "9.0.11", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 54892ac9a..9fef7b999 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: '@electron/remote': specifier: 2.1.2 - version: 2.1.2(electron@30.0.6) + version: 2.1.2(electron@30.0.8) '@primer/octicons-react': specifier: 19.9.0 version: 19.9.0(react@18.3.1) @@ -28,7 +28,7 @@ importers: version: 4.20.10 menubar: specifier: 9.4.0 - version: 9.4.0(electron@30.0.6) + version: 9.4.0(electron@30.0.8) nprogress: specifier: 0.2.0 version: 0.2.0 @@ -88,8 +88,8 @@ importers: specifier: 7.1.1 version: 7.1.1(webpack@5.91.0(webpack-cli@5.1.4)) electron: - specifier: 30.0.6 - version: 30.0.6 + specifier: 30.0.8 + version: 30.0.8 electron-builder: specifier: 24.13.3 version: 24.13.3(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3)) @@ -1365,8 +1365,8 @@ packages: electron-updater@6.1.8: resolution: {integrity: sha512-hhOTfaFAd6wRHAfUaBhnAOYc+ymSGCWJLtFkw4xJqOvtpHmIdNHnXDV9m1MHC+A6q08Abx4Ykgyz/R5DGKNAMQ==} - electron@30.0.6: - resolution: {integrity: sha512-PkhEPFdpYcTzjAO3gMHZ+map7g2+xCrMDedo/L1i0ir2BRXvAB93IkTJX497U6Srb/09r2cFt+k20VPNVCdw3Q==} + electron@30.0.8: + resolution: {integrity: sha512-ivzXJJ/9gdb4oOw+5SDuaZpSInz8C+Z021dKZfFLMltKbDa4sSqt5cRBiUg7J36Z2kdus+Jai0bdHWutYE9wAA==} engines: {node: '>= 12.20.55'} hasBin: true @@ -1625,6 +1625,7 @@ packages: glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported global-agent@3.0.0: resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} @@ -1749,6 +1750,7 @@ packages: inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -3473,9 +3475,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@electron/remote@2.1.2(electron@30.0.6)': + '@electron/remote@2.1.2(electron@30.0.8)': dependencies: - electron: 30.0.6 + electron: 30.0.8 '@electron/universal@1.5.1': dependencies: @@ -4710,7 +4712,7 @@ snapshots: transitivePeerDependencies: - supports-color - electron@30.0.6: + electron@30.0.8: dependencies: '@electron/get': 2.0.3 '@types/node': 20.12.12 @@ -5681,9 +5683,9 @@ snapshots: escape-string-regexp: 4.0.0 optional: true - menubar@9.4.0(electron@30.0.6): + menubar@9.4.0(electron@30.0.8): dependencies: - electron: 30.0.6 + electron: 30.0.8 electron-positioner: 4.1.0 merge-stream@2.0.0: {} From 75cded0c478a51e27cbdcd725b88bc9ef4013daa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 26 May 2024 02:42:27 -1000 Subject: [PATCH 118/251] chore(deps): update dependency @types/react to v18.3.3 (#1144) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index a8707e323..6b2541cd9 100644 --- a/package.json +++ b/package.json @@ -130,7 +130,7 @@ "@types/jest": "29.5.12", "@types/node": "20.12.12", "@types/nprogress": "0.2.3", - "@types/react": "18.3.2", + "@types/react": "18.3.3", "@types/react-router-dom": "5.3.3", "@types/react-transition-group": "4.4.10", "autoprefixer": "10.4.19", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9fef7b999..2f35facd6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -62,7 +62,7 @@ importers: version: 2.3.2 '@testing-library/react': specifier: 15.0.7 - version: 15.0.7(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 15.0.7(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/jest': specifier: 29.5.12 version: 29.5.12 @@ -73,8 +73,8 @@ importers: specifier: 0.2.3 version: 0.2.3 '@types/react': - specifier: 18.3.2 - version: 18.3.2 + specifier: 18.3.3 + version: 18.3.3 '@types/react-router-dom': specifier: 5.3.3 version: 5.3.3 @@ -693,8 +693,8 @@ packages: '@types/react-transition-group@4.4.10': resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==} - '@types/react@18.3.2': - resolution: {integrity: sha512-Btgg89dAnqD4vV7R3hlwOxgqobUQKgx3MmrQRi0yYbs/P0ym8XozIAlkqVilPqHQwXs4e9Tf63rrCgl58BcO4w==} + '@types/react@18.3.3': + resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} @@ -3760,7 +3760,7 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/react@15.0.7(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@testing-library/react@15.0.7(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.1 '@testing-library/dom': 10.0.0 @@ -3768,7 +3768,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.2 + '@types/react': 18.3.3 '@tootallnate/once@2.0.0': {} @@ -3883,24 +3883,24 @@ snapshots: '@types/react-dom@18.2.22': dependencies: - '@types/react': 18.3.2 + '@types/react': 18.3.3 '@types/react-router-dom@5.3.3': dependencies: '@types/history': 4.7.11 - '@types/react': 18.3.2 + '@types/react': 18.3.3 '@types/react-router': 5.1.20 '@types/react-router@5.1.20': dependencies: '@types/history': 4.7.11 - '@types/react': 18.3.2 + '@types/react': 18.3.3 '@types/react-transition-group@4.4.10': dependencies: - '@types/react': 18.3.2 + '@types/react': 18.3.3 - '@types/react@18.3.2': + '@types/react@18.3.3': dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 From f33afcf916265ed1f6a3b8d811d3719d84ab32b5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 26 May 2024 02:42:45 -1000 Subject: [PATCH 119/251] chore(deps): update dependency css-loader to v7.1.2 (#1145) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 6b2541cd9..2cce26ed1 100644 --- a/package.json +++ b/package.json @@ -134,7 +134,7 @@ "@types/react-router-dom": "5.3.3", "@types/react-transition-group": "4.4.10", "autoprefixer": "10.4.19", - "css-loader": "7.1.1", + "css-loader": "7.1.2", "electron": "30.0.8", "electron-builder": "24.13.3", "graphql-tag": "2.12.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2f35facd6..e5b986fd7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -85,8 +85,8 @@ importers: specifier: 10.4.19 version: 10.4.19(postcss@8.4.38) css-loader: - specifier: 7.1.1 - version: 7.1.1(webpack@5.91.0(webpack-cli@5.1.4)) + specifier: 7.1.2 + version: 7.1.2(webpack@5.91.0(webpack-cli@5.1.4)) electron: specifier: 30.0.8 version: 30.0.8 @@ -1201,8 +1201,8 @@ packages: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} - css-loader@7.1.1: - resolution: {integrity: sha512-OxIR5P2mjO1PSXk44bWuQ8XtMK4dpEqpIyERCx3ewOo3I8EmbcxMPUc5ScLtQfgXtOojoMv57So4V/C02HQLsw==} + css-loader@7.1.2: + resolution: {integrity: sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==} engines: {node: '>= 18.12.0'} peerDependencies: '@rspack/core': 0.x || 1.x @@ -4524,7 +4524,7 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-loader@7.1.1(webpack@5.91.0(webpack-cli@5.1.4)): + css-loader@7.1.2(webpack@5.91.0(webpack-cli@5.1.4)): dependencies: icss-utils: 5.1.0(postcss@8.4.38) postcss: 8.4.38 From 40fa9881066bf592c268f15bf1899d57fc8d59a1 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Sun, 26 May 2024 14:50:07 -1000 Subject: [PATCH 120/251] refactor: update import statements (#1143) --- src/components/Repository.test.tsx | 2 +- src/components/Sidebar.test.tsx | 2 +- src/routes/Login.test.tsx | 2 +- src/routes/Login.tsx | 2 +- src/routes/LoginWithOAuthApp.test.tsx | 4 ++-- src/routes/LoginWithOAuthApp.tsx | 4 ++-- src/routes/Settings.test.tsx | 3 +-- 7 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/components/Repository.test.tsx b/src/components/Repository.test.tsx index 16d579c81..f6f7f5c69 100644 --- a/src/components/Repository.test.tsx +++ b/src/components/Repository.test.tsx @@ -1,8 +1,8 @@ import { fireEvent, render, screen } from '@testing-library/react'; +import { shell } from 'electron'; import { mockedGitHubNotifications } from '../__mocks__/mockedData'; import { AppContext } from '../context/App'; import { RepositoryNotifications } from './Repository'; -const { shell } = require('electron'); jest.mock('./NotificationRow', () => ({ NotificationRow: () =>
NotificationRow
, diff --git a/src/components/Sidebar.test.tsx b/src/components/Sidebar.test.tsx index 463fe4054..3b8c59a6b 100644 --- a/src/components/Sidebar.test.tsx +++ b/src/components/Sidebar.test.tsx @@ -1,6 +1,6 @@ import { fireEvent, render, screen } from '@testing-library/react'; +import { ipcRenderer, shell } from 'electron'; import { MemoryRouter } from 'react-router-dom'; -const { shell, ipcRenderer } = require('electron'); import { mockSettings } from '../__mocks__/mock-state'; import { mockedAccountNotifications } from '../__mocks__/mockedData'; import { AppContext } from '../context/App'; diff --git a/src/routes/Login.test.tsx b/src/routes/Login.test.tsx index 588d2e5e1..d6d064632 100644 --- a/src/routes/Login.test.tsx +++ b/src/routes/Login.test.tsx @@ -1,6 +1,6 @@ import { fireEvent, render, screen } from '@testing-library/react'; +import { ipcRenderer } from 'electron'; import { MemoryRouter } from 'react-router-dom'; -const { ipcRenderer } = require('electron'); import { AppContext } from '../context/App'; import { LoginRoute } from './Login'; diff --git a/src/routes/Login.tsx b/src/routes/Login.tsx index 3e9506dcd..8e70f9f33 100644 --- a/src/routes/Login.tsx +++ b/src/routes/Login.tsx @@ -1,5 +1,5 @@ -const { ipcRenderer } = require('electron'); import { KeyIcon, PersonIcon } from '@primer/octicons-react'; +import { ipcRenderer } from 'electron'; import { type FC, useContext, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { Logo } from '../components/Logo'; diff --git a/src/routes/LoginWithOAuthApp.test.tsx b/src/routes/LoginWithOAuthApp.test.tsx index 0f25f652b..957c4bd0a 100644 --- a/src/routes/LoginWithOAuthApp.test.tsx +++ b/src/routes/LoginWithOAuthApp.test.tsx @@ -1,7 +1,7 @@ import { fireEvent, render, screen } from '@testing-library/react'; -import { MemoryRouter } from 'react-router-dom'; -const { ipcRenderer } = require('electron'); +import { ipcRenderer } from 'electron'; import { shell } from 'electron'; +import { MemoryRouter } from 'react-router-dom'; import { mockedEnterpriseAccounts } from '../__mocks__/mockedData'; import { AppContext } from '../context/App'; import type { AuthState } from '../types'; diff --git a/src/routes/LoginWithOAuthApp.tsx b/src/routes/LoginWithOAuthApp.tsx index c4e35fa09..3f66d6eb5 100644 --- a/src/routes/LoginWithOAuthApp.tsx +++ b/src/routes/LoginWithOAuthApp.tsx @@ -1,10 +1,10 @@ -const ipcRenderer = require('electron').ipcRenderer; import { ArrowLeftIcon, BookIcon, PersonIcon, SignInIcon, } from '@primer/octicons-react'; +import ipcRenderer from 'electron'; import { type FC, useCallback, useContext, useEffect } from 'react'; import { Form, type FormRenderProps } from 'react-final-form'; import { useNavigate } from 'react-router-dom'; @@ -65,7 +65,7 @@ export const LoginWithOAuthApp: FC = () => { useEffect(() => { if (enterpriseAccounts.length) { - ipcRenderer.send('reopen-window'); + ipcRenderer.ipcRenderer.send('reopen-window'); navigate(-1); } }, [enterpriseAccounts]); diff --git a/src/routes/Settings.test.tsx b/src/routes/Settings.test.tsx index cbeb5b006..a8701a277 100644 --- a/src/routes/Settings.test.tsx +++ b/src/routes/Settings.test.tsx @@ -1,7 +1,6 @@ import { act, fireEvent, render, screen } from '@testing-library/react'; +import { ipcRenderer, shell } from 'electron'; import { MemoryRouter } from 'react-router-dom'; -const { ipcRenderer } = require('electron'); -import { shell } from 'electron'; import { mockAccounts, mockSettings } from '../__mocks__/mock-state'; import { AppContext } from '../context/App'; import { SettingsRoute } from './Settings'; From e3dbb24a199624afdf667517e4317afcce01d920 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Mon, 27 May 2024 15:29:24 -1000 Subject: [PATCH 121/251] refactor(mocks): use consistent naming (#1142) * refactor(mocks): use consistent naming * refactor(mocks): rename mocks --- src/__mocks__/mock-state.ts | 22 ----- src/__mocks__/notifications-mocks.ts | 24 +++++ src/__mocks__/state-mocks.ts | 40 ++++++++ src/components/AccountNotifications.test.tsx | 4 +- src/components/NotificationRow.test.tsx | 32 +++---- src/components/Repository.test.tsx | 4 +- src/components/Sidebar.test.tsx | 12 +-- src/context/App.test.tsx | 3 +- src/hooks/useNotifications.test.ts | 17 ++-- src/routes/LoginWithOAuthApp.test.tsx | 4 +- src/routes/Notifications.test.tsx | 10 +- src/routes/Settings.test.tsx | 2 +- .../api/__mocks__/response-mocks.ts} | 55 ++--------- src/utils/helpers.test.ts | 93 +++++++++---------- src/utils/notifications.test.ts | 28 +++--- src/utils/remove-notification.test.ts | 24 +++-- src/utils/remove-notifications.test.ts | 22 ++--- src/utils/storage.test.ts | 2 +- src/utils/subject.test.ts | 13 +-- 19 files changed, 210 insertions(+), 201 deletions(-) delete mode 100644 src/__mocks__/mock-state.ts create mode 100644 src/__mocks__/notifications-mocks.ts create mode 100644 src/__mocks__/state-mocks.ts rename src/{__mocks__/mockedData.ts => utils/api/__mocks__/response-mocks.ts} (93%) diff --git a/src/__mocks__/mock-state.ts b/src/__mocks__/mock-state.ts deleted file mode 100644 index 4a930d0e7..000000000 --- a/src/__mocks__/mock-state.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { type AuthState, type SettingsState, Theme } from '../types'; -import { mockedEnterpriseAccounts, mockedUser } from './mockedData'; - -export const mockAccounts: AuthState = { - token: 'token-123-456', - enterpriseAccounts: mockedEnterpriseAccounts, - user: mockedUser, -}; - -export const mockSettings: SettingsState = { - participating: false, - playSound: true, - showNotifications: true, - showBots: true, - showNotificationsCountInTray: false, - openAtStartup: false, - theme: Theme.SYSTEM, - detailedNotifications: true, - markAsDoneOnOpen: false, - showAccountHostname: false, - delayNotificationState: false, -}; diff --git a/src/__mocks__/notifications-mocks.ts b/src/__mocks__/notifications-mocks.ts new file mode 100644 index 000000000..a4a359f10 --- /dev/null +++ b/src/__mocks__/notifications-mocks.ts @@ -0,0 +1,24 @@ +import type { AccountNotifications } from '../types'; +import { + mockEnterpriseNotifications, + mockGitHubNotifications, + mockSingleNotification, +} from '../utils/api/__mocks__/response-mocks'; + +export const mockAccountNotifications: AccountNotifications[] = [ + { + hostname: 'github.com', + notifications: mockGitHubNotifications, + }, + { + hostname: 'github.gitify.io', + notifications: mockEnterpriseNotifications, + }, +]; + +export const mockSingleAccountNotifications: AccountNotifications[] = [ + { + hostname: 'github.com', + notifications: [mockSingleNotification], + }, +]; diff --git a/src/__mocks__/state-mocks.ts b/src/__mocks__/state-mocks.ts new file mode 100644 index 000000000..4a701fab6 --- /dev/null +++ b/src/__mocks__/state-mocks.ts @@ -0,0 +1,40 @@ +import { + type AuthState, + type EnterpriseAccount, + type GitifyUser, + type SettingsState, + Theme, +} from '../types'; + +export const mockEnterpriseAccounts: EnterpriseAccount[] = [ + { + hostname: 'github.gitify.io', + token: '1234568790', + }, +]; + +export const mockUser: GitifyUser = { + login: 'octocat', + name: 'Mona Lisa Octocat', + id: 123456789, +}; + +export const mockAccounts: AuthState = { + token: 'token-123-456', + enterpriseAccounts: mockEnterpriseAccounts, + user: mockUser, +}; + +export const mockSettings: SettingsState = { + participating: false, + playSound: true, + showNotifications: true, + showBots: true, + showNotificationsCountInTray: false, + openAtStartup: false, + theme: Theme.SYSTEM, + detailedNotifications: true, + markAsDoneOnOpen: false, + showAccountHostname: false, + delayNotificationState: false, +}; diff --git a/src/components/AccountNotifications.test.tsx b/src/components/AccountNotifications.test.tsx index 3c87901a5..f52955e5b 100644 --- a/src/components/AccountNotifications.test.tsx +++ b/src/components/AccountNotifications.test.tsx @@ -1,5 +1,5 @@ import { render } from '@testing-library/react'; -import { mockedGitHubNotifications } from '../__mocks__/mockedData'; +import { mockGitHubNotifications } from '../utils/api/__mocks__/response-mocks'; import { AccountNotifications } from './AccountNotifications'; jest.mock('./Repository', () => ({ @@ -10,7 +10,7 @@ describe('components/AccountNotifications.tsx', () => { it('should render itself (github.com with notifications)', () => { const props = { hostname: 'github.com', - notifications: mockedGitHubNotifications, + notifications: mockGitHubNotifications, showAccountHostname: true, }; diff --git a/src/components/NotificationRow.test.tsx b/src/components/NotificationRow.test.tsx index b751bfd11..6657a9bad 100644 --- a/src/components/NotificationRow.test.tsx +++ b/src/components/NotificationRow.test.tsx @@ -1,9 +1,9 @@ import { fireEvent, render, screen } from '@testing-library/react'; import { shell } from 'electron'; -import { mockAccounts, mockSettings } from '../__mocks__/mock-state'; -import { mockedSingleNotification } from '../__mocks__/mockedData'; +import { mockAccounts, mockSettings } from '../__mocks__/state-mocks'; import { AppContext } from '../context/App'; import type { UserType } from '../typesGitHub'; +import { mockSingleNotification } from '../utils/api/__mocks__/response-mocks'; import * as helpers from '../utils/helpers'; import { NotificationRow } from './NotificationRow'; @@ -22,7 +22,7 @@ describe('components/NotificationRow.tsx', () => { .mockImplementation(() => new Date('2024').valueOf()); const props = { - notification: mockedSingleNotification, + notification: mockSingleNotification, hostname: 'github.com', }; @@ -35,7 +35,7 @@ describe('components/NotificationRow.tsx', () => { .spyOn(global.Date, 'now') .mockImplementation(() => new Date('2024').valueOf()); - const mockNotification = mockedSingleNotification; + const mockNotification = mockSingleNotification; mockNotification.last_read_at = null; const props = { @@ -52,7 +52,7 @@ describe('components/NotificationRow.tsx', () => { .spyOn(global.Date, 'now') .mockImplementation(() => new Date('2024').valueOf()); - const mockNotification = mockedSingleNotification; + const mockNotification = mockSingleNotification; mockNotification.subject.user = null; const props = { @@ -70,7 +70,7 @@ describe('components/NotificationRow.tsx', () => { .spyOn(global.Date, 'now') .mockImplementation(() => new Date('2024').valueOf()); - const mockNotification = mockedSingleNotification; + const mockNotification = mockSingleNotification; mockNotification.subject.comments = null; const props = { @@ -87,7 +87,7 @@ describe('components/NotificationRow.tsx', () => { .spyOn(global.Date, 'now') .mockImplementation(() => new Date('2024').valueOf()); - const mockNotification = mockedSingleNotification; + const mockNotification = mockSingleNotification; mockNotification.subject.comments = 1; const props = { @@ -104,7 +104,7 @@ describe('components/NotificationRow.tsx', () => { .spyOn(global.Date, 'now') .mockImplementation(() => new Date('2024').valueOf()); - const mockNotification = mockedSingleNotification; + const mockNotification = mockSingleNotification; mockNotification.subject.comments = 2; const props = { @@ -122,7 +122,7 @@ describe('components/NotificationRow.tsx', () => { const removeNotificationFromState = jest.fn(); const props = { - notification: mockedSingleNotification, + notification: mockSingleNotification, hostname: 'github.com', }; @@ -147,7 +147,7 @@ describe('components/NotificationRow.tsx', () => { const removeNotificationFromState = jest.fn(); const props = { - notification: mockedSingleNotification, + notification: mockSingleNotification, hostname: 'github.com', }; @@ -172,7 +172,7 @@ describe('components/NotificationRow.tsx', () => { const markNotificationDone = jest.fn(); const props = { - notification: mockedSingleNotification, + notification: mockSingleNotification, hostname: 'github.com', }; @@ -197,7 +197,7 @@ describe('components/NotificationRow.tsx', () => { const markNotificationRead = jest.fn(); const props = { - notification: mockedSingleNotification, + notification: mockSingleNotification, hostname: 'github.com', }; @@ -222,7 +222,7 @@ describe('components/NotificationRow.tsx', () => { const markNotificationDone = jest.fn(); const props = { - notification: mockedSingleNotification, + notification: mockSingleNotification, hostname: 'github.com', }; @@ -247,7 +247,7 @@ describe('components/NotificationRow.tsx', () => { const unsubscribeNotification = jest.fn(); const props = { - notification: mockedSingleNotification, + notification: mockSingleNotification, hostname: 'github.com', }; @@ -265,9 +265,9 @@ describe('components/NotificationRow.tsx', () => { it('should open notification user profile', () => { const props = { notification: { - ...mockedSingleNotification, + ...mockSingleNotification, subject: { - ...mockedSingleNotification.subject, + ...mockSingleNotification.subject, user: { login: 'some-user', html_url: 'https://github.com/some-user', diff --git a/src/components/Repository.test.tsx b/src/components/Repository.test.tsx index f6f7f5c69..888e76584 100644 --- a/src/components/Repository.test.tsx +++ b/src/components/Repository.test.tsx @@ -1,7 +1,7 @@ import { fireEvent, render, screen } from '@testing-library/react'; import { shell } from 'electron'; -import { mockedGitHubNotifications } from '../__mocks__/mockedData'; import { AppContext } from '../context/App'; +import { mockGitHubNotifications } from '../utils/api/__mocks__/response-mocks'; import { RepositoryNotifications } from './Repository'; jest.mock('./NotificationRow', () => ({ @@ -15,7 +15,7 @@ describe('components/Repository.tsx', () => { const props = { hostname: 'github.com', repoName: 'gitify-app/notifications-test', - repoNotifications: mockedGitHubNotifications, + repoNotifications: mockGitHubNotifications, }; beforeEach(() => { diff --git a/src/components/Sidebar.test.tsx b/src/components/Sidebar.test.tsx index 3b8c59a6b..a100c21c8 100644 --- a/src/components/Sidebar.test.tsx +++ b/src/components/Sidebar.test.tsx @@ -1,8 +1,8 @@ import { fireEvent, render, screen } from '@testing-library/react'; import { ipcRenderer, shell } from 'electron'; import { MemoryRouter } from 'react-router-dom'; -import { mockSettings } from '../__mocks__/mock-state'; -import { mockedAccountNotifications } from '../__mocks__/mockedData'; +import { mockAccountNotifications } from '../__mocks__/notifications-mocks'; +import { mockSettings } from '../__mocks__/state-mocks'; import { AppContext } from '../context/App'; import { Sidebar } from './Sidebar'; @@ -32,7 +32,7 @@ describe('components/Sidebar.tsx', () => { @@ -46,7 +46,7 @@ describe('components/Sidebar.tsx', () => { it('should render itself & its children (logged out)', () => { const tree = render( @@ -131,7 +131,7 @@ describe('components/Sidebar.tsx', () => { @@ -195,7 +195,7 @@ describe('components/Sidebar.tsx', () => { diff --git a/src/context/App.test.tsx b/src/context/App.test.tsx index 7d569dbf6..0ab7083f2 100644 --- a/src/context/App.test.tsx +++ b/src/context/App.test.tsx @@ -1,6 +1,7 @@ import { act, fireEvent, render, waitFor } from '@testing-library/react'; import { useContext } from 'react'; -import { mockAccounts, mockSettings } from '../__mocks__/mock-state'; + +import { mockAccounts, mockSettings } from '../__mocks__/state-mocks'; import { useNotifications } from '../hooks/useNotifications'; import type { AuthState, SettingsState } from '../types'; import * as apiRequests from '../utils/api/request'; diff --git a/src/hooks/useNotifications.test.ts b/src/hooks/useNotifications.test.ts index 30539cd45..0eedb7527 100644 --- a/src/hooks/useNotifications.test.ts +++ b/src/hooks/useNotifications.test.ts @@ -1,9 +1,10 @@ import { act, renderHook, waitFor } from '@testing-library/react'; import axios, { AxiosError } from 'axios'; import nock from 'nock'; -import { mockAccounts, mockSettings } from '../__mocks__/mock-state'; -import { mockedNotificationUser, mockedUser } from '../__mocks__/mockedData'; + +import { mockAccounts, mockSettings, mockUser } from '../__mocks__/state-mocks'; import type { AuthState } from '../types'; +import { mockNotificationUser } from '../utils/api/__mocks__/response-mocks'; import { Errors } from '../utils/constants'; import { useNotifications } from './useNotifications'; @@ -169,7 +170,7 @@ describe('hooks/useNotifications.ts', () => { const accounts: AuthState = { ...mockAccounts, enterpriseAccounts: [], - user: mockedUser, + user: mockUser, }; const notifications = [ @@ -234,7 +235,7 @@ describe('hooks/useNotifications.ts', () => { const accounts: AuthState = { ...mockAccounts, enterpriseAccounts: [], - user: mockedUser, + user: mockUser, }; const notifications = [ @@ -366,24 +367,24 @@ describe('hooks/useNotifications.ts', () => { .reply(200, { state: 'closed', merged: true, - user: mockedNotificationUser, + user: mockNotificationUser, }); nock('https://api.github.com') .get('/repos/gitify-app/notifications-test/issues/3/comments') .reply(200, { - user: mockedNotificationUser, + user: mockNotificationUser, }); nock('https://api.github.com') .get('/repos/gitify-app/notifications-test/pulls/4') .reply(200, { state: 'closed', merged: false, - user: mockedNotificationUser, + user: mockNotificationUser, }); nock('https://api.github.com') .get('/repos/gitify-app/notifications-test/issues/4/comments') .reply(200, { - user: mockedNotificationUser, + user: mockNotificationUser, }); const { result } = renderHook(() => useNotifications()); diff --git a/src/routes/LoginWithOAuthApp.test.tsx b/src/routes/LoginWithOAuthApp.test.tsx index 957c4bd0a..3a34c277e 100644 --- a/src/routes/LoginWithOAuthApp.test.tsx +++ b/src/routes/LoginWithOAuthApp.test.tsx @@ -2,7 +2,7 @@ import { fireEvent, render, screen } from '@testing-library/react'; import { ipcRenderer } from 'electron'; import { shell } from 'electron'; import { MemoryRouter } from 'react-router-dom'; -import { mockedEnterpriseAccounts } from '../__mocks__/mockedData'; +import { mockEnterpriseAccounts } from '../__mocks__/state-mocks'; import { AppContext } from '../context/App'; import type { AuthState } from '../types'; import { LoginWithOAuthApp, validate } from './LoginWithOAuthApp'; @@ -125,7 +125,7 @@ describe('routes/LoginWithOAuthApp.tsx', () => { ({ describe('routes/Notifications.tsx', () => { it('should render itself & its children (with notifications)', () => { const tree = render( - + , ); @@ -43,7 +41,7 @@ describe('routes/Notifications.tsx', () => { const tree = render( diff --git a/src/routes/Settings.test.tsx b/src/routes/Settings.test.tsx index a8701a277..5049dd3e0 100644 --- a/src/routes/Settings.test.tsx +++ b/src/routes/Settings.test.tsx @@ -1,7 +1,7 @@ import { act, fireEvent, render, screen } from '@testing-library/react'; import { ipcRenderer, shell } from 'electron'; import { MemoryRouter } from 'react-router-dom'; -import { mockAccounts, mockSettings } from '../__mocks__/mock-state'; +import { mockAccounts, mockSettings } from '../__mocks__/state-mocks'; import { AppContext } from '../context/App'; import { SettingsRoute } from './Settings'; diff --git a/src/__mocks__/mockedData.ts b/src/utils/api/__mocks__/response-mocks.ts similarity index 93% rename from src/__mocks__/mockedData.ts rename to src/utils/api/__mocks__/response-mocks.ts index 085fa8e1a..dcaf441b5 100644 --- a/src/__mocks__/mockedData.ts +++ b/src/utils/api/__mocks__/response-mocks.ts @@ -1,8 +1,3 @@ -import type { - AccountNotifications, - EnterpriseAccount, - GitifyUser, -} from '../types'; import type { Discussion, DiscussionAuthor, @@ -11,23 +6,10 @@ import type { Notification, Repository, User, -} from '../typesGitHub'; -import Constants from '../utils/constants'; - -export const mockedEnterpriseAccounts: EnterpriseAccount[] = [ - { - hostname: 'github.gitify.io', - token: '1234568790', - }, -]; +} from '../../../typesGitHub'; +import Constants from '../../constants'; -export const mockedUser: GitifyUser = { - login: 'octocat', - name: 'Mona Lisa Octocat', - id: 123456789, -}; - -export const mockedNotificationUser: User = { +export const mockNotificationUser: User = { login: 'octocat', id: 123456789, node_id: 'MDQ6VXNlcjE=', @@ -49,8 +31,9 @@ export const mockedNotificationUser: User = { }; // 2 Notifications +// Hostname : 'github.com' // Repository : 'gitify-app/notifications-test' -export const mockedGitHubNotifications: Notification[] = [ +export const mockGitHubNotifications: Notification[] = [ { hostname: Constants.GITHUB_API_BASE_URL, id: '138661096', @@ -255,8 +238,9 @@ export const mockedGitHubNotifications: Notification[] = [ ]; // 2 Notifications +// Hostname : 'github.gitify.io' // Repository : 'myorg/notifications-test' -export const mockedEnterpriseNotifications: Notification[] = [ +export const mockEnterpriseNotifications: Notification[] = [ { hostname: 'https://github.gitify.io/api/v3', id: '3', @@ -367,27 +351,6 @@ export const mockedEnterpriseNotifications: Notification[] = [ }, ]; -export const mockedSingleNotification: Notification = - mockedGitHubNotifications[0]; - -export const mockedAccountNotifications: AccountNotifications[] = [ - { - hostname: 'github.com', - notifications: mockedGitHubNotifications, - }, - { - hostname: 'github.gitify.io', - notifications: mockedEnterpriseNotifications, - }, -]; - -export const mockedSingleAccountNotifications: AccountNotifications[] = [ - { - hostname: 'github.com', - notifications: [mockedSingleNotification], - }, -]; - const mockDiscussionAuthor: DiscussionAuthor = { login: 'comment-user', url: 'https://github.com/comment-user', @@ -422,7 +385,7 @@ export const mockDiscussionComments: DiscussionComments = { totalCount: 2, }; -export const mockedGraphQLResponse: GraphQLSearch = { +export const mockGraphQLResponse: GraphQLSearch = { data: { search: { nodes: [ @@ -443,3 +406,5 @@ export const mockedGraphQLResponse: GraphQLSearch = { }, }, }; + +export const mockSingleNotification: Notification = mockGitHubNotifications[0]; diff --git a/src/utils/helpers.test.ts b/src/utils/helpers.test.ts index d22a64113..533330085 100644 --- a/src/utils/helpers.test.ts +++ b/src/utils/helpers.test.ts @@ -1,11 +1,10 @@ import type { AxiosPromise, AxiosResponse } from 'axios'; -import { mockAccounts } from '../__mocks__/mock-state'; -import { - mockedGraphQLResponse, - mockedSingleNotification, - mockedUser, -} from '../__mocks__/mockedData'; +import { mockAccounts, mockUser } from '../__mocks__/state-mocks'; import type { SubjectType } from '../typesGitHub'; +import { + mockGraphQLResponse, + mockSingleNotification, +} from './api/__mocks__/response-mocks'; import * as apiRequests from './api/request'; import { formatForDisplay, @@ -67,8 +66,8 @@ describe('utils/helpers.ts', () => { describe('generateNotificationReferrerId', () => { it('should generate the notification_referrer_id', () => { const referrerId = generateNotificationReferrerId( - mockedSingleNotification.id, - mockedUser.id, + mockSingleNotification.id, + mockUser.id, ); expect(referrerId).toBe( 'MDE4Ok5vdGlmaWNhdGlvblRocmVhZDEzODY2MTA5NjoxMjM0NTY3ODk=', @@ -77,9 +76,9 @@ describe('utils/helpers.ts', () => { }); describe('generateGitHubWebUrl', () => { - const mockedHtmlUrl = + const mockHtmlUrl = 'https://github.com/gitify-app/notifications-test/issues/785'; - const mockedNotificationReferrer = + const mockNotificationReferrer = 'notification_referrer_id=MDE4Ok5vdGlmaWNhdGlvblRocmVhZDEzODY2MTA5NjoxMjM0NTY3ODk%3D'; const apiRequestAuthMock = jest.spyOn(apiRequests, 'apiRequestAuth'); @@ -99,7 +98,7 @@ describe('utils/helpers.ts', () => { const requestPromise = new Promise((resolve) => resolve({ data: { - html_url: mockedHtmlUrl, + html_url: mockHtmlUrl, }, } as AxiosResponse), ) as AxiosPromise; @@ -108,7 +107,7 @@ describe('utils/helpers.ts', () => { const result = await generateGitHubWebUrl( { - ...mockedSingleNotification, + ...mockSingleNotification, subject: subject, }, mockAccounts, @@ -120,7 +119,7 @@ describe('utils/helpers.ts', () => { 'GET', mockAccounts.token, ); - expect(result).toBe(`${mockedHtmlUrl}?${mockedNotificationReferrer}`); + expect(result).toBe(`${mockHtmlUrl}?${mockNotificationReferrer}`); }); it('Subject Url: when no latest comment url available, fetch subject html url', async () => { @@ -134,7 +133,7 @@ describe('utils/helpers.ts', () => { const requestPromise = new Promise((resolve) => resolve({ data: { - html_url: mockedHtmlUrl, + html_url: mockHtmlUrl, }, } as AxiosResponse), ) as AxiosPromise; @@ -143,7 +142,7 @@ describe('utils/helpers.ts', () => { const result = await generateGitHubWebUrl( { - ...mockedSingleNotification, + ...mockSingleNotification, subject: subject, }, mockAccounts, @@ -155,7 +154,7 @@ describe('utils/helpers.ts', () => { 'GET', mockAccounts.token, ); - expect(result).toBe(`${mockedHtmlUrl}?${mockedNotificationReferrer}`); + expect(result).toBe(`${mockHtmlUrl}?${mockNotificationReferrer}`); }); describe('Check Suite URLs', () => { @@ -169,7 +168,7 @@ describe('utils/helpers.ts', () => { const result = await generateGitHubWebUrl( { - ...mockedSingleNotification, + ...mockSingleNotification, subject: subject, }, mockAccounts, @@ -177,7 +176,7 @@ describe('utils/helpers.ts', () => { expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); expect(result).toBe( - `https://github.com/gitify-app/notifications-test/actions?query=workflow%3A%22Demo%22+is%3Asuccess+branch%3Amain&${mockedNotificationReferrer}`, + `https://github.com/gitify-app/notifications-test/actions?query=workflow%3A%22Demo%22+is%3Asuccess+branch%3Amain&${mockNotificationReferrer}`, ); }); @@ -191,7 +190,7 @@ describe('utils/helpers.ts', () => { const result = await generateGitHubWebUrl( { - ...mockedSingleNotification, + ...mockSingleNotification, subject: subject, }, mockAccounts, @@ -199,7 +198,7 @@ describe('utils/helpers.ts', () => { expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); expect(result).toBe( - `https://github.com/gitify-app/notifications-test/actions?query=workflow%3A%22Demo%22+is%3Afailure+branch%3Amain&${mockedNotificationReferrer}`, + `https://github.com/gitify-app/notifications-test/actions?query=workflow%3A%22Demo%22+is%3Afailure+branch%3Amain&${mockNotificationReferrer}`, ); }); @@ -213,7 +212,7 @@ describe('utils/helpers.ts', () => { const result = await generateGitHubWebUrl( { - ...mockedSingleNotification, + ...mockSingleNotification, subject: subject, }, mockAccounts, @@ -221,7 +220,7 @@ describe('utils/helpers.ts', () => { expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); expect(result).toBe( - `https://github.com/gitify-app/notifications-test/actions?query=workflow%3A%22Demo%22+is%3Afailure+branch%3Amain&${mockedNotificationReferrer}`, + `https://github.com/gitify-app/notifications-test/actions?query=workflow%3A%22Demo%22+is%3Afailure+branch%3Amain&${mockNotificationReferrer}`, ); }); @@ -235,7 +234,7 @@ describe('utils/helpers.ts', () => { const result = await generateGitHubWebUrl( { - ...mockedSingleNotification, + ...mockSingleNotification, subject: subject, }, mockAccounts, @@ -243,7 +242,7 @@ describe('utils/helpers.ts', () => { expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); expect(result).toBe( - `https://github.com/gitify-app/notifications-test/actions?query=workflow%3A%22Demo%22+is%3Askipped+branch%3Amain&${mockedNotificationReferrer}`, + `https://github.com/gitify-app/notifications-test/actions?query=workflow%3A%22Demo%22+is%3Askipped+branch%3Amain&${mockNotificationReferrer}`, ); }); @@ -257,7 +256,7 @@ describe('utils/helpers.ts', () => { const result = await generateGitHubWebUrl( { - ...mockedSingleNotification, + ...mockSingleNotification, subject: subject, }, mockAccounts, @@ -265,7 +264,7 @@ describe('utils/helpers.ts', () => { expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); expect(result).toBe( - `https://github.com/gitify-app/notifications-test/actions?${mockedNotificationReferrer}`, + `https://github.com/gitify-app/notifications-test/actions?${mockNotificationReferrer}`, ); }); @@ -279,7 +278,7 @@ describe('utils/helpers.ts', () => { const result = await generateGitHubWebUrl( { - ...mockedSingleNotification, + ...mockSingleNotification, subject: subject, }, mockAccounts, @@ -287,7 +286,7 @@ describe('utils/helpers.ts', () => { expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); expect(result).toBe( - `https://github.com/gitify-app/notifications-test/actions?query=workflow%3A%22Demo%22+branch%3Amain&${mockedNotificationReferrer}`, + `https://github.com/gitify-app/notifications-test/actions?query=workflow%3A%22Demo%22+branch%3Amain&${mockNotificationReferrer}`, ); }); @@ -301,7 +300,7 @@ describe('utils/helpers.ts', () => { const result = await generateGitHubWebUrl( { - ...mockedSingleNotification, + ...mockSingleNotification, subject: subject, }, mockAccounts, @@ -309,7 +308,7 @@ describe('utils/helpers.ts', () => { expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); expect(result).toBe( - `https://github.com/gitify-app/notifications-test/actions?${mockedNotificationReferrer}`, + `https://github.com/gitify-app/notifications-test/actions?${mockNotificationReferrer}`, ); }); }); @@ -333,7 +332,7 @@ describe('utils/helpers.ts', () => { const result = await generateGitHubWebUrl( { - ...mockedSingleNotification, + ...mockSingleNotification, subject: subject, }, mockAccounts, @@ -341,7 +340,7 @@ describe('utils/helpers.ts', () => { expect(apiRequestAuthMock).toHaveBeenCalledTimes(1); expect(result).toBe( - `${mockedSingleNotification.repository.html_url}/discussions?${mockedNotificationReferrer}`, + `${mockSingleNotification.repository.html_url}/discussions?${mockNotificationReferrer}`, ); }); @@ -356,7 +355,7 @@ describe('utils/helpers.ts', () => { const requestPromise = new Promise((resolve) => resolve({ data: { - ...mockedGraphQLResponse, + ...mockGraphQLResponse, }, } as AxiosResponse), ) as AxiosPromise; @@ -365,7 +364,7 @@ describe('utils/helpers.ts', () => { const result = await generateGitHubWebUrl( { - ...mockedSingleNotification, + ...mockSingleNotification, subject: subject, }, mockAccounts, @@ -373,7 +372,7 @@ describe('utils/helpers.ts', () => { expect(apiRequestAuthMock).toHaveBeenCalledTimes(1); expect(result).toBe( - `https://github.com/gitify-app/notifications-test/discussions/612?${mockedNotificationReferrer}#discussioncomment-2300902`, + `https://github.com/gitify-app/notifications-test/discussions/612?${mockNotificationReferrer}#discussioncomment-2300902`, ); }); @@ -393,7 +392,7 @@ describe('utils/helpers.ts', () => { const result = await generateGitHubWebUrl( { - ...mockedSingleNotification, + ...mockSingleNotification, subject: subject, }, mockAccounts, @@ -401,7 +400,7 @@ describe('utils/helpers.ts', () => { expect(apiRequestAuthMock).toHaveBeenCalledTimes(1); expect(result).toBe( - `https://github.com/gitify-app/notifications-test/discussions?${mockedNotificationReferrer}`, + `https://github.com/gitify-app/notifications-test/discussions?${mockNotificationReferrer}`, ); }); }); @@ -417,7 +416,7 @@ describe('utils/helpers.ts', () => { const result = await generateGitHubWebUrl( { - ...mockedSingleNotification, + ...mockSingleNotification, subject: subject, }, mockAccounts, @@ -425,7 +424,7 @@ describe('utils/helpers.ts', () => { expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); expect(result).toBe( - `https://github.com/gitify-app/notifications-test/invitations?${mockedNotificationReferrer}`, + `https://github.com/gitify-app/notifications-test/invitations?${mockNotificationReferrer}`, ); }); @@ -440,7 +439,7 @@ describe('utils/helpers.ts', () => { const result = await generateGitHubWebUrl( { - ...mockedSingleNotification, + ...mockSingleNotification, subject: subject, }, mockAccounts, @@ -448,7 +447,7 @@ describe('utils/helpers.ts', () => { expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); expect(result).toBe( - `https://github.com/gitify-app/notifications-test/actions?query=is%3Awaiting&${mockedNotificationReferrer}`, + `https://github.com/gitify-app/notifications-test/actions?query=is%3Awaiting&${mockNotificationReferrer}`, ); }); @@ -463,7 +462,7 @@ describe('utils/helpers.ts', () => { const result = await generateGitHubWebUrl( { - ...mockedSingleNotification, + ...mockSingleNotification, subject: subject, }, mockAccounts, @@ -471,7 +470,7 @@ describe('utils/helpers.ts', () => { expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); expect(result).toBe( - `https://github.com/gitify-app/notifications-test/actions?${mockedNotificationReferrer}`, + `https://github.com/gitify-app/notifications-test/actions?${mockNotificationReferrer}`, ); }); @@ -485,7 +484,7 @@ describe('utils/helpers.ts', () => { const result = await generateGitHubWebUrl( { - ...mockedSingleNotification, + ...mockSingleNotification, subject: subject, }, mockAccounts, @@ -493,7 +492,7 @@ describe('utils/helpers.ts', () => { expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); expect(result).toBe( - `https://github.com/gitify-app/notifications-test/actions?${mockedNotificationReferrer}`, + `https://github.com/gitify-app/notifications-test/actions?${mockNotificationReferrer}`, ); }); }); @@ -508,7 +507,7 @@ describe('utils/helpers.ts', () => { const result = await generateGitHubWebUrl( { - ...mockedSingleNotification, + ...mockSingleNotification, subject: subject, }, mockAccounts, @@ -516,7 +515,7 @@ describe('utils/helpers.ts', () => { expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); expect(result).toBe( - `${mockedSingleNotification.repository.html_url}?${mockedNotificationReferrer}`, + `${mockSingleNotification.repository.html_url}?${mockNotificationReferrer}`, ); }); diff --git a/src/utils/notifications.test.ts b/src/utils/notifications.test.ts index 667f08187..6488677bc 100644 --- a/src/utils/notifications.test.ts +++ b/src/utils/notifications.test.ts @@ -1,13 +1,17 @@ import { ipcRenderer } from 'electron'; -import { mockAccounts, mockSettings } from '../__mocks__/mock-state'; + import { - mockedAccountNotifications, - mockedGitHubNotifications, - mockedSingleAccountNotifications, -} from '../__mocks__/mockedData'; + mockAccountNotifications, + mockSingleAccountNotifications, +} from '../__mocks__/notifications-mocks'; import { partialMockNotification } from '../__mocks__/partial-mocks'; +import { mockAccounts, mockSettings } from '../__mocks__/state-mocks'; import { defaultSettings } from '../context/App'; import type { SettingsState } from '../types'; +import { + mockGitHubNotifications, + mockSingleNotification, +} from './api/__mocks__/response-mocks'; import * as helpers from './helpers'; import * as notificationsHelpers from './notifications'; import { filterNotifications } from './notifications'; @@ -29,7 +33,7 @@ describe('utils/notifications.ts', () => { notificationsHelpers.triggerNativeNotifications( [], - mockedAccountNotifications, + mockAccountNotifications, settings, mockAccounts, ); @@ -54,7 +58,7 @@ describe('utils/notifications.ts', () => { notificationsHelpers.triggerNativeNotifications( [], - mockedAccountNotifications, + mockAccountNotifications, settings, mockAccounts, ); @@ -74,8 +78,8 @@ describe('utils/notifications.ts', () => { jest.spyOn(notificationsHelpers, 'raiseSoundNotification'); notificationsHelpers.triggerNativeNotifications( - mockedSingleAccountNotifications, - mockedSingleAccountNotifications, + mockSingleAccountNotifications, + mockSingleAccountNotifications, settings, mockAccounts, ); @@ -110,14 +114,14 @@ describe('utils/notifications.ts', () => { const nativeNotification: Notification = notificationsHelpers.raiseNativeNotification( - [mockedGitHubNotifications[0]], + [mockSingleNotification], mockAccounts, ); nativeNotification.onclick(null); expect(helpers.openInBrowser).toHaveBeenCalledTimes(1); expect(helpers.openInBrowser).toHaveBeenLastCalledWith( - mockedGitHubNotifications[0], + mockSingleNotification, mockAccounts, ); expect(ipcRenderer.send).toHaveBeenCalledWith('hide-window'); @@ -125,7 +129,7 @@ describe('utils/notifications.ts', () => { it('should click on a native notification (with more than 1 notification)', () => { const nativeNotification = notificationsHelpers.raiseNativeNotification( - mockedGitHubNotifications, + mockGitHubNotifications, mockAccounts, ); nativeNotification.onclick(null); diff --git a/src/utils/remove-notification.test.ts b/src/utils/remove-notification.test.ts index 625d00d4f..28789ac7f 100644 --- a/src/utils/remove-notification.test.ts +++ b/src/utils/remove-notification.test.ts @@ -1,22 +1,20 @@ -import { mockSettings } from '../__mocks__/mock-state'; -import { - mockedSingleAccountNotifications, - mockedSingleNotification, -} from '../__mocks__/mockedData'; +import { mockSingleAccountNotifications } from '../__mocks__/notifications-mocks'; +import { mockSettings } from '../__mocks__/state-mocks'; +import { mockSingleNotification } from './api/__mocks__/response-mocks'; import Constants from './constants'; import { removeNotification } from './remove-notification'; describe('utils/remove-notification.ts', () => { - const notificationId = mockedSingleNotification.id; - const hostname = mockedSingleAccountNotifications[0].hostname; + const notificationId = mockSingleNotification.id; + const hostname = mockSingleAccountNotifications[0].hostname; it('should remove a notification if it exists', () => { - expect(mockedSingleAccountNotifications[0].notifications.length).toBe(1); + expect(mockSingleAccountNotifications[0].notifications.length).toBe(1); const result = removeNotification( { ...mockSettings, delayNotificationState: false }, notificationId, - mockedSingleAccountNotifications, + mockSingleAccountNotifications, hostname, ); @@ -25,21 +23,21 @@ describe('utils/remove-notification.ts', () => { it('should set notification as opaque if delayNotificationState enabled', () => { const mockElement = document.createElement('div'); - mockElement.id = mockedSingleAccountNotifications[0].notifications[0].id; + mockElement.id = mockSingleAccountNotifications[0].notifications[0].id; jest.spyOn(document, 'getElementById').mockReturnValue(mockElement); - expect(mockedSingleAccountNotifications[0].notifications.length).toBe(1); + expect(mockSingleAccountNotifications[0].notifications.length).toBe(1); const result = removeNotification( { ...mockSettings, delayNotificationState: true }, notificationId, - mockedSingleAccountNotifications, + mockSingleAccountNotifications, hostname, ); expect(result[0].notifications.length).toBe(1); expect(document.getElementById).toHaveBeenCalledWith( - mockedSingleAccountNotifications[0].notifications[0].id, + mockSingleAccountNotifications[0].notifications[0].id, ); expect(mockElement.className).toContain(Constants.READ_CLASS_NAME); }); diff --git a/src/utils/remove-notifications.test.ts b/src/utils/remove-notifications.test.ts index 0ec62a900..181a245f2 100644 --- a/src/utils/remove-notifications.test.ts +++ b/src/utils/remove-notifications.test.ts @@ -1,20 +1,20 @@ import { - mockedAccountNotifications, - mockedSingleAccountNotifications, - mockedSingleNotification, -} from '../__mocks__/mockedData'; + mockAccountNotifications, + mockSingleAccountNotifications, +} from '../__mocks__/notifications-mocks'; +import { mockSingleNotification } from './api/__mocks__/response-mocks'; import { removeNotifications } from './remove-notifications'; describe('utils/remove-notifications.ts', () => { - const repoSlug = mockedSingleNotification.repository.full_name; - const hostname = mockedSingleAccountNotifications[0].hostname; + const repoSlug = mockSingleNotification.repository.full_name; + const hostname = mockSingleAccountNotifications[0].hostname; it("should remove a repo's notifications - single", () => { - expect(mockedSingleAccountNotifications[0].notifications.length).toBe(1); + expect(mockSingleAccountNotifications[0].notifications.length).toBe(1); const result = removeNotifications( repoSlug, - mockedSingleAccountNotifications, + mockSingleAccountNotifications, hostname, ); @@ -22,12 +22,12 @@ describe('utils/remove-notifications.ts', () => { }); it("should remove a repo's notifications - multiple", () => { - expect(mockedAccountNotifications[0].notifications.length).toBe(2); - expect(mockedAccountNotifications[1].notifications.length).toBe(2); + expect(mockAccountNotifications[0].notifications.length).toBe(2); + expect(mockAccountNotifications[1].notifications.length).toBe(2); const result = removeNotifications( repoSlug, - mockedAccountNotifications, + mockAccountNotifications, hostname, ); diff --git a/src/utils/storage.test.ts b/src/utils/storage.test.ts index 34e298a24..37fdafc6a 100644 --- a/src/utils/storage.test.ts +++ b/src/utils/storage.test.ts @@ -1,4 +1,4 @@ -import { mockSettings } from '../__mocks__/mock-state'; +import { mockSettings } from '../__mocks__/state-mocks'; import { clearState, loadState, saveState } from './storage'; describe('utils/storage.ts', () => { diff --git a/src/utils/subject.test.ts b/src/utils/subject.test.ts index 497c6686f..4864732d7 100644 --- a/src/utils/subject.test.ts +++ b/src/utils/subject.test.ts @@ -1,10 +1,11 @@ import axios from 'axios'; import nock from 'nock'; -import { mockAccounts } from '../__mocks__/mock-state'; + import { partialMockNotification, partialMockUser, } from '../__mocks__/partial-mocks'; +import { mockAccounts } from '../__mocks__/state-mocks'; import type { Discussion, DiscussionAuthor, @@ -223,7 +224,7 @@ describe('utils/subject.ts', () => { }; const mockNotification = partialMockNotification({ - title: 'This is a mocked discussion', + title: 'This is a mock discussion', type: 'Discussion', }); mockNotification.updated_at = '2024-01-01T00:00:00Z'; @@ -404,7 +405,7 @@ describe('utils/subject.ts', () => { let mockNotification: Notification; beforeEach(() => { mockNotification = partialMockNotification({ - title: 'This is a mocked issue', + title: 'This is a mock issue', type: 'Issue', url: 'https://api.github.com/repos/gitify-app/notifications-test/issues/1', latest_comment_url: @@ -583,7 +584,7 @@ describe('utils/subject.ts', () => { beforeEach(() => { mockNotification = partialMockNotification({ - title: 'This is a mocked pull request', + title: 'This is a mock pull request', type: 'PullRequest', url: 'https://api.github.com/repos/gitify-app/notifications-test/pulls/1', latest_comment_url: @@ -869,7 +870,7 @@ describe('utils/subject.ts', () => { describe('Releases', () => { it('release notification', async () => { const mockNotification = partialMockNotification({ - title: 'This is a mocked release', + title: 'This is a mock release', type: 'Release', url: 'https://api.github.com/repos/gitify-app/notifications-test/releases/1', latest_comment_url: @@ -1154,7 +1155,7 @@ function mockDiscussionNode( isAnswered: boolean, ): Discussion { return { - title: 'This is a mocked discussion', + title: 'This is a mock discussion', url: 'https://github.com/gitify-app/notifications-test/discussions/1', stateReason: state, isAnswered: isAnswered, From 24d0b614b93dd504b8b13d1f4366422056170e96 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Mon, 27 May 2024 15:30:06 -1000 Subject: [PATCH 122/251] test: add missing mock (#1147) --- src/hooks/useNotifications.test.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/hooks/useNotifications.test.ts b/src/hooks/useNotifications.test.ts index 0eedb7527..95a9b44e6 100644 --- a/src/hooks/useNotifications.test.ts +++ b/src/hooks/useNotifications.test.ts @@ -381,6 +381,9 @@ describe('hooks/useNotifications.ts', () => { merged: false, user: mockNotificationUser, }); + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/pulls/4/reviews') + .reply(200, {}); nock('https://api.github.com') .get('/repos/gitify-app/notifications-test/issues/4/comments') .reply(200, { From e1cc45bea4fcc07df06d4aa0d9624743f91b420e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 27 May 2024 22:31:07 -1000 Subject: [PATCH 123/251] chore(deps): update dependency ts-jest to v29.1.4 (#1148) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 2cce26ed1..baf856c9b 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "rimraf": "5.0.7", "style-loader": "4.0.0", "tailwindcss": "3.4.3", - "ts-jest": "29.1.3", + "ts-jest": "29.1.4", "ts-node": "10.9.2", "webpack": "5.91.0", "webpack-cli": "5.1.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e5b986fd7..ee5366f5b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -124,8 +124,8 @@ importers: specifier: 3.4.3 version: 3.4.3(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)) ts-jest: - specifier: 29.1.3 - version: 29.1.3(@babel/core@7.24.3)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)))(typescript@5.4.5) + specifier: 29.1.4 + version: 29.1.4(@babel/core@7.24.3)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)))(typescript@5.4.5) ts-node: specifier: 10.9.2 version: 10.9.2(@types/node@20.12.12)(typescript@5.4.5) @@ -2912,8 +2912,8 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - ts-jest@29.1.3: - resolution: {integrity: sha512-6L9qz3ginTd1NKhOxmkP0qU3FyKjj5CPoY+anszfVn6Pmv/RIKzhiMCsH7Yb7UvJR9I2A64rm4zQl531s2F1iw==} + ts-jest@29.1.4: + resolution: {integrity: sha512-YiHwDhSvCiItoAgsKtoLFCuakDzDsJ1DLDnSouTaTmdOcOwIkSzbLXduaQ6M5DRVhuZC/NYaaZ/mtHbWMv/S6Q==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -6415,7 +6415,7 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.1.3(@babel/core@7.24.3)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)))(typescript@5.4.5): + ts-jest@29.1.4(@babel/core@7.24.3)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@20.12.12)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)))(typescript@5.4.5): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 From 881cf896220b6f552e1f8f5cf5f330413ef5e164 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 27 May 2024 22:31:16 -1000 Subject: [PATCH 124/251] chore(deps): update pnpm to v9.1.3 (#1149) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index baf856c9b..393c2c7c9 100644 --- a/package.json +++ b/package.json @@ -153,7 +153,7 @@ "webpack-cli": "5.1.4", "webpack-merge": "5.10.0" }, - "packageManager": "pnpm@9.1.2", + "packageManager": "pnpm@9.1.3", "lint-staged": { "*.{html,js,json,md,ts,tsx}": "biome format --write" } From c5e7aa315fba15b22c04cda3008fb208b846e14f Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Tue, 28 May 2024 06:04:34 -0400 Subject: [PATCH 125/251] refactor: combine imports --- src/routes/LoginWithOAuthApp.test.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/routes/LoginWithOAuthApp.test.tsx b/src/routes/LoginWithOAuthApp.test.tsx index 3a34c277e..bfc9b53a7 100644 --- a/src/routes/LoginWithOAuthApp.test.tsx +++ b/src/routes/LoginWithOAuthApp.test.tsx @@ -1,6 +1,5 @@ import { fireEvent, render, screen } from '@testing-library/react'; -import { ipcRenderer } from 'electron'; -import { shell } from 'electron'; +import { ipcRenderer, shell } from 'electron'; import { MemoryRouter } from 'react-router-dom'; import { mockEnterpriseAccounts } from '../__mocks__/state-mocks'; import { AppContext } from '../context/App'; From b18584b177b8c1b9735cc468835842c06020e2bb Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Tue, 28 May 2024 03:13:17 -1000 Subject: [PATCH 126/251] refactor(state): update state storage (#1150) --- src/__mocks__/state-mocks.ts | 2 +- src/components/NotificationRow.test.tsx | 14 ++--- src/components/NotificationRow.tsx | 2 +- src/context/App.test.tsx | 22 ++++---- src/context/App.tsx | 16 +++--- src/hooks/useNotifications.test.ts | 38 ++++++------- src/routes/LoginWithOAuthApp.test.tsx | 16 +++--- src/routes/LoginWithOAuthApp.tsx | 2 +- src/routes/Settings.test.tsx | 46 +++++++-------- src/routes/Settings.tsx | 7 ++- src/types.ts | 5 ++ src/utils/helpers.test.ts | 58 +++++++++---------- src/utils/notifications.test.ts | 21 +++---- src/utils/storage.test.ts | 12 ++-- src/utils/storage.ts | 28 ++++------ src/utils/subject.test.ts | 74 ++++++++++++------------- 16 files changed, 182 insertions(+), 181 deletions(-) diff --git a/src/__mocks__/state-mocks.ts b/src/__mocks__/state-mocks.ts index 4a701fab6..9622c32c9 100644 --- a/src/__mocks__/state-mocks.ts +++ b/src/__mocks__/state-mocks.ts @@ -19,7 +19,7 @@ export const mockUser: GitifyUser = { id: 123456789, }; -export const mockAccounts: AuthState = { +export const mockAuth: AuthState = { token: 'token-123-456', enterpriseAccounts: mockEnterpriseAccounts, user: mockUser, diff --git a/src/components/NotificationRow.test.tsx b/src/components/NotificationRow.test.tsx index 6657a9bad..7a2a05484 100644 --- a/src/components/NotificationRow.test.tsx +++ b/src/components/NotificationRow.test.tsx @@ -1,6 +1,6 @@ import { fireEvent, render, screen } from '@testing-library/react'; import { shell } from 'electron'; -import { mockAccounts, mockSettings } from '../__mocks__/state-mocks'; +import { mockAuth, mockSettings } from '../__mocks__/state-mocks'; import { AppContext } from '../context/App'; import type { UserType } from '../typesGitHub'; import { mockSingleNotification } from '../utils/api/__mocks__/response-mocks'; @@ -131,7 +131,7 @@ describe('components/NotificationRow.tsx', () => { value={{ settings: { ...mockSettings, markAsDoneOnOpen: false }, removeNotificationFromState, - accounts: mockAccounts, + auth: mockAuth, }} > @@ -156,7 +156,7 @@ describe('components/NotificationRow.tsx', () => { value={{ settings: { ...mockSettings, markAsDoneOnOpen: false }, removeNotificationFromState, - accounts: mockAccounts, + auth: mockAuth, }} > @@ -181,7 +181,7 @@ describe('components/NotificationRow.tsx', () => { value={{ settings: { ...mockSettings, markAsDoneOnOpen: true }, markNotificationDone, - accounts: mockAccounts, + auth: mockAuth, }} > @@ -205,7 +205,7 @@ describe('components/NotificationRow.tsx', () => { @@ -230,7 +230,7 @@ describe('components/NotificationRow.tsx', () => { @@ -285,7 +285,7 @@ describe('components/NotificationRow.tsx', () => { diff --git a/src/components/NotificationRow.tsx b/src/components/NotificationRow.tsx index 8ea831e1c..ff2558c0b 100644 --- a/src/components/NotificationRow.tsx +++ b/src/components/NotificationRow.tsx @@ -37,7 +37,7 @@ interface IProps { export const NotificationRow: FC = ({ notification, hostname }) => { const { settings, - accounts, + auth: accounts, removeNotificationFromState, markNotificationRead, markNotificationDone, diff --git a/src/context/App.test.tsx b/src/context/App.test.tsx index 0ab7083f2..0409a4e79 100644 --- a/src/context/App.test.tsx +++ b/src/context/App.test.tsx @@ -1,7 +1,7 @@ import { act, fireEvent, render, waitFor } from '@testing-library/react'; import { useContext } from 'react'; -import { mockAccounts, mockSettings } from '../__mocks__/state-mocks'; +import { mockAuth, mockSettings } from '../__mocks__/state-mocks'; import { useNotifications } from '../hooks/useNotifications'; import type { AuthState, SettingsState } from '../types'; import * as apiRequests from '../utils/api/request'; @@ -15,11 +15,11 @@ jest.mock('../hooks/useNotifications'); const customRender = ( ui, - accounts: AuthState = mockAccounts, + accounts: AuthState = mockAuth, settings: SettingsState = mockSettings, ) => { return render( - + {ui} , ); @@ -320,9 +320,9 @@ describe('context/App.tsx', () => { fireEvent.click(getByText('Test Case')); }); - expect(saveStateMock).toHaveBeenCalledWith( - { enterpriseAccounts: [], token: null, user: null }, - { + expect(saveStateMock).toHaveBeenCalledWith({ + auth: { enterpriseAccounts: [], token: null, user: null }, + settings: { participating: true, playSound: true, showNotifications: true, @@ -335,7 +335,7 @@ describe('context/App.tsx', () => { showAccountHostname: false, delayNotificationState: false, }, - ); + }); }); it('should call updateSetting and set auto launch(openAtStartup)', async () => { @@ -365,9 +365,9 @@ describe('context/App.tsx', () => { expect(setAutoLaunchMock).toHaveBeenCalledWith(true); - expect(saveStateMock).toHaveBeenCalledWith( - { enterpriseAccounts: [], token: null, user: null }, - { + expect(saveStateMock).toHaveBeenCalledWith({ + auth: { enterpriseAccounts: [], token: null, user: null }, + settings: { participating: false, playSound: true, showNotifications: true, @@ -380,6 +380,6 @@ describe('context/App.tsx', () => { showAccountHostname: false, delayNotificationState: false, }, - ); + }); }); }); diff --git a/src/context/App.tsx b/src/context/App.tsx index fd7396af9..2525c45de 100644 --- a/src/context/App.tsx +++ b/src/context/App.tsx @@ -47,7 +47,7 @@ export const defaultSettings: SettingsState = { }; interface AppContextState { - accounts: AuthState; + auth: AuthState; isLoggedIn: boolean; login: () => void; loginEnterprise: (data: AuthOptions) => void; @@ -136,7 +136,7 @@ export const AppProvider = ({ children }: { children: ReactNode }) => { const newSettings = { ...settings, [name]: value }; setSettings(newSettings); - saveState(accounts, newSettings); + saveState({ auth: accounts, settings: newSettings }); }, [accounts, settings], ); @@ -152,7 +152,7 @@ export const AppProvider = ({ children }: { children: ReactNode }) => { const user = await getUserData(token, hostname); const updatedAccounts = addAccount(accounts, token, hostname, user); setAccounts(updatedAccounts); - saveState(updatedAccounts, settings); + saveState({ auth: updatedAccounts, settings }); }, [accounts, settings]); const loginEnterprise = useCallback( @@ -161,7 +161,7 @@ export const AppProvider = ({ children }: { children: ReactNode }) => { const { token, hostname } = await getToken(authCode, authOptions); const updatedAccounts = addAccount(accounts, token, hostname); setAccounts(updatedAccounts); - saveState(updatedAccounts, settings); + saveState({ auth: updatedAccounts, settings }); }, [accounts, settings], ); @@ -173,7 +173,7 @@ export const AppProvider = ({ children }: { children: ReactNode }) => { const user = await getUserData(token, hostname); const updatedAccounts = addAccount(accounts, token, hostname, user); setAccounts(updatedAccounts); - saveState(updatedAccounts, settings); + saveState({ auth: updatedAccounts, settings }); }, [accounts, settings], ); @@ -186,8 +186,8 @@ export const AppProvider = ({ children }: { children: ReactNode }) => { const restoreSettings = useCallback(() => { const existing = loadState(); - if (existing.accounts) { - setAccounts({ ...defaultAccounts, ...existing.accounts }); + if (existing.auth) { + setAccounts({ ...defaultAccounts, ...existing.auth }); } if (existing.settings) { @@ -234,7 +234,7 @@ export const AppProvider = ({ children }: { children: ReactNode }) => { return ( { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.fetchNotifications(mockAccounts, { + result.current.fetchNotifications(mockAuth, { ...mockSettings, detailedNotifications: false, }); @@ -87,7 +87,7 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.fetchNotifications(mockAccounts, mockSettings); + result.current.fetchNotifications(mockAuth, mockSettings); }); expect(result.current.status).toBe('loading'); @@ -103,7 +103,7 @@ describe('hooks/useNotifications.ts', () => { describe('enterprise', () => { it('should fetch notifications with success - enterprise only', async () => { const accounts: AuthState = { - ...mockAccounts, + ...mockAuth, token: null, }; @@ -137,7 +137,7 @@ describe('hooks/useNotifications.ts', () => { it('should fetch notifications with failure - enterprise only', async () => { const accounts: AuthState = { - ...mockAccounts, + ...mockAuth, token: null, }; @@ -168,7 +168,7 @@ describe('hooks/useNotifications.ts', () => { describe('github.com', () => { it('should fetch notifications with success - github.com only', async () => { const accounts: AuthState = { - ...mockAccounts, + ...mockAuth, enterpriseAccounts: [], user: mockUser, }; @@ -201,7 +201,7 @@ describe('hooks/useNotifications.ts', () => { it('should fetch notifications with failures - github.com only', async () => { const accounts: AuthState = { - ...mockAccounts, + ...mockAuth, enterpriseAccounts: [], }; @@ -233,7 +233,7 @@ describe('hooks/useNotifications.ts', () => { describe('with detailed notifications', () => { it('should fetch notifications with success', async () => { const accounts: AuthState = { - ...mockAccounts, + ...mockAuth, enterpriseAccounts: [], user: mockUser, }; @@ -429,7 +429,7 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.fetchNotifications(mockAccounts, { + result.current.fetchNotifications(mockAuth, { ...mockSettings, detailedNotifications: false, }); @@ -455,7 +455,7 @@ describe('hooks/useNotifications.ts', () => { const id = 'notification-123'; describe('github.com', () => { - const accounts = { ...mockAccounts, enterpriseAccounts: [] }; + const accounts = { ...mockAuth, enterpriseAccounts: [] }; const hostname = 'github.com'; it('should mark a notification as read with success - github.com', async () => { @@ -506,7 +506,7 @@ describe('hooks/useNotifications.ts', () => { }); describe('enterprise', () => { - const accounts = { ...mockAccounts, token: null }; + const accounts = { ...mockAuth, token: null }; const hostname = 'github.gitify.io'; it('should mark a notification as read with success - enterprise', async () => { @@ -561,7 +561,7 @@ describe('hooks/useNotifications.ts', () => { const id = 'notification-123'; describe('github.com', () => { - const accounts = { ...mockAccounts, enterpriseAccounts: [] }; + const accounts = { ...mockAuth, enterpriseAccounts: [] }; const hostname = 'github.com'; it('should mark a notification as done with success - github.com', async () => { @@ -612,7 +612,7 @@ describe('hooks/useNotifications.ts', () => { }); describe('enterprise', () => { - const accounts = { ...mockAccounts, token: null }; + const accounts = { ...mockAuth, token: null }; const hostname = 'github.gitify.io'; it('should mark a notification as done with success - enterprise', async () => { @@ -667,7 +667,7 @@ describe('hooks/useNotifications.ts', () => { const id = 'notification-123'; describe('github.com', () => { - const accounts = { ...mockAccounts, enterpriseAccounts: [] }; + const accounts = { ...mockAuth, enterpriseAccounts: [] }; const hostname = 'github.com'; it('should unsubscribe from a notification with success - github.com', async () => { @@ -730,7 +730,7 @@ describe('hooks/useNotifications.ts', () => { }); describe('enterprise', () => { - const accounts = { ...mockAccounts, token: null }; + const accounts = { ...mockAuth, token: null }; const hostname = 'github.gitify.io'; it('should unsubscribe from a notification with success - enterprise', async () => { @@ -797,7 +797,7 @@ describe('hooks/useNotifications.ts', () => { const repoSlug = 'gitify-app/notifications-test'; describe('github.com', () => { - const accounts = { ...mockAccounts, enterpriseAccounts: [] }; + const accounts = { ...mockAuth, enterpriseAccounts: [] }; const hostname = 'github.com'; it("should mark a repository's notifications as read with success - github.com", async () => { @@ -848,7 +848,7 @@ describe('hooks/useNotifications.ts', () => { }); describe('enterprise', () => { - const accounts = { ...mockAccounts, token: null }; + const accounts = { ...mockAuth, token: null }; const hostname = 'github.gitify.io'; it("should mark a repository's notifications as read with success - enterprise", async () => { @@ -904,7 +904,7 @@ describe('hooks/useNotifications.ts', () => { const id = 'notification-123'; describe('github.com', () => { - const accounts = { ...mockAccounts, enterpriseAccounts: [] }; + const accounts = { ...mockAuth, enterpriseAccounts: [] }; const hostname = 'github.com'; it("should mark a repository's notifications as done with success - github.com", async () => { @@ -955,7 +955,7 @@ describe('hooks/useNotifications.ts', () => { }); describe('enterprise', () => { - const accounts = { ...mockAccounts, token: null }; + const accounts = { ...mockAuth, token: null }; const hostname = 'github.gitify.io'; it("should mark a repository's notifications as done with success - enterprise", async () => { diff --git a/src/routes/LoginWithOAuthApp.test.tsx b/src/routes/LoginWithOAuthApp.test.tsx index bfc9b53a7..f42d61c6b 100644 --- a/src/routes/LoginWithOAuthApp.test.tsx +++ b/src/routes/LoginWithOAuthApp.test.tsx @@ -29,7 +29,7 @@ describe('routes/LoginWithOAuthApp.tsx', () => { it('renders correctly', () => { const tree = render( - + @@ -41,7 +41,7 @@ describe('routes/LoginWithOAuthApp.tsx', () => { it('let us go back', () => { render( - + @@ -80,7 +80,7 @@ describe('routes/LoginWithOAuthApp.tsx', () => { describe("'Create new OAuth App' button", () => { it('should be disabled if no hostname configured', async () => { render( - + @@ -94,7 +94,7 @@ describe('routes/LoginWithOAuthApp.tsx', () => { it('should open in browser if hostname configured', async () => { render( - + @@ -113,7 +113,7 @@ describe('routes/LoginWithOAuthApp.tsx', () => { it('should receive a logged-in enterprise account', () => { const { rerender } = render( - + @@ -123,7 +123,7 @@ describe('routes/LoginWithOAuthApp.tsx', () => { rerender( { it('should render the form with errors', () => { render( - + @@ -168,7 +168,7 @@ describe('routes/LoginWithOAuthApp.tsx', () => { it('should open help docs in the browser', async () => { render( - + diff --git a/src/routes/LoginWithOAuthApp.tsx b/src/routes/LoginWithOAuthApp.tsx index 3f66d6eb5..4620d266c 100644 --- a/src/routes/LoginWithOAuthApp.tsx +++ b/src/routes/LoginWithOAuthApp.tsx @@ -58,7 +58,7 @@ export const validate = (values: IValues): IFormErrors => { export const LoginWithOAuthApp: FC = () => { const { - accounts: { enterpriseAccounts }, + auth: { enterpriseAccounts }, loginEnterprise, } = useContext(AppContext); const navigate = useNavigate(); diff --git a/src/routes/Settings.test.tsx b/src/routes/Settings.test.tsx index 5049dd3e0..ce3d69a51 100644 --- a/src/routes/Settings.test.tsx +++ b/src/routes/Settings.test.tsx @@ -1,7 +1,7 @@ import { act, fireEvent, render, screen } from '@testing-library/react'; import { ipcRenderer, shell } from 'electron'; import { MemoryRouter } from 'react-router-dom'; -import { mockAccounts, mockSettings } from '../__mocks__/state-mocks'; +import { mockAuth, mockSettings } from '../__mocks__/state-mocks'; import { AppContext } from '../context/App'; import { SettingsRoute } from './Settings'; @@ -23,7 +23,7 @@ describe('routes/Settings.tsx', () => { await act(async () => { render( @@ -41,7 +41,7 @@ describe('routes/Settings.tsx', () => { @@ -62,7 +62,7 @@ describe('routes/Settings.tsx', () => { @@ -85,7 +85,7 @@ describe('routes/Settings.tsx', () => { @@ -115,7 +115,7 @@ describe('routes/Settings.tsx', () => { @@ -140,7 +140,7 @@ describe('routes/Settings.tsx', () => { @@ -179,7 +179,7 @@ describe('routes/Settings.tsx', () => { detailedNotifications: false, showBots: true, }, - accounts: mockAccounts, + auth: mockAuth, updateSetting, }} > @@ -220,7 +220,7 @@ describe('routes/Settings.tsx', () => { detailedNotifications: true, showBots: true, }, - accounts: mockAccounts, + auth: mockAuth, updateSetting, }} > @@ -257,7 +257,7 @@ describe('routes/Settings.tsx', () => { @@ -282,7 +282,7 @@ describe('routes/Settings.tsx', () => { @@ -312,7 +312,7 @@ describe('routes/Settings.tsx', () => { @@ -343,7 +343,7 @@ describe('routes/Settings.tsx', () => { @@ -368,7 +368,7 @@ describe('routes/Settings.tsx', () => { @@ -393,7 +393,7 @@ describe('routes/Settings.tsx', () => { @@ -420,7 +420,7 @@ describe('routes/Settings.tsx', () => { @@ -445,7 +445,7 @@ describe('routes/Settings.tsx', () => { @@ -475,7 +475,7 @@ describe('routes/Settings.tsx', () => { @@ -498,8 +498,8 @@ describe('routes/Settings.tsx', () => { { @@ -546,7 +546,7 @@ describe('routes/Settings.tsx', () => { @@ -571,7 +571,7 @@ describe('routes/Settings.tsx', () => { await act(async () => { render( diff --git a/src/routes/Settings.tsx b/src/routes/Settings.tsx index 442e8251e..7a0aec680 100644 --- a/src/routes/Settings.tsx +++ b/src/routes/Settings.tsx @@ -33,7 +33,12 @@ import { import { setTheme } from '../utils/theme'; export const SettingsRoute: FC = () => { - const { accounts, settings, updateSetting, logout } = useContext(AppContext); + const { + auth: accounts, + settings, + updateSetting, + logout, + } = useContext(AppContext); const navigate = useNavigate(); const [isLinux, setIsLinux] = useState(false); diff --git a/src/types.ts b/src/types.ts index b4f663cd9..b504dd7d8 100644 --- a/src/types.ts +++ b/src/types.ts @@ -34,6 +34,11 @@ interface SystemSettingsState { showNotificationsCountInTray: boolean; } +export interface GitifyState { + auth?: AuthState; + settings?: SettingsState; +} + export enum Theme { SYSTEM = 'SYSTEM', LIGHT = 'LIGHT', diff --git a/src/utils/helpers.test.ts b/src/utils/helpers.test.ts index 533330085..42bd831cf 100644 --- a/src/utils/helpers.test.ts +++ b/src/utils/helpers.test.ts @@ -1,5 +1,5 @@ import type { AxiosPromise, AxiosResponse } from 'axios'; -import { mockAccounts, mockUser } from '../__mocks__/state-mocks'; +import { mockAuth, mockUser } from '../__mocks__/state-mocks'; import type { SubjectType } from '../typesGitHub'; import { mockGraphQLResponse, @@ -19,14 +19,14 @@ describe('utils/helpers.ts', () => { describe('isPersonalAccessTokenLoggedIn', () => { it('logged in', () => { expect( - isPersonalAccessTokenLoggedIn({ ...mockAccounts, token: '1234' }), + isPersonalAccessTokenLoggedIn({ ...mockAuth, token: '1234' }), ).toBe(true); }); it('logged out', () => { - expect( - isPersonalAccessTokenLoggedIn({ ...mockAccounts, token: null }), - ).toBe(false); + expect(isPersonalAccessTokenLoggedIn({ ...mockAuth, token: null })).toBe( + false, + ); }); }); @@ -34,7 +34,7 @@ describe('utils/helpers.ts', () => { it('logged in', () => { expect( isOAuthAppLoggedIn({ - ...mockAccounts, + ...mockAuth, enterpriseAccounts: [{ hostname: 'github.gitify.io', token: '1234' }], }), ).toBe(true); @@ -42,12 +42,12 @@ describe('utils/helpers.ts', () => { it('logged out', () => { expect( - isOAuthAppLoggedIn({ ...mockAccounts, enterpriseAccounts: null }), + isOAuthAppLoggedIn({ ...mockAuth, enterpriseAccounts: null }), ).toBe(false); - expect( - isOAuthAppLoggedIn({ ...mockAccounts, enterpriseAccounts: [] }), - ).toBe(false); + expect(isOAuthAppLoggedIn({ ...mockAuth, enterpriseAccounts: [] })).toBe( + false, + ); }); }); @@ -110,14 +110,14 @@ describe('utils/helpers.ts', () => { ...mockSingleNotification, subject: subject, }, - mockAccounts, + mockAuth, ); expect(apiRequestAuthMock).toHaveBeenCalledTimes(1); expect(apiRequestAuthMock).toHaveBeenCalledWith( subject.latest_comment_url, 'GET', - mockAccounts.token, + mockAuth.token, ); expect(result).toBe(`${mockHtmlUrl}?${mockNotificationReferrer}`); }); @@ -145,14 +145,14 @@ describe('utils/helpers.ts', () => { ...mockSingleNotification, subject: subject, }, - mockAccounts, + mockAuth, ); expect(apiRequestAuthMock).toHaveBeenCalledTimes(1); expect(apiRequestAuthMock).toHaveBeenCalledWith( subject.url, 'GET', - mockAccounts.token, + mockAuth.token, ); expect(result).toBe(`${mockHtmlUrl}?${mockNotificationReferrer}`); }); @@ -171,7 +171,7 @@ describe('utils/helpers.ts', () => { ...mockSingleNotification, subject: subject, }, - mockAccounts, + mockAuth, ); expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); @@ -193,7 +193,7 @@ describe('utils/helpers.ts', () => { ...mockSingleNotification, subject: subject, }, - mockAccounts, + mockAuth, ); expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); @@ -215,7 +215,7 @@ describe('utils/helpers.ts', () => { ...mockSingleNotification, subject: subject, }, - mockAccounts, + mockAuth, ); expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); @@ -237,7 +237,7 @@ describe('utils/helpers.ts', () => { ...mockSingleNotification, subject: subject, }, - mockAccounts, + mockAuth, ); expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); @@ -259,7 +259,7 @@ describe('utils/helpers.ts', () => { ...mockSingleNotification, subject: subject, }, - mockAccounts, + mockAuth, ); expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); @@ -281,7 +281,7 @@ describe('utils/helpers.ts', () => { ...mockSingleNotification, subject: subject, }, - mockAccounts, + mockAuth, ); expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); @@ -303,7 +303,7 @@ describe('utils/helpers.ts', () => { ...mockSingleNotification, subject: subject, }, - mockAccounts, + mockAuth, ); expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); @@ -335,7 +335,7 @@ describe('utils/helpers.ts', () => { ...mockSingleNotification, subject: subject, }, - mockAccounts, + mockAuth, ); expect(apiRequestAuthMock).toHaveBeenCalledTimes(1); @@ -367,7 +367,7 @@ describe('utils/helpers.ts', () => { ...mockSingleNotification, subject: subject, }, - mockAccounts, + mockAuth, ); expect(apiRequestAuthMock).toHaveBeenCalledTimes(1); @@ -395,7 +395,7 @@ describe('utils/helpers.ts', () => { ...mockSingleNotification, subject: subject, }, - mockAccounts, + mockAuth, ); expect(apiRequestAuthMock).toHaveBeenCalledTimes(1); @@ -419,7 +419,7 @@ describe('utils/helpers.ts', () => { ...mockSingleNotification, subject: subject, }, - mockAccounts, + mockAuth, ); expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); @@ -442,7 +442,7 @@ describe('utils/helpers.ts', () => { ...mockSingleNotification, subject: subject, }, - mockAccounts, + mockAuth, ); expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); @@ -465,7 +465,7 @@ describe('utils/helpers.ts', () => { ...mockSingleNotification, subject: subject, }, - mockAccounts, + mockAuth, ); expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); @@ -487,7 +487,7 @@ describe('utils/helpers.ts', () => { ...mockSingleNotification, subject: subject, }, - mockAccounts, + mockAuth, ); expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); @@ -510,7 +510,7 @@ describe('utils/helpers.ts', () => { ...mockSingleNotification, subject: subject, }, - mockAccounts, + mockAuth, ); expect(apiRequestAuthMock).toHaveBeenCalledTimes(0); diff --git a/src/utils/notifications.test.ts b/src/utils/notifications.test.ts index 6488677bc..d8c03630e 100644 --- a/src/utils/notifications.test.ts +++ b/src/utils/notifications.test.ts @@ -5,7 +5,7 @@ import { mockSingleAccountNotifications, } from '../__mocks__/notifications-mocks'; import { partialMockNotification } from '../__mocks__/partial-mocks'; -import { mockAccounts, mockSettings } from '../__mocks__/state-mocks'; +import { mockAuth, mockSettings } from '../__mocks__/state-mocks'; import { defaultSettings } from '../context/App'; import type { SettingsState } from '../types'; import { @@ -35,7 +35,7 @@ describe('utils/notifications.ts', () => { [], mockAccountNotifications, settings, - mockAccounts, + mockAuth, ); expect(notificationsHelpers.raiseNativeNotification).toHaveBeenCalledTimes( @@ -60,7 +60,7 @@ describe('utils/notifications.ts', () => { [], mockAccountNotifications, settings, - mockAccounts, + mockAuth, ); expect(notificationsHelpers.raiseNativeNotification).not.toHaveBeenCalled(); @@ -81,7 +81,7 @@ describe('utils/notifications.ts', () => { mockSingleAccountNotifications, mockSingleAccountNotifications, settings, - mockAccounts, + mockAuth, ); expect(notificationsHelpers.raiseNativeNotification).not.toHaveBeenCalled(); @@ -98,12 +98,7 @@ describe('utils/notifications.ts', () => { jest.spyOn(notificationsHelpers, 'raiseNativeNotification'); jest.spyOn(notificationsHelpers, 'raiseSoundNotification'); - notificationsHelpers.triggerNativeNotifications( - [], - [], - settings, - mockAccounts, - ); + notificationsHelpers.triggerNativeNotifications([], [], settings, mockAuth); expect(notificationsHelpers.raiseNativeNotification).not.toHaveBeenCalled(); expect(notificationsHelpers.raiseSoundNotification).not.toHaveBeenCalled(); @@ -115,14 +110,14 @@ describe('utils/notifications.ts', () => { const nativeNotification: Notification = notificationsHelpers.raiseNativeNotification( [mockSingleNotification], - mockAccounts, + mockAuth, ); nativeNotification.onclick(null); expect(helpers.openInBrowser).toHaveBeenCalledTimes(1); expect(helpers.openInBrowser).toHaveBeenLastCalledWith( mockSingleNotification, - mockAccounts, + mockAuth, ); expect(ipcRenderer.send).toHaveBeenCalledWith('hide-window'); }); @@ -130,7 +125,7 @@ describe('utils/notifications.ts', () => { it('should click on a native notification (with more than 1 notification)', () => { const nativeNotification = notificationsHelpers.raiseNativeNotification( mockGitHubNotifications, - mockAccounts, + mockAuth, ); nativeNotification.onclick(null); diff --git a/src/utils/storage.test.ts b/src/utils/storage.test.ts index 37fdafc6a..f4cf81cf2 100644 --- a/src/utils/storage.test.ts +++ b/src/utils/storage.test.ts @@ -10,7 +10,7 @@ describe('utils/storage.ts', () => { }), ); const result = loadState(); - expect(result.accounts.token).toBe('123-456'); + expect(result.auth.token).toBe('123-456'); expect(result.settings.theme).toBe('DARK'); }); @@ -19,20 +19,20 @@ describe('utils/storage.ts', () => { .spyOn(localStorage.__proto__, 'getItem') .mockReturnValueOnce(JSON.stringify({})); const result = loadState(); - expect(result.accounts).toBeUndefined(); + expect(result.auth).toBeUndefined(); expect(result.settings).toBeUndefined(); }); it('should save the state to localstorage', () => { jest.spyOn(localStorage.__proto__, 'setItem'); - saveState( - { + saveState({ + auth: { token: '123-456', enterpriseAccounts: [], user: null, }, - mockSettings, - ); + settings: mockSettings, + }); expect(localStorage.setItem).toHaveBeenCalledTimes(1); }); diff --git a/src/utils/storage.ts b/src/utils/storage.ts index 0f3332e30..74686be28 100644 --- a/src/utils/storage.ts +++ b/src/utils/storage.ts @@ -1,23 +1,19 @@ -import type { AuthState, SettingsState } from '../types'; +import type { GitifyState } from '../types'; import { Constants } from './constants'; -export const loadState = (): { - accounts?: AuthState; - settings?: SettingsState; -} => { +export function loadState(): GitifyState { const existing = localStorage.getItem(Constants.STORAGE_KEY); - const { auth: accounts, settings } = (existing && JSON.parse(existing)) || {}; - return { accounts, settings }; -}; + const { auth, settings } = (existing && JSON.parse(existing)) || {}; + return { auth, settings }; +} -export const saveState = ( - accounts: AuthState, - settings: SettingsState, -): void => { - const settingsString = JSON.stringify({ auth: accounts, settings }); +export function saveState(gitifyState: GitifyState) { + const auth = gitifyState.auth; + const settings = gitifyState.settings; + const settingsString = JSON.stringify({ auth, settings }); localStorage.setItem(Constants.STORAGE_KEY, settingsString); -}; +} -export const clearState = (): void => { +export function clearState() { localStorage.clear(); -}; +} diff --git a/src/utils/subject.test.ts b/src/utils/subject.test.ts index 4864732d7..df8930784 100644 --- a/src/utils/subject.test.ts +++ b/src/utils/subject.test.ts @@ -5,7 +5,7 @@ import { partialMockNotification, partialMockUser, } from '../__mocks__/partial-mocks'; -import { mockAccounts } from '../__mocks__/state-mocks'; +import { mockAuth } from '../__mocks__/state-mocks'; import type { Discussion, DiscussionAuthor, @@ -46,7 +46,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -63,7 +63,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -80,7 +80,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -97,7 +97,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -114,7 +114,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -131,7 +131,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toBeNull(); @@ -145,7 +145,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toBeNull(); @@ -173,7 +173,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -203,7 +203,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -245,7 +245,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -273,7 +273,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -301,7 +301,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -329,7 +329,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -357,7 +357,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -385,7 +385,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -424,7 +424,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -449,7 +449,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -478,7 +478,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -507,7 +507,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -536,7 +536,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -564,7 +564,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -612,7 +612,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -647,7 +647,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -682,7 +682,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -717,7 +717,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -751,7 +751,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -784,7 +784,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -832,7 +832,7 @@ describe('utils/subject.ts', () => { const result = await getLatestReviewForReviewers( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual([ @@ -848,7 +848,7 @@ describe('utils/subject.ts', () => { const result = await getLatestReviewForReviewers( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toBeNull(); @@ -859,7 +859,7 @@ describe('utils/subject.ts', () => { const result = await getLatestReviewForReviewers( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toBeNull(); @@ -883,7 +883,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -907,7 +907,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toEqual({ @@ -925,7 +925,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toBeNull(); @@ -939,7 +939,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toBeNull(); @@ -956,7 +956,7 @@ describe('utils/subject.ts', () => { const result = await getGitifySubjectDetails( mockNotification, - mockAccounts.token, + mockAuth.token, ); expect(result).toBeNull(); @@ -980,7 +980,7 @@ describe('utils/subject.ts', () => { .get('/repos/gitify-app/notifications-test/issues/1') .replyWithError(mockError); - await getGitifySubjectDetails(mockNotification, mockAccounts.token); + await getGitifySubjectDetails(mockNotification, mockAuth.token); expect(consoleErrorSpy).toHaveBeenCalledWith( 'Error occurred while fetching details for Issue notification: This issue will throw an error', From c5447fb39031c7f87ffc31e7468f5083623b9974 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Tue, 28 May 2024 23:33:26 -1000 Subject: [PATCH 127/251] test(settings): add account hostname test (#1152) --- src/routes/Settings.test.tsx | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/routes/Settings.test.tsx b/src/routes/Settings.test.tsx index ce3d69a51..1060e9adc 100644 --- a/src/routes/Settings.test.tsx +++ b/src/routes/Settings.test.tsx @@ -106,6 +106,31 @@ describe('routes/Settings.tsx', () => { false, ); }); + + it('should toggle account hostname checkbox', async () => { + await act(async () => { + render( + + + + + , + ); + }); + + await screen.findByLabelText('Show account hostname'); + + fireEvent.click(screen.getByLabelText('Show account hostname')); + + expect(updateSetting).toHaveBeenCalledTimes(1); + expect(updateSetting).toHaveBeenCalledWith('showAccountHostname', true); + }); }); describe('Notifications section', () => { From ce8d6ba21e02a5a408e5497d99d28c56d048d92d Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Wed, 29 May 2024 04:18:58 -1000 Subject: [PATCH 128/251] test: markRepoNotificationsDone (#1155) --- src/context/App.test.tsx | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/context/App.test.tsx b/src/context/App.test.tsx index 0409a4e79..5ba772d4c 100644 --- a/src/context/App.test.tsx +++ b/src/context/App.test.tsx @@ -48,6 +48,7 @@ describe('context/App.tsx', () => { const markNotificationDoneMock = jest.fn(); const unsubscribeNotificationMock = jest.fn(); const markRepoNotificationsMock = jest.fn(); + const markRepoNotificationsDoneMock = jest.fn(); beforeEach(() => { (useNotifications as jest.Mock).mockReturnValue({ @@ -56,6 +57,7 @@ describe('context/App.tsx', () => { markNotificationDone: markNotificationDoneMock, unsubscribeNotification: unsubscribeNotificationMock, markRepoNotifications: markRepoNotificationsMock, + markRepoNotificationsDone: markRepoNotificationsDoneMock, }); }); @@ -234,6 +236,40 @@ describe('context/App.tsx', () => { ); }); + it('should call markRepoNotificationsDone', async () => { + const TestComponent = () => { + const { markRepoNotificationsDone } = useContext(AppContext); + + return ( + + ); + }; + + const { getByText } = customRender(); + + markRepoNotificationsDoneMock.mockReset(); + + fireEvent.click(getByText('Test Case')); + + expect(markRepoNotificationsDoneMock).toHaveBeenCalledTimes(1); + expect(markRepoNotificationsDoneMock).toHaveBeenCalledWith( + { enterpriseAccounts: [], token: null, user: null }, + mockSettings, + 'gitify-app/notifications-test', + 'github.com', + ); + }); + it('should call validateToken', async () => { apiRequestAuthMock.mockResolvedValueOnce(null); From 4de1d91b7d035f9b2848274e76c87764a8638067 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Wed, 29 May 2024 04:19:22 -1000 Subject: [PATCH 129/251] refactor: replace accounts with auth for AuthState (#1154) --- src/context/App.test.tsx | 4 +-- src/context/App.tsx | 8 ++--- src/hooks/useNotifications.test.ts | 20 ++++++------- src/hooks/useNotifications.ts | 43 +++++++++++++-------------- src/routes/LoginWithOAuthApp.test.tsx | 16 +++++----- src/utils/auth.test.ts | 18 +++++------ src/utils/auth.ts | 8 ++--- src/utils/helpers.ts | 27 +++++++++-------- src/utils/notifications.ts | 33 ++++++++++---------- 9 files changed, 84 insertions(+), 93 deletions(-) diff --git a/src/context/App.test.tsx b/src/context/App.test.tsx index 5ba772d4c..3b6591c51 100644 --- a/src/context/App.test.tsx +++ b/src/context/App.test.tsx @@ -15,11 +15,11 @@ jest.mock('../hooks/useNotifications'); const customRender = ( ui, - accounts: AuthState = mockAuth, + auth: AuthState = mockAuth, settings: SettingsState = mockSettings, ) => { return render( - + {ui} , ); diff --git a/src/context/App.tsx b/src/context/App.tsx index 2525c45de..a3b829006 100644 --- a/src/context/App.tsx +++ b/src/context/App.tsx @@ -26,7 +26,7 @@ import { getNotificationCount } from '../utils/notifications'; import { clearState, loadState, saveState } from '../utils/storage'; import { setTheme } from '../utils/theme'; -const defaultAccounts: AuthState = { +const defaultAuth: AuthState = { token: null, enterpriseAccounts: [], user: null, @@ -79,7 +79,7 @@ interface AppContextState { export const AppContext = createContext>({}); export const AppProvider = ({ children }: { children: ReactNode }) => { - const [accounts, setAccounts] = useState(defaultAccounts); + const [accounts, setAccounts] = useState(defaultAuth); const [settings, setSettings] = useState(defaultSettings); const { fetchNotifications, @@ -179,7 +179,7 @@ export const AppProvider = ({ children }: { children: ReactNode }) => { ); const logout = useCallback(() => { - setAccounts(defaultAccounts); + setAccounts(defaultAuth); clearState(); }, []); @@ -187,7 +187,7 @@ export const AppProvider = ({ children }: { children: ReactNode }) => { const existing = loadState(); if (existing.auth) { - setAccounts({ ...defaultAccounts, ...existing.auth }); + setAccounts({ ...defaultAuth, ...existing.auth }); } if (existing.settings) { diff --git a/src/hooks/useNotifications.test.ts b/src/hooks/useNotifications.test.ts index 7ef8bf272..83f332d29 100644 --- a/src/hooks/useNotifications.test.ts +++ b/src/hooks/useNotifications.test.ts @@ -102,7 +102,7 @@ describe('hooks/useNotifications.ts', () => { describe('enterprise', () => { it('should fetch notifications with success - enterprise only', async () => { - const accounts: AuthState = { + const auth: AuthState = { ...mockAuth, token: null, }; @@ -119,7 +119,7 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.fetchNotifications(accounts, { + result.current.fetchNotifications(auth, { ...mockSettings, detailedNotifications: false, }); @@ -136,7 +136,7 @@ describe('hooks/useNotifications.ts', () => { }); it('should fetch notifications with failure - enterprise only', async () => { - const accounts: AuthState = { + const auth: AuthState = { ...mockAuth, token: null, }; @@ -156,7 +156,7 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.fetchNotifications(accounts, mockSettings); + result.current.fetchNotifications(auth, mockSettings); }); await waitFor(() => { @@ -167,7 +167,7 @@ describe('hooks/useNotifications.ts', () => { describe('github.com', () => { it('should fetch notifications with success - github.com only', async () => { - const accounts: AuthState = { + const auth: AuthState = { ...mockAuth, enterpriseAccounts: [], user: mockUser, @@ -185,7 +185,7 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.fetchNotifications(accounts, { + result.current.fetchNotifications(auth, { ...mockSettings, detailedNotifications: false, }); @@ -200,7 +200,7 @@ describe('hooks/useNotifications.ts', () => { }); it('should fetch notifications with failures - github.com only', async () => { - const accounts: AuthState = { + const auth: AuthState = { ...mockAuth, enterpriseAccounts: [], }; @@ -220,7 +220,7 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.fetchNotifications(accounts, mockSettings); + result.current.fetchNotifications(auth, mockSettings); }); await waitFor(() => { @@ -232,7 +232,7 @@ describe('hooks/useNotifications.ts', () => { describe('with detailed notifications', () => { it('should fetch notifications with success', async () => { - const accounts: AuthState = { + const auth: AuthState = { ...mockAuth, enterpriseAccounts: [], user: mockUser, @@ -393,7 +393,7 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.fetchNotifications(accounts, { + result.current.fetchNotifications(auth, { ...mockSettings, detailedNotifications: true, }); diff --git a/src/hooks/useNotifications.ts b/src/hooks/useNotifications.ts index 70bb372b1..a048338a9 100644 --- a/src/hooks/useNotifications.ts +++ b/src/hooks/useNotifications.ts @@ -30,35 +30,35 @@ interface NotificationsState { hostname: string, ) => void; fetchNotifications: ( - accounts: AuthState, + auth: AuthState, settings: SettingsState, ) => Promise; markNotificationRead: ( - accounts: AuthState, + auth: AuthState, settings: SettingsState, id: string, hostname: string, ) => Promise; markNotificationDone: ( - accounts: AuthState, + auth: AuthState, settings: SettingsState, id: string, hostname: string, ) => Promise; unsubscribeNotification: ( - accounts: AuthState, + auth: AuthState, settings: SettingsState, id: string, hostname: string, ) => Promise; markRepoNotifications: ( - accounts: AuthState, + auth: AuthState, settings: SettingsState, repoSlug: string, hostname: string, ) => Promise; markRepoNotificationsDone: ( - accounts: AuthState, + auth: AuthState, settings: SettingsState, repoSlug: string, hostname: string, @@ -76,21 +76,18 @@ export const useNotifications = (): NotificationsState => { ); const fetchNotifications = useCallback( - async (accounts: AuthState, settings: SettingsState) => { + async (auth: AuthState, settings: SettingsState) => { setStatus('loading'); try { - const fetchedNotifications = await getAllNotifications( - accounts, - settings, - ); + const fetchedNotifications = await getAllNotifications(auth, settings); setNotifications(fetchedNotifications); triggerNativeNotifications( notifications, fetchedNotifications, settings, - accounts, + auth, ); setStatus('success'); } catch (err) { @@ -103,14 +100,14 @@ export const useNotifications = (): NotificationsState => { const markNotificationRead = useCallback( async ( - accounts: AuthState, + auth: AuthState, settings: SettingsState, id: string, hostname: string, ) => { setStatus('loading'); - const token = getTokenForHost(hostname, accounts); + const token = getTokenForHost(hostname, auth); try { await markNotificationThreadAsRead(id, hostname, token); @@ -134,14 +131,14 @@ export const useNotifications = (): NotificationsState => { const markNotificationDone = useCallback( async ( - accounts: AuthState, + auth: AuthState, settings: SettingsState, id: string, hostname: string, ) => { setStatus('loading'); - const token = getTokenForHost(hostname, accounts); + const token = getTokenForHost(hostname, auth); try { await markNotificationThreadAsDone(id, hostname, token); @@ -165,18 +162,18 @@ export const useNotifications = (): NotificationsState => { const unsubscribeNotification = useCallback( async ( - accounts: AuthState, + auth: AuthState, settings: SettingsState, id: string, hostname: string, ) => { setStatus('loading'); - const token = getTokenForHost(hostname, accounts); + const token = getTokenForHost(hostname, auth); try { await ignoreNotificationThreadSubscription(id, hostname, token); - await markNotificationRead(accounts, settings, id, hostname); + await markNotificationRead(auth, settings, id, hostname); setStatus('success'); } catch (err) { setStatus('success'); @@ -187,14 +184,14 @@ export const useNotifications = (): NotificationsState => { const markRepoNotifications = useCallback( async ( - accounts: AuthState, + auth: AuthState, settings: SettingsState, repoSlug: string, hostname: string, ) => { setStatus('loading'); - const token = getTokenForHost(hostname, accounts); + const token = getTokenForHost(hostname, auth); try { await markRepositoryNotificationsAsRead(repoSlug, hostname, token); @@ -216,7 +213,7 @@ export const useNotifications = (): NotificationsState => { const markRepoNotificationsDone = useCallback( async ( - accounts: AuthState, + auth: AuthState, settings: SettingsState, repoSlug: string, hostname: string, @@ -238,7 +235,7 @@ export const useNotifications = (): NotificationsState => { await Promise.all( notificationsToRemove.map((notification) => markNotificationDone( - accounts, + auth, settings, notification.id, notifications[accountIndex].hostname, diff --git a/src/routes/LoginWithOAuthApp.test.tsx b/src/routes/LoginWithOAuthApp.test.tsx index f42d61c6b..fe7a4b24f 100644 --- a/src/routes/LoginWithOAuthApp.test.tsx +++ b/src/routes/LoginWithOAuthApp.test.tsx @@ -15,7 +15,7 @@ jest.mock('react-router-dom', () => ({ describe('routes/LoginWithOAuthApp.tsx', () => { const openExternalMock = jest.spyOn(shell, 'openExternal'); - const mockAccounts: AuthState = { + const mockAuth: AuthState = { enterpriseAccounts: [], user: null, }; @@ -29,7 +29,7 @@ describe('routes/LoginWithOAuthApp.tsx', () => { it('renders correctly', () => { const tree = render( - + @@ -41,7 +41,7 @@ describe('routes/LoginWithOAuthApp.tsx', () => { it('let us go back', () => { render( - + @@ -80,7 +80,7 @@ describe('routes/LoginWithOAuthApp.tsx', () => { describe("'Create new OAuth App' button", () => { it('should be disabled if no hostname configured', async () => { render( - + @@ -94,7 +94,7 @@ describe('routes/LoginWithOAuthApp.tsx', () => { it('should open in browser if hostname configured', async () => { render( - + @@ -113,7 +113,7 @@ describe('routes/LoginWithOAuthApp.tsx', () => { it('should receive a logged-in enterprise account', () => { const { rerender } = render( - + @@ -142,7 +142,7 @@ describe('routes/LoginWithOAuthApp.tsx', () => { it('should render the form with errors', () => { render( - + @@ -168,7 +168,7 @@ describe('routes/LoginWithOAuthApp.tsx', () => { it('should open help docs in the browser', async () => { render( - + diff --git a/src/utils/auth.test.ts b/src/utils/auth.test.ts index df900dd53..ee517fc1b 100644 --- a/src/utils/auth.test.ts +++ b/src/utils/auth.test.ts @@ -103,27 +103,23 @@ describe('utils/auth.tsx', () => { }); describe('addAccount', () => { - const accounts: AuthState = { + const mockAuth: AuthState = { token: null, enterpriseAccounts: [], user: null, }; - it('should add a github.com account', async () => { - const result = await auth.addAccount(accounts, '123-456', 'github.com'); + it('should add a github.com account', () => { + const result = auth.addAccount(mockAuth, '123-456', 'github.com'); - expect(result).toEqual({ ...accounts, token: '123-456' }); + expect(result).toEqual({ ...mockAuth, token: '123-456' }); }); - it('should add an enterprise account', async () => { - const result = await auth.addAccount( - accounts, - '123-456', - 'github.gitify.io', - ); + it('should add an enterprise account', () => { + const result = auth.addAccount(mockAuth, '123-456', 'github.gitify.io'); expect(result).toEqual({ - ...accounts, + ...mockAuth, enterpriseAccounts: [ { hostname: 'github.gitify.io', token: '123-456' }, ], diff --git a/src/utils/auth.ts b/src/utils/auth.ts index 951c9f51d..c1d7f5671 100644 --- a/src/utils/auth.ts +++ b/src/utils/auth.ts @@ -112,23 +112,23 @@ export const getToken = async ( }; export const addAccount = ( - accounts: AuthState, + auth: AuthState, token, hostname, user?: GitifyUser, ): AuthState => { if (!isEnterpriseHost(hostname)) { return { - ...accounts, + ...auth, token, user: user ?? null, }; } return { - ...accounts, + ...auth, enterpriseAccounts: [ - ...accounts.enterpriseAccounts, + ...auth.enterpriseAccounts, { token, hostname: hostname, diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 7101c0638..310213a87 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -10,23 +10,24 @@ import { getWorkflowRunAttributes, } from './subject'; -export function isPersonalAccessTokenLoggedIn(accounts: AuthState): boolean { - return accounts.token != null; +export function isPersonalAccessTokenLoggedIn(auth: AuthState): boolean { + return auth.token != null; } -export function isOAuthAppLoggedIn(accounts: AuthState): boolean { - return accounts.enterpriseAccounts?.length > 0; +export function isOAuthAppLoggedIn(auth: AuthState): boolean { + return auth.enterpriseAccounts?.length > 0; } -export function getTokenForHost(hostname: string, accounts: AuthState): string { +export function getTokenForHost(hostname: string, auth: AuthState): string { const isEnterprise = isEnterpriseHost(hostname); if (isEnterprise) { - return accounts.enterpriseAccounts.find((obj) => obj.hostname === hostname) - .token; + return auth.enterpriseAccounts.find( + (account) => account.hostname === hostname, + ).token; } - return accounts.token; + return auth.token; } export function isEnterpriseHost(hostname: string): boolean { @@ -116,10 +117,10 @@ async function getDiscussionUrl( export async function generateGitHubWebUrl( notification: Notification, - accounts: AuthState, + auth: AuthState, ): Promise { const url = new URL(notification.repository.html_url); - const token = getTokenForHost(notification.hostname, accounts); + const token = getTokenForHost(notification.hostname, auth); if (notification.subject.latest_comment_url) { url.href = await getHtmlUrl(notification.subject.latest_comment_url, token); @@ -147,7 +148,7 @@ export async function generateGitHubWebUrl( url.searchParams.set( 'notification_referrer_id', - generateNotificationReferrerId(notification.id, accounts.user?.id), + generateNotificationReferrerId(notification.id, auth.user?.id), ); return url.toString(); @@ -180,9 +181,9 @@ export function formatNotificationUpdatedAt( export async function openInBrowser( notification: Notification, - accounts: AuthState, + auth: AuthState, ) { - const url = await generateGitHubWebUrl(notification, accounts); + const url = await generateGitHubWebUrl(notification, auth); openExternalLink(url); } diff --git a/src/utils/notifications.ts b/src/utils/notifications.ts index 4856b6c2b..a2c14ebe8 100644 --- a/src/utils/notifications.ts +++ b/src/utils/notifications.ts @@ -28,7 +28,7 @@ export const triggerNativeNotifications = ( previousNotifications: AccountNotifications[], newNotifications: AccountNotifications[], settings: SettingsState, - accounts: AuthState, + auth: AuthState, ) => { const diffNotifications = newNotifications .map((account) => { @@ -63,13 +63,13 @@ export const triggerNativeNotifications = ( } if (settings.showNotifications) { - raiseNativeNotification(diffNotifications, accounts); + raiseNativeNotification(diffNotifications, auth); } }; export const raiseNativeNotification = ( notifications: Notification[], - accounts: AuthState, + auth: AuthState, ) => { let title: string; let body: string; @@ -93,7 +93,7 @@ export const raiseNativeNotification = ( nativeNotification.onclick = () => { if (notifications.length === 1) { ipcRenderer.send('hide-window'); - openInBrowser(notifications[0], accounts); + openInBrowser(notifications[0], auth); } else { ipcRenderer.send('reopen-window'); } @@ -108,23 +108,20 @@ export const raiseSoundNotification = () => { audio.play(); }; -function getGitHubNotifications(accounts: AuthState, settings: SettingsState) { - if (!isPersonalAccessTokenLoggedIn(accounts)) { +function getGitHubNotifications(auth: AuthState, settings: SettingsState) { + if (!isPersonalAccessTokenLoggedIn(auth)) { return; } return listNotificationsForAuthenticatedUser( Constants.DEFAULT_AUTH_OPTIONS.hostname, - accounts.token, + auth.token, settings, ); } -function getEnterpriseNotifications( - accounts: AuthState, - settings: SettingsState, -) { - return accounts.enterpriseAccounts.map((account) => { +function getEnterpriseNotifications(auth: AuthState, settings: SettingsState) { + return auth.enterpriseAccounts.map((account) => { return listNotificationsForAuthenticatedUser( account.hostname, account.token, @@ -134,12 +131,12 @@ function getEnterpriseNotifications( } export async function getAllNotifications( - accounts: AuthState, + auth: AuthState, settings: SettingsState, ): Promise { const responses = await Promise.all([ - getGitHubNotifications(accounts, settings), - ...getEnterpriseNotifications(accounts, settings), + getGitHubNotifications(auth, settings), + ...getEnterpriseNotifications(auth, settings), ]); const notifications: AccountNotifications[] = await Promise.all( @@ -157,7 +154,7 @@ export async function getAllNotifications( notifications = await enrichNotifications( notifications, - accounts, + auth, settings, ); @@ -175,7 +172,7 @@ export async function getAllNotifications( export async function enrichNotifications( notifications: Notification[], - accounts: AuthState, + auth: AuthState, settings: SettingsState, ): Promise { if (!settings.detailedNotifications) { @@ -184,7 +181,7 @@ export async function enrichNotifications( const enrichedNotifications = await Promise.all( notifications.map(async (notification: Notification) => { - const token = getTokenForHost(notification.hostname, accounts); + const token = getTokenForHost(notification.hostname, auth); const additionalSubjectDetails = await getGitifySubjectDetails( notification, From 6ecbbb3c6c5aca631b057ae6f384a778a2a09f90 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Wed, 29 May 2024 04:21:53 -1000 Subject: [PATCH 130/251] refactor: process platform (#1153) * refactor: remove ipc for fetching platform type * platform-refactor --- main.js | 2 -- src/__mocks__/@electron/remote.js | 3 --- src/__mocks__/utils.ts | 5 +++++ src/routes/Settings.test.tsx | 15 +++++++++++++++ src/routes/Settings.tsx | 13 +++---------- src/utils/notifications.ts | 3 ++- src/utils/platform.ts | 11 +++++++++++ 7 files changed, 36 insertions(+), 16 deletions(-) create mode 100644 src/__mocks__/utils.ts create mode 100644 src/utils/platform.ts diff --git a/main.js b/main.js index 99bb36006..409f01cbc 100644 --- a/main.js +++ b/main.js @@ -76,8 +76,6 @@ mb.on('ready', () => { } }); - ipc.handle('get-platform', () => process.platform); - ipc.handle('get-app-version', () => app.getVersion()); ipc.on('reopen-window', () => mb.showWindow()); diff --git a/src/__mocks__/@electron/remote.js b/src/__mocks__/@electron/remote.js index c2250c249..6e148d15c 100644 --- a/src/__mocks__/@electron/remote.js +++ b/src/__mocks__/@electron/remote.js @@ -28,9 +28,6 @@ const dialog = { module.exports = { BrowserWindow: BrowserWindow, dialog: dialog, - process: { - platform: 'darwin', - }, app: { getLoginItemSettings: jest.fn(), setLoginItemSettings: () => {}, diff --git a/src/__mocks__/utils.ts b/src/__mocks__/utils.ts new file mode 100644 index 000000000..22149c55f --- /dev/null +++ b/src/__mocks__/utils.ts @@ -0,0 +1,5 @@ +export function mockPlatform(platform: NodeJS.Platform) { + Object.defineProperty(process, 'platform', { + value: platform, + }); +} diff --git a/src/routes/Settings.test.tsx b/src/routes/Settings.test.tsx index 1060e9adc..768443c60 100644 --- a/src/routes/Settings.test.tsx +++ b/src/routes/Settings.test.tsx @@ -2,6 +2,7 @@ import { act, fireEvent, render, screen } from '@testing-library/react'; import { ipcRenderer, shell } from 'electron'; import { MemoryRouter } from 'react-router-dom'; import { mockAuth, mockSettings } from '../__mocks__/state-mocks'; +import { mockPlatform } from '../__mocks__/utils'; import { AppContext } from '../context/App'; import { SettingsRoute } from './Settings'; @@ -12,12 +13,26 @@ jest.mock('react-router-dom', () => ({ })); describe('routes/Settings.tsx', () => { + let originalPlatform: NodeJS.Platform; const updateSetting = jest.fn(); + beforeAll(() => { + // Save the original platform value + originalPlatform = process.platform; + mockPlatform('darwin'); + }); + beforeEach(() => { jest.clearAllMocks(); }); + afterAll(() => { + // Restore the original platform value + Object.defineProperty(process, 'platform', { + value: originalPlatform, + }); + }); + describe('General', () => { it('should render itself & its children', async () => { await act(async () => { diff --git a/src/routes/Settings.tsx b/src/routes/Settings.tsx index 7a0aec680..553fa864c 100644 --- a/src/routes/Settings.tsx +++ b/src/routes/Settings.tsx @@ -30,6 +30,7 @@ import { isOAuthAppLoggedIn, isPersonalAccessTokenLoggedIn, } from '../utils/helpers'; +import { isLinux, isMacOS } from '../utils/platform'; import { setTheme } from '../utils/theme'; export const SettingsRoute: FC = () => { @@ -41,8 +42,6 @@ export const SettingsRoute: FC = () => { } = useContext(AppContext); const navigate = useNavigate(); - const [isLinux, setIsLinux] = useState(false); - const [isMacOS, setIsMacOS] = useState(false); const [appVersion, setAppVersion] = useState(null); const openGitHubReleaseNotes = useCallback((version) => { @@ -61,12 +60,6 @@ export const SettingsRoute: FC = () => { }; useEffect(() => { - (async () => { - const result = await ipcRenderer.invoke('get-platform'); - setIsLinux(result === 'linux'); - setIsMacOS(result === 'darwin'); - })(); - (async () => { const result = await ipcRenderer.invoke('get-app-version'); setAppVersion(result); @@ -253,7 +246,7 @@ export const SettingsRoute: FC = () => { System - {isMacOS && ( + {isMacOS() && ( { checked={settings.playSound} onChange={(evt) => updateSetting('playSound', evt.target.checked)} /> - {!isLinux && ( + {!isLinux() && ( { @@ -76,7 +77,7 @@ export const raiseNativeNotification = ( if (notifications.length === 1) { const notification = notifications[0]; - title = `${process.platform !== 'win32' ? 'Gitify - ' : ''}${ + title = `${isWindows() ? '' : 'Gitify - '}${ notification.repository.full_name }`; body = notification.subject.title; diff --git a/src/utils/platform.ts b/src/utils/platform.ts new file mode 100644 index 000000000..bef160c9e --- /dev/null +++ b/src/utils/platform.ts @@ -0,0 +1,11 @@ +export function isLinux(): boolean { + return process.platform === 'linux'; +} + +export function isMacOS(): boolean { + return process.platform === 'darwin'; +} + +export function isWindows(): boolean { + return process.platform === 'win32'; +} From a79233ed313fdde2122c1225ac5c478149740fdf Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Wed, 29 May 2024 22:18:35 -0400 Subject: [PATCH 131/251] refactor: continued renaming of accounts to auth (#1156) --- src/components/NotificationRow.tsx | 6 +-- src/context/App.tsx | 70 +++++++++++++++--------------- src/routes/Settings.tsx | 11 ++--- 3 files changed, 41 insertions(+), 46 deletions(-) diff --git a/src/components/NotificationRow.tsx b/src/components/NotificationRow.tsx index ff2558c0b..b322f0fe2 100644 --- a/src/components/NotificationRow.tsx +++ b/src/components/NotificationRow.tsx @@ -37,7 +37,7 @@ interface IProps { export const NotificationRow: FC = ({ notification, hostname }) => { const { settings, - auth: accounts, + auth, removeNotificationFromState, markNotificationRead, markNotificationDone, @@ -46,7 +46,7 @@ export const NotificationRow: FC = ({ notification, hostname }) => { } = useContext(AppContext); const openNotification = useCallback(() => { - openInBrowser(notification, accounts); + openInBrowser(notification, auth); if (settings.markAsDoneOnOpen) { markNotificationDone(notification.id, hostname); @@ -54,7 +54,7 @@ export const NotificationRow: FC = ({ notification, hostname }) => { // no need to mark as read, github does it by default when opening it removeNotificationFromState(settings, notification.id, hostname); } - }, [notifications, notification, accounts, settings]); // notifications required here to prevent weird state issues + }, [notifications, notification, auth, settings]); // notifications required here to prevent weird state issues const unsubscribeFromThread = (event: MouseEvent) => { // Don't trigger onClick of parent element. diff --git a/src/context/App.tsx b/src/context/App.tsx index a3b829006..789188467 100644 --- a/src/context/App.tsx +++ b/src/context/App.tsx @@ -79,7 +79,7 @@ interface AppContextState { export const AppContext = createContext>({}); export const AppProvider = ({ children }: { children: ReactNode }) => { - const [accounts, setAccounts] = useState(defaultAuth); + const [auth, setAuth] = useState(defaultAuth); const [settings, setSettings] = useState(defaultSettings); const { fetchNotifications, @@ -104,17 +104,17 @@ export const AppProvider = ({ children }: { children: ReactNode }) => { // biome-ignore lint/correctness/useExhaustiveDependencies: We only want fetchNotifications to be called for certain account or setting changes. useEffect(() => { - fetchNotifications(accounts, settings); + fetchNotifications(auth, settings); }, [ settings.participating, settings.showBots, settings.detailedNotifications, - accounts.token, - accounts.enterpriseAccounts.length, + auth.token, + auth.enterpriseAccounts.length, ]); useInterval(() => { - fetchNotifications(accounts, settings); + fetchNotifications(auth, settings); }, Constants.FETCH_INTERVAL); // biome-ignore lint/correctness/useExhaustiveDependencies: We need to update tray title when settings or notifications changes. @@ -136,34 +136,34 @@ export const AppProvider = ({ children }: { children: ReactNode }) => { const newSettings = { ...settings, [name]: value }; setSettings(newSettings); - saveState({ auth: accounts, settings: newSettings }); + saveState({ auth, settings: newSettings }); }, - [accounts, settings], + [auth, settings], ); const isLoggedIn = useMemo(() => { - return !!accounts.token || accounts.enterpriseAccounts.length > 0; - }, [accounts]); + return !!auth.token || auth.enterpriseAccounts.length > 0; + }, [auth]); const login = useCallback(async () => { const { authCode } = await authGitHub(); const { token } = await getToken(authCode); const hostname = Constants.DEFAULT_AUTH_OPTIONS.hostname; const user = await getUserData(token, hostname); - const updatedAccounts = addAccount(accounts, token, hostname, user); - setAccounts(updatedAccounts); - saveState({ auth: updatedAccounts, settings }); - }, [accounts, settings]); + const updatedAuth = addAccount(auth, token, hostname, user); + setAuth(updatedAuth); + saveState({ auth: updatedAuth, settings }); + }, [auth, settings]); const loginEnterprise = useCallback( async (data: AuthOptions) => { const { authOptions, authCode } = await authGitHub(data); const { token, hostname } = await getToken(authCode, authOptions); - const updatedAccounts = addAccount(accounts, token, hostname); - setAccounts(updatedAccounts); - saveState({ auth: updatedAccounts, settings }); + const updatedAuth = addAccount(auth, token, hostname); + setAuth(updatedAuth); + saveState({ auth: updatedAuth, settings }); }, - [accounts, settings], + [auth, settings], ); const validateToken = useCallback( @@ -171,15 +171,15 @@ export const AppProvider = ({ children }: { children: ReactNode }) => { await headNotifications(hostname, token); const user = await getUserData(token, hostname); - const updatedAccounts = addAccount(accounts, token, hostname, user); - setAccounts(updatedAccounts); + const updatedAccounts = addAccount(auth, token, hostname, user); + setAuth(updatedAccounts); saveState({ auth: updatedAccounts, settings }); }, - [accounts, settings], + [auth, settings], ); const logout = useCallback(() => { - setAccounts(defaultAuth); + setAuth(defaultAuth); clearState(); }, []); @@ -187,7 +187,7 @@ export const AppProvider = ({ children }: { children: ReactNode }) => { const existing = loadState(); if (existing.auth) { - setAccounts({ ...defaultAuth, ...existing.auth }); + setAuth({ ...defaultAuth, ...existing.auth }); } if (existing.settings) { @@ -197,44 +197,44 @@ export const AppProvider = ({ children }: { children: ReactNode }) => { }, []); const fetchNotificationsWithAccounts = useCallback( - async () => await fetchNotifications(accounts, settings), - [accounts, settings, notifications], + async () => await fetchNotifications(auth, settings), + [auth, settings, notifications], ); const markNotificationReadWithAccounts = useCallback( async (id: string, hostname: string) => - await markNotificationRead(accounts, settings, id, hostname), - [accounts, notifications], + await markNotificationRead(auth, settings, id, hostname), + [auth, notifications], ); const markNotificationDoneWithAccounts = useCallback( async (id: string, hostname: string) => - await markNotificationDone(accounts, settings, id, hostname), - [accounts, notifications], + await markNotificationDone(auth, settings, id, hostname), + [auth, notifications], ); const unsubscribeNotificationWithAccounts = useCallback( async (id: string, hostname: string) => - await unsubscribeNotification(accounts, settings, id, hostname), - [accounts, notifications], + await unsubscribeNotification(auth, settings, id, hostname), + [auth, notifications], ); const markRepoNotificationsWithAccounts = useCallback( async (repoSlug: string, hostname: string) => - await markRepoNotifications(accounts, settings, repoSlug, hostname), - [accounts, notifications], + await markRepoNotifications(auth, settings, repoSlug, hostname), + [auth, notifications], ); const markRepoNotificationsDoneWithAccounts = useCallback( async (repoSlug: string, hostname: string) => - await markRepoNotificationsDone(accounts, settings, repoSlug, hostname), - [accounts, notifications], + await markRepoNotificationsDone(auth, settings, repoSlug, hostname), + [auth, notifications], ); return ( { - const { - auth: accounts, - settings, - updateSetting, - logout, - } = useContext(AppContext); + const { auth, settings, updateSetting, logout } = useContext(AppContext); const navigate = useNavigate(); const [appVersion, setAppVersion] = useState(null); @@ -301,7 +296,7 @@ export const SettingsRoute: FC = () => { className={footerButtonClass} title="Login with Personal Access Token" onClick={loginWithPersonalAccessToken} - hidden={isPersonalAccessTokenLoggedIn(accounts)} + hidden={isPersonalAccessTokenLoggedIn(auth)} > @@ -312,7 +307,7 @@ export const SettingsRoute: FC = () => { className={footerButtonClass} title="Login with OAuth App" onClick={loginWithOAuthApp} - hidden={isOAuthAppLoggedIn(accounts)} + hidden={isOAuthAppLoggedIn(auth)} > From f9daa159fe3b392d095d132bfc64c63245d37c3b Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Thu, 30 May 2024 21:47:49 -0400 Subject: [PATCH 132/251] fix: account name header height (#1159) --- src/components/AccountNotifications.tsx | 3 +-- .../__snapshots__/AccountNotifications.test.tsx.snap | 8 ++++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/components/AccountNotifications.tsx b/src/components/AccountNotifications.tsx index 50affd7df..738dd8098 100644 --- a/src/components/AccountNotifications.tsx +++ b/src/components/AccountNotifications.tsx @@ -28,9 +28,8 @@ export const AccountNotifications = (props: IProps) => { return ( <> {showAccountHostname && ( -
+
{hostname} -
)} diff --git a/src/components/__snapshots__/AccountNotifications.test.tsx.snap b/src/components/__snapshots__/AccountNotifications.test.tsx.snap index 1905e1ce9..de9b86718 100644 --- a/src/components/__snapshots__/AccountNotifications.test.tsx.snap +++ b/src/components/__snapshots__/AccountNotifications.test.tsx.snap @@ -6,7 +6,7 @@ exports[`components/AccountNotifications.tsx should render itself (github.com wi "baseElement":
github.com , "container":
github.com
github.com , "container":
github.com Date: Fri, 31 May 2024 06:37:44 -0400 Subject: [PATCH 133/251] refactor: login methods and options (#1158) * refactor: rename login methods and options * refactor: move to utils/auth package --- src/__mocks__/state-mocks.ts | 2 +- src/context/App.test.tsx | 168 +++++++------- src/context/App.tsx | 41 ++-- src/routes/LoginWithOAuthApp.tsx | 8 +- .../LoginWithPersonalAccessToken.test.tsx | 20 +- src/routes/LoginWithPersonalAccessToken.tsx | 13 +- src/types.ts | 26 +-- src/utils/{ => auth}/auth.test.ts | 8 +- src/utils/auth/types.ts | 25 ++ src/utils/auth/utils.test.ts | 213 ++++++++++++++++++ src/utils/{auth.ts => auth/utils.ts} | 18 +- 11 files changed, 394 insertions(+), 148 deletions(-) rename src/utils/{ => auth}/auth.test.ts (97%) create mode 100644 src/utils/auth/types.ts create mode 100644 src/utils/auth/utils.test.ts rename src/utils/{auth.ts => auth/utils.ts} (92%) diff --git a/src/__mocks__/state-mocks.ts b/src/__mocks__/state-mocks.ts index 9622c32c9..90bf49f23 100644 --- a/src/__mocks__/state-mocks.ts +++ b/src/__mocks__/state-mocks.ts @@ -1,10 +1,10 @@ import { type AuthState, - type EnterpriseAccount, type GitifyUser, type SettingsState, Theme, } from '../types'; +import type { EnterpriseAccount } from '../utils/auth/types'; export const mockEnterpriseAccounts: EnterpriseAccount[] = [ { diff --git a/src/context/App.test.tsx b/src/context/App.test.tsx index 3b6591c51..25a6201d8 100644 --- a/src/context/App.test.tsx +++ b/src/context/App.test.tsx @@ -35,8 +35,7 @@ describe('context/App.tsx', () => { jest.clearAllMocks(); }); - describe('api methods', () => { - const apiRequestAuthMock = jest.spyOn(apiRequests, 'apiRequestAuth'); + describe('notification methods', () => { const getNotificationCountMock = jest.spyOn( notifications, 'getNotificationCount', @@ -269,18 +268,31 @@ describe('context/App.tsx', () => { 'github.com', ); }); + }); + describe('authentication methods', () => { + const apiRequestAuthMock = jest.spyOn(apiRequests, 'apiRequestAuth'); + const fetchNotificationsMock = jest.fn(); - it('should call validateToken', async () => { + beforeEach(() => { + (useNotifications as jest.Mock).mockReturnValue({ + fetchNotifications: fetchNotificationsMock, + }); + }); + + it('should call loginWithPersonalAccessToken', async () => { apiRequestAuthMock.mockResolvedValueOnce(null); const TestComponent = () => { - const { validateToken } = useContext(AppContext); + const { loginWithPersonalAccessToken } = useContext(AppContext); return (
- {notifications.map((account) => ( + {notifications.map((accountNotifications) => ( { await act(async () => { render( @@ -55,8 +60,8 @@ describe('routes/Settings.tsx', () => { render( @@ -76,8 +81,8 @@ describe('routes/Settings.tsx', () => { render( @@ -99,8 +104,8 @@ describe('routes/Settings.tsx', () => { render( @@ -127,8 +132,8 @@ describe('routes/Settings.tsx', () => { render( @@ -154,8 +159,8 @@ describe('routes/Settings.tsx', () => { render( @@ -179,8 +184,8 @@ describe('routes/Settings.tsx', () => { render( @@ -214,12 +219,12 @@ describe('routes/Settings.tsx', () => { render( @@ -255,12 +260,12 @@ describe('routes/Settings.tsx', () => { render( @@ -296,8 +301,8 @@ describe('routes/Settings.tsx', () => { render( @@ -321,8 +326,8 @@ describe('routes/Settings.tsx', () => { render( @@ -351,8 +356,8 @@ describe('routes/Settings.tsx', () => { render( @@ -382,8 +387,8 @@ describe('routes/Settings.tsx', () => { render( @@ -407,8 +412,8 @@ describe('routes/Settings.tsx', () => { render( @@ -432,8 +437,8 @@ describe('routes/Settings.tsx', () => { render( @@ -459,8 +464,8 @@ describe('routes/Settings.tsx', () => { render( @@ -484,8 +489,8 @@ describe('routes/Settings.tsx', () => { render( @@ -514,8 +519,8 @@ describe('routes/Settings.tsx', () => { render( @@ -537,11 +542,8 @@ describe('routes/Settings.tsx', () => { render( @@ -564,8 +566,8 @@ describe('routes/Settings.tsx', () => { render( @@ -585,8 +587,8 @@ describe('routes/Settings.tsx', () => { render( @@ -611,7 +613,10 @@ describe('routes/Settings.tsx', () => { await act(async () => { render( diff --git a/src/routes/__snapshots__/Settings.test.tsx.snap b/src/routes/__snapshots__/Settings.test.tsx.snap index c0eb68f2a..e95556fe0 100644 --- a/src/routes/__snapshots__/Settings.test.tsx.snap +++ b/src/routes/__snapshots__/Settings.test.tsx.snap @@ -549,7 +549,6 @@ exports[`routes/Settings.tsx General should render itself & its children 1`] = ` ); }) : null} {notification.subject?.comments > 0 && ( - - + + )} diff --git a/src/components/__snapshots__/NotificationRow.test.tsx.snap b/src/components/__snapshots__/NotificationRow.test.tsx.snap index 6b24aaae0..58f5668d1 100644 --- a/src/components/__snapshots__/NotificationRow.test.tsx.snap +++ b/src/components/__snapshots__/NotificationRow.test.tsx.snap @@ -83,61 +83,79 @@ exports[`components/NotificationRow.tsx rendering for notification comments coun class="ml-1" title="octocat approved these changes" > - - - + + + + 1 + - - - + + + + 1 + - - - + + + + 1 + @@ -292,61 +310,79 @@ exports[`components/NotificationRow.tsx rendering for notification comments coun class="ml-1" title="octocat approved these changes" > - - - + + + + 1 + - - - + + + + 1 + - - - + + + + 1 + @@ -558,61 +594,79 @@ exports[`components/NotificationRow.tsx rendering for notification comments coun class="ml-1" title="octocat approved these changes" > - - - + + + + 1 + - - - + + + + 1 + - - - + + + + 2 + @@ -767,61 +821,79 @@ exports[`components/NotificationRow.tsx rendering for notification comments coun class="ml-1" title="octocat approved these changes" > - - - + + + + 1 + - - - + + + + 1 + - - - + + + + 2 + @@ -1033,41 +1105,53 @@ exports[`components/NotificationRow.tsx rendering for notification comments coun class="ml-1" title="octocat approved these changes" > - - - + + + + 1 + - - - + + + + 1 + @@ -1222,41 +1306,53 @@ exports[`components/NotificationRow.tsx rendering for notification comments coun class="ml-1" title="octocat approved these changes" > - - - + + + + 1 + - - - + + + + 1 + @@ -1462,41 +1558,53 @@ exports[`components/NotificationRow.tsx should render itself & its children 1`] class="ml-1" title="octocat approved these changes" > - - - + + + + 1 + - - - + + + + 1 + @@ -1645,41 +1753,53 @@ exports[`components/NotificationRow.tsx should render itself & its children 1`] class="ml-1" title="octocat approved these changes" > - - - + + + + 1 + - - - + + + + 1 + @@ -1885,41 +2005,53 @@ exports[`components/NotificationRow.tsx should render itself & its children when class="ml-1" title="octocat approved these changes" > - - - + + + + 1 + - - - + + + + 1 + @@ -2068,41 +2200,53 @@ exports[`components/NotificationRow.tsx should render itself & its children when class="ml-1" title="octocat approved these changes" > - - - + + + + 1 + - - - + + + + 1 + @@ -2314,41 +2458,53 @@ exports[`components/NotificationRow.tsx should render itself & its children with class="ml-1" title="octocat approved these changes" > - - - + + + + 1 + - - - + + + + 1 + @@ -2503,41 +2659,53 @@ exports[`components/NotificationRow.tsx should render itself & its children with class="ml-1" title="octocat approved these changes" > - - - + + + + 1 + - - - + + + + 1 + diff --git a/src/utils/constants.ts b/src/utils/constants.ts index c6a92a41d..a7295819e 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -24,6 +24,9 @@ export const Constants = { READ_CLASS_NAME: 'opacity-50 dark:opacity-50', + PILL_CLASS_NAME: + 'rounded-full text-xs px-2 bg-gray-100 hover:bg-gray-200 dark:bg-gray-800 dark:hover:bg-gray-700', + // GitHub Docs GITHUB_DOCS: { OAUTH_URL: From 19aea049ee3eecf1f8a6abcce495e6cb20847468 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Sun, 2 Jun 2024 19:59:32 -0400 Subject: [PATCH 143/251] refactor: use tailwind classes in place of spaces (#1170) --- src/routes/LoginWithOAuthApp.tsx | 4 ++-- src/routes/LoginWithPersonalAccessToken.tsx | 4 ++-- src/routes/Settings.tsx | 6 +++--- .../LoginWithOAuthApp.test.tsx.snap | 16 ++++++++++------ .../LoginWithPersonalAccessToken.test.tsx.snap | 14 ++++++++++---- 5 files changed, 27 insertions(+), 17 deletions(-) diff --git a/src/routes/LoginWithOAuthApp.tsx b/src/routes/LoginWithOAuthApp.tsx index 63acee451..f95c54153 100644 --- a/src/routes/LoginWithOAuthApp.tsx +++ b/src/routes/LoginWithOAuthApp.tsx @@ -77,8 +77,8 @@ export const LoginWithOAuthApp: FC = () => { icon={PersonIcon} size={12} url={getNewOAuthAppURL(values.hostname)} - />{' '} - on GitHub then paste your{' '} + /> + on GitHub then paste your client id and client secret below.
} diff --git a/src/routes/LoginWithPersonalAccessToken.tsx b/src/routes/LoginWithPersonalAccessToken.tsx index 21fdc6961..26b79cea6 100644 --- a/src/routes/LoginWithPersonalAccessToken.tsx +++ b/src/routes/LoginWithPersonalAccessToken.tsx @@ -81,8 +81,8 @@ export const LoginWithPersonalAccessToken: FC = () => { icon={KeyIcon} size={12} url={getNewTokenURL(values.hostname)} - />{' '} - on GitHub and paste above. + /> + on GitHub and paste above.
The required scopes will be selected for you. diff --git a/src/routes/Settings.tsx b/src/routes/Settings.tsx index 3bdbb8f75..25bfdb35d 100644 --- a/src/routes/Settings.tsx +++ b/src/routes/Settings.tsx @@ -174,15 +174,15 @@ export const SettingsRoute: FC = () => { tooltip={
- See{' '} + See {' '} + for more details.
diff --git a/src/routes/__snapshots__/LoginWithOAuthApp.test.tsx.snap b/src/routes/__snapshots__/LoginWithOAuthApp.test.tsx.snap index 0b21d7712..e19339827 100644 --- a/src/routes/__snapshots__/LoginWithOAuthApp.test.tsx.snap +++ b/src/routes/__snapshots__/LoginWithOAuthApp.test.tsx.snap @@ -102,9 +102,11 @@ exports[`routes/LoginWithOAuthApp.tsx renders correctly 1`] = ` Create new OAuth App - - on GitHub then paste your - + + on GitHub then paste your + @@ -302,9 +304,11 @@ exports[`routes/LoginWithOAuthApp.tsx renders correctly 1`] = ` Create new OAuth App - - on GitHub then paste your - + + on GitHub then paste your + diff --git a/src/routes/__snapshots__/LoginWithPersonalAccessToken.test.tsx.snap b/src/routes/__snapshots__/LoginWithPersonalAccessToken.test.tsx.snap index 63cafcd99..c64aeb84a 100644 --- a/src/routes/__snapshots__/LoginWithPersonalAccessToken.test.tsx.snap +++ b/src/routes/__snapshots__/LoginWithPersonalAccessToken.test.tsx.snap @@ -127,8 +127,11 @@ exports[`routes/LoginWithPersonalAccessToken.tsx renders correctly 1`] = ` Generate a PAT - - on GitHub and paste above. + + on GitHub and paste above. +
Generate a PAT - - on GitHub and paste above. + + on GitHub and paste above. +
Date: Sun, 2 Jun 2024 21:41:10 -0400 Subject: [PATCH 144/251] chore(deps): update dependency @types/node to v20.14.0 (#1171) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 114 ++++++++++++++++++++++++------------------------- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/package.json b/package.json index 8f09c53d7..47ce3088f 100644 --- a/package.json +++ b/package.json @@ -128,7 +128,7 @@ "@electron/notarize": "2.3.2", "@testing-library/react": "15.0.7", "@types/jest": "29.5.12", - "@types/node": "20.13.0", + "@types/node": "20.14.0", "@types/nprogress": "0.2.3", "@types/react": "18.3.3", "@types/react-router-dom": "5.3.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 63e22c732..9923dff6b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: 29.5.12 version: 29.5.12 '@types/node': - specifier: 20.13.0 - version: 20.13.0 + specifier: 20.14.0 + version: 20.14.0 '@types/nprogress': specifier: 0.2.3 version: 0.2.3 @@ -101,7 +101,7 @@ importers: version: 9.0.11 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)) + version: 29.7.0(@types/node@20.14.0)(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)) jest-environment-jsdom: specifier: 29.7.0 version: 29.7.0 @@ -122,13 +122,13 @@ importers: version: 4.0.0(webpack@5.91.0(webpack-cli@5.1.4)) tailwindcss: specifier: 3.4.3 - version: 3.4.3(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)) + version: 3.4.3(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)) ts-jest: specifier: 29.1.4 - version: 29.1.4(@babel/core@7.24.3)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)))(typescript@5.4.5) + version: 29.1.4(@babel/core@7.24.3)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@20.14.0)(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)))(typescript@5.4.5) ts-node: specifier: 10.9.2 - version: 10.9.2(@types/node@20.13.0)(typescript@5.4.5) + version: 10.9.2(@types/node@20.14.0)(typescript@5.4.5) webpack: specifier: 5.91.0 version: 5.91.0(webpack-cli@5.1.4) @@ -669,8 +669,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@20.13.0': - resolution: {integrity: sha512-FM6AOb3khNkNIXPnHFDYaHerSv8uN22C91z098AnGccVu+Pcdhi+pNUFDi0iLmPIsVE0JBD0KVS7mzUYt4nRzQ==} + '@types/node@20.14.0': + resolution: {integrity: sha512-5cHBxFGJx6L4s56Bubp4fglrEpmyJypsqI6RgzMfBHWUJQGWAAi8cWcgetEbZXHYXo9C2Fa4EEds/uSyS4cxmA==} '@types/nprogress@0.2.3': resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==} @@ -3513,27 +3513,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 20.13.0 + '@types/node': 20.14.0 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5))': + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.13.0 + '@types/node': 20.14.0 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@20.14.0)(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -3558,7 +3558,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.13.0 + '@types/node': 20.14.0 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -3576,7 +3576,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.13.0 + '@types/node': 20.14.0 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -3598,7 +3598,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.13.0 + '@types/node': 20.14.0 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -3668,7 +3668,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.13.0 + '@types/node': 20.14.0 '@types/yargs': 17.0.32 chalk: 4.1.2 @@ -3807,7 +3807,7 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 20.13.0 + '@types/node': 20.14.0 '@types/responselike': 1.0.3 '@types/debug@4.1.12': @@ -3828,11 +3828,11 @@ snapshots: '@types/fs-extra@9.0.13': dependencies: - '@types/node': 20.13.0 + '@types/node': 20.14.0 '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 20.13.0 + '@types/node': 20.14.0 '@types/history@4.7.11': {} @@ -3855,7 +3855,7 @@ snapshots: '@types/jsdom@20.0.1': dependencies: - '@types/node': 20.13.0 + '@types/node': 20.14.0 '@types/tough-cookie': 4.0.5 parse5: 7.1.2 @@ -3863,11 +3863,11 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 20.13.0 + '@types/node': 20.14.0 '@types/ms@0.7.34': {} - '@types/node@20.13.0': + '@types/node@20.14.0': dependencies: undici-types: 5.26.5 @@ -3875,7 +3875,7 @@ snapshots: '@types/plist@3.0.5': dependencies: - '@types/node': 20.13.0 + '@types/node': 20.14.0 xmlbuilder: 15.1.1 optional: true @@ -3907,7 +3907,7 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 20.13.0 + '@types/node': 20.14.0 '@types/stack-utils@2.0.3': {} @@ -3924,7 +3924,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 20.13.0 + '@types/node': 20.14.0 optional: true '@webassemblyjs/ast@1.12.1': @@ -4501,13 +4501,13 @@ snapshots: buffer: 5.7.1 optional: true - create-jest@29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)): + create-jest@29.7.0(@types/node@20.14.0)(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@20.14.0)(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -4715,7 +4715,7 @@ snapshots: electron@30.0.9: dependencies: '@electron/get': 2.0.3 - '@types/node': 20.13.0 + '@types/node': 20.14.0 extract-zip: 2.0.1 transitivePeerDependencies: - supports-color @@ -5218,7 +5218,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.13.0 + '@types/node': 20.14.0 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -5238,16 +5238,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)): + jest-cli@29.7.0(@types/node@20.14.0)(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)) + create-jest: 29.7.0(@types/node@20.14.0)(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@20.14.0)(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -5257,7 +5257,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)): + jest-config@29.7.0(@types/node@20.14.0)(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)): dependencies: '@babel/core': 7.24.3 '@jest/test-sequencer': 29.7.0 @@ -5282,8 +5282,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.13.0 - ts-node: 10.9.2(@types/node@20.13.0)(typescript@5.4.5) + '@types/node': 20.14.0 + ts-node: 10.9.2(@types/node@20.14.0)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -5313,7 +5313,7 @@ snapshots: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 20.13.0 + '@types/node': 20.14.0 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -5327,7 +5327,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.13.0 + '@types/node': 20.14.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -5337,7 +5337,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.13.0 + '@types/node': 20.14.0 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -5376,7 +5376,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.13.0 + '@types/node': 20.14.0 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -5411,7 +5411,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.13.0 + '@types/node': 20.14.0 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -5439,7 +5439,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.13.0 + '@types/node': 20.14.0 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -5485,7 +5485,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.13.0 + '@types/node': 20.14.0 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -5504,7 +5504,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.13.0 + '@types/node': 20.14.0 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -5513,23 +5513,23 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 20.13.0 + '@types/node': 20.14.0 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 20.13.0 + '@types/node': 20.14.0 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)): + jest@29.7.0(@types/node@20.14.0)(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)) + jest-cli: 29.7.0(@types/node@20.14.0)(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -5874,13 +5874,13 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.38 - postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)): + postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)): dependencies: lilconfig: 3.1.1 yaml: 2.4.1 optionalDependencies: postcss: 8.4.38 - ts-node: 10.9.2(@types/node@20.13.0)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@20.14.0)(typescript@5.4.5) postcss-loader@8.1.1(postcss@8.4.38)(typescript@5.4.5)(webpack@5.91.0(webpack-cli@5.1.4)): dependencies: @@ -6301,7 +6301,7 @@ snapshots: symbol-tree@3.2.4: {} - tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)): + tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -6320,7 +6320,7 @@ snapshots: postcss: 8.4.38 postcss-import: 15.1.0(postcss@8.4.38) postcss-js: 4.0.1(postcss@8.4.38) - postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)) + postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)) postcss-nested: 6.0.1(postcss@8.4.38) postcss-selector-parser: 6.0.16 resolve: 1.22.8 @@ -6415,11 +6415,11 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.1.4(@babel/core@7.24.3)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)))(typescript@5.4.5): + ts-jest@29.1.4(@babel/core@7.24.3)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@20.14.0)(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)))(typescript@5.4.5): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.13.0)(ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5)) + jest: 29.7.0(@types/node@20.14.0)(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -6443,14 +6443,14 @@ snapshots: typescript: 5.4.5 webpack: 5.91.0(webpack-cli@5.1.4) - ts-node@10.9.2(@types/node@20.13.0)(typescript@5.4.5): + ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.13.0 + '@types/node': 20.14.0 acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 From b944c2224ad59cf061fd35a2e5159dc696720b05 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Mon, 3 Jun 2024 16:19:48 -0400 Subject: [PATCH 145/251] refactor: remove unnecessary await --- src/utils/auth/utils.test.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/utils/auth/utils.test.ts b/src/utils/auth/utils.test.ts index 6afe6d7e7..19ab1e621 100644 --- a/src/utils/auth/utils.test.ts +++ b/src/utils/auth/utils.test.ts @@ -112,8 +112,8 @@ describe('utils/auth/utils.ts', () => { }); describe('should add GitHub Cloud account', () => { - it('should add personal access token account', async () => { - const result = await auth.addAccount( + it('should add personal access token account', () => { + const result = auth.addAccount( mockAuthState, 'Personal Access Token', '123-456', @@ -131,8 +131,8 @@ describe('utils/auth/utils.ts', () => { ]); }); - it('should add oauth app account', async () => { - const result = await auth.addAccount( + it('should add oauth app account', () => { + const result = auth.addAccount( mockAuthState, 'OAuth App', '123-456', @@ -152,8 +152,8 @@ describe('utils/auth/utils.ts', () => { }); describe('should add GitHub Enterprise Server account', () => { - it('should add personal access token account', async () => { - const result = await auth.addAccount( + it('should add personal access token account', () => { + const result = auth.addAccount( mockAuthState, 'Personal Access Token', '123-456', @@ -171,8 +171,8 @@ describe('utils/auth/utils.ts', () => { ]); }); - it('should add oauth app account', async () => { - const result = await auth.addAccount( + it('should add oauth app account', () => { + const result = auth.addAccount( mockAuthState, 'OAuth App', '123-456', From 6dc1c6910e4721654f28f6dac37e896d12e70c8b Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Mon, 3 Jun 2024 19:19:08 -0400 Subject: [PATCH 146/251] feat: linked issue indicator (#1160) --- src/components/NotificationRow.test.tsx | 36 + src/components/NotificationRow.tsx | 17 + .../NotificationRow.test.tsx.snap | 1138 +++++++++++++++++ src/typesGitHub.ts | 1 + src/utils/subject.test.ts | 20 + src/utils/subject.ts | 22 + 6 files changed, 1234 insertions(+) diff --git a/src/components/NotificationRow.test.tsx b/src/components/NotificationRow.test.tsx index 7a2a05484..af7b1627d 100644 --- a/src/components/NotificationRow.test.tsx +++ b/src/components/NotificationRow.test.tsx @@ -117,6 +117,42 @@ describe('components/NotificationRow.tsx', () => { }); }); + describe('linked issues/prs', () => { + it('should render when linked to one issue/pr', async () => { + jest + .spyOn(global.Date, 'now') + .mockImplementation(() => new Date('2024').valueOf()); + + const mockNotification = mockSingleNotification; + mockNotification.subject.linkedIssues = ['#1']; + + const props = { + notification: mockNotification, + hostname: 'github.com', + }; + + const tree = render(); + expect(tree).toMatchSnapshot(); + }); + + it('should render when linked to multiple issues/prs', async () => { + jest + .spyOn(global.Date, 'now') + .mockImplementation(() => new Date('2024').valueOf()); + + const mockNotification = mockSingleNotification; + mockNotification.subject.linkedIssues = ['#1', '#2']; + + const props = { + notification: mockNotification, + hostname: 'github.com', + }; + + const tree = render(); + expect(tree).toMatchSnapshot(); + }); + }); + describe('notification interactions', () => { it('should open a notification in the browser - click', () => { const removeNotificationFromState = jest.fn(); diff --git a/src/components/NotificationRow.tsx b/src/components/NotificationRow.tsx index a98eb5c80..d9cd9b9f1 100644 --- a/src/components/NotificationRow.tsx +++ b/src/components/NotificationRow.tsx @@ -3,6 +3,7 @@ import { CheckIcon, CommentIcon, FeedPersonIcon, + IssueClosedIcon, ReadIcon, } from '@primer/octicons-react'; import { @@ -91,6 +92,10 @@ export const NotificationRow: FC = ({ notification, hostname }) => { notification.subject.comments > 1 ? 'comments' : 'comment' }`; + const linkedIssuesPillDescription = `Linked to ${ + notification.subject.linkedIssues?.length > 1 ? 'issues' : 'issue' + } ${notification.subject?.linkedIssues?.join(', ')}`; + return (
= ({ notification, hostname }) => { {reason.title} {updatedAt} + {notification.subject?.linkedIssues?.length > 0 && ( + + + + )} {notification.subject.reviews ? notification.subject.reviews.map((review) => { const icon = getPullRequestReviewIcon(review); diff --git a/src/components/__snapshots__/NotificationRow.test.tsx.snap b/src/components/__snapshots__/NotificationRow.test.tsx.snap index 58f5668d1..6479765ad 100644 --- a/src/components/__snapshots__/NotificationRow.test.tsx.snap +++ b/src/components/__snapshots__/NotificationRow.test.tsx.snap @@ -1,5 +1,1143 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`components/NotificationRow.tsx linked issues/prs should render when linked to multiple issues/prs 1`] = ` +{ + "asFragment": [Function], + "baseElement": +
+
+
+ + + + +
+
+
+ I am a robot and this is a test! +
+
+ + + + + + + Updated + + + over 6 years ago + + + + + + + + + + + + + + + +
+
+
+ + + +
+
+
+ , + "container":
+
+
+ + + + +
+
+
+ I am a robot and this is a test! +
+
+ + + + + + + Updated + + + over 6 years ago + + + + + + + + + + + + + + + +
+
+
+ + + +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; + +exports[`components/NotificationRow.tsx linked issues/prs should render when linked to one issue/pr 1`] = ` +{ + "asFragment": [Function], + "baseElement": +
+
+
+ + + + +
+
+
+ I am a robot and this is a test! +
+
+ + + + + + + Updated + + + over 6 years ago + + + + + + + + + + + + + + + +
+
+
+ + + +
+
+
+ , + "container":
+
+
+ + + + +
+
+
+ I am a robot and this is a test! +
+
+ + + + + + + Updated + + + over 6 years ago + + + + + + + + + + + + + + + +
+
+
+ + + +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; + exports[`components/NotificationRow.tsx rendering for notification comments count should render when 1 comment 1`] = ` { "asFragment": [Function], diff --git a/src/typesGitHub.ts b/src/typesGitHub.ts index 416b0164a..46f0ee943 100644 --- a/src/typesGitHub.ts +++ b/src/typesGitHub.ts @@ -264,6 +264,7 @@ export interface GitifySubject { state?: StateType; user?: SubjectUser; reviews?: GitifyPullRequestReview[]; + linkedIssues?: string[]; comments?: number; } diff --git a/src/utils/subject.test.ts b/src/utils/subject.test.ts index 43419582b..9ea16cad2 100644 --- a/src/utils/subject.test.ts +++ b/src/utils/subject.test.ts @@ -17,6 +17,7 @@ import { getGitifySubjectDetails, getLatestReviewForReviewers, getWorkflowRunAttributes, + parseLinkedIssuesFromPrBody, } from './subject'; const mockAuthor = partialMockUser('some-author'); @@ -557,6 +558,7 @@ describe('utils/subject.ts', () => { type: mockCommenter.type, }, reviews: null, + linkedIssues: [], }); }); @@ -589,6 +591,7 @@ describe('utils/subject.ts', () => { type: mockCommenter.type, }, reviews: null, + linkedIssues: [], }); }); @@ -621,6 +624,7 @@ describe('utils/subject.ts', () => { type: mockCommenter.type, }, reviews: null, + linkedIssues: [], }); }); @@ -653,6 +657,7 @@ describe('utils/subject.ts', () => { type: mockCommenter.type, }, reviews: null, + linkedIssues: [], }); }); @@ -684,6 +689,7 @@ describe('utils/subject.ts', () => { type: mockAuthor.type, }, reviews: null, + linkedIssues: [], }); }); @@ -714,6 +720,7 @@ describe('utils/subject.ts', () => { type: mockAuthor.type, }, reviews: null, + linkedIssues: [], }); }); @@ -774,6 +781,19 @@ describe('utils/subject.ts', () => { expect(result).toBeNull(); }); }); + + describe('Pull Request Reviews - Extract Linked Issues', () => { + it('returns empty if no pr body', () => { + const result = parseLinkedIssuesFromPrBody(null); + expect(result).toEqual([]); + }); + + it('returns linked issues', () => { + const mockPrBody = 'This PR is linked to #1, #2, and #3'; + const result = parseLinkedIssuesFromPrBody(mockPrBody); + expect(result).toEqual(['#1', '#2', '#3']); + }); + }); }); describe('Releases', () => { diff --git a/src/utils/subject.ts b/src/utils/subject.ts index ffcbe2c04..45085a41a 100644 --- a/src/utils/subject.ts +++ b/src/utils/subject.ts @@ -264,6 +264,7 @@ async function getGitifySubjectForPullRequest( } const reviews = await getLatestReviewForReviewers(notification); + const linkedIssues = parseLinkedIssuesFromPrBody(pr.body); return { state: prState, @@ -275,6 +276,7 @@ async function getGitifySubjectForPullRequest( }, reviews: reviews, comments: pr.comments, + linkedIssues: linkedIssues, }; } @@ -329,6 +331,26 @@ export async function getLatestReviewForReviewers( }); } +export function parseLinkedIssuesFromPrBody(body: string): string[] { + const linkedIssues: string[] = []; + + if (!body) { + return linkedIssues; + } + + const regexPattern = /\s*#(\d+)\s*/gi; + + const matches = body.matchAll(regexPattern); + + for (const match of matches) { + if (match[0]) { + linkedIssues.push(match[0].trim()); + } + } + + return linkedIssues; +} + async function getGitifySubjectForRelease( notification: Notification, ): Promise { From e0bfb0d684135d78afe9c65ca3d195e82cdafdb2 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Mon, 3 Jun 2024 20:16:38 -0400 Subject: [PATCH 147/251] refactor: user's name can be null (#1173) --- src/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/types.ts b/src/types.ts index fcdcbed32..a3e62104f 100644 --- a/src/types.ts +++ b/src/types.ts @@ -80,7 +80,7 @@ export interface AccountNotifications { export interface GitifyUser { login: string; - name: string; + name: string | null; id: number; } From 0752d08e07a32720bc595e79e1eb1a4443a7908c Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Mon, 3 Jun 2024 20:46:43 -0400 Subject: [PATCH 148/251] feat: labels indicator (#1161) Co-authored-by: Afonso Jorge Ramos --- src/components/NotificationRow.test.tsx | 19 + src/components/NotificationRow.tsx | 17 + .../NotificationRow.test.tsx.snap | 679 ++++++++++++++++++ src/hooks/useNotifications.test.ts | 3 + src/typesGitHub.ts | 22 + src/utils/api/__mocks__/response-mocks.ts | 10 + src/utils/api/graphql/discussions.ts | 5 + src/utils/subject.test.ts | 131 +++- src/utils/subject.ts | 3 + 9 files changed, 886 insertions(+), 3 deletions(-) diff --git a/src/components/NotificationRow.test.tsx b/src/components/NotificationRow.test.tsx index af7b1627d..71be711e6 100644 --- a/src/components/NotificationRow.test.tsx +++ b/src/components/NotificationRow.test.tsx @@ -117,6 +117,25 @@ describe('components/NotificationRow.tsx', () => { }); }); + describe('notification labels', () => { + it('should render labels metric when available', async () => { + jest + .spyOn(global.Date, 'now') + .mockImplementation(() => new Date('2024').valueOf()); + + const mockNotification = mockSingleNotification; + mockNotification.subject.labels = ['enhancement', 'good-first-issue']; + + const props = { + notification: mockNotification, + hostname: 'github.com', + }; + + const tree = render(); + expect(tree).toMatchSnapshot(); + }); + }); + describe('linked issues/prs', () => { it('should render when linked to one issue/pr', async () => { jest diff --git a/src/components/NotificationRow.tsx b/src/components/NotificationRow.tsx index d9cd9b9f1..1a5af4379 100644 --- a/src/components/NotificationRow.tsx +++ b/src/components/NotificationRow.tsx @@ -5,6 +5,7 @@ import { FeedPersonIcon, IssueClosedIcon, ReadIcon, + TagIcon, } from '@primer/octicons-react'; import { type FC, @@ -92,6 +93,10 @@ export const NotificationRow: FC = ({ notification, hostname }) => { notification.subject.comments > 1 ? 'comments' : 'comment' }`; + const labelsPillDescription = notification.subject.labels + ?.map((label) => `🏷️ ${label}`) + .join('\n'); + const linkedIssuesPillDescription = `Linked to ${ notification.subject.linkedIssues?.length > 1 ? 'issues' : 'issue' } ${notification.subject?.linkedIssues?.join(', ')}`; @@ -201,6 +206,18 @@ export const NotificationRow: FC = ({ notification, hostname }) => { )} + {notification.subject?.labels?.length > 0 && ( + + + + )}
diff --git a/src/components/__snapshots__/NotificationRow.test.tsx.snap b/src/components/__snapshots__/NotificationRow.test.tsx.snap index 6479765ad..c2cac717f 100644 --- a/src/components/__snapshots__/NotificationRow.test.tsx.snap +++ b/src/components/__snapshots__/NotificationRow.test.tsx.snap @@ -186,6 +186,34 @@ exports[`components/NotificationRow.tsx linked issues/prs should render when lin 2 + + +
@@ -442,6 +470,34 @@ exports[`components/NotificationRow.tsx linked issues/prs should render when lin 2 + + +
@@ -755,6 +811,34 @@ exports[`components/NotificationRow.tsx linked issues/prs should render when lin 2 + + +
@@ -1011,6 +1095,601 @@ exports[`components/NotificationRow.tsx linked issues/prs should render when lin 2 + + + + + +
+
+
+ + + +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; + +exports[`components/NotificationRow.tsx notification labels should render labels metric when available 1`] = ` +{ + "asFragment": [Function], + "baseElement": +
+
+
+ + + + +
+
+
+ I am a robot and this is a test! +
+
+ + + + + + + Updated + + + over 6 years ago + + + + + + + + + + + + + + + +
+
+
+ + + +
+
+
+ , + "container":
+
+
+ + + + +
+
+
+ I am a robot and this is a test! +
+
+ + + + + + + Updated + + + over 6 years ago + + + + + + + + + + + + +
diff --git a/src/hooks/useNotifications.test.ts b/src/hooks/useNotifications.test.ts index 7d55d3325..cf33a3b79 100644 --- a/src/hooks/useNotifications.test.ts +++ b/src/hooks/useNotifications.test.ts @@ -225,6 +225,7 @@ describe('hooks/useNotifications.ts', () => { }, ], }, + labels: null, }, ], }, @@ -237,6 +238,7 @@ describe('hooks/useNotifications.ts', () => { state: 'closed', merged: true, user: mockNotificationUser, + labels: [], }); nock('https://api.github.com') .get('/repos/gitify-app/notifications-test/issues/3/comments') @@ -249,6 +251,7 @@ describe('hooks/useNotifications.ts', () => { state: 'closed', merged: false, user: mockNotificationUser, + labels: [], }); nock('https://api.github.com') .get('/repos/gitify-app/notifications-test/pulls/4/reviews') diff --git a/src/typesGitHub.ts b/src/typesGitHub.ts index 46f0ee943..316baee7c 100644 --- a/src/typesGitHub.ts +++ b/src/typesGitHub.ts @@ -266,6 +266,7 @@ export interface GitifySubject { reviews?: GitifyPullRequestReview[]; linkedIssues?: string[]; comments?: number; + labels?: string[]; } export interface PullRequest { @@ -287,6 +288,7 @@ export interface PullRequest { closed_at: string | null; merged_at: string | null; merge_commit_sha: string | null; + labels: Labels[]; draft: boolean; commits_url: string; review_comments_url: string; @@ -311,6 +313,16 @@ export interface GitifyPullRequestReview { users: string[]; } +export interface Labels { + id: number; + node_id: string; + url: string; + name: string; + color: string; + default: boolean; + description: string; +} + export interface PullRequestReview { id: number; node_id: string; @@ -416,6 +428,7 @@ export interface Issue { author_association: string; body: string; state_reason: IssueStateReasonType | null; + labels: Labels[]; } export interface IssueOrPullRequestComment { @@ -463,6 +476,15 @@ export interface Discussion { url: string; author: DiscussionAuthor; comments: DiscussionComments; + labels: DiscussionLabels | null; +} + +export interface DiscussionLabels { + nodes: DiscussionLabel[]; +} + +export interface DiscussionLabel { + name: string; } export interface DiscussionComments { diff --git a/src/utils/api/__mocks__/response-mocks.ts b/src/utils/api/__mocks__/response-mocks.ts index 603a58fb3..06e438f37 100644 --- a/src/utils/api/__mocks__/response-mocks.ts +++ b/src/utils/api/__mocks__/response-mocks.ts @@ -6,6 +6,7 @@ import type { Discussion, DiscussionAuthor, DiscussionComments, + DiscussionLabels, GraphQLSearch, Notification, Repository, @@ -388,6 +389,14 @@ export const mockDiscussionComments: DiscussionComments = { totalCount: 2, }; +export const mockDiscussionLabels: DiscussionLabels = { + nodes: [ + { + name: 'enhancement', + }, + ], +}; + export const mockGraphQLResponse: GraphQLSearch = { data: { search: { @@ -404,6 +413,7 @@ export const mockGraphQLResponse: GraphQLSearch = { type: 'User', }, comments: mockDiscussionComments, + labels: mockDiscussionLabels, }, ], }, diff --git a/src/utils/api/graphql/discussions.ts b/src/utils/api/graphql/discussions.ts index 7472f10a0..ab34a9001 100644 --- a/src/utils/api/graphql/discussions.ts +++ b/src/utils/api/graphql/discussions.ts @@ -49,6 +49,11 @@ export const QUERY_SEARCH_DISCUSSIONS = gql` } } } + labels { + nodes { + name + } + } } } } diff --git a/src/utils/subject.test.ts b/src/utils/subject.test.ts index 9ea16cad2..8ecc5c1e8 100644 --- a/src/utils/subject.test.ts +++ b/src/utils/subject.test.ts @@ -227,6 +227,7 @@ describe('utils/subject.ts', () => { type: mockDiscussionAuthor.type, }, comments: 0, + labels: [], }); }); @@ -252,6 +253,7 @@ describe('utils/subject.ts', () => { type: mockDiscussionAuthor.type, }, comments: 0, + labels: [], }); }); @@ -277,6 +279,7 @@ describe('utils/subject.ts', () => { type: mockDiscussionAuthor.type, }, comments: 0, + labels: [], }); }); @@ -302,6 +305,7 @@ describe('utils/subject.ts', () => { type: mockDiscussionAuthor.type, }, comments: 0, + labels: [], }); }); @@ -327,6 +331,7 @@ describe('utils/subject.ts', () => { type: mockDiscussionAuthor.type, }, comments: 0, + labels: [], }); }); @@ -352,6 +357,41 @@ describe('utils/subject.ts', () => { type: mockDiscussionAuthor.type, }, comments: 0, + labels: [], + }); + }); + + it('discussion with labels', async () => { + const mockDiscussion = mockDiscussionNode(null, true); + mockDiscussion.labels = { + nodes: [ + { + name: 'enhancement', + }, + ], + }; + nock('https://api.github.com') + .post('/graphql') + .reply(200, { + data: { + search: { + nodes: [mockDiscussion], + }, + }, + }); + + const result = await getGitifySubjectDetails(mockNotification); + + expect(result).toEqual({ + state: 'ANSWERED', + user: { + login: mockDiscussionAuthor.login, + html_url: mockDiscussionAuthor.url, + avatar_url: mockDiscussionAuthor.avatar_url, + type: mockDiscussionAuthor.type, + }, + comments: 0, + labels: ['enhancement'], }); }); }); @@ -371,7 +411,7 @@ describe('utils/subject.ts', () => { it('open issue state', async () => { nock('https://api.github.com') .get('/repos/gitify-app/notifications-test/issues/1') - .reply(200, { state: 'open', user: mockAuthor }); + .reply(200, { state: 'open', user: mockAuthor, labels: [] }); nock('https://api.github.com') .get('/repos/gitify-app/notifications-test/issues/comments/302888448') @@ -387,13 +427,14 @@ describe('utils/subject.ts', () => { avatar_url: mockCommenter.avatar_url, type: mockCommenter.type, }, + labels: [], }); }); it('closed issue state', async () => { nock('https://api.github.com') .get('/repos/gitify-app/notifications-test/issues/1') - .reply(200, { state: 'closed', user: mockAuthor }); + .reply(200, { state: 'closed', user: mockAuthor, labels: [] }); nock('https://api.github.com') .get('/repos/gitify-app/notifications-test/issues/comments/302888448') @@ -409,6 +450,7 @@ describe('utils/subject.ts', () => { avatar_url: mockCommenter.avatar_url, type: mockCommenter.type, }, + labels: [], }); }); @@ -419,6 +461,7 @@ describe('utils/subject.ts', () => { state: 'closed', state_reason: 'completed', user: mockAuthor, + labels: [], }); nock('https://api.github.com') @@ -435,6 +478,7 @@ describe('utils/subject.ts', () => { avatar_url: mockCommenter.avatar_url, type: mockCommenter.type, }, + labels: [], }); }); @@ -445,6 +489,7 @@ describe('utils/subject.ts', () => { state: 'open', state_reason: 'not_planned', user: mockAuthor, + labels: [], }); nock('https://api.github.com') @@ -461,6 +506,7 @@ describe('utils/subject.ts', () => { avatar_url: mockCommenter.avatar_url, type: mockCommenter.type, }, + labels: [], }); }); @@ -471,6 +517,7 @@ describe('utils/subject.ts', () => { state: 'open', state_reason: 'reopened', user: mockAuthor, + labels: [], }); nock('https://api.github.com') @@ -487,6 +534,7 @@ describe('utils/subject.ts', () => { avatar_url: mockCommenter.avatar_url, type: mockCommenter.type, }, + labels: [], }); }); @@ -500,6 +548,7 @@ describe('utils/subject.ts', () => { draft: false, merged: false, user: mockAuthor, + labels: [], }); const result = await getGitifySubjectDetails(mockNotification); @@ -512,6 +561,34 @@ describe('utils/subject.ts', () => { avatar_url: mockAuthor.avatar_url, type: mockAuthor.type, }, + labels: [], + }); + }); + + it('issue with labels', async () => { + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/issues/1') + .reply(200, { + state: 'open', + user: mockAuthor, + labels: [{ name: 'enhancement' }], + }); + + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/issues/comments/302888448') + .reply(200, { user: mockCommenter }); + + const result = await getGitifySubjectDetails(mockNotification); + + expect(result).toEqual({ + state: 'open', + user: { + login: mockCommenter.login, + html_url: mockCommenter.html_url, + avatar_url: mockCommenter.avatar_url, + type: mockCommenter.type, + }, + labels: ['enhancement'], }); }); }); @@ -537,6 +614,7 @@ describe('utils/subject.ts', () => { draft: false, merged: false, user: mockAuthor, + labels: [], }); nock('https://api.github.com') @@ -558,6 +636,7 @@ describe('utils/subject.ts', () => { type: mockCommenter.type, }, reviews: null, + labels: [], linkedIssues: [], }); }); @@ -570,6 +649,7 @@ describe('utils/subject.ts', () => { draft: true, merged: false, user: mockAuthor, + labels: [], }); nock('https://api.github.com') @@ -591,6 +671,7 @@ describe('utils/subject.ts', () => { type: mockCommenter.type, }, reviews: null, + labels: [], linkedIssues: [], }); }); @@ -603,6 +684,7 @@ describe('utils/subject.ts', () => { draft: false, merged: true, user: mockAuthor, + labels: [], }); nock('https://api.github.com') @@ -624,6 +706,7 @@ describe('utils/subject.ts', () => { type: mockCommenter.type, }, reviews: null, + labels: [], linkedIssues: [], }); }); @@ -636,6 +719,7 @@ describe('utils/subject.ts', () => { draft: false, merged: false, user: mockAuthor, + labels: [], }); nock('https://api.github.com') @@ -657,6 +741,7 @@ describe('utils/subject.ts', () => { type: mockCommenter.type, }, reviews: null, + labels: [], linkedIssues: [], }); }); @@ -672,6 +757,7 @@ describe('utils/subject.ts', () => { draft: false, merged: false, user: mockAuthor, + labels: [], }); nock('https://api.github.com') @@ -689,6 +775,7 @@ describe('utils/subject.ts', () => { type: mockAuthor.type, }, reviews: null, + labels: [], linkedIssues: [], }); }); @@ -703,6 +790,7 @@ describe('utils/subject.ts', () => { draft: false, merged: false, user: mockAuthor, + labels: [], }); nock('https://api.github.com') @@ -720,6 +808,7 @@ describe('utils/subject.ts', () => { type: mockAuthor.type, }, reviews: null, + labels: [], linkedIssues: [], }); }); @@ -782,7 +871,42 @@ describe('utils/subject.ts', () => { }); }); - describe('Pull Request Reviews - Extract Linked Issues', () => { + it('Pull Requests With labels', async () => { + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/pulls/1') + .reply(200, { + state: 'open', + draft: false, + merged: false, + user: mockAuthor, + labels: [{ name: 'enhancement' }], + }); + + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/issues/comments/302888448') + .reply(200, { user: mockCommenter }); + + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/pulls/1/reviews') + .reply(200, []); + + const result = await getGitifySubjectDetails(mockNotification); + + expect(result).toEqual({ + state: 'open', + user: { + login: mockCommenter.login, + html_url: mockCommenter.html_url, + avatar_url: mockCommenter.avatar_url, + type: mockCommenter.type, + }, + reviews: null, + labels: ['enhancement'], + linkedIssues: [], + }); + }); + + describe('Pull Request With Linked Issues', () => { it('returns empty if no pr body', () => { const result = parseLinkedIssuesFromPrBody(null); expect(result).toEqual([]); @@ -1078,5 +1202,6 @@ function mockDiscussionNode( nodes: [], totalCount: 0, }, + labels: null, }; } diff --git a/src/utils/subject.ts b/src/utils/subject.ts index 45085a41a..ffbc3736d 100644 --- a/src/utils/subject.ts +++ b/src/utils/subject.ts @@ -184,6 +184,7 @@ async function getGitifySubjectForDiscussion( state: discussionState, user: discussionUser, comments: discussion.comments.totalCount, + labels: discussion.labels?.nodes.map((label) => label.name) ?? [], }; } @@ -231,6 +232,7 @@ async function getGitifySubjectForIssue( type: issueCommentUser?.type ?? issue.user.type, }, comments: issue.comments, + labels: issue.labels?.map((label) => label.name) ?? [], }; } @@ -276,6 +278,7 @@ async function getGitifySubjectForPullRequest( }, reviews: reviews, comments: pr.comments, + labels: pr.labels?.map((label) => label.name) ?? [], linkedIssues: linkedIssues, }; } From 47206d6abcc41bd55d6aafb68b0c455c79198989 Mon Sep 17 00:00:00 2001 From: Afonso Jorge Ramos Date: Tue, 4 Jun 2024 01:46:56 +0100 Subject: [PATCH 149/251] fix: notification component mocks (#1174) --- src/routes/Notifications.test.tsx | 6 +- .../__snapshots__/Notifications.test.tsx.snap | 110 +++++++++--------- 2 files changed, 57 insertions(+), 59 deletions(-) diff --git a/src/routes/Notifications.test.tsx b/src/routes/Notifications.test.tsx index 9f477bebd..6fb0edc39 100644 --- a/src/routes/Notifications.test.tsx +++ b/src/routes/Notifications.test.tsx @@ -6,15 +6,15 @@ import { Errors } from '../utils/constants'; import { NotificationsRoute } from './Notifications'; jest.mock('../components/AccountNotifications', () => ({ - AccountNotifications: 'AccountNotifications', + AccountNotifications: () =>

AccountNotifications

, })); jest.mock('../components/AllRead', () => ({ - AllRead: 'AllRead', + AllRead: () =>

AllRead

, })); jest.mock('../components/Oops', () => ({ - Oops: 'Oops', + Oops: () =>

Oops

, })); describe('routes/Notifications.tsx', () => { diff --git a/src/routes/__snapshots__/Notifications.test.tsx.snap b/src/routes/__snapshots__/Notifications.test.tsx.snap index 1d947c756..08e37f8d4 100644 --- a/src/routes/__snapshots__/Notifications.test.tsx.snap +++ b/src/routes/__snapshots__/Notifications.test.tsx.snap @@ -5,11 +5,15 @@ exports[`routes/Notifications.tsx should render itself & its children (all read "asFragment": [Function], "baseElement":
- +

+ AllRead +

, "container":
- +

+ AllRead +

, "debug": [Function], "findAllByAltText": [Function], @@ -70,15 +74,15 @@ exports[`routes/Notifications.tsx should render itself & its children (error con "asFragment": [Function], "baseElement":
- +

+ Oops +

, "container":
- +

+ Oops +

, "debug": [Function], "findAllByAltText": [Function], @@ -139,15 +143,15 @@ exports[`routes/Notifications.tsx should render itself & its children (error con "asFragment": [Function], "baseElement":
- +

+ Oops +

, "container":
- +

+ Oops +

, "debug": [Function], "findAllByAltText": [Function], @@ -208,15 +212,15 @@ exports[`routes/Notifications.tsx should render itself & its children (error con "asFragment": [Function], "baseElement":
- +

+ Oops +

, "container":
- +

+ Oops +

, "debug": [Function], "findAllByAltText": [Function], @@ -277,15 +281,15 @@ exports[`routes/Notifications.tsx should render itself & its children (error con "asFragment": [Function], "baseElement":
- +

+ Oops +

, "container":
- +

+ Oops +

, "debug": [Function], "findAllByAltText": [Function], @@ -346,15 +350,15 @@ exports[`routes/Notifications.tsx should render itself & its children (error con "asFragment": [Function], "baseElement":
- +

+ Oops +

, "container":
- +

+ Oops +

, "debug": [Function], "findAllByAltText": [Function], @@ -418,10 +422,9 @@ exports[`routes/Notifications.tsx should render itself & its children (show acco
- +

+ AccountNotifications +

, @@ -429,10 +432,9 @@ exports[`routes/Notifications.tsx should render itself & its children (show acco
- +

+ AccountNotifications +

, "debug": [Function], @@ -497,14 +499,12 @@ exports[`routes/Notifications.tsx should render itself & its children (with noti
- - +

+ AccountNotifications +

+

+ AccountNotifications +

, @@ -512,14 +512,12 @@ exports[`routes/Notifications.tsx should render itself & its children (with noti
- - +

+ AccountNotifications +

+

+ AccountNotifications +

, "debug": [Function], From 2e95e369c281805bfd3e59ffa411434ee1da4457 Mon Sep 17 00:00:00 2001 From: Afonso Jorge Ramos Date: Tue, 4 Jun 2024 01:53:40 +0100 Subject: [PATCH 150/251] fix: cleanup migration test output (#1175) --- src/utils/auth/migration.test.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/utils/auth/migration.test.ts b/src/utils/auth/migration.test.ts index 9a65101bd..12832ab4c 100644 --- a/src/utils/auth/migration.test.ts +++ b/src/utils/auth/migration.test.ts @@ -9,6 +9,8 @@ import { migrateAuthenticatedAccounts, } from './migration'; +jest.spyOn(console, 'log').mockImplementation(() => null); + describe('utils/auth/migration.ts', () => { beforeEach(() => { // axios will default to using the XHR adapter which can't be intercepted @@ -34,6 +36,7 @@ describe('utils/auth/migration.ts', () => { await migrateAuthenticatedAccounts(); expect(localStorage.setItem).toHaveBeenCalledTimes(1); + expect(console.log).toHaveBeenCalledTimes(2); }); }); From 8ee3bc3122ae81337c378d8ef49ff0cb2aaddc2d Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Mon, 3 Jun 2024 21:08:17 -0400 Subject: [PATCH 151/251] test: add coverage for null conditions (#1176) --- src/utils/subject.test.ts | 164 +++++++++++++++++++++++++++----------- 1 file changed, 119 insertions(+), 45 deletions(-) diff --git a/src/utils/subject.test.ts b/src/utils/subject.test.ts index 8ecc5c1e8..60eace252 100644 --- a/src/utils/subject.test.ts +++ b/src/utils/subject.test.ts @@ -565,30 +565,63 @@ describe('utils/subject.ts', () => { }); }); - it('issue with labels', async () => { - nock('https://api.github.com') - .get('/repos/gitify-app/notifications-test/issues/1') - .reply(200, { + describe('Issue With Labels', () => { + it('with labels', async () => { + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/issues/1') + .reply(200, { + state: 'open', + user: mockAuthor, + labels: [{ name: 'enhancement' }], + }); + + nock('https://api.github.com') + .get( + '/repos/gitify-app/notifications-test/issues/comments/302888448', + ) + .reply(200, { user: mockCommenter }); + + const result = await getGitifySubjectDetails(mockNotification); + + expect(result).toEqual({ state: 'open', - user: mockAuthor, - labels: [{ name: 'enhancement' }], + user: { + login: mockCommenter.login, + html_url: mockCommenter.html_url, + avatar_url: mockCommenter.avatar_url, + type: mockCommenter.type, + }, + labels: ['enhancement'], }); + }); - nock('https://api.github.com') - .get('/repos/gitify-app/notifications-test/issues/comments/302888448') - .reply(200, { user: mockCommenter }); + it('handle null labels', async () => { + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/issues/1') + .reply(200, { + state: 'open', + user: mockAuthor, + labels: null, + }); - const result = await getGitifySubjectDetails(mockNotification); + nock('https://api.github.com') + .get( + '/repos/gitify-app/notifications-test/issues/comments/302888448', + ) + .reply(200, { user: mockCommenter }); - expect(result).toEqual({ - state: 'open', - user: { - login: mockCommenter.login, - html_url: mockCommenter.html_url, - avatar_url: mockCommenter.avatar_url, - type: mockCommenter.type, - }, - labels: ['enhancement'], + const result = await getGitifySubjectDetails(mockNotification); + + expect(result).toEqual({ + state: 'open', + user: { + login: mockCommenter.login, + html_url: mockCommenter.html_url, + avatar_url: mockCommenter.avatar_url, + type: mockCommenter.type, + }, + labels: [], + }); }); }); }); @@ -871,38 +904,79 @@ describe('utils/subject.ts', () => { }); }); - it('Pull Requests With labels', async () => { - nock('https://api.github.com') - .get('/repos/gitify-app/notifications-test/pulls/1') - .reply(200, { + describe('Pull Requests With Labels', () => { + it('with labels', async () => { + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/pulls/1') + .reply(200, { + state: 'open', + draft: false, + merged: false, + user: mockAuthor, + labels: [{ name: 'enhancement' }], + }); + + nock('https://api.github.com') + .get( + '/repos/gitify-app/notifications-test/issues/comments/302888448', + ) + .reply(200, { user: mockCommenter }); + + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/pulls/1/reviews') + .reply(200, []); + + const result = await getGitifySubjectDetails(mockNotification); + + expect(result).toEqual({ state: 'open', - draft: false, - merged: false, - user: mockAuthor, - labels: [{ name: 'enhancement' }], + user: { + login: mockCommenter.login, + html_url: mockCommenter.html_url, + avatar_url: mockCommenter.avatar_url, + type: mockCommenter.type, + }, + reviews: null, + labels: ['enhancement'], + linkedIssues: [], }); + }); - nock('https://api.github.com') - .get('/repos/gitify-app/notifications-test/issues/comments/302888448') - .reply(200, { user: mockCommenter }); + it('handle null labels', async () => { + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/pulls/1') + .reply(200, { + state: 'open', + draft: false, + merged: false, + user: mockAuthor, + labels: null, + }); - nock('https://api.github.com') - .get('/repos/gitify-app/notifications-test/pulls/1/reviews') - .reply(200, []); + nock('https://api.github.com') + .get( + '/repos/gitify-app/notifications-test/issues/comments/302888448', + ) + .reply(200, { user: mockCommenter }); - const result = await getGitifySubjectDetails(mockNotification); + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/pulls/1/reviews') + .reply(200, []); - expect(result).toEqual({ - state: 'open', - user: { - login: mockCommenter.login, - html_url: mockCommenter.html_url, - avatar_url: mockCommenter.avatar_url, - type: mockCommenter.type, - }, - reviews: null, - labels: ['enhancement'], - linkedIssues: [], + const result = await getGitifySubjectDetails(mockNotification); + + expect(result).toEqual({ + state: 'open', + user: { + login: mockCommenter.login, + html_url: mockCommenter.html_url, + avatar_url: mockCommenter.avatar_url, + type: mockCommenter.type, + }, + reviews: null, + labels: [], + linkedIssues: [], + }); }); }); From fc504082821b9f85f0f0a3cdcc13a188774b966c Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Tue, 4 Jun 2024 10:54:18 -0400 Subject: [PATCH 152/251] feat: milestone indicator (#1178) --- src/components/NotificationRow.test.tsx | 238 ++- src/components/NotificationRow.tsx | 19 + .../NotificationRow.test.tsx.snap | 1858 ++++++++++++++--- src/typesGitHub.ts | 26 +- src/utils/subject.ts | 2 + 5 files changed, 1799 insertions(+), 344 deletions(-) diff --git a/src/components/NotificationRow.test.tsx b/src/components/NotificationRow.test.tsx index 71be711e6..1f9e6f0c8 100644 --- a/src/components/NotificationRow.test.tsx +++ b/src/components/NotificationRow.test.tsx @@ -2,7 +2,7 @@ import { fireEvent, render, screen } from '@testing-library/react'; import { shell } from 'electron'; import { mockAuth, mockSettings } from '../__mocks__/state-mocks'; import { AppContext } from '../context/App'; -import type { UserType } from '../typesGitHub'; +import type { Milestone, UserType } from '../typesGitHub'; import { mockSingleNotification } from '../utils/api/__mocks__/response-mocks'; import * as helpers from '../utils/helpers'; import { NotificationRow } from './NotificationRow'; @@ -64,111 +64,155 @@ describe('components/NotificationRow.tsx', () => { expect(tree).toMatchSnapshot(); }); - describe('rendering for notification comments count', () => { - it('should render when no comments', async () => { - jest - .spyOn(global.Date, 'now') - .mockImplementation(() => new Date('2024').valueOf()); - - const mockNotification = mockSingleNotification; - mockNotification.subject.comments = null; - - const props = { - notification: mockNotification, - hostname: 'github.com', - }; - - const tree = render(); - expect(tree).toMatchSnapshot(); + describe('notification pills / metrics', () => { + describe('linked issue pills', () => { + it('should render issues pill when linked to one issue/pr', async () => { + jest + .spyOn(global.Date, 'now') + .mockImplementation(() => new Date('2024').valueOf()); + + const mockNotification = mockSingleNotification; + mockNotification.subject.linkedIssues = ['#1']; + + const props = { + notification: mockNotification, + hostname: 'github.com', + }; + + const tree = render(); + expect(tree).toMatchSnapshot(); + }); + + it('should render issues pill when linked to multiple issues/prs', async () => { + jest + .spyOn(global.Date, 'now') + .mockImplementation(() => new Date('2024').valueOf()); + + const mockNotification = mockSingleNotification; + mockNotification.subject.linkedIssues = ['#1', '#2']; + + const props = { + notification: mockNotification, + hostname: 'github.com', + }; + + const tree = render(); + expect(tree).toMatchSnapshot(); + }); }); - it('should render when 1 comment', async () => { - jest - .spyOn(global.Date, 'now') - .mockImplementation(() => new Date('2024').valueOf()); - - const mockNotification = mockSingleNotification; - mockNotification.subject.comments = 1; - - const props = { - notification: mockNotification, - hostname: 'github.com', - }; - - const tree = render(); - expect(tree).toMatchSnapshot(); + describe('comment pills', () => { + it('should render when no comments', async () => { + jest + .spyOn(global.Date, 'now') + .mockImplementation(() => new Date('2024').valueOf()); + + const mockNotification = mockSingleNotification; + mockNotification.subject.comments = null; + + const props = { + notification: mockNotification, + hostname: 'github.com', + }; + + const tree = render(); + expect(tree).toMatchSnapshot(); + }); + + it('should render when 1 comment', async () => { + jest + .spyOn(global.Date, 'now') + .mockImplementation(() => new Date('2024').valueOf()); + + const mockNotification = mockSingleNotification; + mockNotification.subject.comments = 1; + + const props = { + notification: mockNotification, + hostname: 'github.com', + }; + + const tree = render(); + expect(tree).toMatchSnapshot(); + }); + + it('should render when more than 1 comments', async () => { + jest + .spyOn(global.Date, 'now') + .mockImplementation(() => new Date('2024').valueOf()); + + const mockNotification = mockSingleNotification; + mockNotification.subject.comments = 2; + + const props = { + notification: mockNotification, + hostname: 'github.com', + }; + + const tree = render(); + expect(tree).toMatchSnapshot(); + }); }); - it('should render when more than 1 comments', async () => { - jest - .spyOn(global.Date, 'now') - .mockImplementation(() => new Date('2024').valueOf()); + describe('label pills', () => { + it('should render labels pill', async () => { + jest + .spyOn(global.Date, 'now') + .mockImplementation(() => new Date('2024').valueOf()); - const mockNotification = mockSingleNotification; - mockNotification.subject.comments = 2; + const mockNotification = mockSingleNotification; + mockNotification.subject.labels = ['enhancement', 'good-first-issue']; - const props = { - notification: mockNotification, - hostname: 'github.com', - }; + const props = { + notification: mockNotification, + hostname: 'github.com', + }; - const tree = render(); - expect(tree).toMatchSnapshot(); + const tree = render(); + expect(tree).toMatchSnapshot(); + }); }); - }); - - describe('notification labels', () => { - it('should render labels metric when available', async () => { - jest - .spyOn(global.Date, 'now') - .mockImplementation(() => new Date('2024').valueOf()); - - const mockNotification = mockSingleNotification; - mockNotification.subject.labels = ['enhancement', 'good-first-issue']; - - const props = { - notification: mockNotification, - hostname: 'github.com', - }; - - const tree = render(); - expect(tree).toMatchSnapshot(); - }); - }); - - describe('linked issues/prs', () => { - it('should render when linked to one issue/pr', async () => { - jest - .spyOn(global.Date, 'now') - .mockImplementation(() => new Date('2024').valueOf()); - - const mockNotification = mockSingleNotification; - mockNotification.subject.linkedIssues = ['#1']; - - const props = { - notification: mockNotification, - hostname: 'github.com', - }; - - const tree = render(); - expect(tree).toMatchSnapshot(); - }); - - it('should render when linked to multiple issues/prs', async () => { - jest - .spyOn(global.Date, 'now') - .mockImplementation(() => new Date('2024').valueOf()); - - const mockNotification = mockSingleNotification; - mockNotification.subject.linkedIssues = ['#1', '#2']; - - const props = { - notification: mockNotification, - hostname: 'github.com', - }; - const tree = render(); - expect(tree).toMatchSnapshot(); + describe('milestone pills', () => { + it('should render open milestone pill', async () => { + jest + .spyOn(global.Date, 'now') + .mockImplementation(() => new Date('2024').valueOf()); + + const mockNotification = mockSingleNotification; + mockNotification.subject.milestone = { + title: 'Milestone 1', + state: 'open', + } as Milestone; + + const props = { + notification: mockNotification, + hostname: 'github.com', + }; + + const tree = render(); + expect(tree).toMatchSnapshot(); + }); + + it('should render closed milestone pill', async () => { + jest + .spyOn(global.Date, 'now') + .mockImplementation(() => new Date('2024').valueOf()); + + const mockNotification = mockSingleNotification; + mockNotification.subject.milestone = { + title: 'Milestone 1', + state: 'closed', + } as Milestone; + + const props = { + notification: mockNotification, + hostname: 'github.com', + }; + + const tree = render(); + expect(tree).toMatchSnapshot(); + }); }); }); diff --git a/src/components/NotificationRow.tsx b/src/components/NotificationRow.tsx index 1a5af4379..1ff46aa17 100644 --- a/src/components/NotificationRow.tsx +++ b/src/components/NotificationRow.tsx @@ -4,6 +4,7 @@ import { CommentIcon, FeedPersonIcon, IssueClosedIcon, + MilestoneIcon, ReadIcon, TagIcon, } from '@primer/octicons-react'; @@ -218,6 +219,24 @@ export const NotificationRow: FC = ({ notification, hostname }) => { )} + {notification.subject.milestone && ( + + + + )}
diff --git a/src/components/__snapshots__/NotificationRow.test.tsx.snap b/src/components/__snapshots__/NotificationRow.test.tsx.snap index c2cac717f..1829920b0 100644 --- a/src/components/__snapshots__/NotificationRow.test.tsx.snap +++ b/src/components/__snapshots__/NotificationRow.test.tsx.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`components/NotificationRow.tsx linked issues/prs should render when linked to multiple issues/prs 1`] = ` +exports[`components/NotificationRow.tsx notification pills / metrics comment pills should render when 1 comment 1`] = ` { "asFragment": [Function], "baseElement": @@ -162,14 +162,14 @@ exports[`components/NotificationRow.tsx linked issues/prs should render when lin - - - @@ -446,14 +418,14 @@ exports[`components/NotificationRow.tsx linked issues/prs should render when lin - - - @@ -625,7 +569,7 @@ exports[`components/NotificationRow.tsx linked issues/prs should render when lin } `; -exports[`components/NotificationRow.tsx linked issues/prs should render when linked to one issue/pr 1`] = ` +exports[`components/NotificationRow.tsx notification pills / metrics comment pills should render when more than 1 comments 1`] = ` { "asFragment": [Function], "baseElement": @@ -706,14 +650,14 @@ exports[`components/NotificationRow.tsx linked issues/prs should render when lin - - -
@@ -990,14 +906,14 @@ exports[`components/NotificationRow.tsx linked issues/prs should render when lin - - - @@ -1250,7 +1138,7 @@ exports[`components/NotificationRow.tsx linked issues/prs should render when lin } `; -exports[`components/NotificationRow.tsx notification labels should render labels metric when available 1`] = ` +exports[`components/NotificationRow.tsx notification pills / metrics comment pills should render when no comments 1`] = ` { "asFragment": [Function], "baseElement": @@ -1331,14 +1219,14 @@ exports[`components/NotificationRow.tsx notification labels should render labels - - - @@ -1586,14 +1449,14 @@ exports[`components/NotificationRow.tsx notification labels should render labels - - - @@ -1817,7 +1655,7 @@ exports[`components/NotificationRow.tsx notification labels should render labels } `; -exports[`components/NotificationRow.tsx rendering for notification comments count should render when 1 comment 1`] = ` +exports[`components/NotificationRow.tsx notification pills / metrics label pills should render labels pill 1`] = ` { "asFragment": [Function], "baseElement": @@ -1898,14 +1736,14 @@ exports[`components/NotificationRow.tsx rendering for notification comments coun + + + + + + @@ -2123,6 +2018,35 @@ exports[`components/NotificationRow.tsx rendering for notification comments coun > over 6 years ago + + + + + + @@ -2328,7 +2280,7 @@ exports[`components/NotificationRow.tsx rendering for notification comments coun } `; -exports[`components/NotificationRow.tsx rendering for notification comments count should render when more than 1 comments 1`] = ` +exports[`components/NotificationRow.tsx notification pills / metrics linked issue pills should render issues pill when linked to multiple issues/prs 1`] = ` { "asFragment": [Function], "baseElement": @@ -2409,14 +2361,14 @@ exports[`components/NotificationRow.tsx rendering for notification comments coun @@ -2636,14 +2591,14 @@ exports[`components/NotificationRow.tsx rendering for notification comments coun @@ -2839,7 +2797,7 @@ exports[`components/NotificationRow.tsx rendering for notification comments coun } `; -exports[`components/NotificationRow.tsx rendering for notification comments count should render when no comments 1`] = ` +exports[`components/NotificationRow.tsx notification pills / metrics linked issue pills should render issues pill when linked to one issue/pr 1`] = ` { "asFragment": [Function], "baseElement": @@ -2918,6 +2876,35 @@ exports[`components/NotificationRow.tsx rendering for notification comments coun > over 6 years ago + + + over 6 years ago + + + +
+
+
+ + + + +
+
+
+ I am a robot and this is a test! +
+
+ + + + + + + Updated + + + over 6 years ago + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+
+
+ , + "container":
+
+
+ + + + +
+
+
+ I am a robot and this is a test! +
+
+ + + + + + + Updated + + + over 6 years ago + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; + +exports[`components/NotificationRow.tsx notification pills / metrics milestone pills should render open milestone pill 1`] = ` +{ + "asFragment": [Function], + "baseElement": +
+
+
+ + + + +
+
+
+ I am a robot and this is a test! +
+
+ + + + + + + Updated + + + over 6 years ago + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+
+
+ , + "container":
+
+
+ + + + +
+
+
+ I am a robot and this is a test! +
+
+ + + + + + + Updated + + + over 6 years ago + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; + exports[`components/NotificationRow.tsx should render itself & its children 1`] = ` { "asFragment": [Function], diff --git a/src/typesGitHub.ts b/src/typesGitHub.ts index 316baee7c..17f0404f0 100644 --- a/src/typesGitHub.ts +++ b/src/typesGitHub.ts @@ -267,6 +267,7 @@ export interface GitifySubject { linkedIssues?: string[]; comments?: number; labels?: string[]; + milestone?: Milestone; } export interface PullRequest { @@ -289,6 +290,7 @@ export interface PullRequest { merged_at: string | null; merge_commit_sha: string | null; labels: Labels[]; + milestone: Milestone | null; draft: boolean; commits_url: string; review_comments_url: string; @@ -421,6 +423,8 @@ export interface Issue { user: User; state: IssueStateType; locked: boolean; + labels: Labels[]; + milestone: Milestone | null; comments: number; created_at: string; updated_at: string; @@ -428,7 +432,6 @@ export interface Issue { author_association: string; body: string; state_reason: IssueStateReasonType | null; - labels: Labels[]; } export interface IssueOrPullRequestComment { @@ -443,6 +446,27 @@ export interface IssueOrPullRequestComment { body: string; } +export interface Milestone { + url: string; + html_url: string; + labels_url: string; + id: number; + node_id: string; + number: number; + title: string; + description: string; + creator: User; + open_issues: number; + closed_issues: number; + state: MilestoneStateType; + created_at: string; + updated_at: string; + due_on: string | null; + closed_at: string | null; +} + +type MilestoneStateType = 'open' | 'closed'; + export interface Release { url: string; assets_url: string; diff --git a/src/utils/subject.ts b/src/utils/subject.ts index ffbc3736d..b0293189a 100644 --- a/src/utils/subject.ts +++ b/src/utils/subject.ts @@ -233,6 +233,7 @@ async function getGitifySubjectForIssue( }, comments: issue.comments, labels: issue.labels?.map((label) => label.name) ?? [], + milestone: issue.milestone, }; } @@ -280,6 +281,7 @@ async function getGitifySubjectForPullRequest( comments: pr.comments, labels: pr.labels?.map((label) => label.name) ?? [], linkedIssues: linkedIssues, + milestone: pr.milestone, }; } From 6606c90205be251ee5cebeed702682a9f613abe2 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Wed, 5 Jun 2024 05:54:04 -0400 Subject: [PATCH 153/251] refactor: update notification footer styles (#1177) * refactor: update notification footer styles * refactor: update notification footer styles --- src/components/NotificationRow.tsx | 69 +- .../NotificationRow.test.tsx.snap | 1578 ++++++++--------- src/utils/constants.ts | 2 +- 3 files changed, 753 insertions(+), 896 deletions(-) diff --git a/src/components/NotificationRow.tsx b/src/components/NotificationRow.tsx index 1ff46aa17..18e0585ab 100644 --- a/src/components/NotificationRow.tsx +++ b/src/components/NotificationRow.tsx @@ -115,48 +115,47 @@ export const NotificationRow: FC = ({ notification, hostname }) => {
openNotification()} onKeyDown={() => openNotification()} >
{notification.subject.title}
-
- - - {notification.subject.user ? ( - - {`${notification.subject.user.login}'s - - ) : ( - - - - )} - - {reason.title} +
+ + {notification.subject.user ? ( + + {`${notification.subject.user.login}'s + + ) : ( + + - {updatedAt} + )} + {reason.title} + {updatedAt} + {notification.subject?.linkedIssues?.length > 0 && ( - +
I am a robot and this is a test!
+ + + + Updated + + + over 6 years ago + + - - - - - Updated - - - over 6 years ago -
I am a robot and this is a test!
+ + + + Updated + + + over 6 years ago + + - - - - - Updated - - - over 6 years ago -
I am a robot and this is a test!
+ + + + Updated + + + over 6 years ago + + - - - - - Updated - - - over 6 years ago -
I am a robot and this is a test!
+ + + + Updated + + + over 6 years ago + + - - - - - Updated - - - over 6 years ago -
I am a robot and this is a test!
+ + + + Updated + + + over 6 years ago + + - - - - - Updated - - - over 6 years ago -
I am a robot and this is a test!
+ + + + Updated + + + over 6 years ago + + - - - - - Updated - - - over 6 years ago -
I am a robot and this is a test!
+ + + + Updated + + + over 6 years ago + + - - - - - Updated - - - over 6 years ago -
I am a robot and this is a test!
+ + + + Updated + + + over 6 years ago + + - - - - - Updated - - - over 6 years ago -
I am a robot and this is a test!
+ + + + Updated + + + over 6 years ago + + - - - - - Updated - - - over 6 years ago -
I am a robot and this is a test!
+ + + + Updated + + + over 6 years ago + + - - - - - Updated - - - over 6 years ago -
I am a robot and this is a test!
+ + + + Updated + + + over 6 years ago + + - - - - - Updated - - - over 6 years ago -
I am a robot and this is a test!
+ + + + Updated + + + over 6 years ago + + - - - - - Updated - - - over 6 years ago -
I am a robot and this is a test!
+ + + + Updated + + + over 6 years ago + + - - - - - Updated - - - over 6 years ago -
I am a robot and this is a test!
+ + + + Updated + + + over 6 years ago + + - - - - - Updated - - - over 6 years ago -
I am a robot and this is a test!
+ + + + Updated + + + over 6 years ago + + - - - - - Updated - - - over 6 years ago -
I am a robot and this is a test!
+ + + + Updated + + + over 6 years ago + + - - - - - Updated - - - over 6 years ago -
I am a robot and this is a test!
+ gitify-app's avatar + + + Updated + + + over 6 years ago + + - gitify-app's avatar - - - Updated - - - over 6 years ago - -
I am a robot and this is a test!
+ gitify-app's avatar + + + Updated + + + over 6 years ago + + - gitify-app's avatar - - - Updated - - - over 6 years ago - -
I am a robot and this is a test!
+ gitify-app's avatar + + + Updated + + + over 6 years ago + + - gitify-app's avatar - - - Updated - - - over 6 years ago - -
I am a robot and this is a test!
+ gitify-app's avatar + + + Updated + + + over 6 years ago + + - gitify-app's avatar - - - Updated - - - over 6 years ago - -
I am a robot and this is a test!
+ + + + + Updated + + + over 6 years ago + - - - - - Updated - - - over 6 years ago -
I am a robot and this is a test!
+ + + + Updated + + + over 6 years ago + + - - - - - Updated - - - over 6 years ago - - for more details. -
+ See + + for more details.
} /> @@ -227,11 +225,9 @@ export const SettingsRoute: FC = () => { } tooltip={
-
- Keep the notification within Gitify window upon interaction - (click, mark as read, mark as done, etc) until the next - refresh window (scheduled or user initiated) -
+ Keep the notification within Gitify window upon interaction + (click, mark as read, mark as done, etc) until the next refresh + window (scheduled or user initiated)
} /> From a342c175167ebd493dbf157278b8c76e1f73df1a Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Wed, 5 Jun 2024 20:34:09 -0400 Subject: [PATCH 162/251] feat: add pill display settings (#1184) --- src/__mocks__/state-mocks.ts | 1 + src/components/NotificationRow.test.tsx | 144 ++++++-- src/components/NotificationRow.tsx | 160 ++++---- .../NotificationRow.test.tsx.snap | 341 ++++++++++++++++++ src/context/App.test.tsx | 20 +- src/context/App.tsx | 1 + src/routes/Settings.test.tsx | 25 ++ src/routes/Settings.tsx | 40 ++ .../__snapshots__/Settings.test.tsx.snap | 48 +++ src/types.ts | 1 + 10 files changed, 675 insertions(+), 106 deletions(-) diff --git a/src/__mocks__/state-mocks.ts b/src/__mocks__/state-mocks.ts index 118e11bbe..13dc08529 100644 --- a/src/__mocks__/state-mocks.ts +++ b/src/__mocks__/state-mocks.ts @@ -71,4 +71,5 @@ export const mockSettings: SettingsState = { markAsDoneOnOpen: false, showAccountHostname: false, delayNotificationState: false, + showPills: true, }; diff --git a/src/components/NotificationRow.test.tsx b/src/components/NotificationRow.test.tsx index 1f9e6f0c8..515386923 100644 --- a/src/components/NotificationRow.test.tsx +++ b/src/components/NotificationRow.test.tsx @@ -26,7 +26,11 @@ describe('components/NotificationRow.tsx', () => { hostname: 'github.com', }; - const tree = render(); + const tree = render( + + + , + ); expect(tree).toMatchSnapshot(); }); @@ -43,7 +47,11 @@ describe('components/NotificationRow.tsx', () => { hostname: 'github.com', }; - const tree = render(); + const tree = render( + + + , + ); expect(tree).toMatchSnapshot(); }); @@ -60,11 +68,42 @@ describe('components/NotificationRow.tsx', () => { hostname: 'github.com', }; - const tree = render(); + const tree = render( + + + , + ); expect(tree).toMatchSnapshot(); }); describe('notification pills / metrics', () => { + describe('showPills disabled', () => { + it('should not render any pills when showPills is disabled', async () => { + jest + .spyOn(global.Date, 'now') + .mockImplementation(() => new Date('2024').valueOf()); + + const mockNotification = mockSingleNotification; + mockNotification.subject.linkedIssues = ['#1']; + + const props = { + notification: mockNotification, + hostname: 'github.com', + }; + + const tree = render( + + + , + ); + expect(tree).toMatchSnapshot(); + }); + }); + describe('linked issue pills', () => { it('should render issues pill when linked to one issue/pr', async () => { jest @@ -79,7 +118,15 @@ describe('components/NotificationRow.tsx', () => { hostname: 'github.com', }; - const tree = render(); + const tree = render( + + + , + ); expect(tree).toMatchSnapshot(); }); @@ -96,7 +143,15 @@ describe('components/NotificationRow.tsx', () => { hostname: 'github.com', }; - const tree = render(); + const tree = render( + + + , + ); expect(tree).toMatchSnapshot(); }); }); @@ -115,7 +170,15 @@ describe('components/NotificationRow.tsx', () => { hostname: 'github.com', }; - const tree = render(); + const tree = render( + + + , + ); expect(tree).toMatchSnapshot(); }); @@ -132,7 +195,15 @@ describe('components/NotificationRow.tsx', () => { hostname: 'github.com', }; - const tree = render(); + const tree = render( + + + , + ); expect(tree).toMatchSnapshot(); }); @@ -149,7 +220,15 @@ describe('components/NotificationRow.tsx', () => { hostname: 'github.com', }; - const tree = render(); + const tree = render( + + + , + ); expect(tree).toMatchSnapshot(); }); }); @@ -168,7 +247,15 @@ describe('components/NotificationRow.tsx', () => { hostname: 'github.com', }; - const tree = render(); + const tree = render( + + + , + ); expect(tree).toMatchSnapshot(); }); }); @@ -190,7 +277,15 @@ describe('components/NotificationRow.tsx', () => { hostname: 'github.com', }; - const tree = render(); + const tree = render( + + + , + ); expect(tree).toMatchSnapshot(); }); @@ -210,7 +305,15 @@ describe('components/NotificationRow.tsx', () => { hostname: 'github.com', }; - const tree = render(); + const tree = render( + + + , + ); expect(tree).toMatchSnapshot(); }); }); @@ -304,12 +407,10 @@ describe('components/NotificationRow.tsx', () => { - - - + , ); @@ -327,14 +428,9 @@ describe('components/NotificationRow.tsx', () => { render( - - - + , ); @@ -352,7 +448,9 @@ describe('components/NotificationRow.tsx', () => { render( - + , diff --git a/src/components/NotificationRow.tsx b/src/components/NotificationRow.tsx index 18e0585ab..f4f726a37 100644 --- a/src/components/NotificationRow.tsx +++ b/src/components/NotificationRow.tsx @@ -153,86 +153,88 @@ export const NotificationRow: FC = ({ notification, hostname }) => { )} {reason.title} {updatedAt} - - {notification.subject?.linkedIssues?.length > 0 && ( - - - - )} - {notification.subject.reviews - ? notification.subject.reviews.map((review) => { - const icon = getPullRequestReviewIcon(review); - if (!icon) { - return null; - } - - return ( - - - - ); - }) - : null} - {notification.subject?.comments > 0 && ( - - - - )} - {notification.subject?.labels?.length > 0 && ( - - - - )} - {notification.subject.milestone && ( - - + + )} + {notification.subject.reviews + ? notification.subject.reviews.map((review) => { + const icon = getPullRequestReviewIcon(review); + if (!icon) { + return null; } - aria-label={notification.subject.milestone.title} - /> - - - )} - + + return ( + + + + ); + }) + : null} + {notification.subject?.comments > 0 && ( + + + + )} + {notification.subject?.labels?.length > 0 && ( + + + + )} + {notification.subject.milestone && ( + + + + )} + + )}
diff --git a/src/components/__snapshots__/NotificationRow.test.tsx.snap b/src/components/__snapshots__/NotificationRow.test.tsx.snap index b9cab2c6d..7cf6e5b80 100644 --- a/src/components/__snapshots__/NotificationRow.test.tsx.snap +++ b/src/components/__snapshots__/NotificationRow.test.tsx.snap @@ -4552,6 +4552,347 @@ exports[`components/NotificationRow.tsx notification pills / metrics milestone p } `; +exports[`components/NotificationRow.tsx notification pills / metrics showPills disabled should not render any pills when showPills is disabled 1`] = ` +{ + "asFragment": [Function], + "baseElement": +
+
+
+ + + + +
+
+
+ I am a robot and this is a test! +
+
+ + + + + + Updated + + + over 6 years ago + + +
+
+
+ + + +
+
+
+ , + "container":
+
+
+ + + + +
+
+
+ I am a robot and this is a test! +
+
+ + + + + + Updated + + + over 6 years ago + + +
+
+
+ + + +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; + exports[`components/NotificationRow.tsx should render itself & its children 1`] = ` { "asFragment": [Function], diff --git a/src/context/App.test.tsx b/src/context/App.test.tsx index 71dc830d9..8d20babc1 100644 --- a/src/context/App.test.tsx +++ b/src/context/App.test.tsx @@ -371,7 +371,12 @@ describe('context/App.tsx', () => { }); expect(saveStateMock).toHaveBeenCalledWith({ - auth: { accounts: [], enterpriseAccounts: [], token: null, user: null }, + auth: { + accounts: [], + enterpriseAccounts: [], + token: null, + user: null, + } as AuthState, settings: { participating: true, playSound: true, @@ -384,7 +389,8 @@ describe('context/App.tsx', () => { markAsDoneOnOpen: false, showAccountHostname: false, delayNotificationState: false, - }, + showPills: true, + } as SettingsState, }); }); @@ -416,7 +422,12 @@ describe('context/App.tsx', () => { expect(setAutoLaunchMock).toHaveBeenCalledWith(true); expect(saveStateMock).toHaveBeenCalledWith({ - auth: { accounts: [], enterpriseAccounts: [], token: null, user: null }, + auth: { + accounts: [], + enterpriseAccounts: [], + token: null, + user: null, + } as AuthState, settings: { participating: false, playSound: true, @@ -429,7 +440,8 @@ describe('context/App.tsx', () => { markAsDoneOnOpen: false, showAccountHostname: false, delayNotificationState: false, - }, + showPills: true, + } as SettingsState, }); }); }); diff --git a/src/context/App.tsx b/src/context/App.tsx index b84c8b3ec..74517daea 100644 --- a/src/context/App.tsx +++ b/src/context/App.tsx @@ -53,6 +53,7 @@ export const defaultSettings: SettingsState = { markAsDoneOnOpen: false, showAccountHostname: false, delayNotificationState: false, + showPills: true, }; interface AppContextState { diff --git a/src/routes/Settings.test.tsx b/src/routes/Settings.test.tsx index 2edc874b2..be80c903d 100644 --- a/src/routes/Settings.test.tsx +++ b/src/routes/Settings.test.tsx @@ -127,6 +127,31 @@ describe('routes/Settings.tsx', () => { ); }); + it('should toggle metric pills checkbox', async () => { + await act(async () => { + render( + + + + + , + ); + }); + + await screen.findByLabelText('Show notification metric pills'); + + fireEvent.click(screen.getByLabelText('Show notification metric pills')); + + expect(updateSetting).toHaveBeenCalledTimes(1); + expect(updateSetting).toHaveBeenCalledWith('showPills', false); + }); + it('should toggle account hostname checkbox', async () => { await act(async () => { render( diff --git a/src/routes/Settings.tsx b/src/routes/Settings.tsx index 125b2935b..0d91f0dc6 100644 --- a/src/routes/Settings.tsx +++ b/src/routes/Settings.tsx @@ -1,9 +1,14 @@ import { ArrowLeftIcon, + CheckIcon, + CommentIcon, + IssueClosedIcon, KeyIcon, + MilestoneIcon, PersonIcon, PlusIcon, SignOutIcon, + TagIcon, XCircleIcon, } from '@primer/octicons-react'; import { ipcRenderer } from 'electron'; @@ -150,6 +155,41 @@ export const SettingsRoute: FC = () => {
} /> + updateSetting('showPills', evt.target.checked)} + tooltip={ +
+
Show notification metric pills for:
+
+
    +
  • + + linked issues +
  • +
  • + pr reviews +
  • +
  • + + comments +
  • + +
  • + + labels +
  • +
  • + + milestones +
  • +
+
+
+ } + />
+
+
+
+ +
+
+ +
+
+
diff --git a/src/types.ts b/src/types.ts index a3e62104f..b9688f535 100644 --- a/src/types.ts +++ b/src/types.ts @@ -41,6 +41,7 @@ interface AppearanceSettingsState { theme: Theme; detailedNotifications: boolean; showAccountHostname: boolean; + showPills: boolean; } interface NotificationSettingsState { From 40d3104564f7d535c65542b9f29d4170e5b8351d Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Wed, 5 Jun 2024 20:49:02 -0400 Subject: [PATCH 163/251] feat: new account management view (#1172) * feat: add accounts route and view * feat: accounts view * add unit tests * feat: accounts view * feat: accounts view * add unit tests * add unit tests * add unit tests * add unit tests * move accounts back to settings * remove master logout * remove master logout * chore: merge `main` --------- Co-authored-by: Afonso Jorge Ramos --- src/__mocks__/state-mocks.ts | 8 + src/app.tsx | 10 +- src/context/App.tsx | 13 + src/routes/Accounts.test.tsx | 279 ++++++++++++ src/routes/Accounts.tsx | 208 +++++++++ src/routes/Settings.test.tsx | 146 +------ src/routes/Settings.tsx | 61 +-- .../__snapshots__/Accounts.test.tsx.snap | 403 ++++++++++++++++++ .../__snapshots__/Settings.test.tsx.snap | 78 +--- src/utils/auth/utils.test.ts | 46 +- src/utils/auth/utils.ts | 33 +- 11 files changed, 1023 insertions(+), 262 deletions(-) create mode 100644 src/routes/Accounts.test.tsx create mode 100644 src/routes/Accounts.tsx create mode 100644 src/routes/__snapshots__/Accounts.test.tsx.snap diff --git a/src/__mocks__/state-mocks.ts b/src/__mocks__/state-mocks.ts index 13dc08529..1a1fd0553 100644 --- a/src/__mocks__/state-mocks.ts +++ b/src/__mocks__/state-mocks.ts @@ -53,6 +53,14 @@ export const mockGitHubEnterpriseServerAccount: Account = { user: mockGitifyUser, }; +export const mockGitHubAppAccount: Account = { + platform: 'GitHub Cloud', + method: 'GitHub App', + token: '987654321', + hostname: Constants.DEFAULT_AUTH_OPTIONS.hostname, + user: mockGitifyUser, +}; + export const mockAuth: AuthState = { accounts: [mockGitHubCloudAccount, mockGitHubEnterpriseServerAccount], }; diff --git a/src/app.tsx b/src/app.tsx index 3beb15806..c15ab937b 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -9,6 +9,7 @@ import { import { Loading } from './components/Loading'; import { Sidebar } from './components/Sidebar'; import { AppContext, AppProvider } from './context/App'; +import { AccountsRoute } from './routes/Accounts'; import { LoginRoute } from './routes/Login'; import { LoginWithOAuthApp } from './routes/LoginWithOAuthApp'; import { LoginWithPersonalAccessToken } from './routes/LoginWithPersonalAccessToken'; @@ -50,7 +51,14 @@ export const App = () => { } /> - + + + + } + /> } /> void; loginWithOAuthApp: (data: LoginOAuthAppOptions) => void; loginWithPersonalAccessToken: (data: LoginPersonalAccessTokenOptions) => void; + logoutFromAccount: (account: Account) => void; logout: () => void; notifications: AccountNotifications[]; @@ -193,6 +196,15 @@ export const AppProvider = ({ children }: { children: ReactNode }) => { [auth, settings], ); + const logoutFromAccount = useCallback( + async (account: Account) => { + const updatedAuth = removeAccount(auth, account); + setAuth(updatedAuth); + saveState({ auth: updatedAuth, settings }); + }, + [auth, settings], + ); + const logout = useCallback(() => { setAuth(defaultAuth); clearState(); @@ -256,6 +268,7 @@ export const AppProvider = ({ children }: { children: ReactNode }) => { loginWithGitHubApp, loginWithOAuthApp, loginWithPersonalAccessToken, + logoutFromAccount, logout, notifications, diff --git a/src/routes/Accounts.test.tsx b/src/routes/Accounts.test.tsx new file mode 100644 index 000000000..1693605ad --- /dev/null +++ b/src/routes/Accounts.test.tsx @@ -0,0 +1,279 @@ +import { act, fireEvent, render, screen } from '@testing-library/react'; +import { ipcRenderer, shell } from 'electron'; +import { MemoryRouter } from 'react-router-dom'; +import { + mockAuth, + mockGitHubAppAccount, + mockOAuthAccount, + mockPersonalAccessTokenAccount, + mockSettings, +} from '../__mocks__/state-mocks'; +import { AppContext } from '../context/App'; +import { AccountsRoute } from './Accounts'; + +const mockNavigate = jest.fn(); +jest.mock('react-router-dom', () => ({ + ...jest.requireActual('react-router-dom'), + useNavigate: () => mockNavigate, +})); + +describe('routes/Accounts.tsx', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + describe('General', () => { + it('should render itself & its children', async () => { + await act(async () => { + render( + + + + + , + ); + }); + + expect(screen.getByTestId('accounts')).toMatchSnapshot(); + }); + + it('should go back by pressing the icon', async () => { + await act(async () => { + render( + + + + + , + ); + }); + + fireEvent.click(screen.getByLabelText('Go Back')); + expect(mockNavigate).toHaveBeenNthCalledWith(1, -1); + }); + }); + + describe('Account interactions', () => { + it('open profile in external browser', async () => { + await act(async () => { + render( + + + + + , + ); + }); + + fireEvent.click(screen.getByTitle('Open Profile')); + + expect(shell.openExternal).toHaveBeenCalledTimes(1); + expect(shell.openExternal).toHaveBeenCalledWith( + 'https://github.com/octocat', + ); + }); + + it('open host in external browser', async () => { + await act(async () => { + render( + + + + + , + ); + }); + + fireEvent.click(screen.getByTitle('Open Host')); + + expect(shell.openExternal).toHaveBeenCalledTimes(1); + expect(shell.openExternal).toHaveBeenCalledWith('https://github.com'); + }); + + it('open developer settings in external browser', async () => { + await act(async () => { + render( + + + + + , + ); + }); + + fireEvent.click(screen.getByTitle('Open Developer Settings')); + + expect(shell.openExternal).toHaveBeenCalledTimes(1); + expect(shell.openExternal).toHaveBeenCalledWith( + 'https://github.com/settings/tokens', + ); + }); + + it('should logout', async () => { + const logoutFromAccountMock = jest.fn(); + await act(async () => { + render( + + + + + , + ); + }); + + fireEvent.click(screen.getByTitle('Logout octocat')); + + expect(logoutFromAccountMock).toHaveBeenCalledTimes(1); + + expect(ipcRenderer.send).toHaveBeenCalledTimes(2); + expect(ipcRenderer.send).toHaveBeenCalledWith('update-icon'); + expect(ipcRenderer.send).toHaveBeenCalledWith('update-title', ''); + expect(mockNavigate).toHaveBeenNthCalledWith(1, -1); + }); + }); + + describe('Add new accounts', () => { + describe('Login with Personal Access Token', () => { + it('should show login with personal access token button if not logged in', async () => { + await act(async () => { + render( + + + + + , + ); + }); + + expect( + screen.getByTitle('Login with Personal Access Token').hidden, + ).toBe(false); + + fireEvent.click(screen.getByTitle('Login with Personal Access Token')); + expect(mockNavigate).toHaveBeenNthCalledWith( + 1, + '/login-personal-access-token', + { + replace: true, + }, + ); + }); + + it('should hide login with personal access token button if already logged in', async () => { + await act(async () => { + render( + + + + + , + ); + }); + + expect( + screen.getByTitle('Login with Personal Access Token').hidden, + ).toBe(true); + }); + }); + + describe('Login with OAuth App', () => { + it('should show login with oauth app if not logged in', async () => { + await act(async () => { + render( + + + + + , + ); + }); + + expect(screen.getByTitle('Login with OAuth App').hidden).toBe(false); + + fireEvent.click(screen.getByTitle('Login with OAuth App')); + expect(mockNavigate).toHaveBeenNthCalledWith(1, '/login-oauth-app', { + replace: true, + }); + }); + + it('should hide login with oauth app route if already logged in', async () => { + await act(async () => { + render( + + + + + , + ); + }); + + expect(screen.getByTitle('Login with OAuth App').hidden).toBe(true); + }); + }); + }); +}); diff --git a/src/routes/Accounts.tsx b/src/routes/Accounts.tsx new file mode 100644 index 000000000..09c32d56b --- /dev/null +++ b/src/routes/Accounts.tsx @@ -0,0 +1,208 @@ +import { + AppsIcon, + ArrowLeftIcon, + KeyIcon, + MarkGithubIcon, + PersonIcon, + PlusIcon, + ServerIcon, + SignOutIcon, +} from '@primer/octicons-react'; + +import { type FC, useCallback, useContext } from 'react'; +import { useNavigate } from 'react-router-dom'; + +import { AppContext } from '../context/App'; + +import type { Account } from '../types'; +import { getAccountUUID, getDeveloperSettingsURL } from '../utils/auth/utils'; +import { + openExternalLink, + updateTrayIcon, + updateTrayTitle, +} from '../utils/comms'; +import { + isOAuthAppLoggedIn, + isPersonalAccessTokenLoggedIn, +} from '../utils/helpers'; + +export const AccountsRoute: FC = () => { + const { auth, logoutFromAccount } = useContext(AppContext); + const navigate = useNavigate(); + + const logoutAccount = useCallback((account: Account) => { + logoutFromAccount(account); + navigate(-1); + updateTrayIcon(); + updateTrayTitle(); + }, []); + + const openProfile = (account: Account) => { + const url = new URL(`https://${account.hostname}`); + url.pathname = account.user.login; + openExternalLink(url.toString()); + }; + + const openHost = (hostname: string) => { + openExternalLink(`https://${hostname}`); + }; + + const openDeveloperSettings = (account: Account) => { + const url = getDeveloperSettingsURL(account); + openExternalLink(url); + }; + + const loginWithPersonalAccessToken = useCallback(() => { + return navigate('/login-personal-access-token', { replace: true }); + }, []); + + const loginWithOAuthApp = useCallback(() => { + return navigate('/login-oauth-app', { replace: true }); + }, []); + + const buttonClass = + 'hover:text-gray-500 py-1 px-2 my-1 mx-2 focus:outline-none'; + + return ( +
+
+ + +

Accounts

+
+ +
+
+ {auth.accounts.map((account) => ( +
+
+ + + + +
+
+ +
+
+ ))} +
+
+ +
+
Add new account
+
+ + +
+
+
+ ); +}; diff --git a/src/routes/Settings.test.tsx b/src/routes/Settings.test.tsx index be80c903d..2f42d5ff8 100644 --- a/src/routes/Settings.test.tsx +++ b/src/routes/Settings.test.tsx @@ -1,12 +1,7 @@ import { act, fireEvent, render, screen } from '@testing-library/react'; import { ipcRenderer, shell } from 'electron'; import { MemoryRouter } from 'react-router-dom'; -import { - mockAuth, - mockOAuthAccount, - mockPersonalAccessTokenAccount, - mockSettings, -} from '../__mocks__/state-mocks'; +import { mockAuth, mockSettings } from '../__mocks__/state-mocks'; import { mockPlatform } from '../__mocks__/utils'; import { AppContext } from '../context/App'; import { SettingsRoute } from './Settings'; @@ -508,130 +503,21 @@ describe('routes/Settings.tsx', () => { ); }); - describe('Login with Personal Access Token', () => { - it('should show login with personal access token button if not logged in', async () => { - await act(async () => { - render( - - - - - , - ); - }); - - expect( - screen.getByTitle('Login with Personal Access Token').hidden, - ).toBe(false); - - fireEvent.click(screen.getByTitle('Login with Personal Access Token')); - expect(mockNavigate).toHaveBeenNthCalledWith( - 1, - '/login-personal-access-token', - { - replace: true, - }, - ); - }); - - it('should hide login with personal access token button if already logged in', async () => { - await act(async () => { - render( - - - - - , - ); - }); - - expect( - screen.getByTitle('Login with Personal Access Token').hidden, - ).toBe(true); - }); - }); - - describe('Login with OAuth App', () => { - it('should show login with oauth app if not logged in', async () => { - await act(async () => { - render( - - - - - , - ); - }); - - expect(screen.getByTitle('Login with OAuth App').hidden).toBe(false); - - fireEvent.click(screen.getByTitle('Login with OAuth App')); - expect(mockNavigate).toHaveBeenNthCalledWith(1, '/login-oauth-app', { - replace: true, - }); - }); - - it('should hide login with oauth app route if already logged in', async () => { - await act(async () => { - render( - - - - - , - ); - }); - - expect(screen.getByTitle('Login with OAuth App').hidden).toBe(true); - }); - }); - - it('should press the logout', async () => { - const logoutMock = jest.fn(); - await act(async () => { - render( - - - - - , - ); - }); - - fireEvent.click(screen.getByTitle('Logout')); - - expect(logoutMock).toHaveBeenCalledTimes(1); - - expect(ipcRenderer.send).toHaveBeenCalledTimes(2); - expect(ipcRenderer.send).toHaveBeenCalledWith('update-icon'); - expect(ipcRenderer.send).toHaveBeenCalledWith('update-title', ''); - expect(mockNavigate).toHaveBeenNthCalledWith(1, -1); + it('should open account management', () => { + render( + + + + + , + ); + fireEvent.click(screen.getByTitle('Accounts')); + expect(mockNavigate).toHaveBeenCalledWith('/accounts'); }); it('should quit the app', async () => { diff --git a/src/routes/Settings.tsx b/src/routes/Settings.tsx index 0d91f0dc6..dec907f2b 100644 --- a/src/routes/Settings.tsx +++ b/src/routes/Settings.tsx @@ -3,11 +3,8 @@ import { CheckIcon, CommentIcon, IssueClosedIcon, - KeyIcon, MilestoneIcon, PersonIcon, - PlusIcon, - SignOutIcon, TagIcon, XCircleIcon, } from '@primer/octicons-react'; @@ -25,21 +22,13 @@ import { Checkbox } from '../components/fields/Checkbox'; import { RadioGroup } from '../components/fields/RadioGroup'; import { AppContext } from '../context/App'; import { Theme } from '../types'; -import { - openExternalLink, - updateTrayIcon, - updateTrayTitle, -} from '../utils/comms'; +import { openExternalLink } from '../utils/comms'; import Constants from '../utils/constants'; -import { - isOAuthAppLoggedIn, - isPersonalAccessTokenLoggedIn, -} from '../utils/helpers'; import { isLinux, isMacOS } from '../utils/platform'; import { setTheme } from '../utils/theme'; export const SettingsRoute: FC = () => { - const { auth, settings, updateSetting, logout } = useContext(AppContext); + const { settings, updateSetting } = useContext(AppContext); const navigate = useNavigate(); const [appVersion, setAppVersion] = useState(null); @@ -72,25 +61,10 @@ export const SettingsRoute: FC = () => { }); }, []); - const logoutUser = useCallback(() => { - logout(); - navigate(-1); - updateTrayIcon(); - updateTrayTitle(); - }, []); - const quitApp = useCallback(() => { ipcRenderer.send('app-quit'); }, []); - const loginWithPersonalAccessToken = useCallback(() => { - return navigate('/login-personal-access-token', { replace: true }); - }, []); - - const loginWithOAuthApp = useCallback(() => { - return navigate('/login-oauth-app', { replace: true }); - }, []); - const footerButtonClass = 'hover:text-gray-500 py-1 px-2 my-1 mx-2 focus:outline-none'; @@ -330,33 +304,12 @@ export const SettingsRoute: FC = () => { - - - - +

+ Accounts +

+
+
+
+
+
+ + + +
+
+ +
+
+
+
+ + + +
+
+ +
+
+
+
+ + + +
+
+ +
+
+
+
+
+
+ Add new account +
+
+ + +
+
+
+`; diff --git a/src/routes/__snapshots__/Settings.test.tsx.snap b/src/routes/__snapshots__/Settings.test.tsx.snap index 3003202c4..4bf0d4b0f 100644 --- a/src/routes/__snapshots__/Settings.test.tsx.snap +++ b/src/routes/__snapshots__/Settings.test.tsx.snap @@ -561,86 +561,14 @@ exports[`routes/Settings.tsx General should render itself & its children 1`] = `
- - diff --git a/src/utils/auth/utils.test.ts b/src/utils/auth/utils.test.ts index 19ab1e621..f120fd49a 100644 --- a/src/utils/auth/utils.test.ts +++ b/src/utils/auth/utils.test.ts @@ -1,6 +1,7 @@ import remote from '@electron/remote'; import type { AxiosPromise, AxiosResponse } from 'axios'; -import type { AuthState } from '../../types'; +import { mockAuth, mockGitHubCloudAccount } from '../../__mocks__/state-mocks'; +import type { Account, AuthState } from '../../types'; import * as apiRequests from '../api/request'; import * as auth from './utils'; import { getNewOAuthAppURL, getNewTokenURL } from './utils'; @@ -192,6 +193,49 @@ describe('utils/auth/utils.ts', () => { }); }); + describe('removeAccount', () => { + it('should remove account with matching token', async () => { + expect(mockAuth.accounts.length).toBe(2); + + const result = auth.removeAccount(mockAuth, mockGitHubCloudAccount); + + expect(result.accounts.length).toBe(1); + }); + + it('should do nothing if no accounts match', async () => { + const mockAccount = { + token: 'unknown-token', + } as Account; + + expect(mockAuth.accounts.length).toBe(2); + + const result = auth.removeAccount(mockAuth, mockAccount); + + expect(result.accounts.length).toBe(2); + }); + }); + + it('getDeveloperSettingsURL', () => { + expect( + auth.getDeveloperSettingsURL({ + hostname: 'github.com', + method: 'GitHub App', + } as Account), + ).toBe('https://github.com/settings/apps'); + expect( + auth.getDeveloperSettingsURL({ + hostname: 'github.com', + method: 'OAuth App', + } as Account), + ).toBe('https://github.com/settings/developers'); + expect( + auth.getDeveloperSettingsURL({ + hostname: 'github.com', + method: 'Personal Access Token', + } as Account), + ).toBe('https://github.com/settings/tokens'); + }); + describe('getNewTokenURL', () => { it('should generate new PAT url - github cloud', () => { expect( diff --git a/src/utils/auth/utils.ts b/src/utils/auth/utils.ts index 05a80e957..f4ab7fe4a 100644 --- a/src/utils/auth/utils.ts +++ b/src/utils/auth/utils.ts @@ -1,6 +1,6 @@ import { BrowserWindow } from '@electron/remote'; import { format } from 'date-fns'; -import type { AuthState, GitifyUser } from '../../types'; +import type { Account, AuthState, GitifyUser } from '../../types'; import type { UserDetails } from '../../typesGitHub'; import { getAuthenticatedUser } from '../api/client'; import { apiRequest } from '../api/request'; @@ -128,6 +128,33 @@ export function addAccount( }; } +export function removeAccount(auth: AuthState, account: Account): AuthState { + const updatedAccounts = auth.accounts.filter( + (a) => a.token !== account.token, + ); + + return { + accounts: updatedAccounts, + }; +} + +export function getDeveloperSettingsURL(account: Account): string { + const settingsURL = new URL(`https://${account.hostname}`); + + switch (account.method) { + case 'GitHub App': + settingsURL.pathname = '/settings/apps'; + break; + case 'OAuth App': + settingsURL.pathname = '/settings/developers'; + break; + case 'Personal Access Token': + settingsURL.pathname = 'settings/tokens'; + break; + } + return settingsURL.toString(); +} + export function getNewTokenURL(hostname: string): string { const date = format(new Date(), 'PP p'); const newTokenURL = new URL(`https://${hostname}/settings/tokens/new`); @@ -171,3 +198,7 @@ export function isValidClientId(clientId: string) { export function isValidToken(token: string) { return /^[A-Z0-9_]{40}$/i.test(token); } + +export function getAccountUUID(account: Account): string { + return btoa(`${account.hostname}-${account.user.id}-${account.method}`); +} From e2b089230d45b1e743090699a475cf1b4c22dc03 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Wed, 5 Jun 2024 22:30:24 -0400 Subject: [PATCH 164/251] refactor: more pill css changes (#1183) * refactor: more pill css changes * refactor: more pill css changes * refactor: more pill css changes --- src/components/NotificationRow.tsx | 205 +- src/components/Repository.tsx | 2 +- .../NotificationRow.test.tsx.snap | 5230 ++++++++--------- .../__snapshots__/Repository.test.tsx.snap | 8 +- src/utils/constants.ts | 2 +- src/utils/helpers.ts | 4 +- tailwind.config.js | 3 + 7 files changed, 2667 insertions(+), 2787 deletions(-) diff --git a/src/components/NotificationRow.tsx b/src/components/NotificationRow.tsx index f4f726a37..76575e2fc 100644 --- a/src/components/NotificationRow.tsx +++ b/src/components/NotificationRow.tsx @@ -105,10 +105,10 @@ export const NotificationRow: FC = ({ notification, hostname }) => { return (
@@ -120,122 +120,115 @@ export const NotificationRow: FC = ({ notification, hostname }) => { onKeyDown={() => openNotification()} >
{notification.subject.title}
-
- - {notification.subject.user ? ( - - {`${notification.subject.user.login}'s - - ) : ( - - - - )} - {reason.title} - {updatedAt} - {settings.showPills && ( - - {notification.subject?.linkedIssues?.length > 0 && ( - - - - )} - {notification.subject.reviews - ? notification.subject.reviews.map((review) => { - const icon = getPullRequestReviewIcon(review); - if (!icon) { - return null; - } +
+ {notification.subject.user ? ( +
+ {`${notification.subject.user.login}'s +
+ ) : ( +
+ +
+ )} +
{reason.title}
+
{updatedAt}
+ {settings.showPills && ( +
+ {notification.subject?.linkedIssues?.length > 0 && ( + + + + )} + {notification.subject.reviews?.map((review) => { + const icon = getPullRequestReviewIcon(review); + if (!icon) { + return null; + } - return ( - - - - ); - }) - : null} - {notification.subject?.comments > 0 && ( - + return ( + - )} - {notification.subject?.labels?.length > 0 && ( - - - - )} - {notification.subject.milestone && ( - - - - )} - - )} - + ); + })} + {notification.subject?.comments > 0 && ( + + + + )} + {notification.subject?.labels?.length > 0 && ( + + + + )} + {notification.subject.milestone && ( + + + + )} +
+ )}
diff --git a/src/components/Repository.tsx b/src/components/Repository.tsx index 47074f314..2b7877617 100644 --- a/src/components/Repository.tsx +++ b/src/components/Repository.tsx @@ -52,7 +52,7 @@ export const RepositoryNotifications: FC = ({ )} diff --git a/src/components/__snapshots__/NotificationRow.test.tsx.snap b/src/components/__snapshots__/NotificationRow.test.tsx.snap index 7cf6e5b80..d8901bfcc 100644 --- a/src/components/__snapshots__/NotificationRow.test.tsx.snap +++ b/src/components/__snapshots__/NotificationRow.test.tsx.snap @@ -6,11 +6,11 @@ exports[`components/NotificationRow.tsx notification pills / metrics comment pil "baseElement":
I am a robot and this is a test!
- + +
+
- - - + Updated +
+
+ 7 years ago +
+
- Updated - - - over 6 years ago + - - - - - - - + + 1 + + + + - - + + 1 + + + + - + + + 1 + - +
, "container":
I am a robot and this is a test!
- + +
+
- - - + Updated +
+
+ 7 years ago +
+
- Updated - - - over 6 years ago + - - - - + + 1 + + + + - - + + 1 + + + + - - - - + + + 1 + - +
I am a robot and this is a test!
- + +
+
- - - + Updated +
+
+ 7 years ago +
+
- Updated - - - over 6 years ago + - - - - - - - + + 1 + + + + - - + + 1 + + + + - + + + 2 + - +
, "container":
I am a robot and this is a test!
- + +
+
- -
+ 7 years ago +
+
+ + - Updated - - - over 6 years ago + - - - - + + 1 + + + + - - - - - - - + + + 2 + - +
I am a robot and this is a test!
- + +
+
- - - + Updated +
+
+ 7 years ago +
+
- Updated - - - over 6 years ago + - - - - - - - + + 1 + + + + - + + + 1 + - +
, "container":
I am a robot and this is a test!
- + +
+
- - - + Updated +
+
+ 7 years ago +
+
- Updated - - - over 6 years ago + - - - - - - - + + 1 + + + + - + + + 1 + - +
-
-
-
- - - - -
-
-
- I am a robot and this is a test! -
-
- - - - - - Updated - - - over 6 years ago - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
-
-
- , - "container":
-
-
- - - - -
+ "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; + +exports[`components/NotificationRow.tsx notification pills / metrics label pills should render labels pill 1`] = ` +{ + "asFragment": [Function], + "baseElement": +
- I am a robot and this is a test! + + + +
- + I am a robot and this is a test! +
+
- +
- - +
Updated - - - over 6 years ago - - +
+ 7 years ago +
+
+
+
+
+ + + +
+
+
+ , + "container":
+
+
+ + + + +
+
+
+ I am a robot and this is a test! +
+
+
+ +
+
+ Updated +
+
+ 7 years ago +
+
+ + + + + + + + + + + + + + - +
I am a robot and this is a test!
- + +
+
- - - + Updated +
+
+ 7 years ago +
+
- Updated - - - over 6 years ago + - - - - - - - + + 1 + + + + - + + + 1 + - +
, "container":
I am a robot and this is a test!
- + +
+
- - - + Updated +
+
+ 7 years ago +
+
- Updated - - - over 6 years ago + - - - - - - - + + 1 + + + + - + + + 1 + - +
I am a robot and this is a test!
- + +
+
- - - + Updated +
+
+ 7 years ago +
+
- Updated - - - over 6 years ago + - - - - - - - + + 1 + + + + - + + + 1 + - +
, "container":
I am a robot and this is a test!
- + +
+
- - - + Updated +
+
+ 7 years ago +
+
- Updated - - - over 6 years ago + - - - - - - - + + 1 + + + + - + + + 1 + - +
I am a robot and this is a test!
- + +
+
- -
+ 7 years ago +
+
+ + - Updated - - - over 6 years ago + - - - - - - - - - - + + 1 + + + + - - + + 2 + + + + - - + + + 2 + + + + - + + + - +
, "container":
I am a robot and this is a test!
- + +
+
- - - + Updated +
+
+ 7 years ago +
+
- Updated - - - over 6 years ago + - - - - - - - + + 1 + + + + - - + + 1 + + + + - - + + 2 + + + + - - + + + 2 + + + + - + + + - +
- - -
-
-
- I am a robot and this is a test! -
-
- - - - - - Updated - - - over 6 years ago - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
-
-
- , - "container":
-
-
- - - - -
-
-
- I am a robot and this is a test! + /> + +
- + I am a robot and this is a test! +
+
- +
- - +
Updated - - - over 6 years ago - - +
+ 7 years ago +
+
+
+
+
+ + + +
+
+
+ , + "container":
+
+
+ + + + +
+
+
+ I am a robot and this is a test! +
+
+
+ +
+
+ Updated +
+
+ 7 years ago +
+
+ + + + + + + + + + + + + + + + + - +
I am a robot and this is a test!
- - - - - + - - over 6 years ago - - + + +
+
+ Updated +
+
+ 7 years ago +
, "container":
I am a robot and this is a test!
- - - - - + - - over 6 years ago - - + + +
+
+ Updated +
+
+ 7 years ago +
I am a robot and this is a test!
- + gitify-app's avatar +
+
+ Updated +
+
+ 7 years ago +
+
- gitify-app's avatar - - - Updated - - - over 6 years ago + - - - - - - + + + 1 + - +
, "container":
I am a robot and this is a test!
- + gitify-app's avatar +
+
+ Updated +
+
+ 7 years ago +
+
- gitify-app's avatar - - - Updated - - - over 6 years ago + - - - - - - + + + 1 + - +
I am a robot and this is a test!
- + gitify-app's avatar +
+
+ Updated +
+
+ 7 years ago +
+
- gitify-app's avatar - - - Updated - - - over 6 years ago + - - - - - - + + + 1 + - +
, "container":
I am a robot and this is a test!
- + gitify-app's avatar +
+
+ Updated +
+
+ 7 years ago +
+
- gitify-app's avatar - - - Updated - - - over 6 years ago + - - - - - - + + + 1 + - +
I am a robot and this is a test!
- + +
+
- - - + Updated +
+
+ 7 years ago +
+
- Updated - - - over 6 years ago + - - - - - - + + + 1 + - +
, "container":
I am a robot and this is a test!
- + +
+
- - - + Updated +
+
+ 7 years ago +
+
- Updated - - - over 6 years ago + - - - - - - + + + 1 + - +
gitify-app/notifications-test @@ -95,7 +95,7 @@ exports[`components/Repository.tsx should render itself & its children 1`] = ` src="https://avatars.githubusercontent.com/u/133795385?s=200&v=4" /> gitify-app/notifications-test @@ -239,7 +239,7 @@ exports[`components/Repository.tsx should use default repository icon when avata /> gitify-app/notifications-test @@ -326,7 +326,7 @@ exports[`components/Repository.tsx should use default repository icon when avata /> gitify-app/notifications-test diff --git a/src/utils/constants.ts b/src/utils/constants.ts index bb1567670..a3d607f94 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -25,7 +25,7 @@ export const Constants = { READ_CLASS_NAME: 'opacity-50 dark:opacity-50', PILL_CLASS_NAME: - 'rounded-full text-xs px-1.5 bg-gray-100 hover:bg-gray-200 dark:bg-gray-800 dark:hover:bg-gray-700', + 'rounded-full text-xss px-1 m-0.5 bg-gray-100 hover:bg-gray-200 dark:bg-gray-800 dark:hover:bg-gray-700', // GitHub Docs GITHUB_DOCS: { diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index f175c8b4b..a69d121bb 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -1,4 +1,4 @@ -import { formatDistanceToNow, parseISO } from 'date-fns'; +import { formatDistanceToNowStrict, parseISO } from 'date-fns'; import type { Account, AuthState } from '../types'; import type { Notification } from '../typesGitHub'; import { openExternalLink } from '../utils/comms'; @@ -176,7 +176,7 @@ export function formatNotificationUpdatedAt( const date = notification.last_read_at ?? notification.updated_at; try { - return formatDistanceToNow(parseISO(date), { + return formatDistanceToNowStrict(parseISO(date), { addSuffix: true, }); } catch (e) {} diff --git a/tailwind.config.js b/tailwind.config.js index e1e37787e..d8329ccf9 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -3,6 +3,9 @@ module.exports = { darkMode: 'class', theme: { extend: { + fontSize: { + xss: '0.625rem', // 10px + }, colors: { gray: { sidebar: '#24292e', From 9a69fa8804089f35ea13ea91fe43071eb33db004 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 5 Jun 2024 22:30:31 -0400 Subject: [PATCH 165/251] chore(deps): update pnpm to v9.2.0 (#1188) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a8b56ec96..272038e40 100644 --- a/package.json +++ b/package.json @@ -153,7 +153,7 @@ "webpack-cli": "5.1.4", "webpack-merge": "5.10.0" }, - "packageManager": "pnpm@9.1.4", + "packageManager": "pnpm@9.2.0", "lint-staged": { "*.{html,js,json,md,ts,tsx}": "biome format --write" } From 7d16d3dc27d650b811330a0cd1fc515f6cc59867 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 5 Jun 2024 22:30:37 -0400 Subject: [PATCH 166/251] chore(deps): update dependency tailwindcss to v3.4.4 (#1187) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 272038e40..dc5b55e33 100644 --- a/package.json +++ b/package.json @@ -146,7 +146,7 @@ "postcss-loader": "8.1.1", "rimraf": "5.0.7", "style-loader": "4.0.0", - "tailwindcss": "3.4.3", + "tailwindcss": "3.4.4", "ts-jest": "29.1.4", "ts-node": "10.9.2", "webpack": "5.91.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 06969699c..8d6797595 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -121,8 +121,8 @@ importers: specifier: 4.0.0 version: 4.0.0(webpack@5.91.0(webpack-cli@5.1.4)) tailwindcss: - specifier: 3.4.3 - version: 3.4.3(ts-node@10.9.2(@types/node@20.14.2)(typescript@5.4.5)) + specifier: 3.4.4 + version: 3.4.4(ts-node@10.9.2(@types/node@20.14.2)(typescript@5.4.5)) ts-jest: specifier: 29.1.4 version: 29.1.4(@babel/core@7.24.3)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@20.14.2)(ts-node@10.9.2(@types/node@20.14.2)(typescript@5.4.5)))(typescript@5.4.5) @@ -2825,8 +2825,8 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - tailwindcss@3.4.3: - resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==} + tailwindcss@3.4.4: + resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==} engines: {node: '>=14.0.0'} hasBin: true @@ -6295,7 +6295,7 @@ snapshots: symbol-tree@3.2.4: {} - tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.2)(typescript@5.4.5)): + tailwindcss@3.4.4(ts-node@10.9.2(@types/node@20.14.2)(typescript@5.4.5)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 From da438f88d21820c5c3f6dcc5342a0dac7d38225c Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Wed, 5 Jun 2024 22:47:54 -0400 Subject: [PATCH 167/251] test: fix account settings test --- src/routes/Settings.test.tsx | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/routes/Settings.test.tsx b/src/routes/Settings.test.tsx index 2f42d5ff8..a254d8bb6 100644 --- a/src/routes/Settings.test.tsx +++ b/src/routes/Settings.test.tsx @@ -503,19 +503,22 @@ describe('routes/Settings.tsx', () => { ); }); - it('should open account management', () => { - render( - - - - - , - ); + it('should open account management', async () => { + await act(async () => { + render( + + + + + , + ); + }); + fireEvent.click(screen.getByTitle('Accounts')); expect(mockNavigate).toHaveBeenCalledWith('/accounts'); }); From 39a7c3be01fde14cbfa79fc7ebcec617a3b54740 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Wed, 5 Jun 2024 23:05:10 -0400 Subject: [PATCH 168/251] build: changelog template --- .github/release.yml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .github/release.yml diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 000000000..5f54b3fdb --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,31 @@ +changelog: + exclude: + labels: + - ignore-for-release + authors: + - octocat + categories: + - title: 🚀 Features + labels: + - enhancement + - title: 🐛 Bug Fixes + labels: + - bug + - title: 🧼 Code Refactoring + labels: + - refactor + - title: 📚 Documentation + labels: + - documentation + - title: 🧪 Testing + labels: + - test + - title: 🏗️ Build System + labels: + - build + - title: 📦 Dependency Updates + labels: + - build + - title: Other Changes + labels: + - "*" \ No newline at end of file From 6107a17e90c6fb54df7160ff8955a4658fd9c07a Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Wed, 5 Jun 2024 23:09:40 -0400 Subject: [PATCH 169/251] build: prepare v5.7.0 release (#1191) * 5.7.0 * build: prepare v5.7.0 release --- .github/workflows/release.yml | 34 +--------------------------------- package.json | 2 +- 2 files changed, 2 insertions(+), 34 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 81dc821e2..9f844be31 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -86,36 +86,4 @@ jobs: with: name: Gitify-release-linux path: dist/ - overwrite: true - -changelog: - exclude: - labels: - - ignore-for-release - authors: - - octocat - categories: - - title: 🚀 Features - labels: - - enhancement - - title: 🐛 Bug Fixes - labels: - - bug - - title: 🧼 Code Refactoring - labels: - - refactor - - title: 📚 Documentation - labels: - - documentation - - title: 🧪 Testing - labels: - - test - - title: 🏗️ Build System - labels: - - build - - title: 📦 Dependency Updates - labels: - - build - - title: Other Changes - labels: - - "*" + overwrite: true \ No newline at end of file diff --git a/package.json b/package.json index dc5b55e33..f889f68cf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gitify", - "version": "5.6.0", + "version": "5.7.0", "description": "GitHub Notifications on your menu bar.", "main": "main.js", "scripts": { From 613fc9cfb6210c5a2a684a5adcf5f5fc33d2e237 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Wed, 5 Jun 2024 23:19:06 -0400 Subject: [PATCH 170/251] build: update issue template versions --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 2de211e58..b26602893 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -38,6 +38,7 @@ body: label: Gitify Version description: What version of Gitify are you using? options: + - 5.7.0 - 5.6.0 - 5.5.0 - 5.4.0 From bcaac3dda5b308df36c8a58b5423b84f73b4ee2e Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Thu, 6 Jun 2024 07:55:25 -0400 Subject: [PATCH 171/251] docs: update press image --- assets/images/press.png | Bin 439809 -> 455913 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/images/press.png b/assets/images/press.png index 12a86b184e18bf3d8e8e7c4f219f48ff7c6a68d2..e416040cedfbf8552ab672d07a2584703a42e411 100644 GIT binary patch literal 455913 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

KeFY>BsACWl%6Aj9TztW~(kc&Ih!6Fns2DqX> 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®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

i>Ymw&1Juzl9HKQCs<@>7I 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 rXDkelFyUJyuCvM*;K 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 &>f*aY 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

gZ^V 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 mh}qN%6kl99MFE87A^pPN(;Au!FM+xY80g&7uD Date: Thu, 6 Jun 2024 14:11:36 -0400 Subject: [PATCH 172/251] refactor: use gitify state (#1189) refactor: use state --- src/__mocks__/state-mocks.ts | 6 + src/context/App.test.tsx | 33 +- src/context/App.tsx | 16 +- src/hooks/useNotifications.test.ts | 1075 ++++++++++------------------ src/hooks/useNotifications.ts | 85 +-- src/utils/notifications.test.ts | 25 +- src/utils/notifications.ts | 43 +- 7 files changed, 464 insertions(+), 819 deletions(-) diff --git a/src/__mocks__/state-mocks.ts b/src/__mocks__/state-mocks.ts index 1a1fd0553..e8828d638 100644 --- a/src/__mocks__/state-mocks.ts +++ b/src/__mocks__/state-mocks.ts @@ -1,6 +1,7 @@ import { type Account, type AuthState, + type GitifyState, type GitifyUser, type SettingsState, Theme, @@ -81,3 +82,8 @@ export const mockSettings: SettingsState = { delayNotificationState: false, showPills: true, }; + +export const mockState: GitifyState = { + auth: mockAuth, + settings: mockSettings, +}; diff --git a/src/context/App.test.tsx b/src/context/App.test.tsx index 8d20babc1..5773b80e5 100644 --- a/src/context/App.test.tsx +++ b/src/context/App.test.tsx @@ -48,6 +48,11 @@ describe('context/App.tsx', () => { const markRepoNotificationsMock = jest.fn(); const markRepoNotificationsDoneMock = jest.fn(); + const mockDefaultState = { + auth: { accounts: [], enterpriseAccounts: [], token: null, user: null }, + settings: mockSettings, + }; + beforeEach(() => { (useNotifications as jest.Mock).mockReturnValue({ fetchNotifications: fetchNotificationsMock, @@ -131,13 +136,7 @@ describe('context/App.tsx', () => { expect(markNotificationReadMock).toHaveBeenCalledTimes(1); expect(markNotificationReadMock).toHaveBeenCalledWith( - { - accounts: [], - enterpriseAccounts: [], - token: null, - user: null, - }, - mockSettings, + mockDefaultState, '123-456', 'github.com', ); @@ -165,8 +164,7 @@ describe('context/App.tsx', () => { expect(markNotificationDoneMock).toHaveBeenCalledTimes(1); expect(markNotificationDoneMock).toHaveBeenCalledWith( - { accounts: [], enterpriseAccounts: [], token: null, user: null }, - mockSettings, + mockDefaultState, '123-456', 'github.com', ); @@ -194,8 +192,7 @@ describe('context/App.tsx', () => { expect(unsubscribeNotificationMock).toHaveBeenCalledTimes(1); expect(unsubscribeNotificationMock).toHaveBeenCalledWith( - { accounts: [], enterpriseAccounts: [], token: null, user: null }, - mockSettings, + mockDefaultState, '123-456', 'github.com', ); @@ -228,8 +225,7 @@ describe('context/App.tsx', () => { expect(markRepoNotificationsMock).toHaveBeenCalledTimes(1); expect(markRepoNotificationsMock).toHaveBeenCalledWith( - { accounts: [], enterpriseAccounts: [], token: null, user: null }, - mockSettings, + mockDefaultState, 'gitify-app/notifications-test', 'github.com', ); @@ -262,8 +258,15 @@ describe('context/App.tsx', () => { expect(markRepoNotificationsDoneMock).toHaveBeenCalledTimes(1); expect(markRepoNotificationsDoneMock).toHaveBeenCalledWith( - { accounts: [], enterpriseAccounts: [], token: null, user: null }, - mockSettings, + { + auth: { + accounts: [], + enterpriseAccounts: [], + token: null, + user: null, + }, + settings: mockSettings, + }, 'gitify-app/notifications-test', 'github.com', ); diff --git a/src/context/App.tsx b/src/context/App.tsx index e9384e75f..6f138eaed 100644 --- a/src/context/App.tsx +++ b/src/context/App.tsx @@ -117,7 +117,7 @@ export const AppProvider = ({ children }: { children: ReactNode }) => { // biome-ignore lint/correctness/useExhaustiveDependencies: We only want fetchNotifications to be called for certain account or setting changes. useEffect(() => { - fetchNotifications(auth, settings); + fetchNotifications({ auth, settings }); }, [ settings.participating, settings.showBots, @@ -126,7 +126,7 @@ export const AppProvider = ({ children }: { children: ReactNode }) => { ]); useInterval(() => { - fetchNotifications(auth, settings); + fetchNotifications({ auth, settings }); }, Constants.FETCH_INTERVAL); // biome-ignore lint/correctness/useExhaustiveDependencies: We need to update tray title when settings or notifications changes. @@ -226,37 +226,37 @@ export const AppProvider = ({ children }: { children: ReactNode }) => { }, []); const fetchNotificationsWithAccounts = useCallback( - async () => await fetchNotifications(auth, settings), + async () => await fetchNotifications({ auth, settings }), [auth, settings, notifications], ); const markNotificationReadWithAccounts = useCallback( async (id: string, hostname: string) => - await markNotificationRead(auth, settings, id, hostname), + await markNotificationRead({ auth, settings }, id, hostname), [auth, notifications], ); const markNotificationDoneWithAccounts = useCallback( async (id: string, hostname: string) => - await markNotificationDone(auth, settings, id, hostname), + await markNotificationDone({ auth, settings }, id, hostname), [auth, notifications], ); const unsubscribeNotificationWithAccounts = useCallback( async (id: string, hostname: string) => - await unsubscribeNotification(auth, settings, id, hostname), + await unsubscribeNotification({ auth, settings }, id, hostname), [auth, notifications], ); const markRepoNotificationsWithAccounts = useCallback( async (repoSlug: string, hostname: string) => - await markRepoNotifications(auth, settings, repoSlug, hostname), + await markRepoNotifications({ auth, settings }, repoSlug, hostname), [auth, notifications], ); const markRepoNotificationsDoneWithAccounts = useCallback( async (repoSlug: string, hostname: string) => - await markRepoNotificationsDone(auth, settings, repoSlug, hostname), + await markRepoNotificationsDone({ auth, settings }, repoSlug, hostname), [auth, notifications], ); diff --git a/src/hooks/useNotifications.test.ts b/src/hooks/useNotifications.test.ts index cf33a3b79..049732824 100644 --- a/src/hooks/useNotifications.test.ts +++ b/src/hooks/useNotifications.test.ts @@ -6,6 +6,7 @@ import { mockAuth, mockGitHubCloudAccount, mockSettings, + mockState, } from '../__mocks__/state-mocks'; import { mockNotificationUser } from '../utils/api/__mocks__/response-mocks'; import { Errors } from '../utils/constants'; @@ -19,274 +20,275 @@ describe('hooks/useNotifications.ts', () => { }); describe('fetchNotifications', () => { - describe('github.com & enterprise', () => { - it('should fetch notifications with success - github.com & enterprise', async () => { - const notifications = [ - { id: 1, title: 'This is a notification.' }, - { id: 2, title: 'This is another one.' }, - ]; - - nock('https://api.github.com') - .get('/notifications?participating=false') - .reply(200, notifications); - - nock('https://github.gitify.io/api/v3') - .get('/notifications?participating=false') - .reply(200, notifications); - - const { result } = renderHook(() => useNotifications()); + it('should fetch non-detailed notifications with success', async () => { + const mockState = { + auth: mockAuth, + settings: { + ...mockSettings, + detailedNotifications: false, + }, + }; - act(() => { - result.current.fetchNotifications(mockAuth, { - ...mockSettings, - detailedNotifications: false, - }); - }); + const notifications = [ + { id: 1, title: 'This is a notification.' }, + { id: 2, title: 'This is another one.' }, + ]; - expect(result.current.status).toBe('loading'); + nock('https://api.github.com') + .get('/notifications?participating=false') + .reply(200, notifications); - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); + nock('https://github.gitify.io/api/v3') + .get('/notifications?participating=false') + .reply(200, notifications); - expect(result.current.notifications[0].account.hostname).toBe( - 'github.com', - ); - expect(result.current.notifications[0].notifications.length).toBe(2); + const { result } = renderHook(() => useNotifications()); - expect(result.current.notifications[1].account.hostname).toBe( - 'github.gitify.io', - ); - expect(result.current.notifications[1].notifications.length).toBe(2); + act(() => { + result.current.fetchNotifications(mockState); }); - it('should fetch notifications with failures - github.com & enterprise', async () => { - const code = AxiosError.ERR_BAD_REQUEST; - const status = 400; - const message = 'Oops! Something went wrong.'; - - nock('https://api.github.com/') - .get('/notifications?participating=false') - .replyWithError({ - code, - response: { - status, - data: { - message, - }, - }, - }); - - nock('https://github.gitify.io/api/v3/') - .get('/notifications?participating=false') - .replyWithError({ - code, - response: { - status, - data: { - message, - }, - }, - }); - - const { result } = renderHook(() => useNotifications()); + expect(result.current.status).toBe('loading'); - act(() => { - result.current.fetchNotifications(mockAuth, mockSettings); - }); - - expect(result.current.status).toBe('loading'); + await waitFor(() => { + expect(result.current.status).toBe('success'); + }); - await waitFor(() => { - expect(result.current.status).toBe('error'); - }); + expect(result.current.notifications[0].account.hostname).toBe( + 'github.com', + ); + expect(result.current.notifications[0].notifications.length).toBe(2); - expect(result.current.errorDetails).toBe(Errors.UNKNOWN); - }); + expect(result.current.notifications[1].account.hostname).toBe( + 'github.gitify.io', + ); + expect(result.current.notifications[1].notifications.length).toBe(2); }); - describe('with detailed notifications', () => { - it('should fetch notifications with success', async () => { - const notifications = [ - { - id: 1, - subject: { - title: 'This is a check suite workflow.', - type: 'CheckSuite', - url: null, - latest_comment_url: null, - }, - repository: { - full_name: 'gitify-app/notifications-test', - }, + it('should fetch detailed notifications with success', async () => { + const mockNotifications = [ + { + id: 1, + subject: { + title: 'This is a check suite workflow.', + type: 'CheckSuite', + url: null, + latest_comment_url: null, }, - { - id: 2, - subject: { - title: 'This is a Discussion.', - type: 'Discussion', - url: null, - latest_comment_url: null, - }, - repository: { - full_name: 'gitify-app/notifications-test', - }, - updated_at: '2024-02-26T00:00:00Z', + repository: { + full_name: 'gitify-app/notifications-test', }, - { - id: 3, - subject: { - title: 'This is an Issue.', - type: 'Issue', - url: 'https://api.github.com/repos/gitify-app/notifications-test/issues/3', - latest_comment_url: - 'https://api.github.com/repos/gitify-app/notifications-test/issues/3/comments', - }, - repository: { - full_name: 'gitify-app/notifications-test', - }, + }, + { + id: 2, + subject: { + title: 'This is a Discussion.', + type: 'Discussion', + url: null, + latest_comment_url: null, }, - { - id: 4, - subject: { - title: 'This is a Pull Request.', - type: 'PullRequest', - url: 'https://api.github.com/repos/gitify-app/notifications-test/pulls/4', - latest_comment_url: - 'https://api.github.com/repos/gitify-app/notifications-test/issues/4/comments', - }, - repository: { - full_name: 'gitify-app/notifications-test', - }, + repository: { + full_name: 'gitify-app/notifications-test', }, - { - id: 5, - subject: { - title: 'This is an invitation.', - type: 'RepositoryInvitation', - url: null, - latest_comment_url: null, - }, - repository: { - full_name: 'gitify-app/notifications-test', - }, + updated_at: '2024-02-26T00:00:00Z', + }, + { + id: 3, + subject: { + title: 'This is an Issue.', + type: 'Issue', + url: 'https://api.github.com/repos/gitify-app/notifications-test/issues/3', + latest_comment_url: + 'https://api.github.com/repos/gitify-app/notifications-test/issues/3/comments', }, - { - id: 6, - subject: { - title: 'This is a workflow run.', - type: 'WorkflowRun', - url: null, - latest_comment_url: null, - }, - repository: { - full_name: 'gitify-app/notifications-test', - }, + repository: { + full_name: 'gitify-app/notifications-test', + }, + }, + { + id: 4, + subject: { + title: 'This is a Pull Request.', + type: 'PullRequest', + url: 'https://api.github.com/repos/gitify-app/notifications-test/pulls/4', + latest_comment_url: + 'https://api.github.com/repos/gitify-app/notifications-test/issues/4/comments', + }, + repository: { + full_name: 'gitify-app/notifications-test', + }, + }, + { + id: 5, + subject: { + title: 'This is an invitation.', + type: 'RepositoryInvitation', + url: null, + latest_comment_url: null, + }, + repository: { + full_name: 'gitify-app/notifications-test', + }, + }, + { + id: 6, + subject: { + title: 'This is a workflow run.', + type: 'WorkflowRun', + url: null, + latest_comment_url: null, }, - ]; + repository: { + full_name: 'gitify-app/notifications-test', + }, + }, + ]; - nock('https://api.github.com') - .get('/notifications?participating=false') - .reply(200, notifications); + nock('https://api.github.com') + .get('/notifications?participating=false') + .reply(200, mockNotifications); - nock('https://api.github.com') - .post('/graphql') - .reply(200, { - data: { - search: { - nodes: [ - { - title: 'This is a Discussion.', - stateReason: null, - isAnswered: true, - url: 'https://github.com/gitify-app/notifications-test/discussions/612', - author: { - login: 'discussion-creator', - url: 'https://github.com/discussion-creator', - avatar_url: - 'https://avatars.githubusercontent.com/u/133795385?s=200&v=4', - type: 'User', - }, - comments: { - nodes: [ - { - databaseId: 2297637, - createdAt: '2022-03-04T20:39:44Z', - author: { - login: 'comment-user', - url: 'https://github.com/comment-user', - avatar_url: - 'https://avatars.githubusercontent.com/u/1?v=4', - type: 'User', - }, - replies: { - nodes: [], - }, + nock('https://api.github.com') + .post('/graphql') + .reply(200, { + data: { + search: { + nodes: [ + { + title: 'This is a Discussion.', + stateReason: null, + isAnswered: true, + url: 'https://github.com/gitify-app/notifications-test/discussions/612', + author: { + login: 'discussion-creator', + url: 'https://github.com/discussion-creator', + avatar_url: + 'https://avatars.githubusercontent.com/u/133795385?s=200&v=4', + type: 'User', + }, + comments: { + nodes: [ + { + databaseId: 2297637, + createdAt: '2022-03-04T20:39:44Z', + author: { + login: 'comment-user', + url: 'https://github.com/comment-user', + avatar_url: + 'https://avatars.githubusercontent.com/u/1?v=4', + type: 'User', + }, + replies: { + nodes: [], }, - ], - }, - labels: null, + }, + ], }, - ], - }, + labels: null, + }, + ], }, - }); - - nock('https://api.github.com') - .get('/repos/gitify-app/notifications-test/issues/3') - .reply(200, { - state: 'closed', - merged: true, - user: mockNotificationUser, - labels: [], - }); - nock('https://api.github.com') - .get('/repos/gitify-app/notifications-test/issues/3/comments') - .reply(200, { - user: mockNotificationUser, - }); - nock('https://api.github.com') - .get('/repos/gitify-app/notifications-test/pulls/4') - .reply(200, { - state: 'closed', - merged: false, - user: mockNotificationUser, - labels: [], - }); - nock('https://api.github.com') - .get('/repos/gitify-app/notifications-test/pulls/4/reviews') - .reply(200, {}); - nock('https://api.github.com') - .get('/repos/gitify-app/notifications-test/issues/4/comments') - .reply(200, { - user: mockNotificationUser, - }); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.fetchNotifications( - { - accounts: [mockGitHubCloudAccount], + }, + }); + + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/issues/3') + .reply(200, { + state: 'closed', + merged: true, + user: mockNotificationUser, + labels: [], + }); + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/issues/3/comments') + .reply(200, { + user: mockNotificationUser, + }); + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/pulls/4') + .reply(200, { + state: 'closed', + merged: false, + user: mockNotificationUser, + labels: [], + }); + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/pulls/4/reviews') + .reply(200, {}); + nock('https://api.github.com') + .get('/repos/gitify-app/notifications-test/issues/4/comments') + .reply(200, { + user: mockNotificationUser, + }); + + const { result } = renderHook(() => useNotifications()); + + act(() => { + result.current.fetchNotifications({ + auth: { + accounts: [mockGitHubCloudAccount], + }, + settings: { + ...mockSettings, + detailedNotifications: true, + }, + }); + }); + + expect(result.current.status).toBe('loading'); + + await waitFor(() => { + expect(result.current.status).toBe('success'); + }); + + expect(result.current.notifications[0].account.hostname).toBe( + 'github.com', + ); + expect(result.current.notifications[0].notifications.length).toBe(6); + }); + + it('should fetch notifications with failures', async () => { + const code = AxiosError.ERR_BAD_REQUEST; + const status = 400; + const message = 'Oops! Something went wrong.'; + + nock('https://api.github.com/') + .get('/notifications?participating=false') + .replyWithError({ + code, + response: { + status, + data: { + message, }, - { - ...mockSettings, - detailedNotifications: true, + }, + }); + + nock('https://github.gitify.io/api/v3/') + .get('/notifications?participating=false') + .replyWithError({ + code, + response: { + status, + data: { + message, }, - ); + }, }); - expect(result.current.status).toBe('loading'); + const { result } = renderHook(() => useNotifications()); - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); + act(() => { + result.current.fetchNotifications(mockState); + }); - expect(result.current.notifications[0].account.hostname).toBe( - 'github.com', - ); - expect(result.current.notifications[0].notifications.length).toBe(6); + expect(result.current.status).toBe('loading'); + + await waitFor(() => { + expect(result.current.status).toBe('error'); }); + + expect(result.current.errorDetails).toBe(Errors.UNKNOWN); }); }); @@ -308,9 +310,9 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.fetchNotifications(mockAuth, { - ...mockSettings, - detailedNotifications: false, + result.current.fetchNotifications({ + ...mockState, + settings: { ...mockSettings, detailedNotifications: false }, }); }); @@ -331,557 +333,220 @@ describe('hooks/useNotifications.ts', () => { }); describe('markNotificationRead', () => { + const hostname = 'github.com'; const id = 'notification-123'; - describe('github.com', () => { - const accounts = { ...mockAuth, enterpriseAccounts: [] }; - const hostname = 'github.com'; + it('should mark a notification as read with success', async () => { + nock('https://api.github.com/') + .patch(`/notifications/threads/${id}`) + .reply(200); - it('should mark a notification as read with success - github.com', async () => { - nock('https://api.github.com/') - .patch(`/notifications/threads/${id}`) - .reply(200); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.markNotificationRead( - accounts, - mockSettings, - id, - hostname, - ); - }); - - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); + const { result } = renderHook(() => useNotifications()); - expect(result.current.notifications.length).toBe(0); + act(() => { + result.current.markNotificationRead(mockState, id, hostname); }); - it('should mark a notification as read with failure - github.com', async () => { - nock('https://api.github.com/') - .patch(`/notifications/threads/${id}`) - .reply(400); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.markNotificationRead( - accounts, - mockSettings, - id, - hostname, - ); - }); - - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); - - expect(result.current.notifications.length).toBe(0); + await waitFor(() => { + expect(result.current.status).toBe('success'); }); - }); - describe('enterprise', () => { - const accounts = { ...mockAuth, token: null }; - const hostname = 'github.gitify.io'; - - it('should mark a notification as read with success - enterprise', async () => { - nock('https://github.gitify.io/api/v3') - .patch(`/notifications/threads/${id}`) - .reply(200); - - const { result } = renderHook(() => useNotifications()); + expect(result.current.notifications.length).toBe(0); + }); - act(() => { - result.current.markNotificationRead( - accounts, - mockSettings, - id, - hostname, - ); - }); + it('should mark a notification as read with failure', async () => { + nock('https://api.github.com/') + .patch(`/notifications/threads/${id}`) + .reply(400); - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); + const { result } = renderHook(() => useNotifications()); - expect(result.current.notifications.length).toBe(0); + act(() => { + result.current.markNotificationRead(mockState, id, hostname); }); - it('should mark a notification as read with failure - enterprise', async () => { - nock('https://github.gitify.io/api/v3') - .patch(`/notifications/threads/${id}`) - .reply(400); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.markNotificationRead( - accounts, - mockSettings, - id, - hostname, - ); - }); - - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); - - expect(result.current.notifications.length).toBe(0); + await waitFor(() => { + expect(result.current.status).toBe('success'); }); + + expect(result.current.notifications.length).toBe(0); }); }); describe('markNotificationDone', () => { + const hostname = 'github.com'; const id = 'notification-123'; - describe('github.com', () => { - const accounts = { ...mockAuth, enterpriseAccounts: [] }; - const hostname = 'github.com'; + it('should mark a notification as done with success', async () => { + nock('https://api.github.com/') + .delete(`/notifications/threads/${id}`) + .reply(200); - it('should mark a notification as done with success - github.com', async () => { - nock('https://api.github.com/') - .delete(`/notifications/threads/${id}`) - .reply(200); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.markNotificationDone( - accounts, - mockSettings, - id, - hostname, - ); - }); - - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); + const { result } = renderHook(() => useNotifications()); - expect(result.current.notifications.length).toBe(0); + act(() => { + result.current.markNotificationDone(mockState, id, hostname); }); - it('should mark a notification as done with failure - github.com', async () => { - nock('https://api.github.com/') - .delete(`/notifications/threads/${id}`) - .reply(400); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.markNotificationDone( - accounts, - mockSettings, - id, - hostname, - ); - }); - - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); - - expect(result.current.notifications.length).toBe(0); + await waitFor(() => { + expect(result.current.status).toBe('success'); }); - }); - describe('enterprise', () => { - const accounts = { ...mockAuth, token: null }; - const hostname = 'github.gitify.io'; - - it('should mark a notification as done with success - enterprise', async () => { - nock('https://github.gitify.io/api/v3') - .delete(`/notifications/threads/${id}`) - .reply(200); - - const { result } = renderHook(() => useNotifications()); + expect(result.current.notifications.length).toBe(0); + }); - act(() => { - result.current.markNotificationDone( - accounts, - mockSettings, - id, - hostname, - ); - }); + it('should mark a notification as done with failure', async () => { + nock('https://api.github.com/') + .delete(`/notifications/threads/${id}`) + .reply(400); - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); + const { result } = renderHook(() => useNotifications()); - expect(result.current.notifications.length).toBe(0); + act(() => { + result.current.markNotificationDone(mockState, id, hostname); }); - it('should mark a notification as done with failure - enterprise', async () => { - nock('https://github.gitify.io/api/v3') - .delete(`/notifications/threads/${id}`) - .reply(400); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.markNotificationDone( - accounts, - mockSettings, - id, - hostname, - ); - }); - - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); - - expect(result.current.notifications.length).toBe(0); + await waitFor(() => { + expect(result.current.status).toBe('success'); }); + + expect(result.current.notifications.length).toBe(0); }); }); describe('unsubscribeNotification', () => { + const hostname = 'github.com'; const id = 'notification-123'; - describe('github.com', () => { - const accounts = { ...mockAuth, enterpriseAccounts: [] }; - const hostname = 'github.com'; - - it('should unsubscribe from a notification with success - github.com', async () => { - // The unsubscribe endpoint call. - nock('https://api.github.com/') - .put(`/notifications/threads/${id}/subscription`) - .reply(200); - - // The mark read endpoint call. - nock('https://api.github.com/') - .patch(`/notifications/threads/${id}`) - .reply(200); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.unsubscribeNotification( - accounts, - mockSettings, - id, - hostname, - ); - }); - - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); + it('should unsubscribe from a notification with success', async () => { + // The unsubscribe endpoint call. + nock('https://api.github.com/') + .put(`/notifications/threads/${id}/subscription`) + .reply(200); - expect(result.current.notifications.length).toBe(0); - }); + // The mark read endpoint call. + nock('https://api.github.com/') + .patch(`/notifications/threads/${id}`) + .reply(200); - it('should unsubscribe from a notification with failure - github.com', async () => { - // The unsubscribe endpoint call. - nock('https://api.github.com/') - .put(`/notifications/threads/${id}/subscription`) - .reply(400); - - // The mark read endpoint call. - nock('https://api.github.com/') - .patch(`/notifications/threads/${id}`) - .reply(400); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.unsubscribeNotification( - accounts, - mockSettings, - id, - hostname, - ); - }); + const { result } = renderHook(() => useNotifications()); - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); + act(() => { + result.current.unsubscribeNotification(mockState, id, hostname); + }); - expect(result.current.notifications.length).toBe(0); + await waitFor(() => { + expect(result.current.status).toBe('success'); }); - }); - describe('enterprise', () => { - const accounts = { ...mockAuth, token: null }; - const hostname = 'github.gitify.io'; - - it('should unsubscribe from a notification with success - enterprise', async () => { - // The unsubscribe endpoint call. - nock('https://github.gitify.io/api/v3') - .put(`/notifications/threads/${id}/subscription`) - .reply(200); - - // The mark read endpoint call. - nock('https://github.gitify.io/api/v3') - .patch(`/notifications/threads/${id}`) - .reply(200); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.unsubscribeNotification( - accounts, - mockSettings, - id, - hostname, - ); - }); + expect(result.current.notifications.length).toBe(0); + }); - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); + it('should unsubscribe from a notification with failure', async () => { + // The unsubscribe endpoint call. + nock('https://api.github.com/') + .put(`/notifications/threads/${id}/subscription`) + .reply(400); - expect(result.current.notifications.length).toBe(0); - }); + // The mark read endpoint call. + nock('https://api.github.com/') + .patch(`/notifications/threads/${id}`) + .reply(400); - it('should unsubscribe from a notification with failure - enterprise', async () => { - // The unsubscribe endpoint call. - nock('https://github.gitify.io/api/v3') - .put(`/notifications/threads/${id}/subscription`) - .reply(400); - - // The mark read endpoint call. - nock('https://github.gitify.io/api/v3') - .patch(`/notifications/threads/${id}`) - .reply(400); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.unsubscribeNotification( - accounts, - mockSettings, - id, - hostname, - ); - }); + const { result } = renderHook(() => useNotifications()); - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); + act(() => { + result.current.unsubscribeNotification(mockState, id, hostname); + }); - expect(result.current.notifications.length).toBe(0); + await waitFor(() => { + expect(result.current.status).toBe('success'); }); + + expect(result.current.notifications.length).toBe(0); }); }); describe('markRepoNotifications', () => { + const hostname = 'github.com'; const repoSlug = 'gitify-app/notifications-test'; - describe('github.com', () => { - const accounts = { ...mockAuth, enterpriseAccounts: [] }; - const hostname = 'github.com'; + it("should mark a repository's notifications as read with success", async () => { + nock('https://api.github.com/') + .put(`/repos/${repoSlug}/notifications`) + .reply(200); - it("should mark a repository's notifications as read with success - github.com", async () => { - nock('https://api.github.com/') - .put(`/repos/${repoSlug}/notifications`) - .reply(200); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.markRepoNotifications( - accounts, - mockSettings, - repoSlug, - hostname, - ); - }); - - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); + const { result } = renderHook(() => useNotifications()); - expect(result.current.notifications.length).toBe(0); + act(() => { + result.current.markRepoNotifications(mockState, repoSlug, hostname); }); - it("should mark a repository's notifications as read with failure - github.com", async () => { - nock('https://api.github.com/') - .put(`/repos/${repoSlug}/notifications`) - .reply(400); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.markRepoNotifications( - accounts, - mockSettings, - repoSlug, - hostname, - ); - }); - - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); - - expect(result.current.notifications.length).toBe(0); + await waitFor(() => { + expect(result.current.status).toBe('success'); }); - }); - describe('enterprise', () => { - const accounts = { ...mockAuth, token: null }; - const hostname = 'github.gitify.io'; - - it("should mark a repository's notifications as read with success - enterprise", async () => { - nock('https://github.gitify.io/api/v3') - .put(`/repos/${repoSlug}/notifications`) - .reply(200); - - const { result } = renderHook(() => useNotifications()); + expect(result.current.notifications.length).toBe(0); + }); - act(() => { - result.current.markRepoNotifications( - accounts, - mockSettings, - repoSlug, - hostname, - ); - }); + it("should mark a repository's notifications as read with failure", async () => { + nock('https://api.github.com/') + .put(`/repos/${repoSlug}/notifications`) + .reply(400); - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); + const { result } = renderHook(() => useNotifications()); - expect(result.current.notifications.length).toBe(0); + act(() => { + result.current.markRepoNotifications(mockState, repoSlug, hostname); }); - it("should mark a repository's notifications as read with failure - enterprise", async () => { - nock('https://github.gitify.io/api/v3') - .put(`/repos/${repoSlug}/notifications`) - .reply(400); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.markRepoNotifications( - accounts, - mockSettings, - repoSlug, - hostname, - ); - }); - - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); - - expect(result.current.notifications.length).toBe(0); + await waitFor(() => { + expect(result.current.status).toBe('success'); }); + + expect(result.current.notifications.length).toBe(0); }); }); describe('markRepoNotificationsDone', () => { + const hostname = 'github.com'; const repoSlug = 'gitify-app/notifications-test'; const id = 'notification-123'; - describe('github.com', () => { - const accounts = { ...mockAuth, enterpriseAccounts: [] }; - const hostname = 'github.com'; + it("should mark a repository's notifications as done with success", async () => { + nock('https://api.github.com/') + .delete(`/notifications/threads/${id}`) + .reply(200); - it("should mark a repository's notifications as done with success - github.com", async () => { - nock('https://api.github.com/') - .delete(`/notifications/threads/${id}`) - .reply(200); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.markRepoNotificationsDone( - accounts, - mockSettings, - repoSlug, - hostname, - ); - }); - - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); + const { result } = renderHook(() => useNotifications()); - expect(result.current.notifications.length).toBe(0); + act(() => { + result.current.markRepoNotificationsDone(mockState, repoSlug, hostname); }); - it("should mark a repository's notifications as done with failure - github.com", async () => { - nock('https://api.github.com/') - .delete(`/notifications/threads/${id}`) - .reply(400); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.markRepoNotificationsDone( - accounts, - mockSettings, - repoSlug, - hostname, - ); - }); - - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); - - expect(result.current.notifications.length).toBe(0); + await waitFor(() => { + expect(result.current.status).toBe('success'); }); - }); - describe('enterprise', () => { - const accounts = { ...mockAuth, token: null }; - const hostname = 'github.gitify.io'; - - it("should mark a repository's notifications as done with success - enterprise", async () => { - nock('https://github.gitify.io/api/v3') - .delete(`/notifications/threads/${id}`) - .reply(200); - - const { result } = renderHook(() => useNotifications()); + expect(result.current.notifications.length).toBe(0); + }); - act(() => { - result.current.markRepoNotificationsDone( - accounts, - mockSettings, - repoSlug, - hostname, - ); - }); + it("should mark a repository's notifications as done with failure", async () => { + nock('https://api.github.com/') + .delete(`/notifications/threads/${id}`) + .reply(400); - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); + const { result } = renderHook(() => useNotifications()); - expect(result.current.notifications.length).toBe(0); + act(() => { + result.current.markRepoNotificationsDone(mockState, repoSlug, hostname); }); - it("should mark a repository's notifications as done with failure - enterprise", async () => { - nock('https://github.gitify.io/api/v3') - .delete(`/notifications/threads/${id}`) - .reply(400); - - const { result } = renderHook(() => useNotifications()); - - act(() => { - result.current.markRepoNotificationsDone( - accounts, - mockSettings, - repoSlug, - hostname, - ); - }); - - await waitFor(() => { - expect(result.current.status).toBe('success'); - }); - - expect(result.current.notifications.length).toBe(0); + await waitFor(() => { + expect(result.current.status).toBe('success'); }); + + expect(result.current.notifications.length).toBe(0); }); }); }); diff --git a/src/hooks/useNotifications.ts b/src/hooks/useNotifications.ts index 337ffc2ba..7dd93dff4 100644 --- a/src/hooks/useNotifications.ts +++ b/src/hooks/useNotifications.ts @@ -1,8 +1,8 @@ import { useCallback, useState } from 'react'; import type { AccountNotifications, - AuthState, GitifyError, + GitifyState, SettingsState, Status, } from '../types'; @@ -29,37 +29,29 @@ interface NotificationsState { id: string, hostname: string, ) => void; - fetchNotifications: ( - auth: AuthState, - settings: SettingsState, - ) => Promise; + fetchNotifications: (state: GitifyState) => Promise; markNotificationRead: ( - auth: AuthState, - settings: SettingsState, + state: GitifyState, id: string, hostname: string, ) => Promise; markNotificationDone: ( - auth: AuthState, - settings: SettingsState, + state: GitifyState, id: string, hostname: string, ) => Promise; unsubscribeNotification: ( - auth: AuthState, - settings: SettingsState, + state: GitifyState, id: string, hostname: string, ) => Promise; markRepoNotifications: ( - auth: AuthState, - settings: SettingsState, + state: GitifyState, repoSlug: string, hostname: string, ) => Promise; markRepoNotificationsDone: ( - auth: AuthState, - settings: SettingsState, + state: GitifyState, repoSlug: string, hostname: string, ) => Promise; @@ -76,19 +68,14 @@ export const useNotifications = (): NotificationsState => { ); const fetchNotifications = useCallback( - async (auth: AuthState, settings: SettingsState) => { + async (state: GitifyState) => { setStatus('loading'); try { - const fetchedNotifications = await getAllNotifications(auth, settings); + const fetchedNotifications = await getAllNotifications(state); setNotifications(fetchedNotifications); - triggerNativeNotifications( - notifications, - fetchedNotifications, - settings, - auth, - ); + triggerNativeNotifications(notifications, fetchedNotifications, state); setStatus('success'); } catch (err) { setStatus('error'); @@ -99,21 +86,16 @@ export const useNotifications = (): NotificationsState => { ); const markNotificationRead = useCallback( - async ( - auth: AuthState, - settings: SettingsState, - id: string, - hostname: string, - ) => { + async (state: GitifyState, id: string, hostname: string) => { setStatus('loading'); - const account = getAccountForHost(hostname, auth); + const account = getAccountForHost(hostname, state.auth); try { await markNotificationThreadAsRead(id, hostname, account.token); const updatedNotifications = removeNotification( - settings, + state.settings, id, notifications, hostname, @@ -130,21 +112,16 @@ export const useNotifications = (): NotificationsState => { ); const markNotificationDone = useCallback( - async ( - auth: AuthState, - settings: SettingsState, - id: string, - hostname: string, - ) => { + async (state: GitifyState, id: string, hostname: string) => { setStatus('loading'); - const account = getAccountForHost(hostname, auth); + const account = getAccountForHost(hostname, state.auth); try { await markNotificationThreadAsDone(id, hostname, account.token); const updatedNotifications = removeNotification( - settings, + state.settings, id, notifications, hostname, @@ -161,19 +138,14 @@ export const useNotifications = (): NotificationsState => { ); const unsubscribeNotification = useCallback( - async ( - auth: AuthState, - settings: SettingsState, - id: string, - hostname: string, - ) => { + async (state: GitifyState, id: string, hostname: string) => { setStatus('loading'); - const account = getAccountForHost(hostname, auth); + const account = getAccountForHost(hostname, state.auth); try { await ignoreNotificationThreadSubscription(id, hostname, account.token); - await markNotificationRead(auth, settings, id, hostname); + await markNotificationRead(state, id, hostname); setStatus('success'); } catch (err) { setStatus('success'); @@ -183,15 +155,10 @@ export const useNotifications = (): NotificationsState => { ); const markRepoNotifications = useCallback( - async ( - auth: AuthState, - settings: SettingsState, - repoSlug: string, - hostname: string, - ) => { + async (state: GitifyState, repoSlug: string, hostname: string) => { setStatus('loading'); - const account = getAccountForHost(hostname, auth); + const account = getAccountForHost(hostname, state.auth); try { await markRepositoryNotificationsAsRead( @@ -216,12 +183,7 @@ export const useNotifications = (): NotificationsState => { ); const markRepoNotificationsDone = useCallback( - async ( - auth: AuthState, - settings: SettingsState, - repoSlug: string, - hostname: string, - ) => { + async (state: GitifyState, repoSlug: string, hostname: string) => { setStatus('loading'); try { @@ -240,8 +202,7 @@ export const useNotifications = (): NotificationsState => { await Promise.all( notificationsToRemove.map((notification) => markNotificationDone( - auth, - settings, + state, notification.id, notifications[accountIndex].account.hostname, ), diff --git a/src/utils/notifications.test.ts b/src/utils/notifications.test.ts index ac22a3a62..128c22c65 100644 --- a/src/utils/notifications.test.ts +++ b/src/utils/notifications.test.ts @@ -31,8 +31,10 @@ describe('utils/notifications.ts', () => { notificationsHelpers.triggerNativeNotifications( [], mockAccountNotifications, - settings, - mockAuth, + { + auth: mockAuth, + settings, + }, ); expect(notificationsHelpers.raiseNativeNotification).toHaveBeenCalledTimes( @@ -56,8 +58,10 @@ describe('utils/notifications.ts', () => { notificationsHelpers.triggerNativeNotifications( [], mockAccountNotifications, - settings, - mockAuth, + { + auth: mockAuth, + settings, + }, ); expect(notificationsHelpers.raiseNativeNotification).not.toHaveBeenCalled(); @@ -77,8 +81,7 @@ describe('utils/notifications.ts', () => { notificationsHelpers.triggerNativeNotifications( mockSingleAccountNotifications, mockSingleAccountNotifications, - settings, - mockAuth, + { auth: mockAuth, settings }, ); expect(notificationsHelpers.raiseNativeNotification).not.toHaveBeenCalled(); @@ -95,8 +98,14 @@ describe('utils/notifications.ts', () => { jest.spyOn(notificationsHelpers, 'raiseNativeNotification'); jest.spyOn(notificationsHelpers, 'raiseSoundNotification'); - notificationsHelpers.triggerNativeNotifications([], [], settings, mockAuth); - notificationsHelpers.triggerNativeNotifications([], [], settings, mockAuth); + notificationsHelpers.triggerNativeNotifications([], [], { + auth: mockAuth, + settings, + }); + notificationsHelpers.triggerNativeNotifications([], [], { + auth: mockAuth, + settings, + }); expect(notificationsHelpers.raiseNativeNotification).not.toHaveBeenCalled(); expect(notificationsHelpers.raiseSoundNotification).not.toHaveBeenCalled(); diff --git a/src/utils/notifications.ts b/src/utils/notifications.ts index 33695a4af..f2e3bbc88 100644 --- a/src/utils/notifications.ts +++ b/src/utils/notifications.ts @@ -1,5 +1,10 @@ import { ipcRenderer } from 'electron'; -import type { AccountNotifications, AuthState, SettingsState } from '../types'; +import type { + AccountNotifications, + AuthState, + GitifyState, + SettingsState, +} from '../types'; import { Notification } from '../typesGitHub'; import { openInBrowser } from '../utils/helpers'; import { listNotificationsForAuthenticatedUser } from './api/client'; @@ -23,8 +28,7 @@ export function getNotificationCount(notifications: AccountNotifications[]) { export const triggerNativeNotifications = ( previousNotifications: AccountNotifications[], newNotifications: AccountNotifications[], - settings: SettingsState, - auth: AuthState, + state: GitifyState, ) => { const diffNotifications = newNotifications .map((accountNotifications) => { @@ -57,12 +61,12 @@ export const triggerNativeNotifications = ( return; } - if (settings.playSound) { + if (state.settings.playSound) { raiseSoundNotification(); } - if (settings.showNotifications) { - raiseNativeNotification(diffNotifications, auth); + if (state.settings.showNotifications) { + raiseNativeNotification(diffNotifications, state.auth); } }; @@ -107,20 +111,22 @@ export const raiseSoundNotification = () => { audio.play(); }; -function getNotifications(auth: AuthState, settings: SettingsState) { - return auth.accounts.map((account) => { +function getNotifications(state: GitifyState) { + return state.auth.accounts.map((account) => { return { account, - notifications: listNotificationsForAuthenticatedUser(account, settings), + notifications: listNotificationsForAuthenticatedUser( + account, + state.settings, + ), }; }); } export async function getAllNotifications( - auth: AuthState, - settings: SettingsState, + state: GitifyState, ): Promise { - const responses = await Promise.all([...getNotifications(auth, settings)]); + const responses = await Promise.all([...getNotifications(state)]); const notifications: AccountNotifications[] = await Promise.all( responses @@ -133,13 +139,9 @@ export async function getAllNotifications( }), ); - notifications = await enrichNotifications( - notifications, - auth, - settings, - ); + notifications = await enrichNotifications(notifications, state); - notifications = filterNotifications(notifications, settings); + notifications = filterNotifications(notifications, state.settings); return { account: accountNotifications.account, @@ -153,10 +155,9 @@ export async function getAllNotifications( export async function enrichNotifications( notifications: Notification[], - auth: AuthState, - settings: SettingsState, + state: GitifyState, ): Promise { - if (!settings.detailedNotifications) { + if (!state.settings.detailedNotifications) { return notifications; } From 14f7cd04169ecae61915641816206150faa3dfad Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Thu, 6 Jun 2024 14:12:18 -0400 Subject: [PATCH 173/251] feat: launch minimized (#1193) feat: ensure app is launched minimized --- main.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/main.js b/main.js index 409f01cbc..d0d76f0a2 100644 --- a/main.js +++ b/main.js @@ -43,6 +43,9 @@ const mb = menubar({ mb.on('ready', () => { mb.app.setAppUserModelId('com.electron.gitify'); mb.tray.setIgnoreDoubleClickEvents(true); + + mb.hideWindow(); + // Force the window to retrieve its previous zoom factor mb.window.webContents.setZoomFactor(mb.window.webContents.getZoomFactor()); From c80bbd0cbe8647ab67ce28190f8eb222fa71361f Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 7 Jun 2024 07:43:36 -0400 Subject: [PATCH 174/251] refactor: platform icon component --- src/components/icons/PlatformIcon.test.tsx | 22 ++ src/components/icons/PlatformIcon.tsx | 21 ++ .../__snapshots__/PlatformIcon.test.tsx.snap | 203 ++++++++++++++++++ src/routes/Accounts.tsx | 18 +- .../__snapshots__/Accounts.test.tsx.snap | 84 ++++---- 5 files changed, 296 insertions(+), 52 deletions(-) create mode 100644 src/components/icons/PlatformIcon.test.tsx create mode 100644 src/components/icons/PlatformIcon.tsx create mode 100644 src/components/icons/__snapshots__/PlatformIcon.test.tsx.snap diff --git a/src/components/icons/PlatformIcon.test.tsx b/src/components/icons/PlatformIcon.test.tsx new file mode 100644 index 000000000..67226fcd5 --- /dev/null +++ b/src/components/icons/PlatformIcon.test.tsx @@ -0,0 +1,22 @@ +import { render } from '@testing-library/react'; +import { type IPlatformIcon, PlatformIcon } from './PlatformIcon'; + +describe('components/icons/PlatformIcon.tsx', () => { + it('should render GitHub Cloud icon', () => { + const props: IPlatformIcon = { + type: 'GitHub Cloud', + size: 16, + }; + const tree = render(); + expect(tree).toMatchSnapshot(); + }); + + it('should render GitHub Enterprise Service icon', () => { + const props: IPlatformIcon = { + type: 'GitHub Enterprise Server', + size: 16, + }; + const tree = render(); + expect(tree).toMatchSnapshot(); + }); +}); diff --git a/src/components/icons/PlatformIcon.tsx b/src/components/icons/PlatformIcon.tsx new file mode 100644 index 000000000..973db0146 --- /dev/null +++ b/src/components/icons/PlatformIcon.tsx @@ -0,0 +1,21 @@ +import { MarkGithubIcon, ServerIcon } from '@primer/octicons-react'; +import type { FC } from 'react'; +import type { PlatformType } from '../../utils/auth/types'; + +export interface IPlatformIcon { + type: PlatformType; + size: number; +} + +export const PlatformIcon: FC = (props: IPlatformIcon) => { + return ( + + {props.type === 'GitHub Cloud' ? ( + + ) : null} + {props.type === 'GitHub Enterprise Server' ? ( + + ) : null} + + ); +}; diff --git a/src/components/icons/__snapshots__/PlatformIcon.test.tsx.snap b/src/components/icons/__snapshots__/PlatformIcon.test.tsx.snap new file mode 100644 index 000000000..d8be54b6c --- /dev/null +++ b/src/components/icons/__snapshots__/PlatformIcon.test.tsx.snap @@ -0,0 +1,203 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`components/icons/PlatformIcon.tsx should render GitHub Cloud icon 1`] = ` +{ + "asFragment": [Function], + "baseElement": +

+ , + "container":
+ + + +
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; + +exports[`components/icons/PlatformIcon.tsx should render GitHub Enterprise Service icon 1`] = ` +{ + "asFragment": [Function], + "baseElement": +
+ + + +
+ , + "container":
+ + + +
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; diff --git a/src/routes/Accounts.tsx b/src/routes/Accounts.tsx index 09c32d56b..5042f9d8d 100644 --- a/src/routes/Accounts.tsx +++ b/src/routes/Accounts.tsx @@ -2,10 +2,8 @@ import { AppsIcon, ArrowLeftIcon, KeyIcon, - MarkGithubIcon, PersonIcon, PlusIcon, - ServerIcon, SignOutIcon, } from '@primer/octicons-react'; @@ -14,6 +12,7 @@ import { useNavigate } from 'react-router-dom'; import { AppContext } from '../context/App'; +import { PlatformIcon } from '../components/icons/PlatformIcon'; import type { Account } from '../types'; import { getAccountUUID, getDeveloperSettingsURL } from '../utils/auth/utils'; import { @@ -114,20 +113,7 @@ export const AccountsRoute: FC = () => { title="Open Host" onClick={() => openHost(account.hostname)} > - {account.platform === 'GitHub Cloud' ? ( - - ) : null} - {account.platform === 'GitHub Enterprise Server' ? ( - - ) : null} + {account.platform} - {account.hostname}
diff --git a/src/routes/__snapshots__/Accounts.test.tsx.snap b/src/routes/__snapshots__/Accounts.test.tsx.snap index 98bbf73f1..352796a66 100644 --- a/src/routes/__snapshots__/Accounts.test.tsx.snap +++ b/src/routes/__snapshots__/Accounts.test.tsx.snap @@ -94,21 +94,25 @@ exports[`routes/Accounts.tsx General should render itself & its children 1`] = ` title="Open Developer Settings" type="button" > - - - + + Personal Access Token
@@ -189,21 +193,25 @@ exports[`routes/Accounts.tsx General should render itself & its children 1`] = ` title="Open Developer Settings" type="button" > - - - + + OAuth App
@@ -284,21 +292,25 @@ exports[`routes/Accounts.tsx General should render itself & its children 1`] = ` title="Open Developer Settings" type="button" > - - - + + GitHub App
From 40d42ad06ed0454c4b34e7c11afa3ce344d453a9 Mon Sep 17 00:00:00 2001 From: Damilola Olagunju <32450445+dammy95@users.noreply.github.com> Date: Fri, 7 Jun 2024 13:43:25 +0100 Subject: [PATCH 179/251] fix: FAQ link in README.md (#1197) Fix FAQ link in README.md --- README.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3c21ef485..dd4800441 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ Gitify is licensed under the MIT Open Source license. For more information, see [website]: https://www.gitify.io -[faqs]: https://www.gitify.io/faqs +[faqs]: https://www.gitify.io/faq/ [github]: https://github.com/gitify-app/gitify [github-actions]: https://github.com/gitify-app/gitify/actions [github-releases]: https://github.com/gitify-app/gitify/releases/latest diff --git a/package.json b/package.json index 719a49cf8..324f94fb7 100644 --- a/package.json +++ b/package.json @@ -155,6 +155,6 @@ }, "packageManager": "pnpm@9.2.0", "lint-staged": { - "*.{html,js,json,md,ts,tsx}": "biome format --write" + "*.{html,js,json,ts,tsx}": "biome format --write" } } From 4b0005463e520956dab18a74601810f6b99774d5 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 7 Jun 2024 08:46:13 -0400 Subject: [PATCH 180/251] build: lint staged biome fix (#1198) build: redeploy website on tag --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 324f94fb7..7da248406 100644 --- a/package.json +++ b/package.json @@ -155,6 +155,6 @@ }, "packageManager": "pnpm@9.2.0", "lint-staged": { - "*.{html,js,json,ts,tsx}": "biome format --write" + "*.{html,js,json,ts,tsx}": "biome format --fix" } } From 10626f754c2943daa2e5304465192e5f1f5ba29e Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 7 Jun 2024 11:12:21 -0400 Subject: [PATCH 181/251] build: refactor website workflow to trigger netlify deployment (#1199) --- .github/workflows/on-tag.yml | 48 ----------------------------------- .github/workflows/website.yml | 14 ++++++++++ 2 files changed, 14 insertions(+), 48 deletions(-) delete mode 100644 .github/workflows/on-tag.yml create mode 100644 .github/workflows/website.yml diff --git a/.github/workflows/on-tag.yml b/.github/workflows/on-tag.yml deleted file mode 100644 index 7925c46a1..000000000 --- a/.github/workflows/on-tag.yml +++ /dev/null @@ -1,48 +0,0 @@ -name: On Tag - -on: - push: - tags: 'v*' - -jobs: - update-website: - name: Update Website Version - runs-on: ubuntu-latest - steps: - - name: Checkout website repository - uses: actions/checkout@v4 - with: - repository: gitify-app/website - token: ${{ secrets.GH_TOKEN }} - - - name: Setup pnpm - uses: pnpm/action-setup@v3 - - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - - - name: Bump version to latest tag - run: echo "GITIFY_VERSION=$(echo ${{ github.ref }} | sed 's/refs\/tags\/v//')" >> $GITIFY_VERSION - - - name: Setup git config - run: | - git config user.name github-actions[bot] - git config user.email 41898282+github-actions[bot]@users.noreply.github.com - - - name: Bump version to latest - run: pnpm version ${{ env.GITIFY_VERSION }} - - - name: Create pull request - uses: peter-evans/create-pull-request@v6 - with: - token: ${{ secrets.GH_TOKEN }} - branch: "bump/${{ env.GITIFY_VERSION }}" - delete-branch: true - title: | - docs: update to latest release version ${{ env.GITIFY_VERSION }} - body: | - Automated update to latest release version ${{ env.GITIFY_VERSION }} - labels: | - documentation diff --git a/.github/workflows/website.yml b/.github/workflows/website.yml new file mode 100644 index 000000000..a46aa27c2 --- /dev/null +++ b/.github/workflows/website.yml @@ -0,0 +1,14 @@ +name: Update Website + +on: + push: + tags: 'v*' + workflow_dispatch: # For manually verify + +jobs: + redeploy-website: + runs-on: ubuntu-latest + steps: + - name: Redeploy Website + run: curl -X POST -d {} ${{ secrets.NETLIFY_BUILD_HOOK_URL }} + \ No newline at end of file From d9b38e39adbe775a8ad49551ca29cbe76cfd994a Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 7 Jun 2024 11:15:45 -0400 Subject: [PATCH 182/251] docs: update release steps --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index dd4800441..252e9dc89 100644 --- a/README.md +++ b/README.md @@ -42,8 +42,7 @@ The release process is automated. Follow the steps below. 4. In the same branch, **bump the version** of the app by running `pnpm version Date: Sat, 8 Jun 2024 06:22:57 -0400 Subject: [PATCH 183/251] fix: platform icon title --- src/components/icons/PlatformIcon.tsx | 2 +- .../icons/__snapshots__/PlatformIcon.test.tsx.snap | 8 ++++---- src/routes/__snapshots__/Accounts.test.tsx.snap | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/components/icons/PlatformIcon.tsx b/src/components/icons/PlatformIcon.tsx index 973db0146..0ab949220 100644 --- a/src/components/icons/PlatformIcon.tsx +++ b/src/components/icons/PlatformIcon.tsx @@ -9,7 +9,7 @@ export interface IPlatformIcon { export const PlatformIcon: FC = (props: IPlatformIcon) => { return ( - + {props.type === 'GitHub Cloud' ? ( ) : null} diff --git a/src/components/icons/__snapshots__/PlatformIcon.test.tsx.snap b/src/components/icons/__snapshots__/PlatformIcon.test.tsx.snap index d8be54b6c..601fdc492 100644 --- a/src/components/icons/__snapshots__/PlatformIcon.test.tsx.snap +++ b/src/components/icons/__snapshots__/PlatformIcon.test.tsx.snap @@ -6,8 +6,8 @@ exports[`components/icons/PlatformIcon.tsx should render GitHub Cloud icon 1`] = "baseElement":
+ {props.type === 'GitHub App' ? : null} {props.type === 'Personal Access Token' ? ( diff --git a/src/components/icons/__snapshots__/AuthMethodIcon.test.tsx.snap b/src/components/icons/__snapshots__/AuthMethodIcon.test.tsx.snap index fb8fc9c08..a627cf561 100644 --- a/src/components/icons/__snapshots__/AuthMethodIcon.test.tsx.snap +++ b/src/components/icons/__snapshots__/AuthMethodIcon.test.tsx.snap @@ -6,8 +6,8 @@ exports[`components/icons/AuthMethodIcon.tsx should render GitHub App icon 1`] = "baseElement":
- - - - + @{account.user.login} + + +
+
+ +
+
+ +
- +
+
+ - +
+
+ + + + Personal Access Token + +
- +
+
+ - +
+
+ + + + OAuth App + +
- +
+
+ - +
+
+ + + + GitHub App + +
) : (
= ({ const { markRepoNotificationsRead, markRepoNotificationsDone } = useContext(AppContext); - const openBrowser = useCallback(() => { - const url = repoNotifications[0].repository.html_url; - openExternalLink(url); - }, [repoNotifications]); - const markRepoAsRead = useCallback(() => { const repoSlug = repoNotifications[0].repository.full_name; markRepoNotificationsRead(repoSlug, hostname); @@ -53,8 +48,8 @@ export const RepositoryNotifications: FC = ({ )} openRepository(repoNotifications[0].repository)} + onKeyDown={() => openRepository(repoNotifications[0].repository)} > {repoName} diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx index 05a156aaa..0d153ac1e 100644 --- a/src/components/Sidebar.tsx +++ b/src/components/Sidebar.tsx @@ -4,13 +4,13 @@ import { SyncIcon, XCircleIcon, } from '@primer/octicons-react'; -import { type FC, useCallback, useContext, useMemo } from 'react'; +import { type FC, useContext, useMemo } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; import { Logo } from '../components/Logo'; import { AppContext } from '../context/App'; import { BUTTON_SIDEBAR_CLASS_NAME } from '../styles/gitify'; -import { openExternalLink, quitApp } from '../utils/comms'; -import { Constants } from '../utils/constants'; +import { quitApp } from '../utils/comms'; +import { openGitHubNotifications, openGitifyRepository } from '../utils/links'; import { getNotificationCount } from '../utils/notifications'; export const Sidebar: FC = () => { @@ -20,14 +20,6 @@ export const Sidebar: FC = () => { const { notifications, fetchNotifications, isLoggedIn, status } = useContext(AppContext); - const onOpenBrowser = useCallback(() => { - openExternalLink(`https://github.com/${Constants.REPO_SLUG}`); - }, []); - - const onOpenGitHubNotifications = useCallback(() => { - openExternalLink('https://github.com/notifications'); - }, []); - const toggleSettings = () => { if (location.pathname.startsWith('/settings')) { navigate('/', { replace: true }); @@ -47,7 +39,7 @@ export const Sidebar: FC = () => { type="button" className="w-5 my-3 mx-auto cursor-pointer outline-none" title="Open Gitify on GitHub" - onClick={onOpenBrowser} + onClick={() => openGitifyRepository()} data-testid="gitify-logo" > @@ -58,7 +50,7 @@ export const Sidebar: FC = () => { className={`flex justify-around self-stretch items-center my-1 py-1 px-2 text-xs font-extrabold cursor-pointer ${ notificationsCount > 0 ? 'text-green-500' : 'text-white' }`} - onClick={onOpenGitHubNotifications} + onClick={() => openGitHubNotifications()} title={`${notificationsCount} Unread Notifications`} > -
gitify-app's avatar -
+
@@ -5038,9 +5039,10 @@ exports[`components/NotificationRow.tsx should render itself & its children 1`]
-
gitify-app's avatar -
+
@@ -5281,9 +5283,10 @@ exports[`components/NotificationRow.tsx should render itself & its children when
-
gitify-app's avatar -
+
@@ -5467,9 +5470,10 @@ exports[`components/NotificationRow.tsx should render itself & its children when
-
gitify-app's avatar -
+
diff --git a/src/routes/Accounts.tsx b/src/routes/Accounts.tsx index 7ed9a8671..c89870fee 100644 --- a/src/routes/Accounts.tsx +++ b/src/routes/Accounts.tsx @@ -15,16 +15,17 @@ import { AuthMethodIcon } from '../components/icons/AuthMethodIcon'; import { PlatformIcon } from '../components/icons/PlatformIcon'; import { BUTTON_CLASS_NAME } from '../styles/gitify'; import type { Account } from '../types'; -import { getAccountUUID, getDeveloperSettingsURL } from '../utils/auth/utils'; -import { - openExternalLink, - updateTrayIcon, - updateTrayTitle, -} from '../utils/comms'; +import { getAccountUUID } from '../utils/auth/utils'; +import { updateTrayIcon, updateTrayTitle } from '../utils/comms'; import { isOAuthAppLoggedIn, isPersonalAccessTokenLoggedIn, } from '../utils/helpers'; +import { + openAccountProfile, + openDeveloperSettings, + openHost, +} from '../utils/links'; export const AccountsRoute: FC = () => { const { auth, logoutFromAccount } = useContext(AppContext); @@ -37,21 +38,6 @@ export const AccountsRoute: FC = () => { updateTrayTitle(); }, []); - const openProfile = (account: Account) => { - const url = new URL(`https://${account.hostname}`); - url.pathname = account.user.login; - openExternalLink(url.toString()); - }; - - const openHost = (hostname: string) => { - openExternalLink(`https://${hostname}`); - }; - - const openDeveloperSettings = (account: Account) => { - const url = getDeveloperSettingsURL(account); - openExternalLink(url); - }; - const loginWithPersonalAccessToken = useCallback(() => { return navigate('/login-personal-access-token', { replace: true }); }, []); @@ -95,7 +81,7 @@ export const AccountsRoute: FC = () => { type="button" className="cursor-pointer font-semibold mb-1 text-sm" title="Open Profile" - onClick={() => openProfile(account)} + onClick={() => openAccountProfile(account)} > @{account.user.login} { const [appVersion, setAppVersion] = useState(null); - const openGitHubReleaseNotes = useCallback((version) => { - openExternalLink( - `https://github.com/${Constants.REPO_SLUG}/releases/tag/v${version}`, - ); - }, []); - - const openGitHubParticipatingDocs = (event: MouseEvent) => { - // Don't trigger onClick of parent element. - event.stopPropagation(); - - openExternalLink( - 'https://docs.github.com/en/account-and-profile/managing-subscriptions-and-notifications-on-github/setting-up-notifications/configuring-notifications#about-participating-and-watching-notifications', - ); - }; - useEffect(() => { (async () => { const result = await getAppVersion(); @@ -186,7 +173,11 @@ export const SettingsRoute: FC = () => { type="button" className="text-blue-500 mx-1" title="Open GitHub documentation for participating and watching notifications" - onClick={openGitHubParticipatingDocs} + onClick={(event: MouseEvent) => { + // Don't trigger onClick of parent element. + event.stopPropagation(); + openGitHubParticipatingDocs(); + }} > official docs @@ -290,7 +281,7 @@ export const SettingsRoute: FC = () => { type="button" className="font-semibold cursor-pointer" title="View release notes" - onClick={() => openGitHubReleaseNotes(appVersion)} + onClick={() => openGitifyReleaseNotes(appVersion)} > Gitify v{appVersion} diff --git a/src/utils/auth/utils.ts b/src/utils/auth/utils.ts index f4ab7fe4a..a6c3f2122 100644 --- a/src/utils/auth/utils.ts +++ b/src/utils/auth/utils.ts @@ -149,7 +149,7 @@ export function getDeveloperSettingsURL(account: Account): string { settingsURL.pathname = '/settings/developers'; break; case 'Personal Access Token': - settingsURL.pathname = 'settings/tokens'; + settingsURL.pathname = '/settings/tokens'; break; } return settingsURL.toString(); diff --git a/src/utils/constants.ts b/src/utils/constants.ts index e03028b21..9653b7d8b 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -28,6 +28,8 @@ export const Constants = { 'https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app', PAT_URL: 'https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens', + PARTICIPATING_URL: + 'https://docs.github.com/en/account-and-profile/managing-subscriptions-and-notifications-on-github/setting-up-notifications/configuring-notifications#about-participating-and-watching-notifications', }, }; diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index a69d121bb..51c054c48 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -1,7 +1,6 @@ import { formatDistanceToNowStrict, parseISO } from 'date-fns'; import type { Account, AuthState } from '../types'; import type { Notification } from '../typesGitHub'; -import { openExternalLink } from '../utils/comms'; import { getHtmlUrl, getLatestDiscussion } from './api/client'; import type { PlatformType } from './auth/types'; import { Constants } from './constants'; @@ -183,9 +182,3 @@ export function formatNotificationUpdatedAt( return ''; } - -export async function openInBrowser(notification: Notification) { - const url = await generateGitHubWebUrl(notification); - - openExternalLink(url); -} diff --git a/src/utils/links.test.ts b/src/utils/links.test.ts new file mode 100644 index 000000000..1a5279b8b --- /dev/null +++ b/src/utils/links.test.ts @@ -0,0 +1,108 @@ +import { partialMockUser } from '../__mocks__/partial-mocks'; +import { mockGitHubCloudAccount } from '../__mocks__/state-mocks'; +import type { Repository } from '../typesGitHub'; +import { mockSingleNotification } from './api/__mocks__/response-mocks'; +import * as authUtils from './auth/utils'; +import * as comms from './comms'; +import Constants from './constants'; +import * as helpers from './helpers'; +import { + openAccountProfile, + openDeveloperSettings, + openGitHubNotifications, + openGitHubParticipatingDocs, + openGitifyReleaseNotes, + openGitifyRepository, + openHost, + openNotification, + openRepository, + openUserProfile, +} from './links'; + +describe('utils/links.ts', () => { + beforeEach(() => { + jest.spyOn(comms, 'openExternalLink'); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('openGitifyRepository', () => { + openGitifyRepository(); + expect(comms.openExternalLink).toHaveBeenCalledWith( + 'https://github.com/gitify-app/gitify', + ); + }); + + it('openGitifyReleaseNotes', () => { + openGitifyReleaseNotes('1.0.0'); + expect(comms.openExternalLink).toHaveBeenCalledWith( + 'https://github.com/gitify-app/gitify/releases/tag/v1.0.0', + ); + }); + + it('openGitHubNotifications', () => { + openGitHubNotifications(); + expect(comms.openExternalLink).toHaveBeenCalledWith( + 'https://github.com/notifications', + ); + }); + + it('openAccountProfile', () => { + openAccountProfile(mockGitHubCloudAccount); + expect(comms.openExternalLink).toHaveBeenCalledWith( + 'https://github.com/octocat', + ); + }); + + it('openUserProfile', () => { + const mockUser = partialMockUser('mock-user'); + openUserProfile(mockUser); + expect(comms.openExternalLink).toHaveBeenCalledWith( + 'https://github.com/mock-user', + ); + }); + + it('openHost', () => { + openHost('github.com'); + expect(comms.openExternalLink).toHaveBeenCalledWith('https://github.com'); + }); + + it('openDeveloperSettings', () => { + const mockSettingsURL = 'https://github.com/settings/tokens'; + + jest + .spyOn(authUtils, 'getDeveloperSettingsURL') + .mockReturnValue(mockSettingsURL); + openDeveloperSettings(mockGitHubCloudAccount); + expect(comms.openExternalLink).toHaveBeenCalledWith(mockSettingsURL); + }); + + it('openRepository', () => { + const mockHtmlUrl = 'https://github.com/gitify-app/gitify'; + + const repo = { + html_url: mockHtmlUrl, + } as Repository; + + openRepository(repo); + expect(comms.openExternalLink).toHaveBeenCalledWith(mockHtmlUrl); + }); + + it('openNotification', async () => { + const mockNotificationUrl = mockSingleNotification.repository.html_url; + jest + .spyOn(helpers, 'generateGitHubWebUrl') + .mockResolvedValue(mockNotificationUrl); + await openNotification(mockSingleNotification); + expect(comms.openExternalLink).toHaveBeenCalledWith(mockNotificationUrl); + }); + + it('openParticipatingDocs', () => { + openGitHubParticipatingDocs(); + expect(comms.openExternalLink).toHaveBeenCalledWith( + Constants.GITHUB_DOCS.PARTICIPATING_URL, + ); + }); +}); diff --git a/src/utils/links.ts b/src/utils/links.ts new file mode 100644 index 000000000..69cf8f8f2 --- /dev/null +++ b/src/utils/links.ts @@ -0,0 +1,52 @@ +import type { Account } from '../types'; +import type { Notification, Repository, SubjectUser } from '../typesGitHub'; +import { getDeveloperSettingsURL } from './auth/utils'; +import { openExternalLink } from './comms'; +import Constants from './constants'; +import { generateGitHubWebUrl } from './helpers'; + +export function openGitifyRepository() { + openExternalLink(`https://github.com/${Constants.REPO_SLUG}`); +} + +export function openGitifyReleaseNotes(version: string) { + openExternalLink( + `https://github.com/${Constants.REPO_SLUG}/releases/tag/v${version}`, + ); +} + +export function openGitHubNotifications() { + openExternalLink('https://github.com/notifications'); +} + +export function openAccountProfile(account: Account) { + const url = new URL(`https://${account.hostname}`); + url.pathname = account.user.login; + openExternalLink(url.toString()); +} + +export function openUserProfile(user: SubjectUser) { + openExternalLink(user.html_url); +} + +export function openHost(hostname: string) { + openExternalLink(`https://${hostname}`); +} + +export function openDeveloperSettings(account: Account) { + const url = getDeveloperSettingsURL(account); + openExternalLink(url); +} + +export function openRepository(repository: Repository) { + openExternalLink(repository.html_url); +} + +export async function openNotification(notification: Notification) { + const url = await generateGitHubWebUrl(notification); + openExternalLink(url); +} + +export function openGitHubParticipatingDocs() { + openExternalLink(Constants.GITHUB_DOCS.PARTICIPATING_URL); +} diff --git a/src/utils/notifications.test.ts b/src/utils/notifications.test.ts index 2979ce4c0..580fbb06d 100644 --- a/src/utils/notifications.test.ts +++ b/src/utils/notifications.test.ts @@ -8,7 +8,7 @@ import { defaultSettings } from '../context/App'; import type { SettingsState } from '../types'; import { mockGitHubNotifications } from './api/__mocks__/response-mocks'; import * as comms from './comms'; -import * as helpers from './helpers'; +import * as links from './links'; import * as notificationsHelpers from './notifications'; import { filterNotifications } from './notifications'; @@ -112,7 +112,7 @@ describe('utils/notifications.ts', () => { it('should click on a native notification (with 1 notification)', () => { const hideWindowMock = jest.spyOn(comms, 'hideWindow'); - jest.spyOn(helpers, 'openInBrowser'); + jest.spyOn(links, 'openNotification'); const nativeNotification: Notification = notificationsHelpers.raiseNativeNotification([ @@ -120,8 +120,8 @@ describe('utils/notifications.ts', () => { ]); nativeNotification.onclick(null); - expect(helpers.openInBrowser).toHaveBeenCalledTimes(1); - expect(helpers.openInBrowser).toHaveBeenLastCalledWith( + expect(links.openNotification).toHaveBeenCalledTimes(1); + expect(links.openNotification).toHaveBeenLastCalledWith( mockGitHubNotifications[0], ); expect(hideWindowMock).toHaveBeenCalledTimes(1); diff --git a/src/utils/notifications.ts b/src/utils/notifications.ts index 2c5f2f49f..6a9b6328e 100644 --- a/src/utils/notifications.ts +++ b/src/utils/notifications.ts @@ -4,9 +4,9 @@ import type { SettingsState, } from '../types'; import { Notification } from '../typesGitHub'; -import { openInBrowser } from '../utils/helpers'; import { listNotificationsForAuthenticatedUser } from './api/client'; import { hideWindow, showWindow, updateTrayIcon } from './comms'; +import { openNotification } from './links'; import { isWindows } from './platform'; import { getGitifySubjectDetails } from './subject'; @@ -91,7 +91,7 @@ export const raiseNativeNotification = (notifications: Notification[]) => { nativeNotification.onclick = () => { if (notifications.length === 1) { hideWindow(); - openInBrowser(notifications[0]); + openNotification(notifications[0]); } else { showWindow(); } From b01718681ff3e6c388011406677862fa3344e11c Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Mon, 10 Jun 2024 13:59:40 -0400 Subject: [PATCH 204/251] refactor: main js (#1207) * refactor: main js * refactor: main js * Merge remote-tracking branch 'origin/main' into refactor/mainjs * defer removal until #650 is resolved * add comments to group sections --- main.js | 138 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 72 insertions(+), 66 deletions(-) diff --git a/main.js b/main.js index 86b298415..2828a4df7 100644 --- a/main.js +++ b/main.js @@ -1,13 +1,14 @@ -const { ipcMain: ipc, app, nativeTheme, Menu } = require('electron'); +const { ipcMain: ipc, app, nativeTheme, Menu } = require('electron/main'); const { menubar } = require('menubar'); const { autoUpdater } = require('electron-updater'); const { onFirstRunMaybe } = require('./first-run'); const path = require('node:path'); +// TODO: Remove @electron/remote use - see #650 require('@electron/remote/main').initialize(); -const iconIdle = path.join(__dirname, 'assets', 'images', 'tray-idle.png'); -const iconActive = path.join(__dirname, 'assets', 'images', 'tray-active.png'); +const idleIcon = path.join(__dirname, 'assets', 'images', 'tray-idle.png'); +const activeIcon = path.join(__dirname, 'assets', 'images', 'tray-active.png'); const browserWindowOpts = { width: 500, @@ -32,53 +33,55 @@ const contextMenu = Menu.buildFromTemplate([ }, ]); -app.on('ready', async () => { +app.whenReady().then(async () => { await onFirstRunMaybe(); -}); - -const mb = menubar({ - icon: iconIdle, - index: `file://${__dirname}/index.html`, - browserWindow: browserWindowOpts, - preloadWindow: true, - showDockIcon: false, -}); - -mb.on('ready', () => { - mb.app.setAppUserModelId('com.electron.gitify'); - mb.tray.setIgnoreDoubleClickEvents(true); - - mb.hideWindow(); - - mb.tray.on('right-click', (_event, bounds) => { - mb.tray.popUpContextMenu(contextMenu, { x: bounds.x, y: bounds.y }); - }); - - // Force the window to retrieve its previous zoom factor - mb.window.webContents.setZoomFactor(mb.window.webContents.getZoomFactor()); - - mb.window.webContents.on('devtools-opened', () => { - mb.window.setSize(800, 600); - mb.window.center(); - mb.window.resizable = true; - }); - mb.window.webContents.on('devtools-closed', () => { - const trayBounds = mb.tray.getBounds(); - mb.window.setSize(browserWindowOpts.width, browserWindowOpts.height); - mb.positioner.move('trayCenter', trayBounds); - mb.window.resizable = false; + const mb = menubar({ + icon: idleIcon, + index: `file://${__dirname}/index.html`, + browserWindow: browserWindowOpts, + preloadWindow: true, + showDockIcon: false, }); - mb.window.webContents.on('before-input-event', (event, input) => { - if (input.key === 'Escape') { - mb.window.hide(); - event.preventDefault(); - } + mb.on('ready', () => { + autoUpdater.checkForUpdatesAndNotify(); + + mb.hideWindow(); + mb.app.setAppUserModelId('com.electron.gitify'); + + // Tray configuration + mb.tray.setIgnoreDoubleClickEvents(true); + mb.tray.on('right-click', (_event, bounds) => { + mb.tray.popUpContextMenu(contextMenu, { x: bounds.x, y: bounds.y }); + }); + + // Force the window to retrieve its previous zoom factor + mb.window.webContents.setZoomFactor(mb.window.webContents.getZoomFactor()); + + // Custom key events + mb.window.webContents.on('before-input-event', (event, input) => { + if (input.key === 'Escape') { + mb.window.hide(); + event.preventDefault(); + } + }); + + // DevTools configuration + mb.window.webContents.on('devtools-opened', () => { + mb.window.setSize(800, 600); + mb.window.center(); + mb.window.resizable = true; + }); + + mb.window.webContents.on('devtools-closed', () => { + const trayBounds = mb.tray.getBounds(); + mb.window.setSize(browserWindowOpts.width, browserWindowOpts.height); + mb.positioner.move('trayCenter', trayBounds); + mb.window.resizable = false; + }); }); - autoUpdater.checkForUpdatesAndNotify(); - nativeTheme.on('updated', () => { if (nativeTheme.shouldUseDarkColors) { mb.window.webContents.send('gitify:update-theme', 'DARK'); @@ -86,34 +89,37 @@ mb.on('ready', () => { mb.window.webContents.send('gitify:update-theme', 'LIGHT'); } }); -}); -ipc.handle('gitify:version', () => app.getVersion()); + /** + * Gitify custom IPC events + */ + ipc.handle('gitify:version', () => app.getVersion()); -ipc.on('gitify:window-show', () => mb.showWindow()); + ipc.on('gitify:window-show', () => mb.showWindow()); -ipc.on('gitify:window-hide', () => mb.hideWindow()); + ipc.on('gitify:window-hide', () => mb.hideWindow()); -ipc.on('gitify:quit', () => mb.app.quit()); + ipc.on('gitify:quit', () => mb.app.quit()); -ipc.on('gitify:icon-active', () => { - if (!mb.tray.isDestroyed()) { - mb.tray.setImage(iconActive); - } -}); + ipc.on('gitify:icon-active', () => { + if (!mb.tray.isDestroyed()) { + mb.tray.setImage(activeIcon); + } + }); -ipc.on('gitify:icon-idle', () => { - if (!mb.tray.isDestroyed()) { - mb.tray.setImage(iconIdle); - } -}); + ipc.on('gitify:icon-idle', () => { + if (!mb.tray.isDestroyed()) { + mb.tray.setImage(idleIcon); + } + }); -ipc.on('gitify:update-title', (_, title) => { - if (!mb.tray.isDestroyed()) { - mb.tray.setTitle(title); - } -}); + ipc.on('gitify:update-title', (_, title) => { + if (!mb.tray.isDestroyed()) { + mb.tray.setTitle(title); + } + }); -ipc.on('gitify:update-auto-launch', (_, settings) => { - app.setLoginItemSettings(settings); + ipc.on('gitify:update-auto-launch', (_, settings) => { + app.setLoginItemSettings(settings); + }); }); From fedbfbe51daada8876e06be9e82c9137f8201a79 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Mon, 10 Jun 2024 14:00:42 -0400 Subject: [PATCH 205/251] feat: support multiple accounts (#1201) * feat: support multiple accounts * feat: update header * refactor: use account uuid * update snapshots * feat: correctly raise native notifications * pass account instead of hostname * fix * Merge remote-tracking branch 'origin/main' into refactor/accounts-auth-token * update tests --- src/components/AccountNotifications.test.tsx | 27 ++- src/components/AccountNotifications.tsx | 26 ++- src/components/NotificationRow.test.tsx | 44 ++-- src/components/NotificationRow.tsx | 16 +- src/components/Repository.test.tsx | 14 +- src/components/Repository.tsx | 17 +- .../AccountNotifications.test.tsx.snap | 214 ++++++++++++++---- src/context/App.test.tsx | 36 +-- src/context/App.tsx | 34 +-- src/hooks/useNotifications.test.ts | 60 +++-- src/hooks/useNotifications.ts | 90 ++++---- src/routes/Accounts.test.tsx | 138 ++++------- src/routes/Accounts.tsx | 6 - src/routes/Notifications.tsx | 5 +- .../__snapshots__/Accounts.test.tsx.snap | 2 - src/utils/helpers.test.ts | 49 +--- src/utils/helpers.ts | 15 -- src/utils/notifications.ts | 4 +- src/utils/remove-notification.test.ts | 9 +- src/utils/remove-notification.ts | 14 +- src/utils/remove-notifications.test.ts | 9 +- src/utils/remove-notifications.ts | 10 +- 22 files changed, 438 insertions(+), 401 deletions(-) diff --git a/src/components/AccountNotifications.test.tsx b/src/components/AccountNotifications.test.tsx index f52955e5b..c3021424d 100644 --- a/src/components/AccountNotifications.test.tsx +++ b/src/components/AccountNotifications.test.tsx @@ -1,5 +1,7 @@ -import { render } from '@testing-library/react'; +import { act, fireEvent, render, screen } from '@testing-library/react'; +import { mockGitHubCloudAccount } from '../__mocks__/state-mocks'; import { mockGitHubNotifications } from '../utils/api/__mocks__/response-mocks'; +import * as links from '../utils/links'; import { AccountNotifications } from './AccountNotifications'; jest.mock('./Repository', () => ({ @@ -9,7 +11,7 @@ jest.mock('./Repository', () => ({ describe('components/AccountNotifications.tsx', () => { it('should render itself (github.com with notifications)', () => { const props = { - hostname: 'github.com', + account: mockGitHubCloudAccount, notifications: mockGitHubNotifications, showAccountHostname: true, }; @@ -20,7 +22,7 @@ describe('components/AccountNotifications.tsx', () => { it('should render itself (github.com without notifications)', () => { const props = { - hostname: 'github.com', + account: mockGitHubCloudAccount, notifications: [], showAccountHostname: true, }; @@ -28,4 +30,23 @@ describe('components/AccountNotifications.tsx', () => { const tree = render(); expect(tree).toMatchSnapshot(); }); + + it('should open profile when clicked', async () => { + const openAccountProfileMock = jest.spyOn(links, 'openAccountProfile'); + + const props = { + account: mockGitHubCloudAccount, + notifications: [], + showAccountHostname: true, + }; + + await act(async () => { + render(); + }); + + fireEvent.click(screen.getByTitle('Open Profile')); + + expect(openAccountProfileMock).toHaveBeenCalledTimes(1); + expect(openAccountProfileMock).toHaveBeenCalledWith(mockGitHubCloudAccount); + }); }); diff --git a/src/components/AccountNotifications.tsx b/src/components/AccountNotifications.tsx index 738dd8098..0bda63707 100644 --- a/src/components/AccountNotifications.tsx +++ b/src/components/AccountNotifications.tsx @@ -1,15 +1,18 @@ import { ChevronDownIcon, ChevronLeftIcon } from '@primer/octicons-react'; +import type { Account } from '../types'; import type { Notification } from '../typesGitHub'; +import { openAccountProfile } from '../utils/links'; import { RepositoryNotifications } from './Repository'; +import { PlatformIcon } from './icons/PlatformIcon'; interface IProps { - hostname: string; + account: Account; notifications: Notification[]; showAccountHostname: boolean; } export const AccountNotifications = (props: IProps) => { - const { hostname, showAccountHostname, notifications } = props; + const { account, showAccountHostname, notifications } = props; const groupedNotifications = Object.values( notifications.reduce( @@ -28,9 +31,20 @@ export const AccountNotifications = (props: IProps) => { return ( <> {showAccountHostname && ( -
- {hostname} - +
+
+ + +
+
+ +
)} @@ -40,7 +54,7 @@ export const AccountNotifications = (props: IProps) => { return ( diff --git a/src/components/NotificationRow.test.tsx b/src/components/NotificationRow.test.tsx index a2a783925..99f249a5a 100644 --- a/src/components/NotificationRow.test.tsx +++ b/src/components/NotificationRow.test.tsx @@ -1,5 +1,9 @@ import { fireEvent, render, screen } from '@testing-library/react'; -import { mockAuth, mockSettings } from '../__mocks__/state-mocks'; +import { + mockAuth, + mockGitHubCloudAccount, + mockSettings, +} from '../__mocks__/state-mocks'; import { AppContext } from '../context/App'; import type { Milestone, UserType } from '../typesGitHub'; import { mockSingleNotification } from '../utils/api/__mocks__/response-mocks'; @@ -23,7 +27,7 @@ describe('components/NotificationRow.tsx', () => { const props = { notification: mockSingleNotification, - hostname: 'github.com', + account: mockGitHubCloudAccount, }; const tree = render( @@ -44,7 +48,7 @@ describe('components/NotificationRow.tsx', () => { const props = { notification: mockNotification, - hostname: 'github.com', + account: mockGitHubCloudAccount, }; const tree = render( @@ -65,7 +69,7 @@ describe('components/NotificationRow.tsx', () => { const props = { notification: mockNotification, - hostname: 'github.com', + account: mockGitHubCloudAccount, }; const tree = render( @@ -88,7 +92,7 @@ describe('components/NotificationRow.tsx', () => { const props = { notification: mockNotification, - hostname: 'github.com', + account: mockGitHubCloudAccount, }; const tree = render( @@ -115,7 +119,7 @@ describe('components/NotificationRow.tsx', () => { const props = { notification: mockNotification, - hostname: 'github.com', + account: mockGitHubCloudAccount, }; const tree = render( @@ -140,7 +144,7 @@ describe('components/NotificationRow.tsx', () => { const props = { notification: mockNotification, - hostname: 'github.com', + account: mockGitHubCloudAccount, }; const tree = render( @@ -167,7 +171,7 @@ describe('components/NotificationRow.tsx', () => { const props = { notification: mockNotification, - hostname: 'github.com', + account: mockGitHubCloudAccount, }; const tree = render( @@ -192,7 +196,7 @@ describe('components/NotificationRow.tsx', () => { const props = { notification: mockNotification, - hostname: 'github.com', + account: mockGitHubCloudAccount, }; const tree = render( @@ -217,7 +221,7 @@ describe('components/NotificationRow.tsx', () => { const props = { notification: mockNotification, - hostname: 'github.com', + account: mockGitHubCloudAccount, }; const tree = render( @@ -244,7 +248,7 @@ describe('components/NotificationRow.tsx', () => { const props = { notification: mockNotification, - hostname: 'github.com', + account: mockGitHubCloudAccount, }; const tree = render( @@ -274,7 +278,7 @@ describe('components/NotificationRow.tsx', () => { const props = { notification: mockNotification, - hostname: 'github.com', + account: mockGitHubCloudAccount, }; const tree = render( @@ -302,7 +306,7 @@ describe('components/NotificationRow.tsx', () => { const props = { notification: mockNotification, - hostname: 'github.com', + account: mockGitHubCloudAccount, }; const tree = render( @@ -325,7 +329,7 @@ describe('components/NotificationRow.tsx', () => { const props = { notification: mockSingleNotification, - hostname: 'github.com', + account: mockGitHubCloudAccount, }; render( @@ -350,7 +354,7 @@ describe('components/NotificationRow.tsx', () => { const props = { notification: mockSingleNotification, - hostname: 'github.com', + account: mockGitHubCloudAccount, }; render( @@ -375,7 +379,7 @@ describe('components/NotificationRow.tsx', () => { const props = { notification: mockSingleNotification, - hostname: 'github.com', + account: mockGitHubCloudAccount, }; render( @@ -400,7 +404,7 @@ describe('components/NotificationRow.tsx', () => { const props = { notification: mockSingleNotification, - hostname: 'github.com', + account: mockGitHubCloudAccount, }; render( @@ -423,7 +427,7 @@ describe('components/NotificationRow.tsx', () => { const props = { notification: mockSingleNotification, - hostname: 'github.com', + account: mockGitHubCloudAccount, }; render( @@ -443,7 +447,7 @@ describe('components/NotificationRow.tsx', () => { const props = { notification: mockSingleNotification, - hostname: 'github.com', + account: mockGitHubCloudAccount, }; render( @@ -477,7 +481,7 @@ describe('components/NotificationRow.tsx', () => { reviews: null, }, }, - hostname: 'github.com', + account: mockGitHubCloudAccount, }; render( diff --git a/src/components/NotificationRow.tsx b/src/components/NotificationRow.tsx index b64da70ae..909eba3ff 100644 --- a/src/components/NotificationRow.tsx +++ b/src/components/NotificationRow.tsx @@ -12,7 +12,7 @@ import { type FC, type MouseEvent, useCallback, useContext } from 'react'; import { AppContext } from '../context/App'; import { PILL_CLASS_NAME } from '../styles/gitify'; -import { IconColor } from '../types'; +import { type Account, IconColor } from '../types'; import type { Notification } from '../typesGitHub'; import { formatForDisplay, @@ -27,11 +27,11 @@ import { openNotification, openUserProfile } from '../utils/links'; import { formatReason } from '../utils/reason'; interface IProps { - hostname: string; + account: Account; notification: Notification; } -export const NotificationRow: FC = ({ notification, hostname }) => { +export const NotificationRow: FC = ({ notification, account }) => { const { auth, settings, @@ -46,10 +46,10 @@ export const NotificationRow: FC = ({ notification, hostname }) => { openNotification(notification); if (settings.markAsDoneOnOpen) { - markNotificationDone(notification.id, hostname); + markNotificationDone(notification); } else { // no need to mark as read, github does it by default when opening it - removeNotificationFromState(settings, notification.id, hostname); + removeNotificationFromState(settings, notification); } }, [notifications, notification, auth, settings]); // notifications required here to prevent weird state issues @@ -57,7 +57,7 @@ export const NotificationRow: FC = ({ notification, hostname }) => { // Don't trigger onClick of parent element. event.stopPropagation(); - unsubscribeNotification(notification.id, hostname); + unsubscribeNotification(notification); }; const reason = formatReason(notification.reason); @@ -225,7 +225,7 @@ export const NotificationRow: FC = ({ notification, hostname }) => { type="button" className="focus:outline-none h-full hover:text-green-500" title="Mark as Done" - onClick={() => markNotificationDone(notification.id, hostname)} + onClick={() => markNotificationDone(notification)} > @@ -243,7 +243,7 @@ export const NotificationRow: FC = ({ notification, hostname }) => { type="button" className="focus:outline-none h-full hover:text-green-500" title="Mark as Read" - onClick={() => markNotificationRead(notification.id, hostname)} + onClick={() => markNotificationRead(notification)} > diff --git a/src/components/Repository.test.tsx b/src/components/Repository.test.tsx index 8edcdb2f5..5cf5dde2e 100644 --- a/src/components/Repository.test.tsx +++ b/src/components/Repository.test.tsx @@ -1,6 +1,10 @@ import { fireEvent, render, screen } from '@testing-library/react'; +import { mockGitHubCloudAccount } from '../__mocks__/state-mocks'; import { AppContext } from '../context/App'; -import { mockGitHubNotifications } from '../utils/api/__mocks__/response-mocks'; +import { + mockGitHubNotifications, + mockSingleNotification, +} from '../utils/api/__mocks__/response-mocks'; import * as comms from '../utils/comms'; import { RepositoryNotifications } from './Repository'; @@ -13,7 +17,7 @@ describe('components/Repository.tsx', () => { const markRepoNotificationsDone = jest.fn(); const props = { - hostname: 'github.com', + account: mockGitHubCloudAccount, repoName: 'gitify-app/notifications-test', repoNotifications: mockGitHubNotifications, }; @@ -58,8 +62,7 @@ describe('components/Repository.tsx', () => { fireEvent.click(screen.getByTitle('Mark Repository as Read')); expect(markRepoNotificationsRead).toHaveBeenCalledWith( - 'gitify-app/notifications-test', - 'github.com', + mockSingleNotification, ); }); @@ -73,8 +76,7 @@ describe('components/Repository.tsx', () => { fireEvent.click(screen.getByTitle('Mark Repository as Done')); expect(markRepoNotificationsDone).toHaveBeenCalledWith( - 'gitify-app/notifications-test', - 'github.com', + mockSingleNotification, ); }); diff --git a/src/components/Repository.tsx b/src/components/Repository.tsx index d55817fda..4021ac27e 100644 --- a/src/components/Repository.tsx +++ b/src/components/Repository.tsx @@ -2,12 +2,13 @@ import { CheckIcon, MarkGithubIcon, ReadIcon } from '@primer/octicons-react'; import { type FC, useCallback, useContext } from 'react'; import { CSSTransition, TransitionGroup } from 'react-transition-group'; import { AppContext } from '../context/App'; +import type { Account } from '../types'; import type { Notification } from '../typesGitHub'; import { openRepository } from '../utils/links'; import { NotificationRow } from './NotificationRow'; interface IProps { - hostname: string; + account: Account; repoNotifications: Notification[]; repoName: string; } @@ -15,20 +16,18 @@ interface IProps { export const RepositoryNotifications: FC = ({ repoName, repoNotifications, - hostname, + account, }) => { const { markRepoNotificationsRead, markRepoNotificationsDone } = useContext(AppContext); const markRepoAsRead = useCallback(() => { - const repoSlug = repoNotifications[0].repository.full_name; - markRepoNotificationsRead(repoSlug, hostname); - }, [repoNotifications, hostname]); + markRepoNotificationsRead(repoNotifications[0]); + }, [repoNotifications, account]); const markRepoAsDone = useCallback(() => { - const repoSlug = repoNotifications[0].repository.full_name; - markRepoNotificationsDone(repoSlug, hostname); - }, [repoNotifications, hostname]); + markRepoNotificationsDone(repoNotifications[0]); + }, [repoNotifications, account]); const avatarUrl = repoNotifications[0].repository.owner.avatar_url; const repoSlug = repoNotifications[0].repository.full_name; @@ -83,7 +82,7 @@ export const RepositoryNotifications: FC = ({ diff --git a/src/components/__snapshots__/AccountNotifications.test.tsx.snap b/src/components/__snapshots__/AccountNotifications.test.tsx.snap index de9b86718..024a22adf 100644 --- a/src/components/__snapshots__/AccountNotifications.test.tsx.snap +++ b/src/components/__snapshots__/AccountNotifications.test.tsx.snap @@ -6,9 +6,91 @@ exports[`components/AccountNotifications.tsx should render itself (github.com wi "baseElement":
- github.com +
+ + + + +
+
+ +
+
+
+ Repository +
+
+ , + "container":
+
+
+ + + + +
+
-
- Repository -
-
- , - "container":
-
- github.com -
Repository @@ -113,9 +171,88 @@ exports[`components/AccountNotifications.tsx should render itself (github.com wi "baseElement":
- github.com +
+ + + + +
+
+ +
+
+
+ , + "container":
+
+
+ + + + +
+
- , - "container":
-
- github.com - -
, "debug": [Function], "findAllByAltText": [Function], diff --git a/src/context/App.test.tsx b/src/context/App.test.tsx index 23adaed93..becbd1890 100644 --- a/src/context/App.test.tsx +++ b/src/context/App.test.tsx @@ -3,6 +3,7 @@ import { useContext } from 'react'; import { mockAuth, mockSettings } from '../__mocks__/state-mocks'; import { useNotifications } from '../hooks/useNotifications'; import type { AuthState, SettingsState } from '../types'; +import { mockSingleNotification } from '../utils/api/__mocks__/response-mocks'; import * as apiRequests from '../utils/api/request'; import * as comms from '../utils/comms'; import Constants from '../utils/constants'; @@ -121,7 +122,7 @@ describe('context/App.tsx', () => { return ( @@ -137,8 +138,7 @@ describe('context/App.tsx', () => { expect(markNotificationReadMock).toHaveBeenCalledTimes(1); expect(markNotificationReadMock).toHaveBeenCalledWith( mockDefaultState, - '123-456', - 'github.com', + mockSingleNotification, ); }); @@ -149,7 +149,7 @@ describe('context/App.tsx', () => { return ( @@ -165,8 +165,7 @@ describe('context/App.tsx', () => { expect(markNotificationDoneMock).toHaveBeenCalledTimes(1); expect(markNotificationDoneMock).toHaveBeenCalledWith( mockDefaultState, - '123-456', - 'github.com', + mockSingleNotification, ); }); @@ -177,7 +176,7 @@ describe('context/App.tsx', () => { return ( @@ -193,8 +192,7 @@ describe('context/App.tsx', () => { expect(unsubscribeNotificationMock).toHaveBeenCalledTimes(1); expect(unsubscribeNotificationMock).toHaveBeenCalledWith( mockDefaultState, - '123-456', - 'github.com', + mockSingleNotification, ); }); @@ -205,12 +203,7 @@ describe('context/App.tsx', () => { return ( @@ -226,8 +219,7 @@ describe('context/App.tsx', () => { expect(markRepoNotificationsReadMock).toHaveBeenCalledTimes(1); expect(markRepoNotificationsReadMock).toHaveBeenCalledWith( mockDefaultState, - 'gitify-app/notifications-test', - 'github.com', + mockSingleNotification, ); }); @@ -238,12 +230,7 @@ describe('context/App.tsx', () => { return ( @@ -267,8 +254,7 @@ describe('context/App.tsx', () => { }, settings: mockSettings, }, - 'gitify-app/notifications-test', - 'github.com', + mockSingleNotification, ); }); }); diff --git a/src/context/App.tsx b/src/context/App.tsx index 6ff3a1f17..00e3d1d29 100644 --- a/src/context/App.tsx +++ b/src/context/App.tsx @@ -17,6 +17,7 @@ import { type Status, Theme, } from '../types'; +import type { Notification } from '../typesGitHub'; import { headNotifications } from '../utils/api/client'; import { migrateAuthenticatedAccounts } from '../utils/auth/migration'; import type { @@ -72,15 +73,14 @@ interface AppContextState { errorDetails: GitifyError; removeNotificationFromState: ( settings: SettingsState, - id: string, - hostname: string, + notification: Notification, ) => void; fetchNotifications: () => Promise; - markNotificationRead: (id: string, hostname: string) => Promise; - markNotificationDone: (id: string, hostname: string) => Promise; - unsubscribeNotification: (id: string, hostname: string) => Promise; - markRepoNotificationsRead: (id: string, hostname: string) => Promise; - markRepoNotificationsDone: (id: string, hostname: string) => Promise; + markNotificationRead: (notification: Notification) => Promise; + markNotificationDone: (notification: Notification) => Promise; + unsubscribeNotification: (notification: Notification) => Promise; + markRepoNotificationsRead: (notification: Notification) => Promise; + markRepoNotificationsDone: (notification: Notification) => Promise; settings: SettingsState; updateSetting: ( @@ -231,32 +231,32 @@ export const AppProvider = ({ children }: { children: ReactNode }) => { ); const markNotificationReadWithAccounts = useCallback( - async (id: string, hostname: string) => - await markNotificationRead({ auth, settings }, id, hostname), + async (notification: Notification) => + await markNotificationRead({ auth, settings }, notification), [auth, notifications], ); const markNotificationDoneWithAccounts = useCallback( - async (id: string, hostname: string) => - await markNotificationDone({ auth, settings }, id, hostname), + async (notification: Notification) => + await markNotificationDone({ auth, settings }, notification), [auth, notifications], ); const unsubscribeNotificationWithAccounts = useCallback( - async (id: string, hostname: string) => - await unsubscribeNotification({ auth, settings }, id, hostname), + async (notification: Notification) => + await unsubscribeNotification({ auth, settings }, notification), [auth, notifications], ); const markRepoNotificationsReadWithAccounts = useCallback( - async (repoSlug: string, hostname: string) => - await markRepoNotificationsRead({ auth, settings }, repoSlug, hostname), + async (notification: Notification) => + await markRepoNotificationsRead({ auth, settings }, notification), [auth, notifications], ); const markRepoNotificationsDoneWithAccounts = useCallback( - async (repoSlug: string, hostname: string) => - await markRepoNotificationsDone({ auth, settings }, repoSlug, hostname), + async (notification: Notification) => + await markRepoNotificationsDone({ auth, settings }, notification), [auth, notifications], ); diff --git a/src/hooks/useNotifications.test.ts b/src/hooks/useNotifications.test.ts index fe562e389..c76ab45da 100644 --- a/src/hooks/useNotifications.test.ts +++ b/src/hooks/useNotifications.test.ts @@ -8,7 +8,10 @@ import { mockSettings, mockState, } from '../__mocks__/state-mocks'; -import { mockNotificationUser } from '../utils/api/__mocks__/response-mocks'; +import { + mockNotificationUser, + mockSingleNotification, +} from '../utils/api/__mocks__/response-mocks'; import { Errors } from '../utils/constants'; import { useNotifications } from './useNotifications'; @@ -19,6 +22,8 @@ describe('hooks/useNotifications.ts', () => { axios.defaults.adapter = 'http'; }); + const id = mockSingleNotification.id; + describe('fetchNotifications', () => { it('should fetch non-detailed notifications with success', async () => { const mockState = { @@ -323,8 +328,7 @@ describe('hooks/useNotifications.ts', () => { act(() => { result.current.removeNotificationFromState( mockSettings, - result.current.notifications[0].notifications[0].id, - result.current.notifications[0].account.hostname, + result.current.notifications[0].notifications[0], ); }); @@ -333,9 +337,6 @@ describe('hooks/useNotifications.ts', () => { }); describe('markNotificationRead', () => { - const hostname = 'github.com'; - const id = 'notification-123'; - it('should mark a notification as read with success', async () => { nock('https://api.github.com/') .patch(`/notifications/threads/${id}`) @@ -344,7 +345,7 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.markNotificationRead(mockState, id, hostname); + result.current.markNotificationRead(mockState, mockSingleNotification); }); await waitFor(() => { @@ -362,7 +363,7 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.markNotificationRead(mockState, id, hostname); + result.current.markNotificationRead(mockState, mockSingleNotification); }); await waitFor(() => { @@ -374,9 +375,6 @@ describe('hooks/useNotifications.ts', () => { }); describe('markNotificationDone', () => { - const hostname = 'github.com'; - const id = 'notification-123'; - it('should mark a notification as done with success', async () => { nock('https://api.github.com/') .delete(`/notifications/threads/${id}`) @@ -385,7 +383,7 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.markNotificationDone(mockState, id, hostname); + result.current.markNotificationDone(mockState, mockSingleNotification); }); await waitFor(() => { @@ -403,7 +401,7 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.markNotificationDone(mockState, id, hostname); + result.current.markNotificationDone(mockState, mockSingleNotification); }); await waitFor(() => { @@ -415,7 +413,6 @@ describe('hooks/useNotifications.ts', () => { }); describe('unsubscribeNotification', () => { - const hostname = 'github.com'; const id = 'notification-123'; it('should unsubscribe from a notification with success', async () => { @@ -432,7 +429,10 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.unsubscribeNotification(mockState, id, hostname); + result.current.unsubscribeNotification( + mockState, + mockSingleNotification, + ); }); await waitFor(() => { @@ -456,7 +456,10 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.unsubscribeNotification(mockState, id, hostname); + result.current.unsubscribeNotification( + mockState, + mockSingleNotification, + ); }); await waitFor(() => { @@ -468,7 +471,6 @@ describe('hooks/useNotifications.ts', () => { }); describe('markRepoNotificationsRead', () => { - const hostname = 'github.com'; const repoSlug = 'gitify-app/notifications-test'; it("should mark a repository's notifications as read with success", async () => { @@ -479,7 +481,10 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.markRepoNotificationsRead(mockState, repoSlug, hostname); + result.current.markRepoNotificationsRead( + mockState, + mockSingleNotification, + ); }); await waitFor(() => { @@ -497,7 +502,10 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.markRepoNotificationsRead(mockState, repoSlug, hostname); + result.current.markRepoNotificationsRead( + mockState, + mockSingleNotification, + ); }); await waitFor(() => { @@ -509,10 +517,6 @@ describe('hooks/useNotifications.ts', () => { }); describe('markRepoNotificationsDone', () => { - const hostname = 'github.com'; - const repoSlug = 'gitify-app/notifications-test'; - const id = 'notification-123'; - it("should mark a repository's notifications as done with success", async () => { nock('https://api.github.com/') .delete(`/notifications/threads/${id}`) @@ -521,7 +525,10 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.markRepoNotificationsDone(mockState, repoSlug, hostname); + result.current.markRepoNotificationsDone( + mockState, + mockSingleNotification, + ); }); await waitFor(() => { @@ -539,7 +546,10 @@ describe('hooks/useNotifications.ts', () => { const { result } = renderHook(() => useNotifications()); act(() => { - result.current.markRepoNotificationsDone(mockState, repoSlug, hostname); + result.current.markRepoNotificationsDone( + mockState, + mockSingleNotification, + ); }); await waitFor(() => { diff --git a/src/hooks/useNotifications.ts b/src/hooks/useNotifications.ts index 2dc518846..d2c54b78b 100644 --- a/src/hooks/useNotifications.ts +++ b/src/hooks/useNotifications.ts @@ -6,6 +6,7 @@ import type { SettingsState, Status, } from '../types'; +import type { Notification } from '../typesGitHub'; import { ignoreNotificationThreadSubscription, markNotificationThreadAsDone, @@ -13,7 +14,7 @@ import { markRepositoryNotificationsAsRead, } from '../utils/api/client'; import { determineFailureType } from '../utils/api/errors'; -import { getAccountForHost } from '../utils/helpers'; +import { getAccountUUID } from '../utils/auth/utils'; import { getAllNotifications, setTrayIconColor, @@ -26,34 +27,28 @@ interface NotificationsState { notifications: AccountNotifications[]; removeNotificationFromState: ( settings: SettingsState, - id: string, - hostname: string, + notification: Notification, ) => void; fetchNotifications: (state: GitifyState) => Promise; markNotificationRead: ( state: GitifyState, - id: string, - hostname: string, + notification: Notification, ) => Promise; markNotificationDone: ( state: GitifyState, - id: string, - hostname: string, + notification: Notification, ) => Promise; unsubscribeNotification: ( state: GitifyState, - id: string, - hostname: string, + notification: Notification, ) => Promise; markRepoNotificationsRead: ( state: GitifyState, - repoSlug: string, - hostname: string, + notification: Notification, ) => Promise; markRepoNotificationsDone: ( state: GitifyState, - repoSlug: string, - hostname: string, + notification: Notification, ) => Promise; status: Status; errorDetails: GitifyError; @@ -86,19 +81,20 @@ export const useNotifications = (): NotificationsState => { ); const markNotificationRead = useCallback( - async (state: GitifyState, id: string, hostname: string) => { + async (state: GitifyState, notification: Notification) => { setStatus('loading'); - const account = getAccountForHost(hostname, state.auth); - try { - await markNotificationThreadAsRead(id, hostname, account.token); + await markNotificationThreadAsRead( + notification.id, + notification.account.hostname, + notification.account.token, + ); const updatedNotifications = removeNotification( state.settings, - id, + notification, notifications, - hostname, ); setNotifications(updatedNotifications); @@ -112,19 +108,20 @@ export const useNotifications = (): NotificationsState => { ); const markNotificationDone = useCallback( - async (state: GitifyState, id: string, hostname: string) => { + async (state: GitifyState, notification: Notification) => { setStatus('loading'); - const account = getAccountForHost(hostname, state.auth); - try { - await markNotificationThreadAsDone(id, hostname, account.token); + await markNotificationThreadAsDone( + notification.id, + notification.account.hostname, + notification.account.token, + ); const updatedNotifications = removeNotification( state.settings, - id, + notification, notifications, - hostname, ); setNotifications(updatedNotifications); @@ -138,14 +135,16 @@ export const useNotifications = (): NotificationsState => { ); const unsubscribeNotification = useCallback( - async (state: GitifyState, id: string, hostname: string) => { + async (state: GitifyState, notification: Notification) => { setStatus('loading'); - const account = getAccountForHost(hostname, state.auth); - try { - await ignoreNotificationThreadSubscription(id, hostname, account.token); - await markNotificationRead(state, id, hostname); + await ignoreNotificationThreadSubscription( + notification.id, + notification.account.hostname, + notification.account.token, + ); + await markNotificationRead(state, notification); setStatus('success'); } catch (err) { setStatus('success'); @@ -155,21 +154,21 @@ export const useNotifications = (): NotificationsState => { ); const markRepoNotificationsRead = useCallback( - async (state: GitifyState, repoSlug: string, hostname: string) => { + async (state: GitifyState, notification: Notification) => { setStatus('loading'); - const account = getAccountForHost(hostname, state.auth); + const repoSlug = notification.repository.full_name; + const hostname = notification.account.hostname; try { await markRepositoryNotificationsAsRead( repoSlug, hostname, - account.token, + notification.account.token, ); const updatedNotifications = removeNotifications( - repoSlug, + notification, notifications, - hostname, ); setNotifications(updatedNotifications); @@ -183,13 +182,16 @@ export const useNotifications = (): NotificationsState => { ); const markRepoNotificationsDone = useCallback( - async (state: GitifyState, repoSlug: string, hostname: string) => { + async (state: GitifyState, notification: Notification) => { setStatus('loading'); + const repoSlug = notification.repository.full_name; + try { const accountIndex = notifications.findIndex( (accountNotifications) => - accountNotifications.account.hostname === hostname, + getAccountUUID(accountNotifications.account) === + getAccountUUID(notification.account), ); if (accountIndex !== -1) { @@ -201,19 +203,14 @@ export const useNotifications = (): NotificationsState => { await Promise.all( notificationsToRemove.map((notification) => - markNotificationDone( - state, - notification.id, - notifications[accountIndex].account.hostname, - ), + markNotificationDone(state, notification), ), ); } const updatedNotifications = removeNotifications( - repoSlug, + notification, notifications, - hostname, ); setNotifications(updatedNotifications); @@ -227,12 +224,11 @@ export const useNotifications = (): NotificationsState => { ); const removeNotificationFromState = useCallback( - (settings: SettingsState, id: string, hostname: string) => { + (settings: SettingsState, notification: Notification) => { const updatedNotifications = removeNotification( settings, - id, + notification, notifications, - hostname, ); setNotifications(updatedNotifications); diff --git a/src/routes/Accounts.test.tsx b/src/routes/Accounts.test.tsx index 0d7693c02..dc9e3b923 100644 --- a/src/routes/Accounts.test.tsx +++ b/src/routes/Accounts.test.tsx @@ -9,6 +9,8 @@ import { } from '../__mocks__/state-mocks'; import { AppContext } from '../context/App'; import * as comms from '../utils/comms'; +import * as links from '../utils/links'; + import { AccountsRoute } from './Accounts'; const mockNavigate = jest.fn(); @@ -71,7 +73,7 @@ describe('routes/Accounts.tsx', () => { describe('Account interactions', () => { it('open profile in external browser', async () => { - const openExternalLinkMock = jest.spyOn(comms, 'openExternalLink'); + const openAccountProfileMock = jest.spyOn(links, 'openAccountProfile'); await act(async () => { render( @@ -92,9 +94,9 @@ describe('routes/Accounts.tsx', () => { fireEvent.click(screen.getByTitle('Open Profile')); - expect(openExternalLinkMock).toHaveBeenCalledTimes(1); - expect(openExternalLinkMock).toHaveBeenCalledWith( - 'https://github.com/octocat', + expect(openAccountProfileMock).toHaveBeenCalledTimes(1); + expect(openAccountProfileMock).toHaveBeenCalledWith( + mockPersonalAccessTokenAccount, ); }); @@ -188,101 +190,57 @@ describe('routes/Accounts.tsx', () => { }); describe('Add new accounts', () => { - describe('Login with Personal Access Token', () => { - it('should show login with personal access token button if not logged in', async () => { - await act(async () => { - render( - - - - - , - ); - }); - - expect( - screen.getByTitle('Login with Personal Access Token').hidden, - ).toBe(false); - - fireEvent.click(screen.getByTitle('Login with Personal Access Token')); - expect(mockNavigate).toHaveBeenNthCalledWith( - 1, - '/login-personal-access-token', - { - replace: true, - }, + it('should show login with personal access token', async () => { + await act(async () => { + render( + + + + + , ); }); - it('should hide login with personal access token button if already logged in', async () => { - await act(async () => { - render( - - - - - , - ); - }); + expect(screen.getByTitle('Login with Personal Access Token').hidden).toBe( + false, + ); - expect( - screen.getByTitle('Login with Personal Access Token').hidden, - ).toBe(true); - }); + fireEvent.click(screen.getByTitle('Login with Personal Access Token')); + expect(mockNavigate).toHaveBeenNthCalledWith( + 1, + '/login-personal-access-token', + { + replace: true, + }, + ); }); - describe('Login with OAuth App', () => { - it('should show login with oauth app if not logged in', async () => { - await act(async () => { - render( - - - - - , - ); - }); - - expect(screen.getByTitle('Login with OAuth App').hidden).toBe(false); - - fireEvent.click(screen.getByTitle('Login with OAuth App')); - expect(mockNavigate).toHaveBeenNthCalledWith(1, '/login-oauth-app', { - replace: true, - }); + it('should show login with oauth app', async () => { + await act(async () => { + render( + + + + + , + ); }); - it('should hide login with oauth app route if already logged in', async () => { - await act(async () => { - render( - - - - - , - ); - }); + expect(screen.getByTitle('Login with OAuth App').hidden).toBe(false); - expect(screen.getByTitle('Login with OAuth App').hidden).toBe(true); + fireEvent.click(screen.getByTitle('Login with OAuth App')); + expect(mockNavigate).toHaveBeenNthCalledWith(1, '/login-oauth-app', { + replace: true, }); }); }); diff --git a/src/routes/Accounts.tsx b/src/routes/Accounts.tsx index c89870fee..99a84413e 100644 --- a/src/routes/Accounts.tsx +++ b/src/routes/Accounts.tsx @@ -17,10 +17,6 @@ import { BUTTON_CLASS_NAME } from '../styles/gitify'; import type { Account } from '../types'; import { getAccountUUID } from '../utils/auth/utils'; import { updateTrayIcon, updateTrayTitle } from '../utils/comms'; -import { - isOAuthAppLoggedIn, - isPersonalAccessTokenLoggedIn, -} from '../utils/helpers'; import { openAccountProfile, openDeveloperSettings, @@ -141,7 +137,6 @@ export const AccountsRoute: FC = () => { className={BUTTON_CLASS_NAME} title="Login with Personal Access Token" onClick={loginWithPersonalAccessToken} - hidden={isPersonalAccessTokenLoggedIn(auth)} > @@ -151,7 +146,6 @@ export const AccountsRoute: FC = () => { className={BUTTON_CLASS_NAME} title="Login with OAuth App" onClick={loginWithOAuthApp} - hidden={isOAuthAppLoggedIn(auth)} > diff --git a/src/routes/Notifications.tsx b/src/routes/Notifications.tsx index 626d938d8..13e0dbd47 100644 --- a/src/routes/Notifications.tsx +++ b/src/routes/Notifications.tsx @@ -3,6 +3,7 @@ import { AccountNotifications } from '../components/AccountNotifications'; import { AllRead } from '../components/AllRead'; import { Oops } from '../components/Oops'; import { AppContext } from '../context/App'; +import { getAccountUUID } from '../utils/auth/utils'; import { Errors } from '../utils/constants'; import { getNotificationCount } from '../utils/notifications'; @@ -35,8 +36,8 @@ export const NotificationsRoute: FC = () => {
{notifications.map((accountNotifications) => ( - + )} + {notification.subject.reviews?.map((review) => { const icon = getPullRequestReviewIcon(review); if (!icon) { @@ -161,59 +158,41 @@ export const NotificationRow: FC = ({ notification, account }) => { } return ( - - - + ); })} {notification.subject?.comments > 0 && ( - - - + )} {notification.subject?.labels?.length > 0 && ( - - - + )} {notification.subject.milestone && ( - - - + icon={MilestoneIcon} + color={ + notification.subject.milestone.state === 'open' + ? IconColor.GREEN + : IconColor.RED + } + /> )}
)} diff --git a/src/components/__snapshots__/NotificationRow.test.tsx.snap b/src/components/__snapshots__/NotificationRow.test.tsx.snap index 2a20cdc13..270ecb255 100644 --- a/src/components/__snapshots__/NotificationRow.test.tsx.snap +++ b/src/components/__snapshots__/NotificationRow.test.tsx.snap @@ -3377,7 +3377,6 @@ exports[`components/NotificationRow.tsx notification pills / metrics milestone p + + ); +}; diff --git a/src/components/buttons/__snapshots__/PillButton.test.tsx.snap b/src/components/buttons/__snapshots__/PillButton.test.tsx.snap new file mode 100644 index 000000000..000c3b996 --- /dev/null +++ b/src/components/buttons/__snapshots__/PillButton.test.tsx.snap @@ -0,0 +1,114 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`components/buttons/PillButton.tsx should render 1`] = ` +{ + "asFragment": [Function], + "baseElement": +
+ + + +
+ , + "container":
+ + + +
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; diff --git a/src/styles/gitify.ts b/src/styles/gitify.ts index f33ad0229..22be10267 100644 --- a/src/styles/gitify.ts +++ b/src/styles/gitify.ts @@ -4,7 +4,4 @@ export const BUTTON_CLASS_NAME = export const BUTTON_SIDEBAR_CLASS_NAME = 'flex justify-evenly items-center bg-transparent border-0 w-full text-sm text-white my-1 py-2 cursor-pointer hover:text-gray-500 focus:outline-none disabled:text-gray-500 disabled:cursor-default'; -export const PILL_CLASS_NAME = - 'rounded-full text-xss px-1 m-0.5 bg-gray-100 hover:bg-gray-200 dark:bg-gray-800 dark:hover:bg-gray-700'; - export const READ_NOTIFICATION_CLASS_NAME = 'opacity-50 dark:opacity-50'; From 4ebdbda109d67dafd4e90f9cb280b4d5257c53ac Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Wed, 12 Jun 2024 07:11:22 -0400 Subject: [PATCH 212/251] build: update validator --- .github/workflows/validator.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/validator.yml b/.github/workflows/validator.yml index 725d57315..2aa9c2f8c 100644 --- a/.github/workflows/validator.yml +++ b/.github/workflows/validator.yml @@ -9,8 +9,7 @@ jobs: name: Validate PR title runs-on: ubuntu-latest steps: - - name: Validate PR title - uses: actions/github-script@v7 + - uses: actions/github-script@v7 with: script: | const title = context.payload.pull_request.title; From 55a2ed0d1993698f24aad739d471487855b3f3a6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Jun 2024 07:24:12 -0400 Subject: [PATCH 213/251] chore(deps): update dependency webpack to v5.92.0 (#1225) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 91 +++++++++++++++++++++++++++----------------------- 2 files changed, 51 insertions(+), 42 deletions(-) diff --git a/package.json b/package.json index 8b4e0f645..6497fcf7e 100644 --- a/package.json +++ b/package.json @@ -149,7 +149,7 @@ "tailwindcss": "3.4.4", "ts-jest": "29.1.4", "ts-node": "10.9.2", - "webpack": "5.91.0", + "webpack": "5.92.0", "webpack-cli": "5.1.4", "webpack-merge": "5.10.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bb49d05de..df304e53b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -49,7 +49,7 @@ importers: version: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) ts-loader: specifier: 9.5.1 - version: 9.5.1(typescript@5.4.5)(webpack@5.91.0(webpack-cli@5.1.4)) + version: 9.5.1(typescript@5.4.5)(webpack@5.92.0(webpack-cli@5.1.4)) typescript: specifier: 5.4.5 version: 5.4.5 @@ -86,7 +86,7 @@ importers: version: 10.4.19(postcss@8.4.38) css-loader: specifier: 7.1.2 - version: 7.1.2(webpack@5.91.0(webpack-cli@5.1.4)) + version: 7.1.2(webpack@5.92.0(webpack-cli@5.1.4)) electron: specifier: 31.0.0 version: 31.0.0 @@ -113,13 +113,13 @@ importers: version: 8.4.38 postcss-loader: specifier: 8.1.1 - version: 8.1.1(postcss@8.4.38)(typescript@5.4.5)(webpack@5.91.0(webpack-cli@5.1.4)) + version: 8.1.1(postcss@8.4.38)(typescript@5.4.5)(webpack@5.92.0(webpack-cli@5.1.4)) rimraf: specifier: 5.0.7 version: 5.0.7 style-loader: specifier: 4.0.0 - version: 4.0.0(webpack@5.91.0(webpack-cli@5.1.4)) + version: 4.0.0(webpack@5.92.0(webpack-cli@5.1.4)) tailwindcss: specifier: 3.4.4 version: 3.4.4(ts-node@10.9.2(@types/node@20.14.2)(typescript@5.4.5)) @@ -130,11 +130,11 @@ importers: specifier: 10.9.2 version: 10.9.2(@types/node@20.14.2)(typescript@5.4.5) webpack: - specifier: 5.91.0 - version: 5.91.0(webpack-cli@5.1.4) + specifier: 5.92.0 + version: 5.92.0(webpack-cli@5.1.4) webpack-cli: specifier: 5.1.4 - version: 5.1.4(webpack@5.91.0) + version: 5.1.4(webpack@5.92.0) webpack-merge: specifier: 5.10.0 version: 5.10.0 @@ -808,8 +808,8 @@ packages: acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} - acorn-import-assertions@1.9.0: - resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} peerDependencies: acorn: ^8 @@ -1387,6 +1387,10 @@ packages: resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} engines: {node: '>=10.13.0'} + enhanced-resolve@5.17.0: + resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} + engines: {node: '>=10.13.0'} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -3061,8 +3065,8 @@ packages: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} - webpack@5.91.0: - resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} + webpack@5.92.0: + resolution: {integrity: sha512-Bsw2X39MYIgxouNATyVpCNVWBCuUwDgWtN78g6lSdPJRLaQ/PUVm/oXcaRAyY/sMFoKFQrsPeqvTizWtq7QPCA==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -4004,20 +4008,20 @@ snapshots: '@webassemblyjs/ast': 1.12.1 '@xtuc/long': 4.2.2 - '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack@5.91.0))(webpack@5.91.0(webpack-cli@5.1.4))': + '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack@5.92.0))(webpack@5.92.0(webpack-cli@5.1.4))': dependencies: - webpack: 5.91.0(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.91.0) + webpack: 5.92.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.92.0) - '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack@5.91.0))(webpack@5.91.0(webpack-cli@5.1.4))': + '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack@5.92.0))(webpack@5.92.0(webpack-cli@5.1.4))': dependencies: - webpack: 5.91.0(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.91.0) + webpack: 5.92.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.92.0) - '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack@5.91.0))(webpack@5.91.0(webpack-cli@5.1.4))': + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack@5.92.0))(webpack@5.92.0(webpack-cli@5.1.4))': dependencies: - webpack: 5.91.0(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.91.0) + webpack: 5.92.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.92.0) '@xmldom/xmldom@0.8.10': {} @@ -4032,7 +4036,7 @@ snapshots: acorn: 8.11.3 acorn-walk: 8.3.2 - acorn-import-assertions@1.9.0(acorn@8.11.3): + acorn-import-attributes@1.9.5(acorn@8.11.3): dependencies: acorn: 8.11.3 @@ -4518,7 +4522,7 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-loader@7.1.2(webpack@5.91.0(webpack-cli@5.1.4)): + css-loader@7.1.2(webpack@5.92.0(webpack-cli@5.1.4)): dependencies: icss-utils: 5.1.0(postcss@8.4.38) postcss: 8.4.38 @@ -4529,7 +4533,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.0 optionalDependencies: - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.92.0(webpack-cli@5.1.4) cssesc@3.0.0: {} @@ -4729,6 +4733,11 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.2.1 + enhanced-resolve@5.17.0: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + entities@4.5.0: {} env-paths@2.2.1: {} @@ -5876,14 +5885,14 @@ snapshots: postcss: 8.4.38 ts-node: 10.9.2(@types/node@20.14.2)(typescript@5.4.5) - postcss-loader@8.1.1(postcss@8.4.38)(typescript@5.4.5)(webpack@5.91.0(webpack-cli@5.1.4)): + postcss-loader@8.1.1(postcss@8.4.38)(typescript@5.4.5)(webpack@5.92.0(webpack-cli@5.1.4)): dependencies: cosmiconfig: 9.0.0(typescript@5.4.5) jiti: 1.21.0 postcss: 8.4.38 semver: 7.6.0 optionalDependencies: - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.92.0(webpack-cli@5.1.4) transitivePeerDependencies: - typescript @@ -6259,9 +6268,9 @@ snapshots: strip-json-comments@3.1.1: {} - style-loader@4.0.0(webpack@5.91.0(webpack-cli@5.1.4)): + style-loader@4.0.0(webpack@5.92.0(webpack-cli@5.1.4)): dependencies: - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.92.0(webpack-cli@5.1.4) sucrase@3.35.0: dependencies: @@ -6346,14 +6355,14 @@ snapshots: async-exit-hook: 2.0.1 fs-extra: 10.1.0 - terser-webpack-plugin@5.3.10(webpack@5.91.0(webpack-cli@5.1.4)): + terser-webpack-plugin@5.3.10(webpack@5.92.0(webpack-cli@5.1.4)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.30.0 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.92.0(webpack-cli@5.1.4) terser@5.30.0: dependencies: @@ -6427,7 +6436,7 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.24.3) - ts-loader@9.5.1(typescript@5.4.5)(webpack@5.91.0(webpack-cli@5.1.4)): + ts-loader@9.5.1(typescript@5.4.5)(webpack@5.92.0(webpack-cli@5.1.4)): dependencies: chalk: 4.1.2 enhanced-resolve: 5.16.0 @@ -6435,7 +6444,7 @@ snapshots: semver: 7.6.0 source-map: 0.7.4 typescript: 5.4.5 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.92.0(webpack-cli@5.1.4) ts-node@10.9.2(@types/node@20.14.2)(typescript@5.4.5): dependencies: @@ -6523,12 +6532,12 @@ snapshots: webidl-conversions@7.0.0: {} - webpack-cli@5.1.4(webpack@5.91.0): + webpack-cli@5.1.4(webpack@5.92.0): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4(webpack@5.91.0))(webpack@5.91.0(webpack-cli@5.1.4)) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4(webpack@5.91.0))(webpack@5.91.0(webpack-cli@5.1.4)) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4(webpack@5.91.0))(webpack@5.91.0(webpack-cli@5.1.4)) + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4(webpack@5.92.0))(webpack@5.92.0(webpack-cli@5.1.4)) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4(webpack@5.92.0))(webpack@5.92.0(webpack-cli@5.1.4)) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4(webpack@5.92.0))(webpack@5.92.0(webpack-cli@5.1.4)) colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.3 @@ -6537,7 +6546,7 @@ snapshots: import-local: 3.1.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.91.0(webpack-cli@5.1.4) + webpack: 5.92.0(webpack-cli@5.1.4) webpack-merge: 5.10.0 webpack-merge@5.10.0: @@ -6548,7 +6557,7 @@ snapshots: webpack-sources@3.2.3: {} - webpack@5.91.0(webpack-cli@5.1.4): + webpack@5.92.0(webpack-cli@5.1.4): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.5 @@ -6556,10 +6565,10 @@ snapshots: '@webassemblyjs/wasm-edit': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 acorn: 8.11.3 - acorn-import-assertions: 1.9.0(acorn@8.11.3) + acorn-import-attributes: 1.9.5(acorn@8.11.3) browserslist: 4.23.0 chrome-trace-event: 1.0.3 - enhanced-resolve: 5.16.0 + enhanced-resolve: 5.17.0 es-module-lexer: 1.5.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -6571,11 +6580,11 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.91.0(webpack-cli@5.1.4)) + terser-webpack-plugin: 5.3.10(webpack@5.92.0(webpack-cli@5.1.4)) watchpack: 2.4.1 webpack-sources: 3.2.3 optionalDependencies: - webpack-cli: 5.1.4(webpack@5.91.0) + webpack-cli: 5.1.4(webpack@5.92.0) transitivePeerDependencies: - '@swc/core' - esbuild From 06a5b3ed5a1b72a05e8d8fb3952d28f4c7278b9a Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Wed, 12 Jun 2024 17:28:43 -0400 Subject: [PATCH 214/251] refactor: all read emojis constant --- src/components/AllRead.tsx | 4 ++-- src/utils/constants.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/AllRead.tsx b/src/components/AllRead.tsx index 48cb20711..37efc892d 100644 --- a/src/components/AllRead.tsx +++ b/src/components/AllRead.tsx @@ -4,8 +4,8 @@ import { Constants } from '../utils/constants'; export const AllRead = () => { const emoji = useMemo( () => - Constants.ALLREAD_EMOJIS[ - Math.floor(Math.random() * Constants.ALLREAD_EMOJIS.length) + Constants.ALL_READ_EMOJIS[ + Math.floor(Math.random() * Constants.ALL_READ_EMOJIS.length) ], [], ); diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 9653b7d8b..46d17f8fc 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -18,7 +18,7 @@ export const Constants = { // Storage STORAGE_KEY: 'gitify-storage', - ALLREAD_EMOJIS: ['😉', '🎉', '🐯', '🙈', '🎈', '🎊', '👏', '🎪', '🍝'], + ALL_READ_EMOJIS: ['😉', '🎉', '🐯', '🙈', '🎈', '🎊', '👏', '🎪', '🍝'], FETCH_INTERVAL: 60000, From 0a4f5ca2fd6b764d5d203e699bf404337527c00a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Jun 2024 21:22:21 -0400 Subject: [PATCH 215/251] chore(deps): update dependency electron to v31.0.1 (#1227) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 6497fcf7e..482d917a7 100644 --- a/package.json +++ b/package.json @@ -135,7 +135,7 @@ "@types/react-transition-group": "4.4.10", "autoprefixer": "10.4.19", "css-loader": "7.1.2", - "electron": "31.0.0", + "electron": "31.0.1", "electron-builder": "24.13.3", "graphql-tag": "2.12.6", "husky": "9.0.11", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index df304e53b..227ae2df0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: '@electron/remote': specifier: 2.1.2 - version: 2.1.2(electron@31.0.0) + version: 2.1.2(electron@31.0.1) '@primer/octicons-react': specifier: 19.9.0 version: 19.9.0(react@18.3.1) @@ -28,7 +28,7 @@ importers: version: 4.20.10 menubar: specifier: 9.4.0 - version: 9.4.0(electron@31.0.0) + version: 9.4.0(electron@31.0.1) nprogress: specifier: 0.2.0 version: 0.2.0 @@ -88,8 +88,8 @@ importers: specifier: 7.1.2 version: 7.1.2(webpack@5.92.0(webpack-cli@5.1.4)) electron: - specifier: 31.0.0 - version: 31.0.0 + specifier: 31.0.1 + version: 31.0.1 electron-builder: specifier: 24.13.3 version: 24.13.3(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3)) @@ -1365,8 +1365,8 @@ packages: electron-updater@6.2.1: resolution: {integrity: sha512-83eKIPW14qwZqUUM6wdsIRwVKZyjmHxQ4/8G+1C6iS5PdDt7b1umYQyj1/qPpH510GmHEQe4q0kCPe3qmb3a0Q==} - electron@31.0.0: - resolution: {integrity: sha512-yJMhwu5NVqor7h5mt65uKtBsjSAD7NiRwNCigK8xAlJMaP0X2FKipEzQocOzusy7E0dny4gkTgOTATy+ucDtjw==} + electron@31.0.1: + resolution: {integrity: sha512-2eBcp4iqLkTsml6mMq+iqrS5u3kJ/2mpOLP7Mj7lo0uNK3OyfNqRS9z1ArsHjBF2/HV250Te/O9nKrwQRTX/+g==} engines: {node: '>= 12.20.55'} hasBin: true @@ -3479,9 +3479,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@electron/remote@2.1.2(electron@31.0.0)': + '@electron/remote@2.1.2(electron@31.0.1)': dependencies: - electron: 31.0.0 + electron: 31.0.1 '@electron/universal@1.5.1': dependencies: @@ -4710,7 +4710,7 @@ snapshots: transitivePeerDependencies: - supports-color - electron@31.0.0: + electron@31.0.1: dependencies: '@electron/get': 2.0.3 '@types/node': 20.14.2 @@ -5686,9 +5686,9 @@ snapshots: escape-string-regexp: 4.0.0 optional: true - menubar@9.4.0(electron@31.0.0): + menubar@9.4.0(electron@31.0.1): dependencies: - electron: 31.0.0 + electron: 31.0.1 electron-positioner: 4.1.0 merge-stream@2.0.0: {} From b9b8a99f91e337f4e85ff2929879e5112a513e16 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Thu, 13 Jun 2024 07:55:37 -0400 Subject: [PATCH 216/251] feat: account notifications toggle via chevron (#1218) * feat: account notifications toggle via chevron * feat: account notifications toggle via chevron --- src/components/AccountNotifications.test.tsx | 17 + src/components/AccountNotifications.tsx | 58 +++- .../AccountNotifications.test.tsx.snap | 328 +++++++++++++++--- 3 files changed, 350 insertions(+), 53 deletions(-) diff --git a/src/components/AccountNotifications.test.tsx b/src/components/AccountNotifications.test.tsx index c3021424d..c8806b2ca 100644 --- a/src/components/AccountNotifications.test.tsx +++ b/src/components/AccountNotifications.test.tsx @@ -49,4 +49,21 @@ describe('components/AccountNotifications.tsx', () => { expect(openAccountProfileMock).toHaveBeenCalledTimes(1); expect(openAccountProfileMock).toHaveBeenCalledWith(mockGitHubCloudAccount); }); + + it('should toggle account notifications visibility', async () => { + const props = { + account: mockGitHubCloudAccount, + notifications: mockGitHubNotifications, + showAccountHostname: true, + }; + + await act(async () => { + render(); + }); + + fireEvent.click(screen.getByTitle('Hide account notifications')); + + const tree = render(); + expect(tree).toMatchSnapshot(); + }); }); diff --git a/src/components/AccountNotifications.tsx b/src/components/AccountNotifications.tsx index 0bda63707..d4a9ebcfd 100644 --- a/src/components/AccountNotifications.tsx +++ b/src/components/AccountNotifications.tsx @@ -1,4 +1,9 @@ -import { ChevronDownIcon, ChevronLeftIcon } from '@primer/octicons-react'; +import { + ChevronDownIcon, + ChevronLeftIcon, + ChevronUpIcon, +} from '@primer/octicons-react'; +import { useState } from 'react'; import type { Account } from '../types'; import type { Notification } from '../typesGitHub'; import { openAccountProfile } from '../utils/links'; @@ -26,7 +31,25 @@ export const AccountNotifications = (props: IProps) => { ), ); - const Chevron = notifications.length > 0 ? ChevronDownIcon : ChevronLeftIcon; + const [showNotifications, setShowNotifications] = useState(true); + + const toggleNotifications = () => { + setShowNotifications(!showNotifications); + }; + + const ChevronIcon = + notifications.length === 0 + ? ChevronLeftIcon + : showNotifications + ? ChevronDownIcon + : ChevronUpIcon; + + const toggleNotificationsLabel = + notifications.length === 0 + ? 'No notifications for account' + : showNotifications + ? 'Hide account notifications' + : 'Show account notifications'; return ( <> @@ -43,23 +66,30 @@ export const AccountNotifications = (props: IProps) => {
- +
)} - {Object.values(groupedNotifications).map((repoNotifications) => { - const repoSlug = repoNotifications[0].repository.full_name; + {showNotifications && + Object.values(groupedNotifications).map((repoNotifications) => { + const repoSlug = repoNotifications[0].repository.full_name; - return ( - - ); - })} + return ( + + ); + })} ); }; diff --git a/src/components/__snapshots__/AccountNotifications.test.tsx.snap b/src/components/__snapshots__/AccountNotifications.test.tsx.snap index 024a22adf..0f1e8f305 100644 --- a/src/components/__snapshots__/AccountNotifications.test.tsx.snap +++ b/src/components/__snapshots__/AccountNotifications.test.tsx.snap @@ -37,20 +37,25 @@ exports[`components/AccountNotifications.tsx should render itself (github.com wi
- + +
@@ -91,20 +96,25 @@ exports[`components/AccountNotifications.tsx should render itself (github.com wi
- + +
@@ -202,6 +212,66 @@ exports[`components/AccountNotifications.tsx should render itself (github.com wi
+ +
+
+
+ , + "container":
+
+
+ + + + +
+
+ +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; + +exports[`components/AccountNotifications.tsx should toggle account notifications visibility 1`] = ` +{ + "asFragment": [Function], + "baseElement": +
+
+
+ + + + +
+
+
+
+
+
+ + + + +
+
+ +
+
+
+ Repository +
+
, "container":
- + +
+
+ Repository +
, "debug": [Function], "findAllByAltText": [Function], From b6b3ac12a43e8b6e9809a4d9aeb617839f15d596 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Thu, 13 Jun 2024 08:03:12 -0400 Subject: [PATCH 217/251] build: update automated release changelog config --- .github/release.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/release.yml b/.github/release.yml index 5f54b3fdb..2fce1e333 100644 --- a/.github/release.yml +++ b/.github/release.yml @@ -1,9 +1,7 @@ changelog: exclude: labels: - - ignore-for-release - authors: - - octocat + - release categories: - title: 🚀 Features labels: @@ -25,7 +23,7 @@ changelog: - build - title: 📦 Dependency Updates labels: - - build + - dependency - title: Other Changes labels: - "*" \ No newline at end of file From 655100ad019a6359e1f6dfc0aef3355c7fddaa3a Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Thu, 13 Jun 2024 08:37:14 -0400 Subject: [PATCH 218/251] build: prepare v5.8.0 release (#1228) * 5.8.0 * build: prepare v5.8.0 release * build: prepare v5.8.0 release --- .github/workflows/release.yml | 5 +++++ package.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5409e1222..9f844be31 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -30,6 +30,7 @@ jobs: APPLEID_TEAM_ID: ${{ secrets.appleid_teamid }} CSC_LINK: ${{ secrets.mac_certs }} CSC_KEY_PASSWORD: ${{ secrets.mac_certs_password }} + GH_TOKEN: ${{ secrets.gh_token }} NOTARIZE: true - uses: actions/upload-artifact@v4 with: @@ -54,6 +55,8 @@ jobs: OAUTH_CLIENT_ID: ${{ secrets.oauth_client_id }} OAUTH_CLIENT_SECRET: ${{ secrets.oauth_client_secret }} - run: pnpm make:win --publish onTagOrDraft + env: + GH_TOKEN: ${{ secrets.gh_token }} - uses: actions/upload-artifact@v4 with: name: Gitify-release-win @@ -77,6 +80,8 @@ jobs: OAUTH_CLIENT_ID: ${{ secrets.oauth_client_id }} OAUTH_CLIENT_SECRET: ${{ secrets.oauth_client_secret }} - run: pnpm make:linux --publish onTagOrDraft + env: + GH_TOKEN: ${{ secrets.gh_token }} - uses: actions/upload-artifact@v4 with: name: Gitify-release-linux diff --git a/package.json b/package.json index 482d917a7..fa9f1ee9e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gitify", - "version": "5.7.0", + "version": "5.8.0", "description": "GitHub Notifications on your menu bar.", "main": "main.js", "scripts": { From e30e5cfb8d65c4bff632e73f746652ced749bf76 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Thu, 13 Jun 2024 09:27:53 -0400 Subject: [PATCH 219/251] docs: update issue template --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index b26602893..8264f5c0f 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -38,6 +38,7 @@ body: label: Gitify Version description: What version of Gitify are you using? options: + - 5.8.0 - 5.7.0 - 5.6.0 - 5.5.0 From dcef564f63de06e9e18fc1f54edd82d1136355b5 Mon Sep 17 00:00:00 2001 From: Afonso Jorge Ramos Date: Thu, 13 Jun 2024 16:51:12 +0100 Subject: [PATCH 220/251] feat: use `clsx` to merge classNames (#1231) --- package.json | 1 + pnpm-lock.yaml | 9 +++++++++ src/components/Sidebar.tsx | 8 +++++--- src/components/buttons/PillButton.tsx | 3 ++- src/components/fields/Button.tsx | 5 +++-- .../fields/__snapshots__/Button.test.tsx.snap | 8 ++++---- src/routes/Login.tsx | 4 ++-- src/routes/LoginWithOAuthApp.tsx | 4 ++-- src/routes/LoginWithPersonalAccessToken.tsx | 4 ++-- .../__snapshots__/LoginWithOAuthApp.test.tsx.snap | 4 ++-- .../LoginWithPersonalAccessToken.test.tsx.snap | 4 ++-- src/utils/cn.test.ts | 13 +++++++++++++ src/utils/cn.ts | 5 +++++ tsconfig.json | 2 +- 14 files changed, 53 insertions(+), 21 deletions(-) create mode 100644 src/utils/cn.test.ts create mode 100644 src/utils/cn.ts diff --git a/package.json b/package.json index fa9f1ee9e..069abd69f 100644 --- a/package.json +++ b/package.json @@ -110,6 +110,7 @@ "@electron/remote": "2.1.2", "@primer/octicons-react": "19.9.0", "axios": "1.7.2", + "clsx": "2.1.1", "date-fns": "3.6.0", "electron-updater": "6.2.1", "final-form": "4.20.10", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 227ae2df0..82a8543d0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,6 +17,9 @@ importers: axios: specifier: 1.7.2 version: 1.7.2 + clsx: + specifier: 2.1.1 + version: 2.1.1 date-fns: specifier: 3.6.0 version: 3.6.0 @@ -1103,6 +1106,10 @@ packages: clone-response@1.0.3: resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} @@ -4425,6 +4432,8 @@ snapshots: dependencies: mimic-response: 1.0.1 + clsx@2.1.1: {} + co@4.6.0: {} collect-v8-coverage@1.0.2: {} diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx index 0d153ac1e..74632eb2d 100644 --- a/src/components/Sidebar.tsx +++ b/src/components/Sidebar.tsx @@ -9,6 +9,7 @@ import { useLocation, useNavigate } from 'react-router-dom'; import { Logo } from '../components/Logo'; import { AppContext } from '../context/App'; import { BUTTON_SIDEBAR_CLASS_NAME } from '../styles/gitify'; +import { cn } from '../utils/cn'; import { quitApp } from '../utils/comms'; import { openGitHubNotifications, openGitifyRepository } from '../utils/links'; import { getNotificationCount } from '../utils/notifications'; @@ -47,9 +48,10 @@ export const Sidebar: FC = () => {
diff --git a/src/routes/LoginWithOAuthApp.tsx b/src/routes/LoginWithOAuthApp.tsx index f95c54153..1bf4282d7 100644 --- a/src/routes/LoginWithOAuthApp.tsx +++ b/src/routes/LoginWithOAuthApp.tsx @@ -96,7 +96,7 @@ export const LoginWithOAuthApp: FC = () => { @@ -222,7 +237,10 @@ export const NotificationRow: FC = ({ notification, account }) => { type="button" className="focus:outline-none h-full hover:text-green-500" title="Mark as Read" - onClick={() => markNotificationRead(notification)} + onClick={() => { + setAnimateExit(true); + markNotificationRead(notification); + }} > diff --git a/src/components/Repository.tsx b/src/components/Repository.tsx index 4021ac27e..04186a61b 100644 --- a/src/components/Repository.tsx +++ b/src/components/Repository.tsx @@ -1,6 +1,5 @@ import { CheckIcon, MarkGithubIcon, ReadIcon } from '@primer/octicons-react'; import { type FC, useCallback, useContext } from 'react'; -import { CSSTransition, TransitionGroup } from 'react-transition-group'; import { AppContext } from '../context/App'; import type { Account } from '../types'; import type { Notification } from '../typesGitHub'; @@ -77,17 +76,9 @@ export const RepositoryNotifications: FC = ({
- - {repoNotifications.map((obj) => ( - - - - ))} - + {repoNotifications.map((obj) => ( + + ))} ); }; diff --git a/src/components/__snapshots__/NotificationRow.test.tsx.snap b/src/components/__snapshots__/NotificationRow.test.tsx.snap index 270ecb255..3efb3ce47 100644 --- a/src/components/__snapshots__/NotificationRow.test.tsx.snap +++ b/src/components/__snapshots__/NotificationRow.test.tsx.snap @@ -6,7 +6,7 @@ exports[`components/NotificationRow.tsx notification pills / metrics comment pil "baseElement":
, "container":
, "container":
, "container":
, "container":
, "container":
, "container":
, "container":
, "container":
, "container":
, "container":
, "container":
, "container":
-
- NotificationRow -
-
- NotificationRow -
+ NotificationRow +
+
+ NotificationRow
, @@ -151,12 +149,10 @@ exports[`components/Repository.tsx should render itself & its children 1`] = `
-
- NotificationRow -
-
- NotificationRow -
+ NotificationRow +
+
+ NotificationRow
, "debug": [Function], @@ -295,12 +291,10 @@ exports[`components/Repository.tsx should use default repository icon when avata
-
- NotificationRow -
-
- NotificationRow -
+ NotificationRow +
+
+ NotificationRow
, @@ -382,12 +376,10 @@ exports[`components/Repository.tsx should use default repository icon when avata
-
- NotificationRow -
-
- NotificationRow -
+ NotificationRow +
+
+ NotificationRow
, "debug": [Function], From aabc76bb183caef2cbdfd5dc19f01d75838cc7ef Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Thu, 13 Jun 2024 12:19:22 -0400 Subject: [PATCH 222/251] fix: revert updated_at formatting (#1230) --- src/utils/helpers.test.ts | 10 ---------- src/utils/helpers.ts | 4 +--- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/src/utils/helpers.test.ts b/src/utils/helpers.test.ts index 49faffa64..25b159912 100644 --- a/src/utils/helpers.test.ts +++ b/src/utils/helpers.test.ts @@ -464,16 +464,6 @@ describe('utils/helpers.ts', () => { }); describe('formatNotificationUpdatedAt', () => { - it('should use last_read_at if available', () => { - const notification = { - ...mockSingleNotification, - last_read_at: '2021-06-23T16:00:00Z', - updated_at: '2021-06-23T17:00:00Z', - }; - - expect(formatNotificationUpdatedAt(notification)).toContain('ago'); - }); - it('should use updated_at if last_read_at is null', () => { const notification = { ...mockSingleNotification, diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 422238c85..2032e84ee 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -157,10 +157,8 @@ export function formatForDisplay(text: string[]): string { export function formatNotificationUpdatedAt( notification: Notification, ): string { - const date = notification.last_read_at ?? notification.updated_at; - try { - return formatDistanceToNowStrict(parseISO(date), { + return formatDistanceToNowStrict(parseISO(notification.updated_at), { addSuffix: true, }); } catch (e) {} From be44194ebd43d91c162ce46bc81f1c0cfca4f873 Mon Sep 17 00:00:00 2001 From: Afonso Jorge Ramos Date: Thu, 13 Jun 2024 17:44:41 +0100 Subject: [PATCH 223/251] chore: sort tw classes (#1233) * feat: use `clsx` to merge classNames * feat: use `clsx` to merge classNames * refactor: deprecate `react-transition-group` over tailwind animations * chore: sort `tw` classes --------- Co-authored-by: Adam Setch --- src/app.tsx | 2 +- src/components/AccountNotifications.tsx | 2 +- src/components/AllRead.tsx | 8 +- src/components/NotificationRow.tsx | 18 +- src/components/Oops.tsx | 10 +- src/components/Repository.tsx | 12 +- src/components/Sidebar.tsx | 10 +- .../AccountNotifications.test.tsx.snap | 14 +- .../__snapshots__/AllRead.test.tsx.snap | 12 +- .../NotificationRow.test.tsx.snap | 552 +++++++++--------- .../__snapshots__/Oops.test.tsx.snap | 16 +- .../__snapshots__/Repository.test.tsx.snap | 44 +- .../__snapshots__/Sidebar.test.tsx.snap | 40 +- src/components/buttons/PillButton.tsx | 2 +- .../__snapshots__/PillButton.test.tsx.snap | 4 +- src/components/fields/Checkbox.tsx | 10 +- src/components/fields/FieldInput.tsx | 8 +- src/components/fields/RadioGroup.tsx | 10 +- src/components/fields/Tooltip.tsx | 6 +- .../__snapshots__/Checkbox.test.tsx.snap | 20 +- .../__snapshots__/FieldInput.test.tsx.snap | 12 +- .../__snapshots__/RadioGroup.test.tsx.snap | 56 +- .../__snapshots__/Tooltip.test.tsx.snap | 12 +- src/routes/Accounts.tsx | 20 +- src/routes/Login.tsx | 12 +- src/routes/LoginWithOAuthApp.tsx | 8 +- src/routes/LoginWithPersonalAccessToken.tsx | 14 +- src/routes/Notifications.tsx | 2 +- src/routes/Settings.tsx | 16 +- .../__snapshots__/Accounts.test.tsx.snap | 40 +- src/routes/__snapshots__/Login.test.tsx.snap | 24 +- .../LoginWithOAuthApp.test.tsx.snap | 44 +- ...LoginWithPersonalAccessToken.test.tsx.snap | 48 +- .../__snapshots__/Notifications.test.tsx.snap | 8 +- .../__snapshots__/Settings.test.tsx.snap | 144 ++--- src/utils/api/graphql/discussions.ts | 10 +- 36 files changed, 633 insertions(+), 637 deletions(-) diff --git a/src/app.tsx b/src/app.tsx index c15ab937b..49af30b12 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -31,7 +31,7 @@ export const App = () => { return ( -
+
diff --git a/src/components/AccountNotifications.tsx b/src/components/AccountNotifications.tsx index d4a9ebcfd..34179e056 100644 --- a/src/components/AccountNotifications.tsx +++ b/src/components/AccountNotifications.tsx @@ -54,7 +54,7 @@ export const AccountNotifications = (props: IProps) => { return ( <> {showAccountHostname && ( -
+
-
+
-
+
{isLoggedIn && ( <>
-
+
{auth.accounts.map((account) => (
-
+
Add new account
diff --git a/src/routes/LoginWithOAuthApp.tsx b/src/routes/LoginWithOAuthApp.tsx index 1bf4282d7..07f0c9d7a 100644 --- a/src/routes/LoginWithOAuthApp.tsx +++ b/src/routes/LoginWithOAuthApp.tsx @@ -92,7 +92,7 @@ export const LoginWithOAuthApp: FC = () => { placeholder="ABC123DEF456" /> -
+
-

+

Login with OAuth App

diff --git a/src/routes/LoginWithPersonalAccessToken.tsx b/src/routes/LoginWithPersonalAccessToken.tsx index 1ce3e446b..46b85f927 100644 --- a/src/routes/LoginWithPersonalAccessToken.tsx +++ b/src/routes/LoginWithPersonalAccessToken.tsx @@ -61,7 +61,7 @@ export const LoginWithPersonalAccessToken: FC = () => { label="Hostname" placeholder="github.company.com" helpText={ -
+
Change only if you are using GitHub Enterprise Server.
} @@ -84,7 +84,7 @@ export const LoginWithPersonalAccessToken: FC = () => { /> on GitHub and paste above.
-
+
The required scopes will be selected for you.
@@ -92,12 +92,12 @@ export const LoginWithPersonalAccessToken: FC = () => { /> {!isValidToken && ( -
+
This token could not be validated with {values.hostname}.
)} -
+
-

+

Login with Personal Access Token

diff --git a/src/routes/Notifications.tsx b/src/routes/Notifications.tsx index 13e0dbd47..d99a5a57c 100644 --- a/src/routes/Notifications.tsx +++ b/src/routes/Notifications.tsx @@ -33,7 +33,7 @@ export const NotificationsRoute: FC = () => { } return ( -
+
{notifications.map((accountNotifications) => ( { return (
-
+
-
+
GitHub Notifications
on your menu bar.
Login with

Change only if you are using GitHub Enterprise Server.
@@ -87,13 +87,13 @@ exports[`routes/LoginWithPersonalAccessToken.tsx renders correctly 1`] = ` class="mb-4" >
@@ -134,7 +134,7 @@ exports[`routes/LoginWithPersonalAccessToken.tsx renders correctly 1`] = `
The required scopes will be selected for you.
@@ -142,7 +142,7 @@ exports[`routes/LoginWithPersonalAccessToken.tsx renders correctly 1`] = `

Change only if you are using GitHub Enterprise Server.
@@ -278,13 +278,13 @@ exports[`routes/LoginWithPersonalAccessToken.tsx renders correctly 1`] = ` class="mb-4" >
@@ -325,7 +325,7 @@ exports[`routes/LoginWithPersonalAccessToken.tsx renders correctly 1`] = `
The required scopes will be selected for you.
@@ -333,7 +333,7 @@ exports[`routes/LoginWithPersonalAccessToken.tsx renders correctly 1`] = `