Skip to content
This repository has been archived by the owner on Jun 5, 2024. It is now read-only.

Push v1.1.0 to production #96

Draft
wants to merge 8 commits into
base: production
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"typescript.tsdk": "node_modules\\typescript\\lib"
}
184 changes: 100 additions & 84 deletions package-lock.json

Large diffs are not rendered by default.

12 changes: 6 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,13 @@
"html-react-parser": "^4.0.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router-dom": "^6.14.0"
"react-router-dom": "^6.14.1"
},
"devDependencies": {
"@babel/preset-env": "^7.22.5",
"@babel/preset-react": "^7.22.5",
"@types/jest": "^29.5.2",
"@types/node": "^20.3.2",
"@types/node": "^20.3.3",
"@types/react": "^18.2.14",
"@types/react-dom": "^18.2.6",
"@types/sanitize-html": "^2.9.0",
Expand All @@ -46,7 +46,7 @@
"core-js": "^3.31.0",
"crypto-browserify": "^3.12.0",
"css-loader": "^6.8.1",
"eslint": "^8.43.0",
"eslint": "^8.44.0",
"eslint-plugin-react": "^7.32.2",
"file-loader": "^6.2.0",
"html-loader": "^4.2.0",
Expand All @@ -55,12 +55,12 @@
"stream-browserify": "^3.0.0",
"stream-http": "^3.2.0",
"style-loader": "^3.3.3",
"ts-loader": "^9.4.3",
"ts-loader": "^9.4.4",
"ts-node": "^10.9.1",
"typescript": "^5.1.5",
"typescript": "^5.1.6",
"url": "^0.11.1",
"util": "^0.12.5",
"webpack": "^5.88.0",
"webpack": "^5.88.1",
"webpack-cli": "^5.1.4",
"webpack-dev-server": "^4.15.1"
}
Expand Down
2 changes: 1 addition & 1 deletion public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200" />
<title>Planzea</title>
</head>
<body>
<body class="dark">
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
</body>
Expand Down
21 changes: 17 additions & 4 deletions src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ import TaskLabelManagementPopup from "./components/TaskLabelManagementPopup/Task
import CacheClient from "./client/CacheClient";
import "./global.css";
import ProjectDeletionPopup from "./components/ProjectDeletionPopup/ProjectDeletionPopup";
import StatusCreationPopup from "./components/StatusCreationPopup/StatusCreationPopup";
import StatusDeletionPopup from "./components/StatusDeletionPopup/StatusDeletionPopup";

export type SetState<T> = Dispatch<SetStateAction<T>>;

