Skip to content

Commit 60aeb9d

Browse files
committed
Breadcrumbs improvements
1 parent f61186f commit 60aeb9d

File tree

14 files changed

+139
-36
lines changed

14 files changed

+139
-36
lines changed

backend/conferences/admin/conference.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import json
12
from django.template.response import TemplateResponse
23
from pathlib import Path
34
from django.core.files.storage import storages
@@ -213,12 +214,33 @@ def schedule_builder(self, request, object_id):
213214
arguments={
214215
"conference_id": object_id,
215216
"conference_code": conference.code,
216-
"conference_repr": str(conference),
217+
"breadcrumbs": json.dumps(
218+
self._build_schedule_builder_breadcrumbs(conference)
219+
),
217220
},
218221
title="Schedule Builder",
219222
)
220223
return TemplateResponse(request, "astro/schedule-builder.html", context)
221224

225+
def _build_schedule_builder_breadcrumbs(self, conference):
226+
return [
227+
{
228+
"title": "Conferences",
229+
"url": reverse("admin:app_list", kwargs={"app_label": "conferences"}),
230+
},
231+
{
232+
"title": str(conference._meta.verbose_name_plural),
233+
"url": reverse("admin:conferences_conference_changelist"),
234+
},
235+
{
236+
"title": str(conference),
237+
"url": reverse(
238+
"admin:conferences_conference_change", args=[conference.id]
239+
),
240+
},
241+
{"title": "Schedule Builder", "url": None},
242+
]
243+
222244
def map_videos(self, request, object_id):
223245
if request.method == "POST":
224246
data = request.POST

