From dc11997b96e5a36a52a04d88ada8c98312d23d54 Mon Sep 17 00:00:00 2001 From: sethburkart123 Date: Mon, 24 Jun 2024 11:09:44 +1000 Subject: [PATCH] feat: add default page option --- package.json | 1 + src/SEQTA.ts | 19 ++++++--- src/background.ts | 1 + src/interface/SettingsContext.tsx | 3 +- src/interface/components/Select.tsx | 7 ++++ src/interface/hooks/settingsState.ts | 7 +++- src/interface/pages/SettingsPage/Settings.tsx | 14 +++++++ src/interface/types/AppProps.ts | 42 +------------------ src/seqta/utils/listeners/SettingsState.ts | 3 +- src/types/storage.ts | 1 + tailwind.config.js | 5 ++- 11 files changed, 53 insertions(+), 50 deletions(-) create mode 100644 src/interface/components/Select.tsx diff --git a/package.json b/package.json index 253bf483..7eaf4045 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "@codemirror/lang-less": "^6.0.2", "@heroicons/react": "^2.1.3", "@million/lint": "latest", + "@tailwindcss/forms": "^0.5.7", "@types/color": "^3.0.6", "@types/dompurify": "^3.0.5", "@types/lodash": "^4.17.4", diff --git a/src/SEQTA.ts b/src/SEQTA.ts index f3700b11..57dbd47a 100644 --- a/src/SEQTA.ts +++ b/src/SEQTA.ts @@ -571,8 +571,17 @@ async function handleSublink(sublink: string | undefined): Promise { case 'news': await handleNewsPage(); break; - case 'home': case undefined: + window.location.replace(`${location.origin}/#?page=/${settingsState.defaultPage}`); + if (settingsState.defaultPage === 'home') loadHomePage() + if (settingsState.defaultPage === 'timetable') handleTimetable() + if (settingsState.defaultPage === 'documents') handleDocuments(document.querySelector('.documents')!) + if (settingsState.defaultPage === 'reports') handleReports(document.querySelector('.reports')!) + if (settingsState.defaultPage === 'messages') handleMessages(document.querySelector('.messages')!) + + finishLoad(); + break; + case 'home': window.location.replace(`${location.origin}/#?page=/home`); console.log('[BetterSEQTA+] Started Init') if (settingsState.onoff) loadHomePage() @@ -640,7 +649,7 @@ async function handleMessages(node: Element): Promise { if (!settingsState.animations) return; - await waitForElm('[data-message]'); + await waitForElm('[data-message]', true, 20); const messages = Array.from(document.querySelectorAll('[data-message]')).slice(0, 35); animate( messages, @@ -657,7 +666,7 @@ async function handleDashboard(node: Element): Promise { if (!(node instanceof HTMLElement)) return; if (!settingsState.animations) return; - await waitForElm('.dashlet'); + await waitForElm('.dashlet', true, 20); animate( '.dashboard > *', { opacity: [0, 1], y: [10, 0] }, @@ -673,7 +682,7 @@ async function handleDocuments(node: Element): Promise { if (!(node instanceof HTMLElement)) return; if (!settingsState.animations) return; - await waitForElm('.document'); + await waitForElm('.document', true, 20); animate( '.documents tbody tr.document', { opacity: [0, 1], y: [10, 0] }, @@ -689,7 +698,7 @@ async function handleReports(node: Element): Promise { if (!(node instanceof HTMLElement)) return; if (!settingsState.animations) return; - await waitForElm('.report'); + await waitForElm('.report', true, 20); animate( '.reports .item', { opacity: [0, 1], y: [10, 0] }, diff --git a/src/background.ts b/src/background.ts index fc67db2c..a741f771 100644 --- a/src/background.ts +++ b/src/background.ts @@ -178,6 +178,7 @@ const DefaultValues: SettingsState = { originalSelectedColor: '', DarkMode: true, animations: true, + defaultPage: 'home', shortcuts: [ { name: 'YouTube', diff --git a/src/interface/SettingsContext.tsx b/src/interface/SettingsContext.tsx index 85e53570..97528b14 100644 --- a/src/interface/SettingsContext.tsx +++ b/src/interface/SettingsContext.tsx @@ -24,7 +24,8 @@ export const SettingsContextProvider: React.FC<{ children: ReactNode }> = ({ chi customshortcuts: [], transparencyEffects: false, selectedTheme: '', - animations: true + animations: true, + defaultPage: 'home' }); const [showPicker, setShowPicker] = useState(false); diff --git a/src/interface/components/Select.tsx b/src/interface/components/Select.tsx new file mode 100644 index 00000000..1ac6fdfa --- /dev/null +++ b/src/interface/components/Select.tsx @@ -0,0 +1,7 @@ +export default function Select({ state, onChange, options }: { state: string, onChange: (value: string) => void, options: { value: string, label: string }[] }) { + return ( + + ) +} \ No newline at end of file diff --git a/src/interface/hooks/settingsState.ts b/src/interface/hooks/settingsState.ts index 061c767e..3f2024c2 100644 --- a/src/interface/hooks/settingsState.ts +++ b/src/interface/hooks/settingsState.ts @@ -26,7 +26,8 @@ const useSettingsState = ({ settingsState, setSettingsState }: SettingsProps) => transparencyEffects: result.transparencyEffects, selectedTheme: result.selectedTheme, timeFormat: result.timeFormat, - animations: result.animations + animations: result.animations, + defaultPage: result.defaultPage }); }); }); @@ -43,11 +44,13 @@ const useSettingsState = ({ settingsState, setSettingsState }: SettingsProps) => "transparencyEffects": "transparencyEffects", "selectedTheme": "selectedTheme", "timeFormat": "timeFormat", - "animations": "animations" + "animations": "animations", + "defaultPage": "defaultPage" }), []); const storageChangeListener = (changes: browser.Storage.StorageChange) => { for (const [key, { newValue }] of Object.entries(changes)) { + console.log(key, newValue) if (key === "DarkMode") { if (key === "DarkMode" && newValue) { document.body.classList.add('dark'); diff --git a/src/interface/pages/SettingsPage/Settings.tsx b/src/interface/pages/SettingsPage/Settings.tsx index ee0f568f..9f3ceccb 100644 --- a/src/interface/pages/SettingsPage/Settings.tsx +++ b/src/interface/pages/SettingsPage/Settings.tsx @@ -8,6 +8,7 @@ import { useSettingsContext } from '../../SettingsContext'; import browser from 'webextension-polyfill' import { memo, useState } from 'react'; import { toast } from 'react-toastify'; +import Select from '../../components/Select'; const Settings: React.FC = () => { const { settingsState, setSettingsState } = useSettingsContext(); @@ -92,6 +93,19 @@ const Settings: React.FC = () => { description: "Prefer 12 hour time format for SEQTA", modifyElement: switchChange('timeFormat', isOn ? "12" : "24")} /> }, + { + title: "Default Page", + description: "The page to load when SEQTA Learn is opened.", + modifyElement: