Skip to content

Commit

Permalink
Release 2024-11-25 (#131)
Browse files Browse the repository at this point in the history
  • Loading branch information
tordans authored Nov 25, 2024
2 parents bf167b2 + ef607e5 commit adcb4c0
Show file tree
Hide file tree
Showing 46 changed files with 2,772 additions and 2,579 deletions.
3,347 changes: 1,544 additions & 1,803 deletions package-lock.json

Large diffs are not rendered by default.

84 changes: 42 additions & 42 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,92 +51,92 @@
"last 4 Edge major versions"
],
"dependencies": {
"@aws-sdk/client-s3": "3.673.0",
"@aws-sdk/client-sts": "3.670.0",
"@aws-sdk/lib-storage": "3.673.0",
"@aws-sdk/s3-request-presigner": "3.673.0",
"@aws-sdk/xhr-http-handler": "3.664.0",
"@blitzjs/auth": "2.1.2",
"@blitzjs/next": "2.1.2",
"@blitzjs/rpc": "2.1.2",
"@aws-sdk/client-s3": "3.699.0",
"@aws-sdk/client-sts": "3.699.0",
"@aws-sdk/lib-storage": "3.699.0",
"@aws-sdk/s3-request-presigner": "3.699.0",
"@aws-sdk/xhr-http-handler": "3.696.0",
"@blitzjs/auth": "2.1.3",
"@blitzjs/next": "2.1.3",
"@blitzjs/rpc": "2.1.3",
"@fontsource/red-hat-text": "5.1.0",
"@headlessui/react": "2.1.10",
"@heroicons/react": "2.1.5",
"@headlessui/react": "2.2.0",
"@heroicons/react": "2.2.0",
"@hookform/error-message": "2.0.1",
"@hookform/resolvers": "3.9.0",
"@iframe-resizer/react": "5.3.1",
"@prisma/client": "5.21.0",
"@hookform/resolvers": "3.9.1",
"@iframe-resizer/react": "5.3.2",
"@prisma/client": "5.22.0",
"@react-email/components": "0.0.25",
"@socialgouv/matomo-next": "1.9.1",
"@socialgouv/matomo-next": "1.9.2",
"@turf/helpers": "7.1.0",
"@turf/turf": "7.1.0",
"adler-32": "1.3.1",
"ajv": "8.17.1",
"autoprefixer": "10.4.20",
"blitz": "2.1.2",
"blitz": "2.1.3",
"clsx": "2.1.1",
"csv-writer": "1.6.0",
"date-fns": "4.1.0",
"dompurify": "3.1.7",
"eslint-plugin-react-compiler": "0.0.0-experimental-fa06e2c-20241016",
"dompurify": "3.2.1",
"maplibre-gl": "4.7.1",
"next": "14.2.15",
"next": "14.2.18",
"node-mailjet": "6.0.6",
"nuqs": "1.20.0",
"postcss": "8.4.47",
"prisma": "5.21.0",
"postcss": "8.4.49",
"prisma": "5.22.0",
"react": "18.3.1",
"react-dom": "18.3.1",
"react-hook-form": "7.53.0",
"react-intl": "6.8.0",
"react-hook-form": "7.53.2",
"react-intl": "6.8.9",
"react-map-gl": "7.1.7",
"react-number-format": "5.4.2",
"react-remark": "2.1.0",
"recharts": "2.13.0",
"recharts": "2.13.3",
"secure-password": "4.0.0",
"server-only": "0.0.1",
"sharp": "0.33.5",
"tailwindcss": "3.4.14",
"tailwindcss": "3.4.15",
"tiny-invariant": "1.3.3",
"ua-parser-js": "2.0.0-beta.3",
"ua-parser-js": "2.0.0",
"uuid": "10.0.0",
"zod": "3.23.8",
"zustand": "5.0.0"
"zustand": "5.0.1"
},
"devDependencies": {
"@faker-js/faker": "9.0.3",
"@next/bundle-analyzer": "14.2.15",
"@playwright/test": "1.48.1",
"@faker-js/faker": "9.2.0",
"@next/bundle-analyzer": "14.2.18",
"@playwright/test": "1.49.0",
"@tailwindcss/forms": "0.5.9",
"@tailwindcss/typography": "0.5.15",
"@testing-library/dom": "10.4.0",
"@testing-library/jest-dom": "6.6.1",
"@testing-library/jest-dom": "6.6.3",
"@testing-library/react": "16.0.1",
"@testing-library/react-hooks": "8.0.1",
"@total-typescript/ts-reset": "0.6.1",
"@types/dompurify": "3.0.5",
"@types/dompurify": "3.2.0",
"@types/geojson": "7946.0.14",
"@types/iframe-resizer": "3.5.13",
"@types/node": "22.7.6",
"@types/preview-email": "3.0.4",
"@types/react": "18.3.11",
"@types/node": "22.9.3",
"@types/preview-email": "3.1.0",
"@types/react": "18.3.12",
"@types/uuid": "10.0.0",
"@typescript-eslint/eslint-plugin": "8.9.0",
"@vitejs/plugin-react": "4.3.2",
"@typescript-eslint/eslint-plugin": "8.15.0",
"@vitejs/plugin-react": "4.3.3",
"eslint": "8.57.1",
"eslint-config-next": "14.2.15",
"eslint-config-next": "14.2.18",
"eslint-config-prettier": "9.1.0",
"husky": "9.1.6",
"eslint-plugin-react-compiler": "19.0.0-beta-df7b47d-20241124",
"husky": "9.1.7",
"jsdom": "25.0.1",
"next-router-mock": "0.9.13",
"prettier": "3.3.3",
"prettier-plugin-organize-imports": "4.1.0",
"prettier-plugin-prisma": "5.0.0",
"prettier-plugin-tailwindcss": "0.6.8",
"prettier-plugin-tailwindcss": "0.6.9",
"preview-email": "3.1.0",
"react-email": "3.0.1",
"typescript": "5.6.3",
"vitest": "2.1.3",
"react-email": "3.0.2",
"typescript": "5.7.2",
"vitest": "2.1.5",
"zod-prisma": "0.5.4"
}
}
File renamed without changes.
65 changes: 34 additions & 31 deletions src/app/_components/layouts/footer/FooterLogos.tsx
Original file line number Diff line number Diff line change
@@ -1,39 +1,42 @@
"use client"
import { useProjectSlug } from "@/src/core/routes/usePagesDirectoryProjectSlug"
import { getProxyImageSrc } from "@/src/core/utils/getProxyImageSrc"
import getProject from "@/src/server/projects/queries/getProject"
import { useQuery } from "@blitzjs/rpc"
import { clsx } from "clsx"
import Image from "next/image"
// import { useProjectSlug } from "@/src/core/routes/usePagesDirectoryProjectSlug"
// import { getProxyImageSrc } from "@/src/core/utils/getProxyImageSrc"
// import getProject from "@/src/server/projects/queries/getProject"
// import { useQuery } from "@blitzjs/rpc"
// import { clsx } from "clsx"
// import Image from "next/image"

