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.