diff --git a/administration/src/Router.tsx b/administration/src/Router.tsx
index 078a04715..31ab5b045 100644
--- a/administration/src/Router.tsx
+++ b/administration/src/Router.tsx
@@ -19,6 +19,7 @@ import DataPrivacyController from './bp-modules/regions/data-privacy-policy/Data
import DataPrivacyPolicy from './bp-modules/regions/data-privacy-policy/DataPrivacyPolicy'
import UserSettingsController from './bp-modules/user-settings/UserSettingsController'
import ManageUsersController from './bp-modules/users/ManageUsersController'
+import ActivationPage from './mui-modules/activation/ActivationPage'
import ApplicationApplicantController from './mui-modules/application-verification/ApplicationApplicantController'
import ApplicationVerificationController from './mui-modules/application-verification/ApplicationVerificationController'
import ApplyController from './mui-modules/application/ApplyController'
@@ -43,6 +44,7 @@ const Router = () => {
{ path: '/forgot-password', element: },
{ path: '/reset-password/', element: },
{ path: '/data-privacy-policy', element: },
+ { path: '/activation/:activationCode', element: },
...(projectConfig.applicationFeature
? [
{ path: '/beantragen', element: },
diff --git a/administration/src/bp-modules/auth/Login.tsx b/administration/src/bp-modules/auth/Login.tsx
index c99206d8f..9e83f4acb 100644
--- a/administration/src/bp-modules/auth/Login.tsx
+++ b/administration/src/bp-modules/auth/Login.tsx
@@ -1,13 +1,12 @@
-import { Button, Card, H2, H3, H4 } from '@blueprintjs/core'
+import { Card, H2, H3, H4 } from '@blueprintjs/core'
import React, { useContext } from 'react'
-import { useNavigate } from 'react-router-dom'
import getMessageFromApolloError from '../../errors/getMessageFromApolloError'
import { SignInMutation, SignInPayload, useSignInMutation } from '../../generated/graphql'
import { ProjectConfigContext } from '../../project-configs/ProjectConfigContext'
-import { setProjectConfigOverride } from '../../project-configs/getProjectConfig'
import { useAppToaster } from '../AppToaster'
import StandaloneCenter from '../StandaloneCenter'
+import ProjectSwitcher from '../util/ProjectSwitcher'
import LoginForm from './LoginForm'
interface State {
@@ -16,7 +15,6 @@ interface State {
}
const Login = (props: { onSignIn: (payload: SignInPayload) => void }) => {
- const navigate = useNavigate()
const config = useContext(ProjectConfigContext)
const appToaster = useAppToaster()
const [state, setState] = React.useState({ email: '', password: '' })
@@ -35,11 +33,6 @@ const Login = (props: { onSignIn: (payload: SignInPayload) => void }) => {
},
})
- const switchProject = (project: string) => {
- setProjectConfigOverride(project)
- navigate(0)
- }
-
return (
@@ -54,12 +47,7 @@ const Login = (props: { onSignIn: (payload: SignInPayload) => void }) => {
onSubmit={onSubmit}
loading={mutationState.loading}
/>
- {process.env.NODE_ENV === 'development' ? (
- <>
- switchProject('nuernberg.sozialpass.app')}>Switch to Nürnberg
- switchProject('bayern.ehrenamtskarte.app')}>Switch to Ehrenamtskarte Bayern
- >
- ) : null}
+
)
diff --git a/administration/src/bp-modules/util/ProjectSwitcher.tsx b/administration/src/bp-modules/util/ProjectSwitcher.tsx
new file mode 100644
index 000000000..5b9e09c27
--- /dev/null
+++ b/administration/src/bp-modules/util/ProjectSwitcher.tsx
@@ -0,0 +1,25 @@
+import { Button } from '@blueprintjs/core'
+import React, { ReactElement } from 'react'
+import { useNavigate } from 'react-router-dom'
+
+import { setProjectConfigOverride } from '../../project-configs/getProjectConfig'
+
+const ProjectSwitcher = (): ReactElement | null => {
+ const navigate = useNavigate()
+ const switchProject = (project: string) => {
+ setProjectConfigOverride(project)
+ navigate(0)
+ }
+
+ if (process.env.NODE_ENV !== 'development') {
+ return null
+ }
+ return (
+ <>
+ switchProject('nuernberg.sozialpass.app')}>Switch to Nürnberg
+ switchProject('bayern.ehrenamtskarte.app')}>Switch to Ehrenamtskarte Bayern
+ >
+ )
+}
+
+export default ProjectSwitcher
diff --git a/administration/src/mui-modules/activation/ActivationPage.tsx b/administration/src/mui-modules/activation/ActivationPage.tsx
new file mode 100644
index 000000000..0d30b005b
--- /dev/null
+++ b/administration/src/mui-modules/activation/ActivationPage.tsx
@@ -0,0 +1,35 @@
+import { Card } from '@mui/material'
+import { styled } from '@mui/system'
+import React, { ReactElement, useContext } from 'react'
+
+import { ProjectConfigContext } from '../../project-configs/ProjectConfigContext'
+import ActivationPageContent from './components/ActivationPageContent'
+
+const CardContainer = styled(Card)`
+ margin: 20px;
+ padding: 20px;
+ max-width: 500px;
+`
+
+const StandaloneHorizontalCenter = styled('div')`
+ display: flex;
+ flex-grow: 1;
+ flex-direction: column;
+ justify-content: start;
+ align-items: center;
+ margin-top: 10%;
+`
+
+const ActivationPage = (): ReactElement | null => {
+ const config = useContext(ProjectConfigContext)
+
+ return (
+
+
+
+
+
+ )
+}
+
+export default ActivationPage
diff --git a/administration/src/mui-modules/activation/components/ActivationPageContent.tsx b/administration/src/mui-modules/activation/components/ActivationPageContent.tsx
new file mode 100644
index 000000000..2abef02fc
--- /dev/null
+++ b/administration/src/mui-modules/activation/components/ActivationPageContent.tsx
@@ -0,0 +1,15 @@
+import React, { ReactElement } from 'react'
+
+import ProjectSwitcher from '../../../bp-modules/util/ProjectSwitcher'
+import { ProjectConfig } from '../../../project-configs/getProjectConfig'
+
+const ActivationPageContent = ({ config }: { config: ProjectConfig }): ReactElement => {
+ if (!config.activation) {
+ return
+ }
+ const { activationText, downloadLink } = config.activation
+
+ return <>{activationText(config.name, downloadLink)}>
+}
+
+export default ActivationPageContent
diff --git a/administration/src/project-configs/bayern/activationText.tsx b/administration/src/project-configs/bayern/activationText.tsx
new file mode 100644
index 000000000..19bc1b6de
--- /dev/null
+++ b/administration/src/project-configs/bayern/activationText.tsx
@@ -0,0 +1,28 @@
+import { Typography } from '@mui/material'
+import React from 'react'
+
+export const ActivationText = (applicationName: string, downloadLink: string) => (
+
+
+ Aktivierung nur in der App möglich
+
+
+
+ Laden Sie sich die App {applicationName} im App- oder PlayStore auf Ihrem Smartphone herunter.
+
+
+ {' '}
+ Öffnen Sie dafür den folgenden Link auf Ihrem Smartphone:
+
+
+ {downloadLink}
+
+
+
+ Öffnen Sie nach erfolgreicher Installation die PDF mit dem Aktivierungscode und führen Sie die Aktivierung
+ erneut durch. Gegebenenfalls müssen Sie dabei die heruntergeladene App auswählen, um den Vorgang in der App zu
+ starten.
+
+
+
+)
diff --git a/administration/src/project-configs/bayern/config.ts b/administration/src/project-configs/bayern/config.ts
index 8051cb9c5..1c6cf24ca 100644
--- a/administration/src/project-configs/bayern/config.ts
+++ b/administration/src/project-configs/bayern/config.ts
@@ -2,6 +2,7 @@ import { JsonField, findValue } from '../../bp-modules/applications/JsonFieldVie
import BavariaCardTypeExtension from '../../cards/extensions/BavariaCardTypeExtension'
import RegionExtension from '../../cards/extensions/RegionExtension'
import { ProjectConfig } from '../getProjectConfig'
+import { ActivationText } from './activationText'
import { DataPrivacyAdditionalBaseText, DataPrivacyBaseText, dataPrivacyBaseHeadline } from './dataPrivacyBase'
import pdfConfiguration from './pdf'
@@ -57,6 +58,10 @@ const config: ProjectConfig = {
dataPrivacyHeadline: dataPrivacyBaseHeadline,
dataPrivacyContent: DataPrivacyBaseText,
dataPrivacyAdditionalBaseContent: DataPrivacyAdditionalBaseText,
+ activation: {
+ activationText: ActivationText,
+ downloadLink: 'https://download.bayern.ehrenamtskarte.app/',
+ },
timezone: 'Europe/Berlin',
pdf: pdfConfiguration,
}
diff --git a/administration/src/project-configs/getProjectConfig.ts b/administration/src/project-configs/getProjectConfig.ts
index b38ff0d4e..3ac74db51 100644
--- a/administration/src/project-configs/getProjectConfig.ts
+++ b/administration/src/project-configs/getProjectConfig.ts
@@ -61,6 +61,10 @@ export interface ProjectConfig {
pdf: PdfConfig
timezone: string
activityLogConfig?: ActivityLogConfig
+ activation?: {
+ activationText: (applicationName: string, downloadLink: string) => ReactElement
+ downloadLink: string
+ }
}
export const setProjectConfigOverride = (hostname: string) => {