Skip to content

Commit e466373

Browse files
author
Alex Patterson
committed
add post settings
1 parent d32baa8 commit e466373

14 files changed

Lines changed: 210 additions & 12161 deletions

backend/firebase/firestore.rules

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,13 @@ service cloud.firestore {
4545
allow update: if hasAnyRole(['author', 'editor', 'admin'])
4646
allow delete: if hasAnyRole(['author', 'editor', 'admin'])
4747
}
48+
49+
match /customers/{id} {
50+
allow create: if hasAnyRole(['admin'])
51+
allow read: if hasAnyRole(['admin'])
52+
allow update: if hasAnyRole(['admin'])
53+
allow delete: if hasAnyRole(['admin'])
54+
}
4855
}
4956
}
5057

frontend/main/package-lock.json

Lines changed: 20 additions & 12144 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frontend/main/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@
6565
"devDependencies": {
6666
"@fullhuman/postcss-purgecss": "^3.1.3",
6767
"@next/bundle-analyzer": "^10.0.2",
68-
"@tailwindcss/custom-forms": "^0.2.1",
6968
"@types/cookie": "^0.4.0",
7069
"@types/js-cookie": "^2.2.6",
7170
"@types/node": "^14.14.14",

frontend/main/src/components/admin/EditPost.tsx

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,12 @@ import { interval, Subject } from 'rxjs';
1616
import Link from 'next/link';
1717
import ShowMDX from '@/components/admin/ShowMDX';
1818
import PostHistories from '@/components/admin/PostHistories';
19-
import CourseSections from '@/components/admin/CourseSections';
2019
import EditPostEditor from '@/components/admin/EditPostEditor';
2120
import EditPostSidebar from '@/components/admin/EditPostSidebar';
2221
import EditPostMedia from '@/components/admin/EditPostMedia';
22+
import EditPostCourseSections from '@/components/admin/EditPostCourseSections';
23+
import EditPostCourseSettings from '@/components/admin/EditPostCourseSettings';
24+
import EditPostCourseGroups from '@/components/admin/EditPostCourseGroups';
2325

2426
export default function EditPost({
2527
type,
@@ -111,8 +113,6 @@ export default function EditPost({
111113
);
112114
case TabType.media:
113115
return <EditPostMedia history={history} setHistory={setHistory} />;
114-
case TabType.sections:
115-
return <CourseSections historyInput={history as Post} />;
116116
case TabType.preview:
117117
return (
118118
<div
@@ -123,6 +123,12 @@ export default function EditPost({
123123
</article>
124124
</div>
125125
);
126+
case TabType.sections:
127+
return <EditPostCourseSections historyInput={history as Post} />;
128+
case TabType.settings:
129+
return <EditPostCourseSettings historyInput={history as Post} />;
130+
case TabType.groups:
131+
return <EditPostCourseGroups historyInput={history as Post} />;
126132
case TabType.history:
127133
return <PostHistories postHistories={postHistories} />;
128134
default:
@@ -136,7 +142,7 @@ export default function EditPost({
136142
<div className="w-full max-w-8xl">
137143
<nav className="flex justify-between w-full h-12 overflow-x-auto bg-secondary-500 dark:bg-secondary-600">
138144
<button
139-
className={`block px-4 2xl:px-20 font-medium hover:text-primary-900 text-basics-50 dark:text-basics-50 focus:outline-none ${
145+
className={`block px-4 2xl:px-12 font-medium hover:text-primary-900 text-basics-50 dark:text-basics-50 focus:outline-none ${
140146
tab == TabType.edit
141147
? 'border-b-4 border-primary-900 dark:border-primary-900'
142148
: 'border-b-4 border-secondary-500 dark:border-secondary-500'
@@ -146,7 +152,7 @@ export default function EditPost({
146152
EDIT
147153
</button>
148154
<button
149-
className={`block px-4 2xl:px-20 font-medium hover:text-primary-900 text-basics-50 dark:text-basics-50 focus:outline-none ${
155+
className={`block px-4 2xl:px-12 font-medium hover:text-primary-900 text-basics-50 dark:text-basics-50 focus:outline-none ${
150156
tab == TabType.media
151157
? 'border-b-4 border-primary-900 dark:border-primary-900'
152158
: 'border-b-4 border-secondary-500 dark:border-secondary-500'
@@ -156,7 +162,7 @@ export default function EditPost({
156162
MEDIA
157163
</button>
158164
<button
159-
className={`block px-4 2xl:px-20 font-medium hover:text-primary-900 text-basics-50 dark:text-basics-50 focus:outline-none ${
165+
className={`block px-4 2xl:px-12 font-medium hover:text-primary-900 text-basics-50 dark:text-basics-50 focus:outline-none ${
160166
tab == TabType.preview
161167
? 'border-b-4 border-primary-900 dark:border-primary-900'
162168
: 'border-b-4 border-secondary-500 dark:border-secondary-500'
@@ -166,7 +172,7 @@ export default function EditPost({
166172
MDX PREVIEW
167173
</button>
168174
<button
169-
className={`block px-4 2xl:px-20 font-medium hover:text-primary-900 text-basics-50 dark:text-basics-50 focus:outline-none ${
175+
className={`block px-4 2xl:px-12 font-medium hover:text-primary-900 text-basics-50 dark:text-basics-50 focus:outline-none ${
170176
tab == TabType.sections
171177
? 'border-b-4 border-primary-900 dark:border-primary-900'
172178
: 'border-b-4 border-secondary-500 dark:border-secondary-500'
@@ -176,7 +182,27 @@ export default function EditPost({
176182
SECTIONS
177183
</button>
178184
<button
179-
className={`block px-4 2xl:px-20 font-medium hover:text-primary-900 text-basics-50 dark:text-basics-50 focus:outline-none ${
185+
className={`block px-4 2xl:px-12 font-medium hover:text-primary-900 text-basics-50 dark:text-basics-50 focus:outline-none ${
186+
tab == TabType.settings
187+
? 'border-b-4 border-primary-900 dark:border-primary-900'
188+
: 'border-b-4 border-secondary-500 dark:border-secondary-500'
189+
} ${history.type == PostType.course ? 'block' : 'hidden'}`}
190+
onClick={() => selectTab(TabType.settings)}
191+
>
192+
SETTINGS
193+
</button>
194+
<button
195+
className={`block px-4 2xl:px-12 font-medium hover:text-primary-900 text-basics-50 dark:text-basics-50 focus:outline-none ${
196+
tab == TabType.groups
197+
? 'border-b-4 border-primary-900 dark:border-primary-900'
198+
: 'border-b-4 border-secondary-500 dark:border-secondary-500'
199+
} ${history.type == PostType.course ? 'block' : 'hidden'}`}
200+
onClick={() => selectTab(TabType.groups)}
201+
>
202+
GROUPS
203+
</button>
204+
<button
205+
className={`block px-4 2xl:px-12 font-medium hover:text-primary-900 text-basics-50 dark:text-basics-50 focus:outline-none ${
180206
tab == TabType.history
181207
? 'border-b-4 border-primary-900 dark:border-primary-900'
182208
: 'border-b-4 border-secondary-500 dark:border-secondary-500'
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { useEffect, useState } from 'react';
2+
3+
import { Post } from '@/models/post.model.ts';
4+
5+
export default function EditPostCourseGroups({
6+
historyInput,
7+
}: {
8+
historyInput: Post;
9+
}): JSX.Element {
10+
const [history, setHistory] = useState<Post>();
11+
12+
useEffect(() => {
13+
setHistory(historyInput);
14+
}, [historyInput]);
15+
16+
return <>Groups</>;
17+
}

frontend/main/src/components/admin/CourseSections.tsx renamed to frontend/main/src/components/admin/EditPostCourseSections.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ import {
1717
// eslint-disable-next-line @typescript-eslint/no-var-requires
1818
const arrayMove = require('array-move');
1919

20-
export default function CourseSections({
20+
export default function EditPostCourseSections({
2121
historyInput,
2222
}: {
2323
historyInput: Post;
24-
}) {
24+
}): JSX.Element {
2525
const [history, setHistory] = useState<Post>();
2626
const [section, setSection] = useState<Section>();
2727
const [lessonSearch, setLessonSearch] = useState<string>('');
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import { useEffect, useState } from 'react';
2+
import Link from 'next/link';
3+
import {
4+
addCourseSection,
5+
postHistoryUpdate,
6+
usersDataObservable,
7+
} from '@/services/api';
8+
import { Post, Section } from '@/models/post.model.ts';
9+
import { take } from 'rxjs/operators';
10+
import {
11+
DragDropContext,
12+
Draggable,
13+
Droppable,
14+
DropResult,
15+
} from 'react-beautiful-dnd';
16+
import { UserInfoExtended } from '@/models/user.model';
17+
// eslint-disable-next-line @typescript-eslint/no-var-requires
18+
const arrayMove = require('array-move');
19+
20+
export default function EditPostCourseSettings({
21+
historyInput,
22+
}: {
23+
historyInput: Post;
24+
}): JSX.Element {
25+
const [history, setHistory] = useState<Post>();
26+
27+
useEffect(() => {
28+
setHistory(historyInput);
29+
}, [historyInput]);
30+
31+
return (
32+
<>
33+
<div>
34+
<label className="flex">
35+
<input
36+
type="radio"
37+
className="mr-2 rounded text-primary-900"
38+
id="huey"
39+
name="drone"
40+
value="huey"
41+
checked
42+
/>
43+
<span>Huey</span>
44+
</label>
45+
</div>
46+
47+
<div>
48+
<label className="flex">
49+
<input
50+
type="radio"
51+
className="mr-2 rounded text-primary-900"
52+
id="dewey"
53+
name="drone"
54+
value="dewey"
55+
/>
56+
<span>Dewey</span>
57+
</label>
58+
</div>
59+
</>
60+
);
61+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
export enum AccessMode {
2+
open = 'open',
3+
free = 'free',
4+
buynow = 'buynow',
5+
recurring = 'recurring',
6+
closed = 'closed',
7+
}
8+
9+
export interface AccessSettings {
10+
accessMode: AccessMode;
11+
price?: number;
12+
buttonUrl?: string;
13+
}

frontend/main/src/models/admin.model.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,6 @@ export enum TabType {
44
sections = 'sections',
55
preview = 'preview',
66
history = 'history',
7+
settings = 'settings',
8+
groups = 'groups',
79
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export interface Certificate {
2+
content: string;
3+
}

0 commit comments

Comments
 (0)