diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 460630dd..52f53254 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -100,6 +100,12 @@ module.exports = { 'import/no-cycle': 'off', 'import/no-extraneous-dependencies': 'off', 'react/jsx-props-no-spreading': 'off', + 'react/jsx-no-useless-fragment': [ + 'error', + { + allowExpressions: true, + }, + ], 'keyword-spacing': [ 'error', { diff --git a/src/pages/calendar/CalendarMain.tsx b/src/pages/calendar/CalendarMain.tsx index fc56103f..9d529dc7 100644 --- a/src/pages/calendar/CalendarMain.tsx +++ b/src/pages/calendar/CalendarMain.tsx @@ -1,5 +1,6 @@ import type TabInfoMessages from '@shared/messages/TabInfoMessages'; import Calendar from '@views/components/calendar/Calendar'; +import DialogProvider from '@views/components/common/DialogProvider/DialogProvider'; import ExtensionRoot from '@views/components/common/ExtensionRoot/ExtensionRoot'; import { MessageListener } from 'chrome-extension-toolkit'; import React, { useEffect } from 'react'; @@ -26,7 +27,9 @@ export default function CalendarMain() { return ( - + + + ); } diff --git a/src/views/components/PopupMain.tsx b/src/views/components/PopupMain.tsx index ef655095..e0f9e74e 100644 --- a/src/views/components/PopupMain.tsx +++ b/src/views/components/PopupMain.tsx @@ -93,7 +93,7 @@ export default function PopupMain(): JSX.Element { {activeSchedule?.courses?.length === 0 && ( -
+
{funny} diff --git a/src/views/components/common/DialogProvider/DialogProvider.tsx b/src/views/components/common/DialogProvider/DialogProvider.tsx index 7de19a0e..0f027438 100644 --- a/src/views/components/common/DialogProvider/DialogProvider.tsx +++ b/src/views/components/common/DialogProvider/DialogProvider.tsx @@ -87,8 +87,8 @@ export default function DialogProvider(props: { children: ReactNode }): JSX.Elem key={id} onClose={handleClose} afterLeave={onLeave} - title={infoUnwrapped.title} - description={infoUnwrapped.description} + title=<>{infoUnwrapped.title} + description=<>{infoUnwrapped.description} appear show={show} className={infoUnwrapped.className} diff --git a/src/views/components/common/ScheduleListItem.tsx b/src/views/components/common/ScheduleListItem.tsx index aea0e41c..02d84c94 100644 --- a/src/views/components/common/ScheduleListItem.tsx +++ b/src/views/components/common/ScheduleListItem.tsx @@ -10,7 +10,7 @@ import XIcon from '~icons/material-symbols/close'; import DragIndicatorIcon from '~icons/material-symbols/drag-indicator'; import { Button } from './Button'; -import PromptDialog from './Prompt'; +import { usePrompt } from './DialogProvider/DialogProvider'; /** * Props for the ScheduleListItem component. @@ -31,6 +31,8 @@ export default function ScheduleListItem({ schedule, dragHandleProps, onClick }: const [editorValue, setEditorValue] = useState(schedule.name); const [error, setError] = useState(undefined); + const showDialog = usePrompt(); + const editorRef = React.useRef(null); useEffect(() => { const editor = editorRef.current; @@ -58,24 +60,25 @@ export default function ScheduleListItem({ schedule, dragHandleProps, onClick }: deleteSchedule(schedule.id).catch(e => setError(e.message)); }; + useEffect(() => { + if (error) { + console.error(error); + showDialog({ + title: Something went wrong., + description: error, + // eslint-disable-next-line react/no-unstable-nested-components + buttons: close => ( + + ), + onClose: () => setError(undefined), + }); + } + }); + return (
- setError(undefined)} - title={ - - Something Went Wrong - - } - content={{error}} - // eslint-disable-next-line react/no-children-prop - children={[ - , - ]} - />
  • diff --git a/src/views/contexts/DialogContext.ts b/src/views/contexts/DialogContext.ts index d112bf41..ba19d965 100644 --- a/src/views/contexts/DialogContext.ts +++ b/src/views/contexts/DialogContext.ts @@ -9,8 +9,8 @@ export type CloseWrapper = (close: () => void) => T; * Information about a dialog. */ export interface DialogInfo { - title?: JSX.Element; - description?: JSX.Element; + title?: string | JSX.Element; + description?: string | JSX.Element; className?: string; buttons?: JSX.Element | CloseWrapper; onClose?: () => void; @@ -24,7 +24,9 @@ export type ShowDialogFn = (info: DialogInfo | CloseWrapper) => void /** * Context for the dialog provider. */ -export const DialogContext = createContext(() => {}); +export const DialogContext = createContext(() => { + throw new Error('DialogContext not initialized.'); +}); /** * @returns The dialog context for showing dialogs.