backend/custom_admin/src/components/invitation-letter-document-builder/builder.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ export const InvitationLetterBuilder = () => {
6565
</Box>
6666

6767
<Box height="var(--space-3)" />
68-
<Box position="sticky" bottom="0" p="3" className="bg-white">
68+
<Box position="sticky" bottom="0" p="3" className="bg-white border-t-2">
6969
<Button onClick={saveChanges} loading={isSaving}>
7070
Save changes
7171
</Button>

backend/custom_admin/src/components/invitation-letter-document-builder/editor.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@ import ListItem from "@tiptap/extension-list-item";
33
import TextAlign from "@tiptap/extension-text-align";
44
import TextStyle from "@tiptap/extension-text-style";
55
import { EditorContent, useEditor } from "@tiptap/react";
6-
import { useCurrentEditor } from "@tiptap/react";
76
import StarterKit from "@tiptap/starter-kit";
8-
import React from "react";
97
import { MenuBar } from "./menu-bar";
108

119
const extensions = [

backend/custom_admin/src/components/invitation-letter-document-builder/root.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@ import { LocalStateProvider } from "./local-state";
66
export const InvitationLetterDocumentBuilderRoot = () => {
77
return (
88
<Base>
9-
<DjangoAdminLayout
10-
breadcrumbs={[{ id: 0, label: "Invitation Letter Document Builder" }]}
11-
>
9+
<DjangoAdminLayout>
1210
<LocalStateProvider>
1311
<InvitationLetterBuilder />
1412
</LocalStateProvider>

backend/custom_admin/src/components/schedule-builder/root.tsx

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ export const ScheduleBuilderRoot = () => {
1717
};
1818

1919
const ScheduleBuilder = () => {
20-
const { conferenceCode, conferenceId, conferenceRepr } =
21-
useCurrentConference();
20+
const { conferenceCode } = useCurrentConference();
2221
const { error, loading, data } = useConferenceScheduleQuery({
2322
variables: {
2423
conferenceCode,
@@ -30,18 +29,7 @@ const ScheduleBuilder = () => {
3029
} = data ?? { conference: {} };
3130

3231
return (
33-
<DjangoAdminLayout
34-
breadcrumbs={[
35-
{ id: 0, label: "Conferences", url: "/admin/conferences" },
36-
{ id: 1, label: "Conferences", url: "/admin/conferences/conference" },
37-
{
38-
id: 2,
39-
label: conferenceRepr,
40-
url: `/admin/conferences/conference/${conferenceId}`,
41-
},
42-
{ id: 3, label: "Schedule Builder" },
43-
]}
44-
>
32+
<DjangoAdminLayout>
4533
{loading && <h2>Please wait</h2>}
4634
{!loading && error && (
4735
<h2>Something went wrong. Make sure you have the right permissions.</h2>

backend/custom_admin/src/components/shared/base.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { DndProvider } from "react-dnd";
44
import { HTML5Backend } from "react-dnd-html5-backend";
55

66
import "../shared/styles.css";
7-
import * as Toast from "@radix-ui/react-toast";
87
import { DjangoAdminEditorProvider } from "./django-admin-editor-modal";
98

109
type Props = {

backend/custom_admin/src/components/shared/django-admin-layout.tsx

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,16 @@ import clsx from "clsx";
22
import React, { Fragment } from "react";
33

44
type Breadcrumb = {
5-
id: number;
6-
label: string;
5+
title: string;
76
url?: string;
87
};
98

109
type Props = {
1110
children: any;
12-
breadcrumbs: Breadcrumb[];
1311
};
1412

15-
export const DjangoAdminLayout = ({ children, breadcrumbs }: Props) => {
13+
export const DjangoAdminLayout = ({ children }: Props) => {
14+
const breadcrumbs: Breadcrumb[] = JSON.parse((window as any).breadcrumbs);
1615
return (
1716
<div>
1817
<Header />
@@ -37,22 +36,28 @@ const Breadcrumbs = ({ breadcrumbs }: { breadcrumbs: Breadcrumb[] }) => {
3736
<nav aria-label="Breadcrumbs">
3837
<div className="py-3 px-10 text-white bg-[#79aec8]">
3938
<span>
40-
<a className="hover:text-[#c4dce8] transition-colors" href="/admin">
39+
<a
40+
className="hover:text-[#c4dce8] transition-colors text-sm"
41+
href="/admin"
42+
>
4143
Home
4244
</a>
4345
</span>
4446
<span>{" \u203a "}</span>
4547
{breadcrumbs.map((breadcrumb, index) => {
4648
const last = index === breadcrumbs.length - 1;
4749
return (
48-
<span key={breadcrumb.id}>
50+
<span key={index}>
4951
<a
5052
href={breadcrumb.url}
51-
className={clsx("hover:text-[#c4dce8] transition-colors", {
52-
"text-[#c4dce8]": last,
53-
})}
53+
className={clsx(
54+
"hover:text-[#c4dce8] transition-colors text-sm",
55+
{
56+
"text-[#c4dce8]": last,
57+
},
58+
)}
5459
>
55-
{breadcrumb.label}
60+
{breadcrumb.title}
5661
</a>
5762
{!last && <span>{" \u203a "}</span>}
5863
</span>
Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
export const useCurrentConference = (): {
22
conferenceCode: string;
33
conferenceId: string;
4-
conferenceRepr: string;
54
} => {
65
return {
76
conferenceId: (window as any).conferenceId,
87
conferenceCode: (window as any).conferenceCode,
9-
conferenceRepr: (window as any).conferenceRepr,
108
};
119
};

backend/custom_admin/src/pages/invitation-letter-document-builder.astro

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { InvitationLetterDocumentBuilderRoot } from "../components/invitation-le
2222

2323
window.apolloGraphQLUrl = '/admin/graphql';
2424
window.documentId = getArg('document_id', "{{ document_id }}");
25+
window.breadcrumbs = getArg('breadcrumbs', "{{ breadcrumbs }}");
2526
</script>
2627
</body>
2728
</html>

backend/custom_admin/src/pages/schedule-builder.astro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { ScheduleBuilderRoot } from "../components/schedule-builder/root";
2222
window.apolloGraphQLUrl = '/admin/graphql';
2323
window.conferenceId = getArg('conference_id', "{{ conference_id }}");
2424
window.conferenceCode = getArg('conference_code', "{{ conference_code }}");
25-
window.conferenceRepr = getArg('conference_repr', "{{ conference_repr }}");
25+
window.breadcrumbs = getArg('breadcrumbs', "{{ breadcrumbs }}");
2626
</script>
2727
</body>
2828
</html>

0 commit comments

Comments
 (0)