Expand All @@ -24,6 +26,15 @@ export default function App() {

useEffect(() => {

// Check if the user wants dark theme.
const mediaQueryList = window.matchMedia("(prefers-color-scheme: dark");
const onSystemThemeChange = (mediaQueryList: MediaQueryList | MediaQueryListEvent) => document.body.classList[mediaQueryList.matches ? "add" : "remove"]("dark");
onSystemThemeChange(mediaQueryList);

// Watch for changes to system theme.
mediaQueryList.addEventListener("change", onSystemThemeChange);

// Set the client.
setClient(new CacheClient());

}, []);
Expand Down Expand Up @@ -56,10 +67,12 @@ export default function App() {
return client && isReady ? (
<>
<TaskPopup setTempDocumentTitle={setTempDocumentTitle} project={currentProject} setCurrentProject={(project) => setCurrentProject(project)} client={client} />
<LabelRemovalPopup client={client} setTempDocumentTitle={setTempDocumentTitle} project={currentProject} setCurrentProject={setCurrentProject} />
<LabelCreationPopup client={client} setTempDocumentTitle={setTempDocumentTitle} project={currentProject} setCurrentProject={setCurrentProject} />
<LabelRemovalPopup client={client} setTempDocumentTitle={setTempDocumentTitle} />
<LabelCreationPopup client={client} setTempDocumentTitle={setTempDocumentTitle} />
<ProjectCreationPopup client={client} setTempDocumentTitle={setTempDocumentTitle} />
<ProjectDeletionPopup client={client} setTempDocumentTitle={setTempDocumentTitle} />
<StatusCreationPopup client={client} setTempDocumentTitle={setTempDocumentTitle} />
<StatusDeletionPopup client={client} setTempDocumentTitle={setTempDocumentTitle} />
<TaskDeletionPopup client={client} currentProject={currentProject} setTempDocumentTitle={setTempDocumentTitle} />
<TaskLabelManagementPopup client={client} setTempDocumentTitle={setTempDocumentTitle} project={currentProject} />
<Header client={client} />
Expand All @@ -74,8 +87,8 @@ export default function App() {
})()} replace />} />
<Route path="/:username/projects/:projectId/tasks" element={<Backlog client={client} setCurrentProject={(project) => setCurrentProject(project)} setDocumentTitle={setDocumentTitle} />} />
<Route path="/:username/projects/:projectId/tasks/:taskId" element={<Backlog client={client} setCurrentProject={(project) => setCurrentProject(project)} setDocumentTitle={setDocumentTitle} />} />
<Route path="/:username/projects/:projectId/settings" element={<SettingsPage client={client} project={currentProject} setCurrentProject={setCurrentProject} setDocumentTitle={setDocumentTitle} />} />
<Route path="/:username/projects/:projectId/settings/labels" element={<SettingsPage client={client} project={currentProject} setCurrentProject={setCurrentProject} setDocumentTitle={setDocumentTitle} />} />
<Route path="/:username/projects/:projectId/settings" element={<SettingsPage client={client} setDocumentTitle={setDocumentTitle} />} />
<Route path="/:username/projects/:projectId/settings/:settingName" element={<SettingsPage client={client} setDocumentTitle={setDocumentTitle} />} />
<Route path="/" element={<HomePage client={client} setDocumentTitle={setDocumentTitle} />} />
</Routes>
</>
Expand Down
18 changes: 9 additions & 9 deletions src/client/CacheClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ type EventCallbacksArray = {
[EventName in keyof CacheEventCallbacks]: CacheEventCallbacks[EventName][];
};

type MutableCacheClient = {
-readonly [K in keyof CacheClient]: CacheClient[K];
export type Mutable<T> = {
-readonly [K in keyof T]: T[K];
};

export default class CacheClient extends Client {
Expand All @@ -38,7 +38,7 @@ export default class CacheClient extends Client {
// Add project to cache.
if (this.projects) {

(this as MutableCacheClient).projects = [...this.projects, project];
(this as Mutable<CacheClient>).projects = [...this.projects, project];

}

Expand All @@ -50,7 +50,7 @@ export default class CacheClient extends Client {

if (!this.projects) {

(this as MutableCacheClient).projects = await super.getProjects(...parameters);
(this as Mutable<CacheClient>).projects = await super.getProjects(...parameters);
this.#fireEvent("projectsArrayChange", this.projects ?? []);

}
Expand All @@ -61,7 +61,7 @@ export default class CacheClient extends Client {

addEventListener<EventName extends keyof EventCallbacksArray>(eventName: EventName, callback: CacheEventCallbacks[EventName]): void {

this.eventCallbacks[eventName].push(callback as () => void);
this.eventCallbacks[eventName].push(callback);

}

Expand All @@ -77,29 +77,29 @@ export default class CacheClient extends Client {

removeEventListener<EventName extends keyof EventCallbacksArray>(eventName: EventName, callback: CacheEventCallbacks[EventName]): void {

this.eventCallbacks[eventName] = (this.eventCallbacks[eventName] as (() => void)[]).filter((possibleCallback) => possibleCallback !== callback);
this.eventCallbacks[eventName] = this.eventCallbacks[eventName].filter((possibleCallback) => possibleCallback !== callback) as EventCallbacksArray[EventName];

}

setCurrentProject(project: Project | null): void {

(this as MutableCacheClient).currentProject = project;
(this as Mutable<CacheClient>).currentProject = project;

this.#fireEvent("currentProjectChange", project);

}

setSelectedProjects(projects: Project[]): void {

(this as MutableCacheClient).selectedProjects = projects;
(this as Mutable<CacheClient>).selectedProjects = projects;

this.#fireEvent("projectSelectionChange", projects);

}

setSelectedTasks(tasks: Task[]): void {

(this as MutableCacheClient).selectedTasks = tasks;
(this as Mutable<CacheClient>).selectedTasks = tasks;

this.#fireEvent("taskBacklogSelectionChange", tasks);

Expand Down
Loading