Skip to content

Commit a6cb864

Browse files
release: 0.4.4
2 parents 419677e + e0243f6 commit a6cb864

17 files changed

Lines changed: 484 additions & 97 deletions

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "content-planner",
33
"private": true,
4-
"version": "0.4.3",
4+
"version": "0.4.4",
55
"type": "module",
66
"scripts": {
77
"dev:tauri": "tauri dev",

src-tauri/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src-tauri/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "content-planner"
3-
version = "0.4.3"
3+
version = "0.4.4"
44
description = "A tool designer to make content planning and management easier."
55
authors = ["Bartłomiej Paczesny"]
66
edition = "2021"

src-tauri/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ CREATE TABLE idea_bank (
183183
description TEXT,
184184
duration TEXT NOT NULL,
185185
content_type TEXT NOT NULL,
186-
target_audience TEXT NOT NULL CHECK (target_audience IN ('beginner', 'intermediate', 'advanced')),
186+
target_audience TEXT NOT NULL,
187187
outline TEXT,
188188
is_favorite BOOLEAN DEFAULT FALSE,
189189
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,

src-tauri/tauri.conf.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"$schema": "https://schema.tauri.app/config/2",
33
"productName": "content-planner",
4-
"version": "0.4.3",
4+
"version": "0.4.4",
55
"identifier": "pl.paczesny.dev.content-planner",
66
"build": {
77
"beforeDevCommand": "bun run dev",

src/App.tsx

Lines changed: 50 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,18 @@ import DashboardView from "@/views/dashboard";
1414
import { useVideoStore } from "@/stores/videoStore"; // Import the Zustand store
1515
import VideoModal from "@/components/video-modal";
1616
import { Video } from "@/types/video";
17-
import { Toaster } from "./components/ui/toaster";
18-
import ScheduleView from "./views/schedule";
19-
import IdeaBank from "./views/idea-bank";
20-
import { useIdeaBankStore } from "./stores/ideaBankStore";
21-
import { Idea } from "./types/idea";
22-
import IdeaBankModal from "./components/idea-modal";
23-
import { useSettingsStore } from "./stores/settingsStore";
24-
import SettingsView from "./views/settings";
25-
import { useUpdater } from "./hooks/use-updater";
26-
import ProgressBar from "./components/progress-bar";
27-
import { useToast } from "./hooks/use-toast";
17+
import { Toaster } from "@/components/ui/toaster";
18+
import ScheduleView from "@/views/schedule";
19+
import IdeaBank from "@/views/idea-bank";
20+
import { useIdeaBankStore } from "@/stores/ideaBankStore";
21+
import { Idea } from "@/types/idea";
22+
import IdeaBankModal from "@/components/idea-modal";
23+
import { useSettingsStore } from "@/stores/settingsStore";
24+
import SettingsView from "@/views/settings";
25+
import { useUpdater } from "@/hooks/use-updater";
26+
import ProgressBar from "@/components/progress-bar";
27+
import { useToast } from "@/hooks/use-toast";
28+
import { ConfirmationModalProvider } from "@/providers/modal-provider";
2829

2930
export type ActiveTab =
3031
| "videos"
@@ -45,7 +46,6 @@ function App() {
4546

4647
const [isModalOpen, setIsModalOpen] = useState(false);
4748
const [isIdeaModalOpen, setIsIdeaModalOpen] = useState(false);
48-
4949
const [selectedIdea, setSelectedIdea] = useState<Idea | null>(null);
5050

5151
const { toast } = useToast(); // Use the toast hook
@@ -104,42 +104,44 @@ function App() {
104104

105105
return (
106106
<ThemeProvider defaultTheme="system" storageKey="vite-ui-theme">
107-
<Toaster />
108-
<SidebarProvider
109-
style={
110-
{
111-
"--sidebar-width": "15rem",
112-
} as React.CSSProperties
113-
}
114-
>
115-
<AppSidebar onNavigate={setActiveTab} currentTab={activeTab} />
116-
<SidebarInset>
117-
<header className="flex shrink-0 sticky top-0 bg-background items-center gap-2 px-4 pt-4 pb-3">
118-
<SidebarTrigger className="-ml-1" />
119-
<Separator orientation="vertical" className="mr-2 h-4" />
120-
{activeTab.charAt(0).toUpperCase() + activeTab.slice(1)}
121-
<ModeToggle />
122-
<VideoModal
123-
video={selectedVideo}
124-
open={isModalOpen}
125-
setOpen={setIsModalOpen}
126-
resetSelectedVideo={() => setSelectedVideo(null)}
127-
triggerVisible={activeTab === "videos"}
128-
/>
129-
<IdeaBankModal
130-
idea={selectedIdea}
131-
open={isIdeaModalOpen}
132-
setOpen={setIsIdeaModalOpen}
133-
resetSelectedIdea={() => setSelectedIdea(null)}
134-
triggerVisible={activeTab === "ideas"}
135-
/>
136-
</header>
137-
<div className="flex flex-1 justify-start flex-col gap-4 w-full mx-auto pb-2">
138-
<ActiveTabComponent />
139-
</div>
140-
</SidebarInset>
141-
</SidebarProvider>
142-
{showProgressDialog && <ProgressBar progress={progress} />}
107+
<ConfirmationModalProvider>
108+
<Toaster />
109+
<SidebarProvider
110+
style={
111+
{
112+
"--sidebar-width": "15rem",
113+
} as React.CSSProperties
114+
}
115+
>
116+
<AppSidebar onNavigate={setActiveTab} currentTab={activeTab} />
117+
<SidebarInset>
118+
<header className="flex shrink-0 sticky top-0 bg-background items-center gap-2 px-4 pt-4 pb-3">
119+
<SidebarTrigger className="-ml-1" />
120+
<Separator orientation="vertical" className="mr-2 h-4" />
121+
{activeTab.charAt(0).toUpperCase() + activeTab.slice(1)}
122+
<ModeToggle />
123+
<VideoModal
124+
video={selectedVideo}
125+
open={isModalOpen}
126+
setOpen={setIsModalOpen}
127+
resetSelectedVideo={() => setSelectedVideo(null)}
128+
triggerVisible={activeTab === "videos"}
129+
/>
130+
<IdeaBankModal
131+
idea={selectedIdea}
132+
open={isIdeaModalOpen}
133+
setOpen={setIsIdeaModalOpen}
134+
resetSelectedIdea={() => setSelectedIdea(null)}
135+
triggerVisible={activeTab === "ideas"}
136+
/>
137+
</header>
138+
<div className="flex flex-1 justify-start flex-col gap-4 w-full mx-auto pb-2">
139+
<ActiveTabComponent />
140+
</div>
141+
</SidebarInset>
142+
</SidebarProvider>
143+
{showProgressDialog && <ProgressBar progress={progress} />}
144+
</ConfirmationModalProvider>
143145
</ThemeProvider>
144146
);
145147
}

src/components/app-sidebar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export function AppSidebar({ onNavigate, currentTab, ...props }: Props) {
5353
</div>
5454
<div className="flex flex-col gap-0.5 leading-none">
5555
<span className="font-semibold">YT Video Planner</span>
56-
<span className="opacity-60">v0.4.3</span>
56+
<span className="opacity-60">v0.4.4</span>
5757
</div>
5858
</a>
5959
</SidebarMenuButton>
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import { useEffect } from "react";
2+
import { Button, ButtonProps } from "./ui/button";
3+
import {
4+
ResponsiveModal,
5+
ResponsiveModalContent,
6+
ResponsiveModalDescription,
7+
ResponsiveModalFooter,
8+
ResponsiveModalHeader,
9+
ResponsiveModalTitle,
10+
} from "./ui/modal";
11+
12+
export type ConfirmationModalProps = {
13+
open: boolean;
14+
onOpenChange: () => void;
15+
title: string;
16+
description: string;
17+
components?: React.ReactNode[];
18+
buttons: {
19+
text: string;
20+
onClick: () => void;
21+
variant: ButtonProps["variant"];
22+
}[];
23+
};
24+
25+
function ConfirmationModal({
26+
open,
27+
onOpenChange,
28+
title,
29+
description,
30+
components,
31+
buttons,
32+
}: ConfirmationModalProps) {
33+
useEffect(() => {
34+
console.log(open);
35+
}, [open]);
36+
return (
37+
<ResponsiveModal open={open} onOpenChange={onOpenChange}>
38+
<ResponsiveModalContent>
39+
<ResponsiveModalHeader>
40+
<ResponsiveModalTitle>{title}</ResponsiveModalTitle>
41+
<ResponsiveModalDescription>{description}</ResponsiveModalDescription>
42+
</ResponsiveModalHeader>
43+
{components &&
44+
components?.length > 0 &&
45+
components.map((component, index) => (
46+
<div key={index}>{component}</div>
47+
))}
48+
<ResponsiveModalFooter>
49+
{buttons.map((button, index) => (
50+
<Button
51+
key={index}
52+
onClick={button.onClick}
53+
variant={button.variant}
54+
>
55+
{button.text}
56+
</Button>
57+
))}
58+
</ResponsiveModalFooter>
59+
</ResponsiveModalContent>
60+
</ResponsiveModal>
61+
);
62+
}
63+
64+
export default ConfirmationModal;

0 commit comments

Comments
 (0)