Skip to content

Commit 98c7ca8

Browse files
authored
Merge pull request #93 from abiddiscombe/92-New-instances-of-NoteDeck-broken
92 - New instances of NoteDeck broken
2 parents a6ce973 + fea22b9 commit 98c7ca8

17 files changed

+115
-160
lines changed

src/App.tsx

-8
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,9 @@
1-
import { useEffect } from "react";
21
import Main from "./blocks/Main/Main";
32
import Header from "./blocks/Header/Header";
43
import Mobile from "./blocks/Mobile/Mobile";
54
import { isMobile } from "react-device-detect";
6-
import { settingsService } from "./database/settings.service";
75

86
function App() {
9-
async function init() {
10-
await settingsService.instantiate();
11-
}
12-
13-
useEffect(() => init(), []);
14-
157
if (isMobile) {
168
return <Mobile />;
179
}

src/blocks/Header/Header.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { useLiveQuery } from "dexie-react-hooks";
2-
import { notesService } from "../../database/notes.service";
2+
import notes from "../../database/notes";
33
import HeaderLogo from "./HeaderLogo";
44
import HeaderBackup from "./HeaderBackup";
55
import HeaderNewNote from "./HeaderNewNote";
@@ -11,7 +11,7 @@ import Banner from "../../components/Banner";
1111
import { APP_INFO } from "../../utilities/constants";
1212

1313
const Header = () => {
14-
const notes = useLiveQuery(() => notesService.list());
14+
const noteList = useLiveQuery(() => notes.list());
1515
const isDeprecatingDomain = window.location.host === APP_INFO.AppHostOld;
1616

1717
return (
@@ -38,7 +38,7 @@ const Header = () => {
3838
)}
3939
<header className="flex items-center gap-2 border-b border-b-primary-200 bg-white px-4 py-1.5 shadow-sm dark:border-b-primary-800 dark:bg-primary-900">
4040
<HeaderLogo />
41-
{!!notes?.length && (
41+
{!!noteList?.length && (
4242
<>
4343
<HeaderNewNote />
4444
<HeaderHideNonPriorityNotes />

src/blocks/Header/HeaderDeleteNotes.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { useEffect, useState } from "react";
22
import { Field, Label } from "@headlessui/react";
33
import { TrashIcon } from "@heroicons/react/16/solid";
4-
import { notesService } from "../../database/notes.service";
4+
import notes from "../../database/notes";
55
import Dialog from "../../components/Dialog";
66
import Button from "../../components/Button";
77
import Tooltip from "../../components/Tooltip";
@@ -20,7 +20,7 @@ const HeaderDeleteNotes = () => {
2020
}, [showModal]);
2121

2222
async function handleDeleteEverything() {
23-
await notesService.removeAll(!retainPriorityNotes);
23+
await notes.removeAll(!retainPriorityNotes);
2424
setShowModal(false);
2525
}
2626

src/blocks/Header/HeaderHideNonPriorityNotes.tsx

+4-8
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,15 @@ import { StarIcon } from "@heroicons/react/16/solid";
22
import Button from "../../components/Button";
33
import Tooltip from "../../components/Tooltip";
44
import { useLiveQuery } from "dexie-react-hooks";
5-
import { settingsService } from "../../database/settings.service";
6-
import { SETTINGS_KEYS } from "../../utilities/constants";
5+
import settings, { SETTINGS_KEYS } from "../../database/settings";
76

87
const HeaderHideNonPriorityNotes = () => {
9-
const activeSetting = useLiveQuery(
10-
async () => await settingsService.read(SETTINGS_KEYS.HideNonPriorityNotes),
8+
const activeSetting = useLiveQuery(() =>
9+
settings.read(SETTINGS_KEYS.HideNonPriorityNotes),
1110
);
1211

1312
const toggleSetting = async () => {
14-
await settingsService.write(
15-
SETTINGS_KEYS.HideNonPriorityNotes,
16-
!activeSetting,
17-
);
13+
await settings.write(SETTINGS_KEYS.HideNonPriorityNotes, !activeSetting);
1814
};
1915

2016
const label = activeSetting ? "Show All Notes" : "Show Priority Notes Only";

src/blocks/Header/HeaderNewNote.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { notesService } from "../../database/notes.service";
1+
import notes from "../../database/notes";
22
import { PlusIcon } from "@heroicons/react/16/solid";
33
import Button from "../../components/Button";
44
import Tooltip from "../../components/Tooltip";
@@ -7,7 +7,7 @@ const HeaderNewNote = () => {
77
const label = "New Note";
88

99
function handleCreateNote() {
10-
notesService.create({
10+
notes.create({
1111
theme: "yellow",
1212
content: "",
1313
isPriority: false,

src/blocks/Main/Main.tsx

+15-9
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,33 @@
11
import { useLiveQuery } from "dexie-react-hooks";
2-
import { notesService } from "../../database/notes.service";
32
import MainOnboarding from "./MainOnboarding";
43
import Note from "./Note/Note";
5-
import { settingsService } from "../../database/settings.service";
6-
import { SETTINGS_KEYS } from "../../utilities/constants";
4+
import notes from "../../database/notes";
5+
import settings, { SETTINGS_KEYS } from "../../database/settings";
76

87
const Main = () => {
9-
const notes = useLiveQuery(() => notesService.list());
8+
const noteItems = useLiveQuery(() => notes.list());
9+
10+
const useOpaqueNotes = useLiveQuery(() =>
11+
settings.read(SETTINGS_KEYS.UseOpaqueNotes),
12+
);
13+
1014
const hideNonPriorityNotes = useLiveQuery(() =>
11-
settingsService.read(SETTINGS_KEYS.HideNonPriorityNotes),
15+
settings.read(SETTINGS_KEYS.HideNonPriorityNotes),
1216
);
1317

14-
if (notes && !notes.length) {
18+
if (noteItems && !noteItems.length) {
1519
return <MainOnboarding />;
1620
}
1721

1822
const filteredNotes = hideNonPriorityNotes
19-
? notes?.filter((note) => note.isPriority)
20-
: notes;
23+
? noteItems?.filter((note) => note.isPriority)
24+
: noteItems;
2125

2226
return (
2327
<main className="relative overflow-auto p-2">
24-
{filteredNotes?.map((note) => <Note key={note.id} noteData={note} />)}
28+
{filteredNotes?.map((note) => (
29+
<Note key={note.id} noteData={note} useOpaqueNotes={useOpaqueNotes} />
30+
))}
2531
</main>
2632
);
2733
};

src/blocks/Main/MainOnboarding.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { PlusIcon } from "@heroicons/react/16/solid";
2-
import { notesService } from "../../database/notes.service";
2+
import notes from "../../database/notes";
33
import { APP_INFO } from "../../utilities/constants";
44
import Button from "../../components/Button";
55
import Typography from "../../components/Typography";
66

77
const MainOnboarding = () => {
88
function handleCreateNote() {
9-
notesService.create({
9+
notes.create({
1010
theme: "yellow",
1111
content: "This is your first note! Click here to edit.",
1212
isPriority: false,

src/blocks/Main/Note/Note.tsx

+7-12
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,19 @@
11
import { useEffect, useId, useRef, useState } from "react";
22
import { twMerge } from "tailwind-merge";
33
import Draggable, { DraggableData, DraggableEvent } from "react-draggable";
4-
import { notesService } from "../../../database/notes.service";
5-
import { settingsService } from "../../../database/settings.service";
4+
import notes from "../../../database/notes";
65
import { NoteItem } from "../../../database/db";
7-
import { useLiveQuery } from "dexie-react-hooks";
86
import { themes } from "../../../utilities/themes";
97
import NoteMenu from "./NoteMenu";
10-
import { SETTINGS_KEYS } from "../../../utilities/constants";
118
import { StarIcon } from "@heroicons/react/16/solid";
129

1310
const Note = (
1411
p: React.HTMLAttributes<HTMLElement> & {
1512
noteData: NoteItem;
13+
useOpaqueNotes?: boolean;
1614
},
1715
) => {
1816
const id = useId();
19-
const useOpaqueNotes = useLiveQuery(() =>
20-
settingsService.read(SETTINGS_KEYS.UseOpaqueNotes),
21-
);
2217
const textareaId = useId();
2318
const nodeRef = useRef<HTMLElement>(null);
2419
const textareaRef = useRef<HTMLTextAreaElement>(null);
@@ -32,10 +27,10 @@ const Note = (
3227
});
3328

3429
useEffect(() => {
35-
notesService.modify(p.noteData.id, notePosition);
30+
notes.modify(p.noteData.id, notePosition);
3631
}, [notePosition, p.noteData.id]);
3732

38-
if (useOpaqueNotes === undefined || !p.noteData) {
33+
if (!p.noteData) {
3934
return null;
4035
}
4136

@@ -59,7 +54,7 @@ const Note = (
5954
}
6055

6156
async function handleBringForwards() {
62-
const highestId = await notesService.getTopZIndex();
57+
const highestId = await notes.getTopZIndex();
6358
if (highestId !== notePosition.posZ) {
6459
setNotePosition((prevState) => ({
6560
...prevState,
@@ -86,7 +81,7 @@ const Note = (
8681
ref={nodeRef}
8782
className={twMerge(
8883
"absolute rounded shadow-sm hover:shadow-lg",
89-
useOpaqueNotes ? theme.noteOpaque : theme.note,
84+
p.useOpaqueNotes ? theme.noteOpaque : theme.note,
9085
!p.noteData.content &&
9186
!p.noteData.isPriority &&
9287
"[&:not(:hover)]:animate-pulse",
@@ -113,7 +108,7 @@ const Note = (
113108
id={textareaId}
114109
ref={textareaRef}
115110
onChange={() =>
116-
notesService.modify(p.noteData.id, {
111+
notes.modify(p.noteData.id, {
117112
content: textareaRef.current?.value,
118113
})
119114
}

src/blocks/Main/Note/NoteMenu.tsx

+4-7
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,7 @@ import {
66
MenuItems,
77
Transition,
88
} from "@headlessui/react";
9-
import {
10-
notesService,
11-
NoteModifyableFields,
12-
} from "../../../database/notes.service";
9+
import notes, { NoteModifyableFields } from "../../../database/notes";
1310
import { NoteItem } from "../../../database/db";
1411
import { themes } from "../../../utilities/themes";
1512
import NoteMenuTheme from "./NoteMenuTheme";
@@ -30,11 +27,11 @@ const NoteMenu = (
3027
},
3128
) => {
3229
function handleNoteDelete() {
33-
notesService.remove(p.noteData.id);
30+
notes.remove(p.noteData.id);
3431
}
3532

3633
function handleNoteModify(updates: NoteModifyableFields) {
37-
notesService.modify(p.noteData.id, {
34+
notes.modify(p.noteData.id, {
3835
...p.noteData,
3936
...updates,
4037
});
@@ -47,7 +44,7 @@ const NoteMenu = (
4744
const tooWide = window.innerWidth < maxX;
4845
const tooTall = window.innerHeight < maxY;
4946

50-
notesService.create({
47+
notes.create({
5148
posX: p.noteData.posX + (tooWide ? -20 : 20),
5249
posY: p.noteData.posY + (tooTall ? -20 : 20),
5350
posW: p.noteData.posW,

src/blocks/Settings/SettingsItems.tsx

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
import { useLiveQuery } from "dexie-react-hooks";
2-
import { settingsService } from "../../database/settings.service";
2+
import settings, { SETTINGS_KEYS } from "../../database/settings";
33
import Switch from "../../components/Switch";
44
import ItemContainer from "./ItemContainer";
5-
import { SETTINGS_KEYS } from "../../utilities/constants";
65

76
const SettingsItems = () => {
8-
const useOpaqueNotes = useLiveQuery(
9-
async () => await settingsService.read(SETTINGS_KEYS.UseOpaqueNotes),
7+
const useOpaqueNotes = useLiveQuery(() =>
8+
settings.read(SETTINGS_KEYS.UseOpaqueNotes),
109
);
1110

1211
return (
@@ -17,8 +16,8 @@ const SettingsItems = () => {
1716
>
1817
<Switch
1918
state={!useOpaqueNotes}
20-
setState={() =>
21-
settingsService.write(SETTINGS_KEYS.UseOpaqueNotes, !useOpaqueNotes)
19+
setState={async () =>
20+
await settings.write(SETTINGS_KEYS.UseOpaqueNotes, !useOpaqueNotes)
2221
}
2322
/>
2423
</ItemContainer>

src/components/Dialog.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Fragment } from "react";
22
import { useLiveQuery } from "dexie-react-hooks";
3-
import { notesService } from "../database/notes.service";
3+
import notes from "../database/notes";
44
import { XMarkIcon } from "@heroicons/react/16/solid";
55
import Typography from "./Typography";
66
import {
@@ -20,7 +20,7 @@ const Dialog = (
2020
children: React.ReactNode;
2121
},
2222
) => {
23-
const highestZIndex = useLiveQuery(() => notesService.getTopZIndex());
23+
const highestZIndex = useLiveQuery(() => notes.getTopZIndex());
2424

2525
return (
2626
<Transition appear show={p.isOpen}>

src/database/db.ts

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import Dexie, { IndexableType, Table } from "dexie";
2-
import { TABLE_NAMES } from "../utilities/constants";
2+
3+
enum TABLE_NAMES {
4+
Notes = "notes",
5+
Settings = "settings",
6+
}
37

48
export interface NoteItem {
59
id: IndexableType;
@@ -62,4 +66,7 @@ export class MySubClassedDexie extends Dexie {
6266
}
6367
}
6468

65-
export const db = new MySubClassedDexie();
69+
const db = new MySubClassedDexie();
70+
71+
export default db;
72+
export { TABLE_NAMES };

src/database/notes.service.ts src/database/notes.ts

+2-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import { db } from "./db";
1+
import db, { TABLE_NAMES } from "./db";
22
import { IndexableType } from "dexie";
3-
import { TABLE_NAMES } from "../utilities/constants";
43

54
export type NoteModifyableFields = {
65
posX?: number;
@@ -64,11 +63,4 @@ const removeAll = async (deletePriorityNotes: boolean) => {
6463
});
6564
};
6665

67-
export const notesService = {
68-
list,
69-
create,
70-
modify,
71-
remove,
72-
removeAll,
73-
getTopZIndex,
74-
};
66+
export default { list, create, modify, remove, removeAll, getTopZIndex };

0 commit comments

Comments
 (0)