type Props = { className?: string }

export const FooterLogos = ({ className }: Props) => {
const projectSlug = useProjectSlug()
const [project] = useQuery(getProject, { projectSlug })
// TEMP: Temporarily disabled https://github.com/FixMyBerlin/private-issues/issues/2155
return null

const logos = project.partnerLogoSrcs?.filter(Boolean)
if (!logos.length) return null
// const projectSlug = useProjectSlug()
// const [project] = useQuery(getProject, { projectSlug })

return (
<div className="flex">
<ul
className={clsx(
"mx-auto grid w-full grid-flow-row grid-cols-3 items-center justify-evenly gap-8 pb-4 sm:grid-cols-4 md:grid-cols-5",
className,
)}
>
{logos.map((partnerLogo) => (
<li className="relative mx-auto h-16 w-20" key={partnerLogo}>
<Image
className="mx-auto object-contain"
fill
src={getProxyImageSrc(partnerLogo)}
alt=""
/>
</li>
))}
</ul>
</div>
)
// const logos = project.partnerLogoSrcs?.filter(Boolean)
// if (!logos.length) return null

// return (
// <div className="flex">
// <ul
// className={clsx(
// "mx-auto grid w-full grid-flow-row grid-cols-3 items-center justify-evenly gap-8 pb-4 sm:grid-cols-4 md:grid-cols-5",
// className,
// )}
// >
// {logos.map((partnerLogo) => (
// <li className="relative mx-auto h-16 w-20" key={partnerLogo}>
// <Image
// className="mx-auto object-contain"
// fill
// src={getProxyImageSrc(partnerLogo)}
// alt=""
// />
// </li>
// ))}
// </ul>
// </div>
// )
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
"use client"
import { useProjectSlug } from "@/src/core/routes/useProjectSlug"
import { getProxyImageSrc } from "@/src/core/utils/getProxyImageSrc"
import getProject from "@/src/server/projects/queries/getProject"
import { useQuery } from "@blitzjs/rpc"
import { clsx } from "clsx"
import Image from "next/image"
// import { useProjectSlug } from "@/src/core/routes/useProjectSlug"
// import { getProxyImageSrc } from "@/src/core/utils/getProxyImageSrc"
// import getProject from "@/src/server/projects/queries/getProject"
// import { useQuery } from "@blitzjs/rpc"
// import { clsx } from "clsx"
// import Image from "next/image"

type Props = {
className?: string
Expand All @@ -17,19 +17,22 @@ const sizeClasses = {
}

export const ProjectLogo = ({ className, size = "5" }: Props) => {
const projectSlug = useProjectSlug()
const [project] = useQuery(getProject, { projectSlug })
// TEMP: Temporarily disabled https://github.com/FixMyBerlin/private-issues/issues/2155
return null

if (!project.logoSrc) return null
// const projectSlug = useProjectSlug()
// const [project] = useQuery(getProject, { projectSlug })

return (
<div className={clsx(className, "relative flex-none", sizeClasses[size])}>
<Image
className="object-contain"
fill
src={getProxyImageSrc(project.logoSrc)}
alt="Projektlogo"
/>
</div>
)
// if (!project.logoSrc) return null

// return (
// <div className={clsx(className, "relative flex-none", sizeClasses[size])}>
// <Image
// className="object-contain"
// fill
// src={getProxyImageSrc(project.logoSrc)}
// alt="Projektlogo"
// />
// </div>
// )
}
3 changes: 2 additions & 1 deletion src/app/admin/surveys/[surveyId]/responses/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,9 @@ export default async function AdminSurveyResponsesPage({
{question?.component === "multipleResponse" &&
// @ts-expect-error
question?.props?.responses
// we only add this condition for staging; in production the array is never empty
// @ts-expect-error
.filter((r) => answerIds.includes(r.id))
.filter((r) => !!answerIds.length && answerIds.includes(r.id))
// @ts-expect-error
.map((r) => r.text.de + ", ")}
</p>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
"use client"
import { blueButtonStyles } from "@/src/core/components/links"
import { AllowedSurveySlugs } from "@/src/survey-public/utils/allowedSurveySlugs"
import deleteTestSurveyResponses from "@/src/survey-responses/mutations/deleteTestSurveyResponses"
import { useMutation } from "@blitzjs/rpc"
import clsx from "clsx"
import { useRouter } from "next/navigation"

type DeleteButtonProps = {
testSurveyResponseIds: number[]
surveySlug: AllowedSurveySlugs
}

export const DeleteButton = ({ testSurveyResponseIds, surveySlug }: DeleteButtonProps) => {
const [deleteTestSurveyMutation] = useMutation(deleteTestSurveyResponses)
const router = useRouter()
const handleDelete = async () => {
if (
window.confirm(
`Diese ${testSurveyResponseIds.length} Beteiligungsbeiträge unwiderruflich löschen?`,
)
) {
try {
await deleteTestSurveyMutation({ slug: surveySlug, deleteIds: testSurveyResponseIds })
} catch (error) {
alert("Beim Löschen ist ein Fehler aufgetreten.")
}
router.push("/admin/surveys")
}
}

return (
<>
<hr />
<button type="button" onClick={handleDelete} className={clsx(blueButtonStyles, "ml-2")}>
Diese {testSurveyResponseIds.length} Testeinträge und dazugehörige Sessions löschen
</button>
</>
)
}
53 changes: 53 additions & 0 deletions src/app/admin/surveys/[surveyId]/responses/test/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import { Breadcrumb } from "@/src/app/admin/_components/Breadcrumb"
import { HeaderWrapper } from "@/src/app/admin/_components/HeaderWrapper"
import { invoke } from "@/src/blitz-server"
import { H2 } from "@/src/core/components/text"
import getTestSurveyResponses from "@/src/survey-responses/queries/getTestSurveyResponses"
import getAdminSurvey from "@/src/surveys/queries/getAdminSurvey"
import { Metadata } from "next"
import "server-only"
import { DeleteButton } from "./_components/DeleteButton"

export const metadata: Metadata = { title: "Beteiligung bearbeiten erstellen" }

export default async function AdminSurveyEditPage({
params: { surveyId: surveyIdString },
}: {
params: { surveyId: string }
}) {
const survey = await invoke(getAdminSurvey, { id: Number(surveyIdString) })
const testSurveyResponses = await invoke(getTestSurveyResponses, {
slug: survey.slug,
})

return (
<>
<HeaderWrapper>
<Breadcrumb
pages={[
{ href: "/admin", name: "Dashboard" },
{ href: "/admin/surveys", name: "Beteiligungen" },
{ name: "Beteiligung: Testeinträge" },
]}
/>
</HeaderWrapper>
<H2>Testeinträge</H2>
<p className="mb-4 italic">
Dies sind alle Einträge, deren Hinweistext (ersten 20 Zeichen) &#39;test&#39; enthält (plus
die jeweils dazugehörige Umfrageteil)
{survey.slug === "radnetz-brandenburg" && " / die Institution 'FixMyCity' ist"}
</p>
{!testSurveyResponses.length
? "keine Testeinträge gefunden"
: testSurveyResponses.map((response) => (
<pre key={response.id}>{JSON.stringify(response, undefined, 2)}</pre>
))}
{!!testSurveyResponses.length && (
<DeleteButton
surveySlug={survey.slug}
testSurveyResponseIds={testSurveyResponses.map((r) => r.id)}
/>
)}
</>
)
}
3 changes: 3 additions & 0 deletions src/app/admin/surveys/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ export default async function AdminSurveysPage() {
<Link button href={`/admin/surveys/${survey.id}/responses`}>
Antworten
</Link>
<Link button href={`/admin/surveys/${survey.id}/responses/test`}>
Testeinträge prüfen und löschen
</Link>
</div>
<pre>{JSON.stringify(survey, undefined, 2)}</pre>
</li>
Expand Down
2 changes: 1 addition & 1 deletion src/core/components/Markdown/Markdown.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ const components = {
a: MdA,
}

export const Markdown: React.FC<Props> = ({ markdown, className }) => {
export const Markdown = ({ markdown, className }: Props) => {
if (!markdown) return null

return (
Expand Down
Loading

0 comments on commit adcb4c0

Please sign in to comment.