+ Wir arbeiten gerade an unserer Online-Beratung.
+
+ Leider können Sie währenddessen die Anwendung nicht
+ nutzen.
+
+ Versuchen Sie es später noch einmal.
+
+
+
+
+
diff --git a/src/extensions/resources/i18n/de/agency.json b/src/extensions/resources/i18n/de/agency.json
new file mode 100644
index 000000000..19e8f11ac
--- /dev/null
+++ b/src/extensions/resources/i18n/de/agency.json
@@ -0,0 +1,3 @@
+{
+ "agency": {}
+}
diff --git a/src/extensions/resources/i18n/de/consultingTypes.json b/src/extensions/resources/i18n/de/consultingTypes.json
new file mode 100644
index 000000000..4971dfd86
--- /dev/null
+++ b/src/extensions/resources/i18n/de/consultingTypes.json
@@ -0,0 +1,410 @@
+{
+ "consultingType": {
+ "0": {},
+ "1": {
+ "description": "Sie möchten ein Kind adoptieren oder ein Pflegekind in Ihrem Zuhause aufnehmen? Sie sind unsicher, ob Sie ihr Kind gut versorgen können? Sie sind selbst adoptiert und möchten Einblick in Ihre Akte nehmen? Wir beraten Sie vertraulich und kostenfrei hier in der Online-Beratung.",
+ "groups": "[\"Kinder, Jugendliche, Erwachsene und Familie\"]",
+ "titles": {
+ "default": "Adoption und Pflegekind",
+ "short": "Adoption und Pflegekind",
+ "long": "Adoptions- und Pflegekindberatung",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Adoptions- und Pflegekindberatung"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "2": {
+ "description": "Sie haben ein persönliches Problem, sind in einer schwierigen finanziellen Lage oder haben Schwierigkeiten mit einer Behörde? Egal welches Problem Sie plagt, wir beraten Sie kostenfrei und vertraulich hier in der Online-Beratung.",
+ "groups": "[\"Kinder, Jugendliche, Erwachsene und Familie\", \"Existenzsicherung\"]",
+ "titles": {
+ "default": "Allgemeine Sozialberatung",
+ "short": "Allgemeine Sozialberatung",
+ "long": "Allgemeine Sozialberatung",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Allgemeine Sozialberatung"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "3": {
+ "description": "Sie haben Ihren Job verloren? Sie haben Fragen zum Arbeitslosengeld I und II? Sie brauchen Hilfe bei der Arbeitsplatzsuche oder arbeiten prekär? Wir helfen Ihnen vertraulich und kostenfrei hier in der Online-Beratung.",
+ "groups": "[\"Existenzsicherung\"]",
+ "titles": {
+ "default": "Arbeitslos, erwerbslos",
+ "short": "Arbeitslos, erwerbslos",
+ "long": "Arbeitslosenberatung/Erwerbslosenberatung",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Arbeitslosenberatung/Erwerbslosenberatung"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "4": {
+ "description": "Sie müssen oder wollen Deutschland verlassen? Sie überlegen, ob Sie in Deutschland oder in Ihrem Herkunftsland leben möchten? Wir beraten Sie unabhängig von Ihrem Aufenthaltsstatus vertraulich und kostenfrei hier in der Online-Beratung.",
+ "groups": "[\"Migration, Flucht, Asyl\"]",
+ "titles": {
+ "default": "Ausreise und Perspektive",
+ "short": "Ausreise und Perspektive",
+ "long": "Ausreise- und Perspektivberatung - Rückkehrberatung",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Ausreise- und Perspektivberatung - Rückkehrberatung"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "5": {
+ "description": "Sie haben keine Wohnung oder Angst Ihr Zuhause zu verlieren? Sie leben in unzumutbaren Wohnverhältnissen? Sie sind in einer Notlage? Wir helfen Ihnen vertraulich und kostenfrei hier in der Online-Beratung.",
+ "groups": "[\"Existenzsicherung\", \"Besondere Lebenssituationen und Krisen\"]",
+ "titles": {
+ "default": "Wohnungsnotfall",
+ "short": "Wohnungsnotfall",
+ "long": "Beratung bei Wohnungsnotfällen",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Beratung bei Wohnungsnotfällen"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "6": {
+ "description": "Sie sind Sexarbeiter:in und erleben häufig Stigmatisierung, Diskriminierung und Abwertung? Sie wollen nicht mehr als Sexarbeiter:in arbeiten? Wir unterstützen sie darin, Ihre Rechte durchzusetzen, organisieren notwendige Hilfen und helfen beim Ausstieg.",
+ "groups": "[\"Besondere Lebenssituationen und Krisen\"]",
+ "titles": {
+ "default": "Prostitution",
+ "short": "Prostitution",
+ "long": "Beratung für Menschen in Prostitution und Menschenhandel",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Beratung für Menschen in Prostitution und Menschenhandel"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "7": {
+ "description": "Sie waren in Haft und haben Fragen zu Ansprüchen auf Sozialleistungen? Sie brauchen Unterstützung bei der Wohnungs- und Arbeitssuche? Sie haben persönliche Probleme? Rund um die Haft gibt es Situationen, die man nicht alleine stemmen kann. Wir helfen Ihnen vertraulich und kostenfrei.",
+ "groups": "[\"Existenzsicherung\", \"Besondere Lebenssituationen und Krisen\"]",
+ "titles": {
+ "default": "Straffälligkeit",
+ "short": "Straffälligkeit",
+ "long": "Beratung für straffällig gewordene Menschen und ihre Angehörigen",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Beratung für straffällig gewordene Menschen und ihre Angehörigen"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "8": {
+ "description": "Ihre Familie braucht eine Auszeit, die bezahlbar ist? Wir beraten Sie gerne zu Ihrer individuellen Auszeit und Fördermöglichkeiten für Familien mit geringem Einkommen. Alle Familien sind in den Ferienstätten willkommen. Konfession und Familienkonstellation spielen keine Rolle.",
+ "groups": "[\"Kinder, Jugendliche, Erwachsene und Familie\"]",
+ "titles": {
+ "default": "Familienerholung",
+ "short": "Familienerholung",
+ "long": "Beratung zu Fragen der Familienerholung",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Beratung zu Fragen der Familienerholung"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "9": {
+ "description": "Sie haben einen zermürbenden Konflikt oder Sorgen lassen Sie nicht zur Ruhe kommen? Sie haben Probleme in der Partnerschaft, die Sie nicht lösen können? Wir helfen Ihnen, wenn Ängste Ihren Alltag bestimmen, wenn die Trauer über den Verlust eines Menschen oder Einsamkeit Ihnen die Lebensfreude nehmen.",
+ "groups": "[\"Kinder, Jugendliche, Erwachsene und Familie\"]",
+ "titles": {
+ "default": "Ehe, Paar und Leben",
+ "short": "Ehe, Paar und Leben",
+ "long": "Ehe-, Paar- und Lebensberatung",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Ehe-, Paar- und Lebensberatung"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "10": {
+ "description": "Hat Ihr Kind Schwierigkeiten im Kindergarten oder in der Schule? Fühlen Sie sich im Familienalltag überfordert? Stehen Sie vor einer Trennung oder brauchen Sie wegen einer Trennung Unterstützung für sich und Ihre Kinder? Wir helfen Ihnen vertraulich und kostenfrei hier in der Online-Beratung.",
+ "groups": "[\"Kinder, Jugendliche, Erwachsene und Familie\"]",
+ "titles": {
+ "default": "Erziehung und Familie",
+ "short": "Erziehung und Familie",
+ "long": "Erziehungs- und Familienberatung",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Erziehungs- und Familienberatung"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "11": {
+ "description": "Sie sind geflüchtet und haben Fragen zum Asylverfahren? Sie brauchen Hilfe bei der Vorbereitung zur Anhörung im Asylverfahren? Das Asylverfahren ist abgeschlossen und Sie brauchen Unterstützung in Deutschland? Wir beraten Menschen jeder Herkunft und unabhängig von der Konfession.",
+ "groups": "[\"Migration, Flucht, Asyl\"]",
+ "titles": {
+ "default": "Flucht und Asyl",
+ "short": "Flucht und Asyl",
+ "long": "Flüchtlings- & Asylverfahrensberatung",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Flüchtlings- & Asylverfahrensberatung"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "12": {
+ "description": "Sie haben ein positives Testergebnis erhalten und fragen sich, wie es weitergeht? Sie sind Angehörige:r einer HIV-positiven Person und haben offene Fragen? Sie möchten wissen, wie Sie sich vor HIV oder anderen sexuell übertragbaren Infektionen schützen können? Wir helfen Ihnen vertraulich und kostenfrei.",
+ "groups": "[\"Gesundheitliche Beeinträchtigung\"]",
+ "titles": {
+ "default": "HIV und Aids",
+ "short": "HIV und Aids",
+ "long": "HIV und Aids",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "HIV und Aids"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "13": {
+ "description": "Sie sind schwerkrank, haben nicht mehr lange zu leben oder sind Angehörige:r und brauchen Unterstützung? Sie möchten in dieser Situation die bestmögliche Lebensqualität erreichen? Sie haben Fragen zur Vorsorgeplanung? Wir beraten Sie vertraulich und kostenfrei hier in der Online-Beratung.",
+ "groups": "[\"Gesundheitliche Beeinträchtigung\", \"Kinder, Jugendliche, Erwachsene und Familie\", \"Alter\"]",
+ "titles": {
+ "default": "Hospiz und Palliativ",
+ "short": "Hospiz und Palliativ",
+ "long": "Hospiz- und Palliativberatung",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Hospiz- und Palliativberatung"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "14": {
+ "description": "Sind Sie von sexualisierter Gewalt betroffen? Wurden Sie von einer anderen Person durch physische Gewalt verletzt? Droht Ihnen jemand, beleidigt Sie oder schreit Sie an? Kennen Sie eine Person, die unter häuslicher oder sexualisierter Gewalt leidet? Wir helfen Ihnen vertraulich und kostenfrei.",
+ "groups": "[\"Kinder, Jugendliche, Erwachsene und Familie\"]",
+ "titles": {
+ "default": "Gewalt",
+ "short": "Gewalt",
+ "long": "Beratung bei häuslicher und sexualisierter Gewalt",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Beratung bei häuslicher und sexualisierter Gewalt"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "15": {
+ "description": "Du bist zwischen 12 und 27 Jahren alt, hast Migrationshintergrund und Fragen zu schulischen Abschlüssen, Ausbildung oder Sprachkursen? Wir beraten dich zu Bildungs- und Freizeitangeboten kostenfrei und vertraulich hier in der Online-Beratung.",
+ "groups": "[\"Migration, Flucht, Asyl\"]",
+ "titles": {
+ "default": "Jugendmigrationsdienste",
+ "short": "Jugendmigrationsdienste",
+ "long": "Jugendmigrationsdienste (JMD)",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Jugendmigrationsdienste (JMD)"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "16": {
+ "description": "Weißt Du einfach nicht mehr weiter? Fühlst Du Dich nicht verstanden? Machst Du Dir Sorgen um eine Freundin oder einen Freund? Hast Du Schwierigkeiten mit deinen Eltern? Wirst Du geschlagen? Hast Du Stress in der Schule, mit Freunden oder wegen Geld? Wir beraten Dich vertraulich und kostenfrei.",
+ "groups": "[\"Kinder, Jugendliche, Erwachsene und Familie\"]",
+ "titles": {
+ "default": "Kinder und Jugend",
+ "short": "Kinder und Jugend",
+ "long": "Kinder- und Jugendberatung",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Kinder- und Jugendberatung"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "17": {
+ "description": "Sie fühlen sich von Ihren Aufgaben durch Job, Familie oder die Pflege von Angehörigen ausgelaugt? Sie sind krank und brauchen eine Auszeit vom Alltag? Eine Kur kann helfen, wieder Kräfte zu sammeln. Wir beraten Mütter, Väter und pflegende Angehörige vertraulich und kostenfrei hier in der Online-Beratung.",
+ "groups": "[\"Kinder, Jugendliche, Erwachsene und Familie\", \"Gesundheitliche Beeinträchtigung\"]",
+ "titles": {
+ "default": "Kurberatung",
+ "short": "Kurberatung",
+ "long": "Kurberatung für Mütter und Väter",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Kurberatung für Mütter und Väter"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "18": {
+ "description": "Sie brauchen Beratung zum Thema Wohnen im Alter? Sie haben Fragen zu Hilfen im Haushalt? Sie wollen Ihre Freizeit oder die Freizeit eines älteren Familienangehörigen abwechslungsreicher gestalten? Sie suchen Information zu Themen wie Demenz? Wir beraten Sie vertraulich und kostenfrei hier in der Online-Beratung.",
+ "groups": "[\"Gesundheitliche Beeinträchtigung\", \"Alter\"]",
+ "titles": {
+ "default": "Alter und Pflegeberatung",
+ "short": "Alter und Pflegeberatung",
+ "long": "Leben im Alter und Pflegeberatung",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Leben im Alter und Pflegeberatung"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "19": {
+ "description": "Sie sind über 26 Jahre alt und brauchen Hilfe sich in Deutschland zurecht zu finden? Sie brauchen Hilfe bei der Suche nach Arbeit oder einem Sprachkurs? Wir beraten Neu-Zugewanderte, aber auch Personen, die schon lange in Deutschland leben, Spätaussiedler:innen sowie Unionsbürger:innen.",
+ "groups": "[\"Migration, Flucht, Asyl\"]",
+ "titles": {
+ "default": "Migrationsberatung",
+ "short": "Migrationsberatung",
+ "long": "Migrationsberatung für Erwachsene und Familien",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Migrationsberatung für Erwachsene und Familien"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "20": {
+ "description": "Sie möchten ein selbstbestimmtes Leben führen und brauchen dabei Hilfe? Sie haben Fragen zu Finanzierung, Hilfsmitteln und Assistenz? Wir beraten Sie vertraulich und kostenfrei zu Ihren Fragen zur Selbsthilfe in den Lebensbereichen Arbeiten, Wohnen, Bildung und Freizeit.",
+ "groups": "[\"Gesundheitliche Beeinträchtigung\"]",
+ "titles": {
+ "default": "Psychische Beeintr.",
+ "short": "Psychische Beeintr.",
+ "long": "Psychische Beeinträchtigung",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Psychische Beeinträchtigung"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "21": {
+ "description": "Sie haben während Ihrer Flucht traumatische Erfahrungen gemacht? Sie haben in Ihrem Herkunftsland unter Folter, Gewalt und Rassismus gelitten? Sie kennen eine geflüchtete Person, die traumatisiert ist? Wir helfen Ihnen mit einer psychologischen und sozalpädagogischen Beratung.",
+ "groups": "[\"Migration, Flucht, Asyl\"]",
+ "titles": {
+ "default": "Psychosoziale Beratung",
+ "short": "Psychosoziale Beratung",
+ "long": "Psychosoziale Beratung für Geflüchtete und Migrant:innen",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Psychosoziale Beratung für Geflüchtete und Migrant:innen"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "22": {
+ "description": "Sie möchten als rechtliche:r Betreuer:in eingesetzt werden und möchten wissen, wie eine Betreuung eingerichtet wird und welche Aufgaben auf Sie zukommen? Sie möchten selbst vorsorgen und eine Patientenverfügung erstellen? Wir beraten Sie vertraulich und kostenfrei hier in der Online-Beratung.",
+ "groups": "[\"Teilhabe für Menschen mit Beeinträchtigung\"]",
+ "titles": {
+ "default": "Rechtliche Betreuung",
+ "short": "Rechtliche Betreuung",
+ "long": "Rechtliche Betreuung",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Rechtliche Betreuung"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "23": {
+ "description": "Sie haben Schulden, die Wohnung wurde gekündigt oder der Gerichtsvollzieher kommt? Wir beraten Sie vertraulich und kostenfrei hier in der Online-Beratung.",
+ "groups": "[\"Existenzsicherung\"]",
+ "titles": {
+ "default": "Schulden und Insolvenz",
+ "short": "Schulden und Insolvenz",
+ "long": "Schuldnerberatung und Insolvenzberatung",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Schuldnerberatung und Insolvenzberatung"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "24": {
+ "description": "Sie sind schwanger und haben Fragen? Sie fürchten um Ihre Partnerschaft? Sie haben Angst vor finanziellen Schwierigkeiten, wenn das Kind kommt. Sie möchten Beratung zu vorgeburtlichen Untersuchungen? Sie überlegen die Schwangerschaft abzubrechen? Wir beraten Sie vertraulich und kostenfrei.",
+ "groups": "[\"Kinder, Jugendliche, Erwachsene und Familie\"]",
+ "titles": {
+ "default": "Schwangerschaft",
+ "short": "Schwangerschaft",
+ "long": "Schwangeren- und Schwangerschaftskonfliktberatung",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Schwangeren- und Schwangerschaftskonfliktberatung"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "25": {
+ "description": "Sie haben ein Suchtproblem oder machen sich Sorgen um betroffene Freunde und Verwandte? Sie haben Fragen zu Sucht und Abhängigkeit - Alkohol, Drogen, Medikamente, Glücksspiel, Computer-/Medienkonsum? Wir beraten Sie vertraulich und kostenfrei hier in der Online-Beratung.",
+ "groups": "[\"Kinder, Jugendliche, Erwachsene und Familie\", \"Besondere Lebenssituationen und Krisen\", \"Gesundheitliche Beeinträchtigung\"]",
+ "titles": {
+ "default": "Sucht",
+ "short": "Sucht",
+ "long": "Suchtberatung und -prävention",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Suchtberatung und -prävention"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "26": {
+ "description": "Sie möchten ein selbstbestimmtes Leben führen und brauchen dabei Hilfe? Sie haben Fragen zu Finanzierung, Hilfsmitteln und Assistenz? Wir beraten Sie vertraulich und kostenfrei zu Ihren Fragen zur Selbsthilfe in den Lebensbereichen Arbeiten, Wohnen, Bildung und Freizeit.",
+ "groups": "[\"Teilhabe für Menschen mit Beeinträchtigung\"]",
+ "titles": {
+ "default": "Teilhabe",
+ "short": "Teilhabe",
+ "long": "Teilhabe von Menschen mit Beeinträchtigungen",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Teilhabe von Menschen mit Beeinträchtigungen"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ },
+ "27": {
+ "description": "Du hast Fragen rund um Schule, Ausbildung und Beruf? Wie stellst Du Dir Deine Zukunft vor? Was brauchst Du dafür? Wir helfen Dir vertraulich und kostenfrei hier in der Online-Beratung.",
+ "groups": "[\"Kinder, Jugendliche, Erwachsene und Familie\"]",
+ "titles": {
+ "default": "von Schule zu Beruf",
+ "short": "von Schule zu Beruf",
+ "long": "Übergang von Schule zu Beruf",
+ "welcome": "Willkommen bei der Online-Beratung",
+ "registrationDropdown": "Übergang von Schule zu Beruf"
+ },
+ "anonymous": {
+ "title": "Anonym und kostenfrei",
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe"
+ }
+ }
+ }
+}
diff --git a/src/extensions/resources/i18n/de/languages.json b/src/extensions/resources/i18n/de/languages.json
new file mode 100644
index 000000000..524c6949b
--- /dev/null
+++ b/src/extensions/resources/i18n/de/languages.json
@@ -0,0 +1,4 @@
+{
+ "de": "(DE) Deutsch",
+ "en": "(EN) Englisch"
+}
diff --git a/src/extensions/resources/i18n/en/agency.json b/src/extensions/resources/i18n/en/agency.json
new file mode 100644
index 000000000..19e8f11ac
--- /dev/null
+++ b/src/extensions/resources/i18n/en/agency.json
@@ -0,0 +1,3 @@
+{
+ "agency": {}
+}
diff --git a/src/extensions/resources/i18n/en/consultingTypes.json b/src/extensions/resources/i18n/en/consultingTypes.json
new file mode 100644
index 000000000..3ba7e603f
--- /dev/null
+++ b/src/extensions/resources/i18n/en/consultingTypes.json
@@ -0,0 +1,438 @@
+{
+ "consultingTypeGroup": {
+ "Teilhabe für Menschen mit Beeinträchtigung": {
+ "title": "Participation for people with disabilities"
+ },
+ "Alter": {
+ "title": "Age"
+ },
+ "Gesundheitliche Beeinträchtigung": {
+ "title": "Health impairment"
+ },
+ "Besondere Lebenssituationen und Krisen": {
+ "title": "Special life situations and crises"
+ },
+ "Hilfe in besonderen sozialen Situationen": {
+ "title": "Help in special social situations"
+ },
+ "Kinder, Jugendliche, Erwachsene und Familie": {
+ "title": "Children, young people, adults and families"
+ },
+ "Migration, Flucht, Asyl": {
+ "title": "Migration, flight, asylum"
+ },
+ "Existenzsicherung": {
+ "title": "Livelihood security"
+ },
+ "Hilfe für Kinder, Erwachsene und Familien": {
+ "title": "Help for children, adults and families"
+ }
+ },
+ "consultingType": {
+ "1": {
+ "description": "You want to adopt a child or take in a foster child in your home? You are unsure whether you can take good care of your child? You are adopted yourself and would like to take a look at your file? We can advise you confidentially and free of charge here in online consulting.",
+ "groups": "[\"Children, Adolescents, Adults and Family\"]",
+ "titles": {
+ "default": "Adoption and foster child",
+ "short": "Adoption and foster child",
+ "long": "adoption and foster child consulting",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "Adoption and foster child consulting"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and assistance"
+ }
+ },
+ "2": {
+ "description": "You have a personal problem, are in a difficult financial situation or have difficulties with an authority? No matter what problem is plaguing you, we will advise you free of charge and confidentially here in online consulting.",
+ "groups": "[\"Children, Adolescents, Adults and Family\", \"Livelihood\"]",
+ "titles": {
+ "default": "General social counseling",
+ "short": "General social counseling",
+ "long": "General social consulting",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "General Social Counseling"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and help"
+ }
+ },
+ "3": {
+ "description": "You have lost your job? You have questions about unemployment benefits I and II? Do you need help with your job search or are you working precariously? We can help you confidentially and free of charge here in the online consulting service.",
+ "groups": "[\"Existenzsicherung\"]",
+ "titles": {
+ "default": "Unemployed, unemployable",
+ "short": "Unemployed, unemployable",
+ "long": "Unemployment consulting/unemployed consulting",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "unemployment counseling/unemployment counseling"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and help"
+ }
+ },
+ "4": {
+ "description": "You have to or want to leave Germany? You are considering whether you want to live in Germany or in your country of origin? We will advise you confidentially and free of charge here in online consulting, regardless of your residence status.",
+ "groups": "[\"Migration, Flight, Asylum\"]",
+ "titles": {
+ "default": "Departure and perspective",
+ "short": "Departure and perspective",
+ "long": "Exit and perspective consulting - return consulting",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "Exit and perspective consulting - return consulting"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and help"
+ }
+ },
+ "5": {
+ "description": "You don't have a home or you are afraid to lose your home? You live in unacceptable housing conditions? You are in an emergency situation? We can help you confidentially and free of charge here in the online consulting service.",
+ "groups": "[\"Livelihood security\", \"Special life situations and crises\"]",
+ "titles": {
+ "default": "Housing emergency",
+ "short": "Housing emergency",
+ "long": "housing emergency consulting",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "consulting in housing emergencies"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and assistance"
+ }
+ },
+ "6": {
+ "description": "You are a sex worker:in and often experience stigmatization, discrimination and devaluation? You no longer want to work as a sex worker? We support you in asserting your rights, organize necessary assistance and help you to get out.",
+ "groups": "[\"Special life situations and crises\"]",
+ "titles": {
+ "default": "Prostitution",
+ "short": "Prostitution",
+ "long": "Consulting for people in prostitution and human trafficking",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "Consulting for people in prostitution and human trafficking"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and help"
+ }
+ },
+ "7": {
+ "description": "You have been in custody and have questions about claims for social benefits? You need assistance in finding housing and employment? Do you have personal problems? There are situations around detention that you can't handle on your own. We can help you confidentially and free of charge.",
+ "groups": "[\"Securing livelihood\", \"Special life situations and crises\"]",
+ "titles": {
+ "default": "delinquency",
+ "short": "delinquency",
+ "long": "Consulting for people who have committed crimes and their relatives",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "Consulting for people who have committed crimes and their relatives"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and help"
+ }
+ },
+ "8": {
+ "description": "Your family needs time off that is affordable? We'll be happy to advise you on your individual time away and funding options for low-income families. All families are welcome at the resorts. Denomination and family constellation do not matter.",
+ "groups": "[\"Children, youth, adults and family\"]",
+ "titles": {
+ "default": "Family recreation",
+ "short": "Family recovery",
+ "long": "consulting on family recovery issues",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "consulting on family recovery issues"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and help"
+ }
+ },
+ "9": {
+ "description": "You have a grueling conflict or worries won't let you rest? You have problems in your partnership that you can't solve? We help you when fears determine your everyday life, when grief over the loss of a person or loneliness take away your joy of life.",
+ "groups": "[\"Children, adolescents, adults and family\"]",
+ "titles": {
+ "default": "Marriage, couple and life",
+ "short": "Marriage, couple and life",
+ "long": "Marriage, couple and life consulting",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "marriage, couple and life counseling"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and help"
+ }
+ },
+ "10": {
+ "description": "Does your child have difficulties in kindergarten or school? Do you feel overwhelmed in everyday family life? Are you facing a separation or do you need support for yourself and your children because of a separation? We can help you confidentially and free of charge here in online consulting.",
+ "groups": "[\"children, adolescents, adults and family\"]",
+ "titles": {
+ "default": "Education and family",
+ "short": "Education and family",
+ "long": "education and family consulting",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "Educational and family consulting"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and help"
+ }
+ },
+ "11": {
+ "description": "You are a refugee and have questions about the asylum procedure? You need help with the preparation for the hearing in the asylum procedure? The asylum procedure has been completed and you need support in Germany? We advise people of all origins and regardless of denomination.",
+ "groups": "[\"Migration, flight, asylum\"]",
+ "titles": {
+ "default": "Flight and asylum",
+ "short": "Flight and Asylum",
+ "long": "Refugee & asylum process consulting",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "Refugee & asylum procedure consulting"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and assistance"
+ }
+ },
+ "12": {
+ "description": "You have received a positive test result and are wondering what to do next? You are a family member of a HIV-positive person and have unanswered questions? Would you like to know how you can protect yourself from HIV or other sexually transmitted infections? We will help you confidentially and free of charge.",
+ "groups": "[\"Health impairment\"]",
+ "titles": {
+ "default": "HIV and AIDS",
+ "short": "HIV and Aids",
+ "long": "HIV and Aids",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "HIV and Aids"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and help"
+ }
+ },
+ "13": {
+ "description": "You are seriously ill, do not have long to live or are a relative:r and need support? You would like to achieve the best possible quality of life in this situation? Do you have questions about advance care planning? We will advise you confidentially and free of charge here in the online consultation.",
+ "groups": "[\"Health Impairment\", \"Children, Adolescents, Adults and Family\", \"Age\"]",
+ "titles": {
+ "default": "Hospice and palliative",
+ "short": "Hospice and Palliative",
+ "long": "Hospice and palliative consulting",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "Hospice and palliative consulting"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and assistance"
+ }
+ },
+ "14": {
+ "description": "Have you been affected by sexual violence? Have you been hurt by physical violence by another person? Does someone threaten you, insult you, or yell at you? Do you know a person who suffers from domestic or sexualized violence? We can help you confidentially and free of charge.",
+ "groups": "[\"Children, youth, adults and family\"]",
+ "titles": {
+ "default": "violence",
+ "short": "Violence",
+ "long": "Domestic and sexual violence consulting",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "Domestic and sexual violence consulting"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and help"
+ }
+ },
+ "15": {
+ "description": "You are between 12 and 27 years old, have a migration background and questions about school qualifications, training or language courses? We advise you on educational and leisure opportunities free of charge and confidentially here in the online consulting.",
+ "groups": "[\"Migration, flight, asylum\"]",
+ "titles": {
+ "default": "Youth migration services",
+ "short": "Youth migration services",
+ "long": "Youth Migration Services (JMD)",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "Youth Migration Services (JMD)"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and help"
+ }
+ },
+ "16": {
+ "description": "Do you just not know what to do? Do you feel not understood? Are you worried about a friend? Are you having trouble with your parents? Are you being beaten? Do you have stress at school, with friends or because of money? We advise you confidentially and free of charge.",
+ "groups": "[\"Children, youth, adults and family\"]",
+ "titles": {
+ "default": "Children and youth",
+ "short": "children and youth",
+ "long": "Children and youth consulting",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "child and youth consulting"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and help"
+ }
+ },
+ "17": {
+ "description": "You feel drained by your tasks due to job, family or caring for relatives? You are ill and need a break from everyday life? A cure can help you regain your strength. We advise mothers, fathers and caring relatives confidentially and free of charge here in the online consulting service.",
+ "groups": "[\"Children, Adolescents, Adults and Family\", \"Health Impairment\"]",
+ "titles": {
+ "default": "Cure counseling",
+ "short": "spa counseling",
+ "long": "Cure consulting for mothers and fathers",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "Cure consulting for mothers and fathers"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and help"
+ }
+ },
+ "18": {
+ "description": "You need advice about living in old age? Do you have questions about help in the household? Do you want to diversify your leisure time or the leisure time of an elderly family member? Are you looking for information on topics such as dementia? We will advise you confidentially and free of charge here in the online consulting service.",
+ "groups": "[\"Health impairment\", \"age\"]",
+ "titles": {
+ "default": "Age and care consulting",
+ "short": "Age and care consulting",
+ "long": "Living in old age and care consulting",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "Life in old age and care consulting"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and assistance"
+ }
+ },
+ "19": {
+ "description": "You are over 26 years old and need help to find your way in Germany? Do you need help finding a job or a language course? We advise new immigrants, but also people who have been living in Germany for a long time, late repatriates and citizens of the EU",
+ "groups": "[\"Migration, Flight, Asylum\"]",
+ "titles": {
+ "default": "Migration consulting",
+ "short": "Migration consulting",
+ "long": "Migration counseling for adults and families",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "Migration consulting for adults and families"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and assistance"
+ }
+ },
+ "20": {
+ "description": "You want to lead a self-determined life and need help? Do you have questions about financing, aids and assistance? We advise you confidentially and free of charge on your questions about self-help in the areas of work, housing, education and leisure.",
+ "groups": "[\"Health impairment\"]",
+ "titles": {
+ "default": "Mental impairment",
+ "short": "Mental impairment",
+ "long": "Mental impairment",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "mental impairment"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and help"
+ }
+ },
+ "21": {
+ "description": "You have had traumatic experiences during your flight? You have suffered from torture, violence and racism in your country of origin? You know a refugee who is traumatized? We can help you with psychological and socio-educational counseling.",
+ "groups": "[\"Migration, flight, asylum\"]",
+ "titles": {
+ "default": "Psychosocial counseling",
+ "short": "Psychosocial counseling",
+ "long": "Psychosocial counseling for refugees and migrants",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "Psychosocial counseling for refugees and migrants"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and help"
+ }
+ },
+ "22": {
+ "description": "You would like to be appointed as a legal guardian and would like to know how a guardianship is set up and what tasks await you? Would you like to make your own provisions and draw up a living will? We will advise you confidentially and free of charge here in the online consultation.",
+ "groups": "[\"Participation for people with impairments\"]",
+ "titles": {
+ "default": "Legal care",
+ "short": "Legal care",
+ "long": "Legal support",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "Legal support"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and help"
+ }
+ },
+ "23": {
+ "description": "You have debts, the apartment was canceled or the bailiff comes? We advise you confidentially and free of charge here in the online consulting.",
+ "groups": "[\"Existenzsicherung\"]",
+ "titles": {
+ "default": "Debt and insolvency",
+ "short": "Debt and insolvency",
+ "long": "Debt and insolvency consulting",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "debtor and insolvency consulting"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and help"
+ }
+ },
+ "24": {
+ "description": "You are pregnant and have questions? You fear for your partnership? You are afraid of financial difficulties when the child comes? You want advice on prenatal examinations? Are you considering terminating the pregnancy? We will advise you confidentially and free of charge.",
+ "groups": "[\"Children, adolescents, adults and family\"]",
+ "titles": {
+ "default": "Pregnancy",
+ "short": "Pregnancy",
+ "long": "Pregnancy and pregnancy conflict consulting",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "Pregnancy and pregnancy conflict consulting"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and help"
+ }
+ },
+ "25": {
+ "description": "Do you have an addiction problem or are you worried about friends and relatives who are affected? You have questions about addiction and dependence - alcohol, drugs, medication, gambling, computer/media use? We can advise you confidentially and free of charge here in the online consulting service.",
+ "groups": "[\"Children, adolescents, adults and family\", \"Special life situations and crises\", \"Health impairment\"]",
+ "titles": {
+ "default": "Addiction",
+ "short": "Addiction",
+ "long": "Addiction consulting and prevention",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "Addiction counseling and prevention"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and help"
+ }
+ },
+ "26": {
+ "description": "You want to lead a self-determined life and need help? Do you have questions about financing, aids and assistance? We advise you confidentially and free of charge on your questions about self-help in the areas of work, housing, education and leisure.",
+ "groups": "[\"Participation for people with impairments\"]",
+ "titles": {
+ "default": "participation",
+ "short": "participation",
+ "long": "Participation of people with impairments",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "Participation of people with impairments"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and assistance"
+ }
+ },
+ "27": {
+ "description": "You have questions about school, training and career? How do you imagine your future? What do you need for it? We will help you confidentially and free of charge here in the online consulting.",
+ "groups": "[\"Children, youth, adults and family\"]",
+ "titles": {
+ "default": "from school to work",
+ "short": "from school to work",
+ "long": "school-to-work transition",
+ "welcome": "Welcome to online consulting",
+ "registrationDropdown": "transition from school to work"
+ },
+ "anonymous": {
+ "title": "Anonymous and free of charge",
+ "text": "You remain anonymous and receive free advice and assistance"
+ }
+ }
+ }
+}
diff --git a/src/extensions/resources/i18n/en/languages.json b/src/extensions/resources/i18n/en/languages.json
new file mode 100644
index 000000000..212abcaca
--- /dev/null
+++ b/src/extensions/resources/i18n/en/languages.json
@@ -0,0 +1,4 @@
+{
+ "de": "(DE) German",
+ "en": "(EN) English"
+}
diff --git a/src/extensions/resources/i18n/overwrites/de/common.json b/src/extensions/resources/i18n/overwrites/de/common.json
new file mode 100644
index 000000000..30fab426d
--- /dev/null
+++ b/src/extensions/resources/i18n/overwrites/de/common.json
@@ -0,0 +1,402 @@
+{
+ "anonymous": {
+ "overlay": {
+ "chatWasFinished": {
+ "button": "Zu Diakonie.de",
+ "headline": "Ihre Beraterin oder Ihr Berater hat den Chat beendet."
+ },
+ "finishChat": {
+ "success": {
+ "button": "Zu Diakonie.de"
+ }
+ }
+ },
+ "waitingroom": {
+ "dataProtection": {
+ "description": "Danach dürfen unsere Beraterinnen oder Berater einen Chat mit Ihnen starten."
+ },
+ "overlay": {
+ "acceptance": {
+ "copy": "Sie werden von Ihrer Beraterin oder Ihrem Berater im Chat erwartet. Sind Sie bereit?"
+ },
+ "rejection": {
+ "copy": "Leider konnten wir innerhalb der Chat-Zeit nicht auf Ihr Anliegen eingehen. Registrieren Sie sich und hinterlassen Sie uns Ihre Nachricht. Wir melden uns innerhalb von 2 Arbeitstagen bei Ihnen."
+ }
+ },
+ "redirect": {
+ "subline": "Registrieren Sie sich und hinterlassen Sie uns Ihre Nachricht. Wir melden uns innerhalb von 2 Arbeitstagen bei Ihnen."
+ },
+ "subline": "Derzeit sind alle Beraterinnen oder Berater im Gespräch. Wir sind schnellstmöglich für Sie da."
+ }
+ },
+ "app": {
+ "info": "Information",
+ "or": "oder",
+ "stage": {
+ "title": "Beratung\n& Hilfe"
+ },
+ "title": "Beratung"
+ },
+ "appointments": {
+ "onlineMeeting": {
+ "overlay": {
+ "start": {
+ "copy": "Sie starten jetzt den Video-Call. Eingeladene Teilnehmerinnen oder Teilnehmer können ab sofort mit dem Einladungslink beitreten."
+ }
+ }
+ }
+ },
+ "banner": {
+ "ie": {
+ "text": "Diese Anwendung ist nicht für die Nutzung mit dem Internet Explorer optimiert. Für ein optimales Nutzungserlebnis verwenden Sie bitte einen modernen Browser."
+ }
+ },
+ "consultant": {
+ "jobTitle": "Beraterin oder Berater"
+ },
+ "consultingTypes": {
+ "details": {
+ "explanation": {
+ "description": "Warum? Weil dann unsere Fachleute:\n• die Hilfen rund um Ihren Wohnort kennen\n• die Gesetze Ihres Bundeslandes kennen",
+ "title": "Um Sie bestmöglich beraten zu können, benötigen wir Ihre Postleitzahl"
+ }
+ },
+ "info": "Info",
+ "intro": "Ich suche Beratung für folgendes Thema:",
+ "learnMore": "Mehr über den Ablauf bei der Beratung der Diakonie erfahren",
+ "overlay": {
+ "close": "Schliessen",
+ "title": "So läuft die Beratung der Diakonie ab"
+ },
+ "register": "Registrieren",
+ "selectGroup": "Bitte Thema auswählen",
+ "title": "Willkommen bei den Online-Beratungsangeboten der Diakonie"
+ },
+ "dataProtection": {
+ "subtitle1": "Allgemeine Hinweise",
+ "subtitle2": "Datenerfassung auf der Webseite",
+ "subtitle7": "Web-Browser-Cookies",
+ "subtitle8": "Technisch notwendige Cookies",
+ "text1": "Für uns ist der Schutz Ihrer im Rahmen der Nutzung unserer Webangebote bereitgestellten \npersonenbezogenen Daten ein wichtiges Anliegen. \nDeshalb möchten wir Sie nachfolgend über die Art, den Umfang und Zweck der Erhebung und Verwendung \nvon Daten sowie Verwendung von Cookies innerhalb unseres Internetangebotes und mit diesem \nzusammenhängenden Datenerhebung und -verwendung informieren.
\nVerantwortliche Stelle im Sinne der Datenschutzvorschriften ist das Evangelische Werk für Diakonie \nund Entwicklung e.V., Caroline-Michaelis-Str.1, 10115 Berlin, \nImpressum (nachfolgend bezeichnet als \"Diakonie Deutschland\", \"wir\" oder \"uns\").",
+ "text10": "\n
\n
\n
Name
\n
Speicherdauer
\n
Zugriff Dritter
\n
\n
\n
CSRF-TOKEN
\n
Session
\n
nein
\n
\n
\n
keycloak
\n
Session
\n
nein
\n
\n
\n
KEYCLOAK_LOCALE
\n
Session
\n
nein
\n
\n
\n
rc_token
\n
Session
\n
nein
\n
\n
\n
rc_uid
\n
Session
\n
nein
\n
\n
\n
refreshToken
\n
Session
\n
nein
\n
\n
\n
useInformal
\n
Session
\n
nein
\n
\n
\n
userRoles
\n
Session
\n
nein
\n
\n
\n
registeredUsername
\n
Session
\n
nein
\n
\n
\n
hideInfoBanner
\n
Session
\n
nein
\n
\n
\n
public_key
\n
Session
\n
nein
\n
\n
\n
private_key
\n
Session
\n
nein
\n
\n
\n
visited
\n
Session
\n
nein
\n
\n
\n
anonymousSessionId
\n
Session
\n
nein
\n
\n
\n
auth.access_token_valid_until
\n
Dauerhaft
\n
nein
\n
\n
\n
auth.refresh_token_valid_until
\n
Dauerhaft
\n
nein
\n
\n
\n
mk_*
\n
Dauerhaft
\n
nein
\n
\n
\n
locale
\n
Dauerhaft
\n
nein
\n
\n
\n
releaseNote
\n
Dauerhaft
\n
nein
\n
\n
\n
pseudoPassword_*
\n
Dauerhaft
\n
nein
\n
\n
\n",
+ "text11": "Das Beratungsportal ist ein geschlossenes und verschlüsseltes System, über das Ratsuchende anonymen Kontakt zu einer Beratungsstelle der Diakonie herstellen können. \nDie Diakonie Deutschland stellt dieses System zur Verfügung und gewährleistet die technische Sicherheit, hat aber keinen Einblick in die Beratungsvorgänge. \nDiese liegen in der Verantwortung der einzelnen Beratungsstellen. \nBei Fragen zu einem Beratungsvorgang wenden Sie sich daher bitte direkt an die jeweilige Beratungsstelle.",
+ "text12": "Ziel des Beratungsportals ist es, in der Online-Kommunikation einen Grad der Vertraulichkeit herzustellen, der mit einem Vier-Augen-Gespräch innerhalb einer Beratungsstelle vergleichbar ist.
\nAuf technischem Wege wird dabei sichergestellt, dass Beratungsanfragen nach der Fallverteilung nur von dem oder der Ratsuchenden und einer Beraterin oder einem Berater gelesen werden können. \nEin Mitlesen von Beratungsinhalten durch Dritte ist technisch nicht möglich.
\nBeratungsstellen haben zusätzlich die Möglichkeit einer Teamberatung. Alle Beraterinnen und Berater einer Teamberatungsstelle können die Beratung einsehen. Dies wird dem oder der Ratsuchenden vor der Beratungsanfrage angezeigt.
\nBei einer Videoberatung kann eine Beraterin oder ein Berater Dritte hinzuschalten, z.B. Dolmetscher. Die Zuschaltung erfolgt für die Ratsuchende oder den Ratsuchenden sichtbar.
\nZur Aufrechterhaltung des Mailserver-Betriebs, zur Fehlerdiagnose und zur Verhinderung von Missbrauch werden Mail-Server-Logs maximal 30 Tage gespeichert. \nZur Sicherstellung des Betriebs, zur Verhinderung von Missbrauch und zur Besucherauswertung werden IP-Adressen der Benutzer während der Session verarbeitet. Eine Speicherung der IP-Adressen erfolgt nicht.
\nRechtsgrundlage für die Verarbeitung der Daten ist bei Vorliegen einer Einwilligung § 6 Nr. 2 DSG-EKD.",
+ "text13": "Ratsuchende brauchen ihren Namen nicht anzugeben, es wird lediglich ein Benutzername zur Identifizierung des oder der Ratsuchenden verlangt. \nDazu kann ein frei wählbares Pseudonym genutzt werden, welches keinen Rückschluss auf den tatsächlichen Namen zulässt.
\nRatsuchende können darüber hinaus freiwillig eine eigene E-Mail-Adresse angeben, an die sie automatisierte Benachrichtigungen erhalten, sobald eine Antwort auf Ihre Anfrage vorliegt. Diese E-Mail-Adresse ist von den Beraterinnen oder Beratern nicht zu sehen und es werden niemals Beratungsinhalte an diese E-Mail-Adresse gesendet.
\nDie IP-Adresse von Ratsuchenden wird nicht zusammen mit der Anfrage gespeichert.
\nEs werden keine Benutzerprofile angelegt, die es ermöglichen, eine Verbindung zwischen verschiedene Anfragen herzustellen.",
+ "text14": "Alle Nachrichten einer Anfrage werden automatisch 180 Tage nach der letzten Nachricht gelöscht. \nDurch die \"Schutzfrist\" von 180 Tagen ist gewährleistet, dass eine Anfrage auch dann fortgesetzt werden kann, wenn sie durch Urlaub oder Krankheit der Beraterin, des Beraters, des oder der Ratsuchenden einige Wochen unterbrochen wird.
\nEventuelle Dokumentations- und Archivierungspflichten verbleiben bei der Beratungsstelle.",
+ "text15": "Stand der Datenschutzerklärung: November 2022",
+ "text2": "Grundlage unserer Datenverarbeitung sind die geltenden Datenschutznormen, insbesondere das Kirchengesetz über den Datenschutz der Evangelischen Kirche in Deutschland (DSG-EKD).
\nDie nachfolgende Bezeichnung als \"Nutzer\", umfasst sowohl unsere Mitglieder, Spender als auch die Besucher unserer Onlineangebote und ist geschlechtsneutral zu verstehen.
\nNeben dieser Datenschutzerklärung kann unser Internetangebot weitere und speziellere Datenschutzhinweise enthalten, auf die Sie gesondert hingewiesen werden.
\nWir verarbeiten personenbezogene Daten der Nutzer nur unter Einhaltung der einschlägigen Datenschutzbestimmungen. Das bedeutet, die Daten der Nutzer werden nur beim Vorliegen einer gesetzlichen Erlaubnis oder Vorliegen einer Einwilligung verwendet.
\nWir treffen organisatorische, vertragliche und technische Sicherheitsmaßnahmen entsprechend dem Stand der Technik, um sicher zu stellen, dass die Vorschriften der Datenschutzgesetze eingehalten werden und um damit die durch uns verwalteten Daten gegen zufällige oder vorsätzliche Manipulationen, Verlust, Zerstörung oder gegen den Zugriff unberechtigter Personen zu schützen.",
+ "text3": "Die personenbezogenen Daten der Nutzer werden, neben den in dieser Datenschutzerklärung ausdrücklich genannten Verwendungen, für die folgenden Zwecke verwendet:
\n
\n
Die Wahrnehmung unserer satzungsmäßigen Aufgaben, Ausführung unserer Dienste-, Service- und Nutzerleistungen;
\n
technische und geschäftsbezogene Benachrichtigungen betreffend unserer Angebote.
\n
\nDie uns online zur Verfügung gestellten personenbezogenen Daten werden nur für die im konkreten Fall mitgeteilten Zwecke erhoben, verarbeitet und genutzt. Eine darüberhinausgehende Erhebung, Verarbeitung oder Nutzung erfolgt nur im Einklang mit dem Gesetz.
\nDabei ist die Verarbeitung gemäß § 6 DSG-EKD nur rechtmäßig, wenn mindestens eine der nachstehenden Bedingungen erfüllt ist:
\n\n
eine Rechtsvorschrift erlaubt die Verarbeitung der personenbezogenen Daten oder ordnet sie an;
\n
die betroffene Person hat ihre Einwilligung zu der Verarbeitung der sie betreffenden personenbezogenen Daten für einen oder mehrere bestimmte Zwecke gegeben;
\n
die Verarbeitung ist zur Erfüllung der Aufgaben der verantwortlichen Stelle erforderlich, einschließlich der Ausübung kirchlicher Aufsicht,
\n
die Verarbeitung ist für die Wahrnehmung einer sonstigen Aufgabe erforderlich, die im kirchlichen Interesse liegt,
\n
die Verarbeitung ist für die Erfüllung eines Vertrags, dessen Vertragspartei die betroffene Person ist, oder zur Durchführung vorvertraglicher Maßnahmen erforderlich, die auf Anfrage der betroffenen Person erfolgt;
\n
die Verarbeitung ist zur Erfüllung einer rechtlichen Verpflichtung erforderlich, der die kirchliche Stelle unterliegt;
\n
die Verarbeitung ist erforderlich, um lebenswichtige Interessen der betroffenen Person oder einer anderen natürlichen Person zu schützen;
\n
die Verarbeitung ist zur Wahrung der berechtigten Interessen eines Dritten erforderlich, sofern nicht die schutzwürdigen Interessen der betroffenen Person überwiegen, insbesondere dann, wenn diese minderjährig ist.
\n \nWir übermitteln Daten ferner an Dritte, wenn dies auf Grundlage einer Einwilligung geschieht oder dies für Abrechnungszwecke (z.B. Durchführung von Banktransaktionen oder postalischer Versand von Waren und Rechnungen) oder sonst notwendig ist, um unsere vertraglichen Pflichten den Nutzern gegenüber zu erfüllen.
\nBei Kontaktaufnahme mit uns werden die Angaben zwecks Bearbeitung der Anfrage sowie für den Fall, dass Anschlussfragen entstehen, gespeichert.
\nSofern innerhalb des Internetangebotes die Möglichkeit zur Eingabe persönlicher oder geschäftlicher Daten (zum Beispiel im Rahmen einer persönlichen Registrierung, Bestellung, Anforderung oder Mitteilung) besteht, so erfolgt die Angabe dieser Daten seitens des Nutzers auf ausdrücklich freiwilliger Basis.
\nPersonenbezogene Daten werden gelöscht, sofern sie ihren Verwendungszweck erfüllt haben und der Löschung keine Aufbewahrungspflichten entgegenstehen.",
+ "text4": "Wir behalten uns vor die Datenschutzerklärung zu ändern, um sie an geänderte Rechtslagen, oder bei Änderungen des Dienstes sowie der Datenverarbeitung anzupassen.
\nDie Nutzer werden daher gebeten sich regelmäßig über deren Inhalt zu informieren, insbesondere wenn sie erneut personenbezogene Informationen mitteilen.",
+ "text5": "Sie haben das Recht über die personenbezogenen Daten, die von uns über sie gespeichert \nwurden, auf Antrag unentgeltlich Auskunft zu erhalten.
\nSie haben das Recht, Ihre datenschutzrechtliche Einwilligungserklärung jederzeit zu widerrufen \n(s.a. z.B. Newsletter). \nDurch den Widerruf der Einwilligung wird die Rechtmäßigkeit der aufgrund der Einwilligung bis \nzum Widerruf erfolgten Verarbeitung nicht berührt.
\nZusätzlich haben Sie in berechtigten Fällen das Recht auf Berichtigung, auf Löschung, auf \nEinschränkung der Verarbeitung, auf Datenübertragbarkeit sowie eines Widerspruchsrechts gegen \ndie Verarbeitung.
\nDie Kontaktdaten sind dem Impressum zu entnehmen.
\nIm Falle datenschutzrechtlicher Verstöße steht dem Betroffenen ein Beschwerderecht bei der\nzuständigen Aufsichtsbehörde zu.\nZuständige Aufsichtsbehörde ist die oder der
\nBeauftragte für den Datenschutz der EKD \nLange Laube 20, 30159 Hannover \nTelefon: 0511 768128-0 \nhttps://datenschutz.ekd.de",
+ "text6": "Für Fragen zum Datenschutz wenden Sie sich bitte an den Betriebsbeauftragten für den Datenschutz im Evangelischen Werk für Diakonie und Entwicklung:
\nDie oder Der örtlich Beauftragte für den Datenschutz \nCaroline-Michaelis-Str. 1 \n10115 Berlin \nE-Mail: datenschutz@ewde.de",
+ "text7": "Cookies sind Informationen, die von unserem Webserver an Ihren Web-Browser übertragen und dort für einen späteren Abruf gespeichert werden. \nInformationen können zum Beispiel Ihre IP-Adresse oder eine andere Kennung, Ihren Browsertyp und Informationen über digitale Inhalte, mit denen Sie interagieren, enthalten. \nDurch das Speichern solcher Informationen können Webbrowser-Cookies Ihre Präferenzen und Einstellungen für Online-Dienste speichern und analysieren, wie Sie Online-Dienste nutzen.",
+ "text8": "Die Verwendung technisch notweniger Cookies dient dazu, die Nutzung der Webseiten für die Webseitenbesucher zu vereinfachen. \nEinige Funktionen unserer Webseite erfordern den Einsatz von technisch notwendigen Cookies. \nDer Browser des Nutzers muss dafür auch nach einem Seitenwechsel wiedererkannt werden. \nWir erheben Daten über jeden Zugriff auf den Server, auf dem sich dieses Angebot befindet (so genannte Serverlogfiles).
\nDie Rechtsgrundlage für die Verarbeitung personenbezogener Daten unter Verwendung technisch notweniger Cookies ist § 6 Nr.4 DSG-EKD.
\nZu den Zugriffsdaten gehören Name der abgerufenen Webseite, Datei, Datum und Uhrzeit des Abrufs, übertragene Datenmenge, Meldung über erfolgreichen Abruf, Browsertyp nebst Version, das Betriebssystem des Nutzers, Referrer URL (die zuvor besuchte Seite), IP-Adresse und der anfragende Provider. Diese Daten werden nicht gespeichert, sind jedoch zur Laufzeit verfügbar.
\nWir verwenden die Protokolldaten ohne Zuordnung zur Person des Nutzers oder sonstiger Profilerstellung entsprechend den gesetzlichen Bestimmungen nur für statistische Auswertungen zum Zweck des Betriebs, der Sicherheit und der Optimierung des Angebotes. \nWir behalten uns jedoch vor, die Protokolldaten nachträglich zu überprüfen, wenn aufgrund konkreter Anhaltspunkte der berechtigte Verdacht einer rechtswidrigen Nutzung besteht. \nDie durch technisch notwendige Cookies erhobenen Nutzerdaten werden nicht zur Erstellung von Nutzerprofilen verwendet.",
+ "text9": "Cookies werden auf dem Rechner des Nutzers gespeichert und von diesem an unserer Seite übermittelt. \nDaher haben Sie als Nutzer auch die volle Kontrolle über die Verwendung von Cookies. \nDurch eine Änderung der Einstellungen in Ihrem Internetbrowser können Sie die Übertragung von Cookies deaktivieren oder einschränken. \nBereits gespeicherte Cookies können jederzeit gelöscht werden. \nDies kann auch automatisiert erfolgen. Werden Cookies für unsere Website deaktiviert, können möglicherweise nicht mehr alle Funktionen der Website vollumfänglich genutzt werden.",
+ "title": "Datenschutz",
+ "title1": "Zielsetzung und verantwortliche Stelle",
+ "title10": "Verwendete Cookies",
+ "title11": "Registrierung und Kommunikation über die Beratungsplattform",
+ "title12": "Umfang und Zweck der Datenverarbeitung, Rechtsgrundlage",
+ "title13": "Anonymität",
+ "title14": "Datenlöschung",
+ "title2": "Grundsätzliche Angaben zur Datenverarbeitung",
+ "title3": "Verarbeitung personenbezogener Daten",
+ "title4": "Änderungen der Datenschutzerklärung",
+ "title5": "Rechte der betroffenen Person",
+ "title6": "Ansprechpartner",
+ "title7": "Was sind Cookies und Co?",
+ "title8": "Verwendung, Rechtsgrundlage und Zweck",
+ "title9": "Dauer der Speicherung, Widerspruchs- und Beseitigungsmöglichkeit"
+ },
+ "deleteAccount": {
+ "successOverlay": {
+ "headline": "Sie haben Ihren Account bei der Diakonie Beratung erfolgreich gelöscht."
+ }
+ },
+ "enquiry": {
+ "write": {
+ "input": {
+ "placeholder": {
+ "consultant": "Nachricht an Klient:in schreiben",
+ "feedback": {
+ "peer": "Nachricht an Teamleiter:in schreiben"
+ }
+ }
+ },
+ "overlay": {
+ "copy": "Innerhalb von 2 Arbeitstagen erhalten Sie eine Antwort von uns."
+ }
+ }
+ },
+ "furtherSteps": {
+ "emailNotification": {
+ "infoText": "Wenn Sie Ihre E-Mail-Adresse angeben (freiwillig)
erhalten Sie eine E-Mail-Benachrichtigung, wenn Ihre Beraterin oder Ihr Berater Ihnen geschrieben hat
können Sie Ihr Passwort zurücksetzen, falls Sie es vergessen haben.
Ihre E-Mail-Adresse kann von den Beraterinnen und Beratern nicht eingesehen werden."
+ },
+ "step2": {
+ "info": "Jetzt finden wir eine Beraterin oder einen Berater für Sie."
+ },
+ "step3": {
+ "info": "Ihre Beraterin oder Ihr Berater antwortet innerhalb von 2 Arbeitstagen."
+ }
+ },
+ "groupChat": {
+ "join": {
+ "warning": {
+ "message": "Ihre Beraterin/Moderatorin oder ihr Berater/Moderator hat den Chat noch nicht gestartet. Sobald Ihre Beraterin/Moderatorin oder Ihr Berater/Moderator den Chat gestartet hat können Sie mit uns chatten. Bitte haben Sie noch etwas Geduld."
+ }
+ }
+ },
+ "imprint": {
+ "text1": "Diakonie Deutschland \nEvangelisches Werk für Diakonie und Entwicklung e.V. \nCaroline-Michaelis-Str. 1 \n10115 Berlin
\nJeweils zwei Mitglieder des Vorstandes vertreten das Evangelische Werk für Diakonie und Entwicklung e.V. im Rechtsverkehr gemeinsam.",
+ "text3": "Amtsgericht Berlin-Charlottenburg, Vereinsregister 31924 B
\nUSt-IdNr.: DE 147801862
\nDas Evangelische Werk für Diakonie und Entwicklung verfolgt ausschließlich und unmittelbar gemeinnützige, mildtätige und kirchliche Zwecke im Sinne des Abschnitts \"steuerbegünstigte Zwecke\" der Abgabenordnung.",
+ "text4": "Dr. Thomas Schiller \nLeiter Kommunikation \nEvangelisches Werk für Diakonie und Entwicklung e.V. \nCaroline-Michaelis-Str.1 \n10115 Berlin
\nTelefon: 030 65211-1356 \nFax: 030 65211-3356 \nE-Mail: thomas.schiller@diakonie.de",
+ "text5": "Alle auf unseren Seiten verwendeten Bilder, Fotos, Logos, Texte etc. unterliegen dem Copyright des Evangelischen Werkes für Diakonie und Entwicklung e.V. bzw. von Dritten. Sie dürfen nicht bzw. nur nach Rücksprache mit der Redaktion weiter verwendet werden. Die verschiedenen Logos der Diakonie sowie das Kronenkreuz sind eingetragene Marken, deren Eigentümer das Evangelische Werk für Diakonie und Entwicklung e.V. ist. Die unberechtigte Nutzung und Verwendung ist unzulässig.",
+ "text6": "Die Inhalte externer Links werden von uns sorgfältig geprüft. Wir übernehmen dennoch keine Haftung für die Inhalte der mit oder von unserer Website verlinkten externen Seiten. Für die Inhalte dieser Seiten sind ausschließlich deren Anbieter verantwortlich.
\nDie Diakonie Deutschland ist Dachorganisation der Diakonie in Deutschland. Als evangelischer Wohlfahrtsverband ist sie der soziale Dienst der Kirchen in Deutschland und vertritt die Interessen der Menschen für die die diakonischen Dienste und Einrichtungen tätig sind. Der Online-Auftritt richtet sich deshalb an alle, die an den Angeboten der Diakonie in Deutschland interessiert sind.",
+ "title": "Impressum",
+ "title1": "Anbieterkennzeichnung gemäß den gesetzlichen Bestimmungen",
+ "title2": "Das Werk wird durch den Vorstand vertreten. Er besteht aus folgenden Mitgliedern",
+ "title3": "Registergericht",
+ "title4": "Verantwortlich für den Web-Auftritt",
+ "title5": "Copyright-Hinweis",
+ "title6": "Rechtlicher Hinweis zur Haftung"
+ },
+ "monitoring": {
+ "monitoringU25": {
+ "concern": "Sorge um Suizidgefährdete:n",
+ "concernLovedOne": "Sorge um Nahestehende:n",
+ "deceaseLovedOne": "Tod einer oder eines Nahestehenden",
+ "helpfulness": "Wie hilfreich war der Kontakt für Klient:in?",
+ "noAnswer": "Klient:in hat sich nicht mehr gemeldet",
+ "noFirstAnswer": "Klient:in hat auf Erstmail nicht reagiert",
+ "partnerLivingCommunity": "mit Partner:in in WG",
+ "relationshipRelative": "Beziehungssituation mit Angehörige:n"
+ }
+ },
+ "profile": {
+ "data": {
+ "emailInfo": "Die Angabe Ihrer E-Mail ist freiwillig und wird ausschließlich verwendet, um Sie über neue Antworten Ihrer Beraterin oder Ihres Beraters zu informieren. Ihre E-Mail-Adresse ist für Beraterinnen und Berater nicht sichtbar.",
+ "register": {
+ "consultingModeInfo": {
+ "groupChats": "In der Selbsthilfe tauschen sich Betroffene über ein Thema oder ein Anliegen miteinander aus. Die Betroffenen sprechen über ihre Probleme, Gefühle und Hoffnungen und erfahren so, wie andere Probleme bewältigt haben. Die Gruppen werden von Moderatorinnen oder Moderatoren geleitet."
+ }
+ }
+ },
+ "notifications": {
+ "follow": {
+ "up": {
+ "email": {
+ "label": "eine Nachricht von einem oder einer angenommenen Ratsuchenden erhalten haben."
+ }
+ }
+ }
+ }
+ },
+ "registration": {
+ "account": {
+ "headline": "Anmeldedaten erfassen",
+ "password": {
+ "criteria1": "mindestens 9 Zeichen",
+ "criteria2": "mindestens eine Zahl",
+ "criteria3": "Groß-/Kleinschreibung",
+ "criteria4": "mindestens ein Sonderzeichen",
+ "label": "Passwort"
+ },
+ "repeatPassword": {
+ "error": "Ihr Passwort ist nicht identisch.",
+ "label": "Passwort wiederholen",
+ "success": "Ihr Passwort ist identisch."
+ },
+ "subline": "Um Ihre Anonymität zu schützen, raten wir Ihnen, nicht Ihren tatsächlichen Namen oder Initialen zu verwenden.",
+ "username": {
+ "error": {
+ "available": "Ihr Benutzername ist zu kurz.",
+ "unavailable": "Dieser Benutzername ist bereits vergeben."
+ },
+ "info": "5 oder mehr Zeichen",
+ "label": "Benutzername",
+ "success": "Ihr Benutzername ist geeignet."
+ }
+ },
+ "agency": {
+ "consultantheadline": "Ihre Beratungsstelle",
+ "headline": "Ihre Beratungsstelle wählen",
+ "infoOverlay": {
+ "backButtonLabel": "Andere Beratungsstelle auswählen",
+ "nextButtonLabel": "Beratungsstelle auswählen und fortfahren"
+ },
+ "noresult": {
+ "headline": "Keine Online-Beratungsstelle gefunden",
+ "label": "Zur Beratungsstellensuche",
+ "subline": "Momentan haben wir leider noch keine Online-Beratungsstelle in Ihrer Nähe. Auf unserer Webseite finden Sie Beratungsstellen vor Ort für Ihr Anliegen."
+ },
+ "preselected": {
+ "isTeam": "Sie werden von einem Team beraten.",
+ "prefix": "Ihre vorausgewählte Beratungsstelle: "
+ },
+ "result": {
+ "external": {
+ "headline": "Die gefundene Beratungsstelle nutzt eine andere Anwendung für die Beratung",
+ "link": "Jetzt wechseln",
+ "subline": "Bitte versuchen Sie es mit einer anderen Postleitzahl oder besuchen Sie unsere Website, um eine Beratungsstelle in Ihrer Nähe zu finden."
+ },
+ "headline": "Beratungsstellen zur Postleitzahl",
+ "languages": "Diese Beratungsstelle berät Sie auf:"
+ },
+ "search": "Suche nach einer PLZ",
+ "summary": "Ihre Beratungsstelle:"
+ },
+ "agencySelection": {
+ "postcode": {
+ "unavailable": {
+ "title": "Keine Online-Beratungsstelle gefunden"
+ }
+ }
+ },
+ "back": "Zurück",
+ "consultantlink": "Ihre Beraterin oder Ihr Berater hat Sie zur Online-Beratung eingeladen! Bitte registrieren Sie sich, um mit Ihrer beratenden Person in Kontakt zu treten.",
+ "consultingTypeAgencySelection": {
+ "agency": {
+ "infoText": "Ihre Beraterin oder Ihr Berater ist in mehreren Beratungsstellen tätig. Bitte wählen Sie Ihre gewünschte Beratungsstelle."
+ },
+ "consultingType": {
+ "infoText": "Ihre Beraterin oder Ihr Berater ist in mehreren Themenfeldern tätig. Bitte wählen Sie Ihr gewünschtes Themenfeld."
+ }
+ },
+ "errors": {
+ "ups": {
+ "text": "Es tut uns leid, da ist wohl etwas schiefgelaufen. Laden Sie die Seite neu und versuchen Sie es erneut.",
+ "title": "Ups!"
+ },
+ "aid": "Die von Ihnen gewählte Beratungsstelle konnte leider nicht gefunden werden. Bitte wählen Sie bei der Registrierung erneut eine Beratungsstelle aus.",
+ "cid": "Leider konnten wir Ihre Beraterin oder Ihren Berater nicht finden. Bitte wenden Sie sich an Ihre beratende Person, um einen neuen Link zu erhalten oder registrieren Sie sich hier bei Ihrer gewünschten Beratungsstelle.",
+ "tid": "Das von Ihnen gewählte Thema konnte leider nicht gefunden werden. Bitte wählen Sie bei der Registrierung erneut ein passendes Thema aus."
+ },
+ "next": "Weiter",
+ "overlay": {
+ "success": {
+ "headline": "Herzlich willkommen bei der Beratung der Diakonie."
+ }
+ },
+ "register": "Registrieren",
+ "stepbar": {
+ "of": "von",
+ "step": "Schritt"
+ },
+ "topic": {
+ "headline": "Zu welchem Thema suchen Sie Beratung?",
+ "infoOverlay": {
+ "backButtonLabel": "Anderes Thema auswählen",
+ "nextButtonLabel": "Thema auswählen und fortfahren"
+ },
+ "oneResult": "Wir beraten Sie zum Thema",
+ "subline": "Wählen Sie ein Thema aus unserem Beratungsangebot aus.",
+ "summary": "Ihr Thema:"
+ },
+ "user": {
+ "infoText": "Um Ihre Anonymität zu schützen, raten wir Ihnen, nicht Ihren tatsächlichen Namen oder Initialien zu verwenden. Wählen Sie bitte einen geeigneten Benutzernamen mit min. 5 Zeichen."
+ },
+ "welcomeScreen": {
+ "info3": {
+ "text": "Innerhalb von 2 Arbeitstagen bekommen Sie eine Antwort"
+ },
+ "info4": {
+ "text": "Sie bleiben anonym und erhalten kostenfreie Beratung"
+ },
+ "login": {
+ "buttonLabel": "Einloggen",
+ "helperText": "Bereits registriert?"
+ },
+ "register": {
+ "helperText": "Neu bei der Online-Beratung?"
+ },
+ "subline": "So läuft die Beratung der Diakonie ab"
+ },
+ "zipcode": {
+ "bullet1": "• die Hilfen rund um Ihren Wohnort kennen",
+ "bullet2": "• die Gesetze Ihres Bundeslandes kennen",
+ "headline": "Um Sie bestmöglich beraten zu können, benötigen wir Ihre Postleitzahl",
+ "label": "Ihre Postleitzahl",
+ "subline": "Warum? Weil dann unsere Fachleute:"
+ }
+ },
+ "session": {
+ "acceptance": {
+ "overlay": {
+ "headline": "Sie haben die Erstanfrage erfolgreich angenommen und finden diese nun unter „Meine Beratungen“."
+ }
+ },
+ "assignOther": {
+ "overlay": {
+ "subtitle": {
+ "noTeam": "{{newConsultant}} ist somit für die Ratsuchende oder den Ratsuchenden verantwortlich und kann den kompletten Nachrichtenverlauf lesen. Sie haben keinen Zugiff mehr auf die Nachrichten.",
+ "team": {
+ "other": "{{newConsultant}} ist somit für die Ratsuchende oder den Ratsuchenden verantwortlich. Stimmt {{toAskerName}} der Zuweisung zu, finden Sie den Chatverlauf unter Teamberatung und nicht mehr in Ihren Nachrichten.",
+ "self": "{{newConsultant}} ist somit für die Ratsuchende oder den Ratsuchenden verantwortlich. Stimmt {{toAskerName}} der Zuweisung zu, finden Sie den Chatverlauf in Ihren Nachrichten und nicht mehr unter Teamberatung."
+ }
+ }
+ }
+ },
+ "consultant": {
+ "prefix": "Beraterin oder Berater - "
+ },
+ "groupChat": {
+ "consultant": {
+ "prefix": "Moderatorin oder Moderator - "
+ }
+ }
+ },
+ "sessionList": {
+ "user": {
+ "consultantUnknown": "Beraterinnen- oder Berater-Suche läuft",
+ "headline": "Meine Beratungen"
+ },
+ "view": {
+ "headline": "Meine Beratungen"
+ }
+ },
+ "twoFactorAuth": {
+ "activate": {
+ "app": {
+ "step3": {
+ "title": "Verknüpfen Sie die App mit Ihrem Account"
+ }
+ }
+ }
+ },
+ "typingIndicator": {
+ "multipleUsers": {
+ "typing": "Teilnehmerinnen oder Teilnehmer schreiben"
+ }
+ },
+ "userProfile": {
+ "data": {
+ "resort": "Beratungsfeld"
+ },
+ "reassign": {
+ "description": "Sie können die Unterhaltung einem anderen Teammitglied zuweisen. Diese Person ist dann für die Ratsuchende oder den Ratsuchenden verantwortlich."
+ },
+ "tools": {
+ "options": {
+ "saveError": "Beim Werkzeugwechsel ist ein Problem aufgetreten. Bitte versuche es erneut."
+ }
+ }
+ },
+ "videoConference": {
+ "waitingroom": {
+ "dataProtection": {
+ "description": "Danach dürfen unsere Beraterinnen oder Berater einen Video-Call mit Ihnen starten."
+ },
+ "errorPage": {
+ "description": "Zu Ihrem Link können wir keinen Video-Call finden da der Video-Call entweder gelöscht oder bereits beendet wurde. Sollten Sie weiterhin Probleme haben fragen Sie bitte Ihre Beraterin oder Ihren Berater.",
+ "rejected": {
+ "description": "Leider können Sie an diesem Video-Call nicht teilnehmen, da Ihre Beraterin oder Ihr Berater Sie abgelehnt hat."
+ }
+ },
+ "paused": {
+ "subline": "Der Video-Call wurde beendet. Sollten Ihre Beraterin oder Ihr Berater nur abwesend sein werden Sie in den Video-Call weitergeleitet sobald Ihre Beraterin oder Ihr Berater den Video-Call fortsetzt."
+ },
+ "subline": "Der Video-Call hat noch nicht begonnen. Sie werden weitergeleitet sobald Ihre Beraterin oder Ihr Berater den Video-Call startet."
+ }
+ }
+}
diff --git a/src/extensions/resources/i18n/overwrites/de@informal/common.json b/src/extensions/resources/i18n/overwrites/de@informal/common.json
new file mode 100644
index 000000000..4a163d70e
--- /dev/null
+++ b/src/extensions/resources/i18n/overwrites/de@informal/common.json
@@ -0,0 +1,175 @@
+{
+ "appointments": {
+ "onlineMeeting": {
+ "overlay": {
+ "start": {
+ "copy": "Du startest jetzt den Video-Call. Eingeladene Teilnehmerinnen oder Teilnehmer können ab sofort mit dem Einladungslink beitreten."
+ }
+ }
+ }
+ },
+ "deleteAccount": {
+ "successOverlay": {
+ "headline": "Du hast Deinen Account bei der Diakonie Beratung erfolgreich gelöscht."
+ }
+ },
+ "enquiry": {
+ "write": {
+ "overlay": {
+ "copy": "Innerhalb von 2 Arbeitstagen erhältst Du eine Antwort von uns."
+ }
+ }
+ },
+ "furtherSteps": {
+ "step2": {
+ "info": "Jetzt finden wir eine Beraterin oder einen Berater für Dich."
+ },
+ "step3": {
+ "info": "Deine Beraterin oder Dein Berater antwortet innerhalb von 2 Arbeitstagen."
+ },
+ "emailNotification": {
+ "infoText": "Wenn Du Deine E-Mail-Adresse angibst (freiwillig)
erhälst Du eine E-Mail-Benachrichtigung, wenn Deine Beraterin oder Dein Berater Dir geschrieben hat
kannst Du Dein Passwort zurücksetzen, falls Du es vergessen hast.
Deine E-Mail-Adresse kann von den Beraterinnen und Beratern nicht eingesehen werden."
+ }
+ },
+ "groupChat": {
+ "join": {
+ "warning": {
+ "message": "Deine Beraterin/Moderatorin oder Dein Berater/Moderator hat den Chat noch nicht gestartet. Sobald Deine Beraterin/Moderatorin oder Dein Berater/Moderator den Chat gestartet hat kannst du mit uns chatten. Bitte habe noch etwas Geduld."
+ }
+ }
+ },
+ "profile": {
+ "notifications": {
+ "follow": {
+ "up": {
+ "email": {
+ "label": "eine Nachricht von einem oder einer angenommenen Ratsuchenden erhalten hast."
+ }
+ }
+ }
+ },
+ "data": {
+ "emailInfo": "Die Angabe deiner E-Mail ist freiwillig und wird ausschließlich verwendet, um dich über neue Antworten deiner Beraterin oder deines Beraters zu informieren. Deine E-mail-Adresse ist für Beraterinnen und Berater nicht sichtbar."
+ }
+ },
+ "registration": {
+ "welcomeScreen": {
+ "info3": {
+ "text": "Innerhalb von 2 Arbeitstagen bekommst Du eine Antwort"
+ }
+ },
+ "consultingTypeAgencySelection": {
+ "consultingType": {
+ "infoText": "Deine Beraterin oder Dein Berater ist in mehreren Themenfeldern tätig. Bitte wähle Dein gewünschtes Themenfeld."
+ },
+ "agency": {
+ "infoText": "Deine Beraterin oder Dein Berater ist in mehreren Beratungsstellen tätig. Bitte wähle Deine gewünschte Beratungsstelle."
+ }
+ },
+ "account": {
+ "repeatPassword": {
+ "error": "Dein Passwort ist nicht identisch",
+ "success": "Dein Passwort ist identisch"
+ },
+ "subline": "Um Deine Anonymität zu schützen, raten wir Dir, nicht Deinen tatsächlichen Namen oder Initialen zu verwenden.",
+ "username": {
+ "error": {
+ "available": "Dein Benutzername ist zu kurz."
+ },
+ "success": "Dein Benutzername ist geeignet."
+ }
+ },
+ "agency": {
+ "consultantheadline": "Deine Beratungsstelle",
+ "headline": "Deine Beratungsstelle wählen",
+ "noresult": {
+ "subline": "Bitte versuche es mit einer anderen Postleitzahl oder besuche unsere Website, um eine Beratungsstelle in Deiner Nähe zu finden."
+ },
+ "preselected": {
+ "isTeam": "Du wirst von einem Team beraten.",
+ "prefix": "Deine vorausgewählte Beratungsstelle: "
+ },
+ "result": {
+ "external": {
+ "subline": "Bitte versuche es mit einer anderen Postleitzahl oder besuche unsere Website, um eine Beratungsstelle in Deiner Nähe zu finden."
+ },
+ "languages": "Diese Beratungsstelle berät Dich auf:"
+ },
+ "summary": "Deine Beratungsstelle"
+ },
+ "errors": {
+ "unknown": {
+ "text": "Es tut uns leid, da ist wohl etwas schiefgelaufen. Lade die Seite neu und versuche es erneut.",
+ "title": "Ups!"
+ },
+ "aid": "Die von Dir gewählte Beratungsstelle konnte leider nicht gefunden werden. Bitte wähle bei der Registrierung erneut eine Beratungsstelle aus.",
+ "cid": "Leider konnten wir Deine Beraterin oder Deinen Berater nicht finden. Bitte wende Dich an Deine beratende Person, um einen neuen Link zu erhalten oder registriere Dich hier bei Deiner gewünschten Beratungsstelle.",
+ "tid": "Das von Dir gewählte Thema konnte leider nicht gefunden werden. Bitte wähle bei der Registrierung erneut ein passendes Thema aus."
+ },
+ "topic": {
+ "headline": "Zu welchem Thema suchst Du Beratung?",
+ "subline": "Wähle ein Thema aus unserem Beratungsangebot aus.",
+ "summary": "Dein Thema:"
+ },
+ "zipcode": {
+ "bullet1": "• die Hilfen rund um Deinen Wohnort kennen",
+ "bullet2": "• die Gesetze Deines Bundeslandes kennen",
+ "headline": "Um Dich bestmöglich beraten zu können benötigen wir Deine Postleitzahl",
+ "label": "Deine Postleitzahl"
+ }
+ },
+ "session": {
+ "acceptance": {
+ "overlay": {
+ "headline": "Du hast die Erstanfrage erfolgreich angenommen und findest diese nun unter „Meine Beratungen."
+ }
+ },
+ "assignSelf": {
+ "overlay": {
+ "headline1": "Du hast die Beratung erfolgreich angenommen. Sie wurde in Meine Beratungen verschoben."
+ }
+ },
+ "assignOther": {
+ "overlay": {
+ "subtitle": {
+ "noTeam": "{{newConsultant}} ist somit für die Ratsuchende oder den Ratsuchenden verantwortlich und kann den kompletten Nachrichtenverlauf lesen. Du hast keinen Zugiff mehr auf die Nachrichten.",
+ "team": {
+ "self": "{{newConsultant}} ist somit für die Ratsuchende oder den Ratsuchenden verantwortlich. Stimmt {{toAskerName}} der Zuweisung zu, findest Du den Chatverlauf in Deinen Nachrichten und nicht mehr unter Teamberatung.",
+ "other": "{{newConsultant}} ist somit für die Ratsuchende oder den Ratsuchenden verantwortlich. Stimmt {{toAskerName}} der Zuweisung zu, findest Du den Chatverlauf unter Teamberatung und nicht mehr in Deinen Nachrichten."
+ }
+ }
+ }
+ }
+ },
+ "twoFactorAuth": {
+ "activate": {
+ "app": {
+ "step3": {
+ "title": "Verknüpfe die App mit Deinem Account"
+ }
+ }
+ }
+ },
+ "userProfile": {
+ "reassign": {
+ "description": "Du kannst die Unterhaltung einem anderen Teammitglied zuweisen. Diese Person ist dann für die Ratsuchende oder den Ratsuchenden verantwortlich."
+ }
+ },
+ "videoConference": {
+ "waitingroom": {
+ "dataProtection": {
+ "description": "Danach dürfen unsere Beraterinnen oder Berater einen Video-Call mit Dir starten."
+ },
+ "subline": "Der Video-Call hat noch nicht begonnen. Sie werden weitergeleitet sobald Deine Beraterin oder Dein Berater den Video-Call startet.",
+ "paused": {
+ "subline": "Der Video-Call wurde beendet. Sollte Deine Beraterin oder Dein Berater nur abwesend sein wirst Du in den Video-Call weitergeleitet sobald Deine Beraterin oder Dein Berater den Video-Call fortsetzt."
+ },
+ "errorPage": {
+ "description": "Zu Deinem Link können wir keinen Video-Call finden da der Video-Call entweder gelöscht oder bereits beendet wurde. Solltest Du weiterhin Probleme haben frage bitte Deinen Beraterin oder Dein Berater.",
+ "rejected": {
+ "description": "Leider kannst Du an diesem Video-Call nicht teilnehmen, da Deine Beraterin oder Dein Berater Dich abgelehnt hat."
+ }
+ }
+ }
+ }
+}
diff --git a/src/extensions/resources/i18n/overwrites/en/common.json b/src/extensions/resources/i18n/overwrites/en/common.json
new file mode 100644
index 000000000..027385c38
--- /dev/null
+++ b/src/extensions/resources/i18n/overwrites/en/common.json
@@ -0,0 +1,87 @@
+{
+ "app": {
+ "info": "information",
+ "or": "or"
+ },
+ "registration": {
+ "account": {
+ "headline": "Enter login data",
+ "password": {
+ "criteria1": "at least 9 characters",
+ "criteria2": "at least one number",
+ "criteria3": "upper/lower case",
+ "criteria4": "at least one special character",
+ "label": "Password"
+ },
+ "repeatPassword": {
+ "error": "Your password is not identical.",
+ "label": "Repeat password",
+ "success": "Your password is identical."
+ },
+ "subline": "To protect your anonymity, we advise you not to use your real name or initials.",
+ "username": {
+ "error": {
+ "available": "Your username is too short.",
+ "unavailable": "The username is already taken."
+ },
+ "info": "5 or more characters",
+ "label": "Username",
+ "success": "Your username is suitable."
+ }
+ },
+ "agency": {
+ "headline": "Choose your consulting center",
+ "result": {
+ "external": {
+ "headline": "The found counseling center uses another application for counseling",
+ "languages": "This counseling center advises you on:",
+ "link": "Switch now",
+ "subline": "Please try a different zip code or visit our website to find a counseling center near you."
+ },
+ "headline": "Consulting centers for zipcode",
+ "noresult": {
+ "headline": "No online counseling center found",
+ "label": "To the advice center search",
+ "subline": "Please try a different zip code or visit our website to find a counseling center near you."
+ }
+ },
+ "search": "Search for your zipcode",
+ "summary": "Your agency:"
+ },
+ "consultantlink": "Your advisor has invited you to online consulting! Please register to get in touch with your advisor.",
+ "errors": {
+ "aid": "Unfortunately, the consulting center you selected could not be found. Please select a consulting center again during registration.",
+ "cid": "Unfortunately, we could not find your advisor. Please contact your counseling person to get a new link or register here at your desired counseling center.",
+ "tid": "Sorry, the topic you selected could not be found. Please select a suitable topic again during registration."
+ },
+ "infoOverlay": {
+ "backButtonLabel": "Choose another topic",
+ "nextButtonLabel": "Choose topic and continue"
+ },
+ "stepbar": {
+ "of": "of",
+ "step": "Step"
+ },
+ "topic": {
+ "headline": "On what topic are you looking for advice?",
+ "subline": "Select a topic from our consulting offer.",
+ "summary": "Your topic:"
+ },
+ "welcomeScreen": {
+ "login": {
+ "buttonLabel": "Login",
+ "helperText": "Already registered?"
+ },
+ "register": {
+ "helperText": "New with online consulting?"
+ }
+ },
+ "zipcode": {
+ "bullet1": "• know the aids around your place of residence",
+ "bullet2": "• know the laws of your state",
+ "headline": "To be able to advise you in the best possible way we need your zip code",
+ "label": "Your zipcode",
+ "subline": "Why? Because then our professionals:"
+ }
+ }
+}
diff --git a/src/extensions/resources/scripts/config.ts b/src/extensions/resources/scripts/config.ts
new file mode 100644
index 000000000..046ddf566
--- /dev/null
+++ b/src/extensions/resources/scripts/config.ts
@@ -0,0 +1,105 @@
+import _ from 'lodash';
+import { AppConfigInterface } from '../../../globalState/interfaces';
+
+// Files completely overwritten in extension
+import deAgency from '../i18n/de/agency.json';
+import deConsultingTypes from '../i18n/de/consultingTypes.json';
+import deLanguages from '../i18n/de/languages.json';
+import enAgency from '../i18n/en/agency.json';
+import enConsultingTypes from '../i18n/en/consultingTypes.json';
+import enLanguages from '../i18n/en/languages.json';
+
+// File from main repo
+import en from '../../../resources/i18n/en/common.json';
+
+// Files which extends the original languages
+import de from '../i18n/overwrites/de/common.json';
+import deInformal from '../i18n/overwrites/de@informal/common.json';
+import enOverwrite from '../i18n/overwrites/en/common.json';
+
+import { config as baseConfig, uiUrl } from '../../../resources/scripts/config';
+
+export { uiUrl, APP_PATH } from '../../../resources/scripts/config';
+
+export const legalLinks = {
+ imprint: '/impressum',
+ privacy: '/datenschutz'
+};
+
+export const config: AppConfigInterface = {
+ ..._.merge(baseConfig, {
+ urls: {
+ chatScheduleUrl: uiUrl + '/registration',
+ finishedAnonymousChatRedirect: 'https://www.diakonie.de',
+ home: uiUrl + '/registration',
+ landingpage: '/registration',
+ toEntry: uiUrl + '/registration',
+ toRegistration: uiUrl + '/registration',
+ ...legalLinks
+ },
+ postcodeFallbackUrl: '{url}{postcode}/',
+ twofactor: {
+ startObligatoryHint: new Date('2098-07-31'),
+ dateTwoFactorObligatory: new Date('2099-02-01')
+ }
+ }),
+ legalLinks: [
+ {
+ url: legalLinks.imprint,
+ label: 'login.legal.infoText.impressum'
+ },
+ {
+ url: legalLinks.privacy,
+ label: 'login.legal.infoText.dataprotection',
+ registration: true
+ }
+ ],
+ i18n: {
+ supportedLngs: ['en', 'de'],
+ fallbackLng: {
+ en: ['de'],
+ en_informal: ['en', 'de_informal', 'de']
+ },
+ resources: {
+ de: {
+ languages: {
+ ...deLanguages
+ },
+ common: {
+ ...de
+ },
+ consultingTypes: {
+ ...deConsultingTypes
+ },
+ agencies: {
+ ...deAgency
+ }
+ },
+ de_informal: {
+ common: {
+ ...deInformal
+ }
+ },
+ en: {
+ common: [en, enOverwrite],
+ consultingTypes: {
+ ...enConsultingTypes
+ },
+ agencies: {
+ ...enAgency
+ },
+ languages: {
+ ...enLanguages
+ }
+ }
+ }
+ }
+};
+
+export const ALIAS_LAST_MESSAGES = {
+ E2EE_ACTIVATED: 'aliases.lastMessage.e2ee_activated',
+ FURTHER_STEPS: 'aliases.lastMessage.further_steps',
+ REASSIGN_CONSULTANT: 'aliases.lastMessage.reassign_consultant',
+ REASSIGN_CONSULTANT_RESET_LAST_MESSAGE:
+ 'aliases.lastMessage.reassign_consultant_reset_last_message'
+};
diff --git a/src/extensions/resources/styles/generateQrCode.scss b/src/extensions/resources/styles/generateQrCode.scss
new file mode 100644
index 000000000..0d6ed6176
--- /dev/null
+++ b/src/extensions/resources/styles/generateQrCode.scss
@@ -0,0 +1,3 @@
+.generateQrCode__overlayContent .text {
+ margin-left: 0;
+}
diff --git a/src/extensions/resources/styles/releaseNote.styles.scss b/src/extensions/resources/styles/releaseNote.styles.scss
new file mode 100644
index 000000000..11160418c
--- /dev/null
+++ b/src/extensions/resources/styles/releaseNote.styles.scss
@@ -0,0 +1,3 @@
+.releaseNote.overlay {
+ z-index: 9999;
+}
diff --git a/src/extensions/resources/styles/sessionMenu.scss b/src/extensions/resources/styles/sessionMenu.scss
new file mode 100644
index 000000000..cc004b187
--- /dev/null
+++ b/src/extensions/resources/styles/sessionMenu.scss
@@ -0,0 +1,5 @@
+.sessionMenu__content {
+ .sessionMenu__item:nth-child(5) {
+ display: none;
+ }
+}
diff --git a/src/extensions/resources/styles/settings.scss b/src/extensions/resources/styles/settings.scss
new file mode 100644
index 000000000..ec13f3cfc
--- /dev/null
+++ b/src/extensions/resources/styles/settings.scss
@@ -0,0 +1,151 @@
+// FONTS
+$font-family-sans-serif: Arial, sans-serif;
+$font-family-divider: $font-family-sans-serif;
+$body-font-family: $font-family-sans-serif;
+
+$font-weight-light: normal;
+$font-weight-regular: normal;
+$font-weight-medium: bold;
+$font-weight-bold: bold;
+
+// COLORS
+$primary: #5a2572;
+$primary-2: #462672;
+$primary-3: #6e2272;
+$primary-4: #3a2673;
+
+$blue: #009bdc;
+$grey-light: #d9d7ed;
+$background-light: #e4e3f3;
+$background-lighter: #f2f0f9;
+$background-grey: #677391;
+$background-accent: #e4e3f3;
+
+$message-name-self: $tertiary;
+$message-name-system: $primary;
+$message-name-consultant: $primary;
+$message-name-user: $primary;
+
+$hover-primary: $primary-4;
+$hover-select: $background-accent;
+
+$text-high-emphasis: rgba(0, 0, 0, 0.9);
+$text-low-emphasis: rgba(0, 0, 0, 0.6);
+$text-disabled: rgba(0, 0, 0, 0.4);
+$text-invert: rgba(255, 255, 255, 1);
+
+$border-default: rgba(0, 0, 0, 0.2);
+$border-hover: rgba(0, 0, 0, 0.9);
+$border-active: rgba(0, 0, 0, 0.9);
+
+// Components
+$button-auto-close-color: #835b95;
+$button-border-radius: 0px;
+$button-box-shadow-default: none;
+$button-box-shadow-grey: none;
+$button-small-icon-background-color-default: $blue;
+$button-small-icon-border-radius: 0;
+$button-small-icon-alternate-background-color: $blue;
+$checkbox-border-radius: 0;
+$datepicker-hover-color: $background-accent;
+$enquiry-background: $background-lighter;
+$enquiry-circle-background: $background-lighter;
+$enquiry-input-border-radius: $grid-base-three;
+$form-accordion-index-background-active: $primary;
+$form-accordion-index-border: 1px solid $primary;
+$form-accordion-index-color-active: $white;
+$form-accordion-index-color: $primary;
+$form-input-border: #dcd9dc;
+$further-steps-step-info-text-align: left;
+$headline-1-font-weight: $font-weight-medium;
+$headline-2-font-weight: $font-weight-medium;
+$illustration-background-error: rgba(255, 0, 0, 0.08);
+$illustration-background-info: rgba($black, 0.05);
+$illustration-background-neutral: rgba(53, 58, 74, 0.1);
+$input-field-border-radius: 0;
+$input-field-box-shadow: none;
+$input-field-height: 50px;
+$legal-information-links-left-default: $grid-base-two;
+$legal-information-links-left-large: $grid-base-five;
+$legal-information-links-left-medium: $grid-base-five;
+$link-color: $primary;
+$link-color-hover: $hover-primary;
+$link-text-decoration: underline;
+$link-text-decoration-hover: $link-text-decoration !default;
+$link-font-weight: inherit;
+$login-align-items: flex-start;
+$login-button-focus-border-radius: 0px;
+$login-icon-transform: none;
+$login-button-width: 320px;
+$login-button-width-large: $login-button-width;
+$login-text-align: left;
+$link-hover-color-default: $hover-primary;
+$max-input-width: 320px;
+$message-background-primary: $primary;
+$message-background-secondary: black;
+$message-background-rate: 0%;
+$message-background: mix(
+ $message-background-secondary,
+ $primary,
+ $message-background-rate
+);
+$message-submit-interface-textarea-background-color: $grey-light;
+$message-submit-interface-textarea-background-color-yellow: $yellow-3;
+$message-submit-interface-textarea-placeholder-color: $light-grey;
+$overlay-text-align: left;
+$overlay-list-align: left;
+$overlay-input-field-margin: $grid-base-three 0;
+$overlay-button-margin: $grid-base-two 0 0 auto;
+$overlay-stepped-text-align: left;
+$overlay-stepped-input-field-margin: $grid-base-three 0;
+$two-factor-qr-code-width: 100px;
+$profile-divider-text-align: left;
+$profile-imprint-background-color: $grey-light;
+$registration-form-max-width: auto;
+$registration-form-margin-left: 0 !default;
+$registration-text-align: left;
+$select-dropdown-border-radius: 0;
+$select-focus-background-color: $primary-4;
+$selection-focus-color: $text-invert;
+$sendInputHeight: 48px;
+$session-background-color: $background-lighter;
+$session-content-background-color: $background-lighter;
+$session-header-background-color: $background-light;
+$session-header-background-color-large: $background-lighter;
+$session-list-item-background-active: $background-lighter;
+$session-list-item-border-radius: 0px;
+$sessions-list-background-color-primary: $background-lighter;
+$sessions-list-background-color-secondary: $background-light;
+$session-menu-legal-links-color: $text-invert;
+$statistics-highlight-color: $primary;
+$text-color-standard: $secondary;
+$text-color-info-large-standard: $secondary;
+$text-divider-color: $primary;
+$text-divider-letter-spacing: 1px;
+$text-divider-font-weight: $font-weight-bold;
+$text-divider-text-transform: uppercase;
+$upload-progress: #80dd92;
+$welcome-screen-icon-background: $primary;
+$notice-background: transparent;
+$notice-border: 1px solid rgba(0, 0, 0, 0.2);
+$notice-padding: $grid-base-three;
+$tab-border-radius: 25px;
+$tab-background-color: rgba(0, 0, 0, 0.05);
+$tab-background-color-hover: rgba(0, 0, 0, 0.2);
+$tab-background-color-selected: rgba($primary, 0.2);
+$tab-background-color-selected-hover: rgba($hover-primary, 0.2);
+$tab-background-border-color-selected: $primary;
+$tab-color: $tertiary;
+$tab-color-hover: rgba(0, 0, 0, 0.8);
+$tab-color-selected: $primary;
+$overlay-radio-outline: 1px solid rgba(0, 0, 0, 0.2);
+$overlay-radio-radius: 25px;
+$header-height: $grid-base-twelve;
+$message-wrapper-height: 109px;
+$box-border-radius: 0px;
+$link-menu-item-border-radius: 0px;
+
+@import './sessionMenu.scss';
+@import './twoFactorAuth.scss';
+@import './releaseNote.styles';
+@import './generateQrCode.scss';
diff --git a/src/extensions/resources/styles/twoFactorAuth.scss b/src/extensions/resources/styles/twoFactorAuth.scss
new file mode 100644
index 000000000..4e3038f4a
--- /dev/null
+++ b/src/extensions/resources/styles/twoFactorAuth.scss
@@ -0,0 +1,4 @@
+.twoFactorAuth__emailConfirmation,
+.twoFactorAuth__appConfirmation {
+ text-align: center;
+}
diff --git a/src/extensions/resources/utils/useDocumentTitle.tsx b/src/extensions/resources/utils/useDocumentTitle.tsx
new file mode 100644
index 000000000..c3070ab25
--- /dev/null
+++ b/src/extensions/resources/utils/useDocumentTitle.tsx
@@ -0,0 +1,13 @@
+import { useEffect } from 'react';
+
+function useDocumentTitle(title) {
+ useEffect(() => {
+ const prevTitle = document.title;
+ document.title = title;
+ return () => {
+ document.title = prevTitle;
+ };
+ }, [title]);
+}
+
+export default useDocumentTitle;
diff --git a/src/extensions/theme.jsx b/src/extensions/theme.jsx
new file mode 100644
index 000000000..0f7d27397
--- /dev/null
+++ b/src/extensions/theme.jsx
@@ -0,0 +1,181 @@
+import { createTheme } from '@mui/material/styles';
+
+const getCssVarValue = (name) =>
+ // If you need a scss variable add a css variable for it in mui-variables-mapping.scss
+ getComputedStyle(document.documentElement).getPropertyValue(name).trim();
+
+// A custom theme for this app
+const theme = createTheme({
+ breakpoints: {
+ values: {
+ xs: 0,
+ sm: 520,
+ md: 600,
+ lg: 1200,
+ xl: 1600
+ }
+ },
+ palette: {
+ primary: {
+ dark: getCssVarValue('--primary-3'),
+ main: getCssVarValue('--primary'),
+ light: getCssVarValue('--background-light'),
+ lighter: getCssVarValue('--background-lighter')
+ },
+ info: {
+ main: getCssVarValue('--black'),
+ light: getCssVarValue('--tertiary')
+ },
+ error: {
+ main: getCssVarValue('--form-error')
+ },
+ success: {
+ main: getCssVarValue('--form-success')
+ }
+ },
+
+ typography: {
+ fontFamily: ['Roboto', 'cursive', 'sans-serif'].join(','),
+ h1: {
+ color: getCssVarValue('--black'),
+ letterSpacing: 'normal',
+ fontSize: getCssVarValue('--font-size-h1'),
+ lineHeight: '50px',
+ fontWeight: getCssVarValue('--font-weight-medium'),
+ fontFamily: getCssVarValue('--font-family-sans-serif')
+ },
+ h2: {
+ color: getCssVarValue('--black'),
+ letterSpacing: 'normal',
+ fontSize: getCssVarValue('--font-size-h2'),
+ lineHeight: '38px',
+ fontWeight: getCssVarValue('--font-weight-medium'),
+ fontFamily: getCssVarValue('--font-family-sans-serif')
+ },
+ h3: {
+ color: getCssVarValue('--black'),
+ letterSpacing: 'normal',
+ fontSize: getCssVarValue('--font-size-h3'),
+ lineHeight: '32px',
+ fontWeight: getCssVarValue('--font-weight-medium'),
+ fontFamily: getCssVarValue('--font-family-sans-serif')
+ },
+ h4: {
+ color: getCssVarValue('--black'),
+ letterSpacing: 'normal',
+ fontSize: getCssVarValue('--font-size-h4'),
+ lineHeight: '26px',
+ fontWeight: getCssVarValue('--font-weight-medium'),
+ fontFamily: getCssVarValue('--font-family-sans-serif')
+ },
+ h5: {
+ color: getCssVarValue('--black'),
+ letterSpacing: 'normal',
+ fontSize: getCssVarValue('--font-size-h5'),
+ lineHeight: '24px',
+ fontWeight: getCssVarValue('--font-weight-medium'),
+ fontFamily: getCssVarValue('--font-family-sans-serif')
+ },
+ body1: {
+ fontFamily: getCssVarValue('--font-family-sans-serif'),
+ color: getCssVarValue('--black'),
+ lineHeight: getCssVarValue('--line-height-primary'),
+ fontSize: getCssVarValue('--font-size-primary')
+ },
+ body2: {
+ fontFamily: getCssVarValue('--font-family-sans-serif'),
+ color: 'black',
+ fontSize: getCssVarValue('--font-size-tertiary'),
+ lineHeight: '20px'
+ },
+ subtitle1: {
+ fontFamily: getCssVarValue('--font-family-sans-serif'),
+ color: 'black',
+ fontSize: '20px',
+ lineHeight: '28px'
+ },
+ subtitle2: {
+ fontFamily: getCssVarValue('--font-family-sans-serif'),
+ color: 'black',
+ fontSize: '12px',
+ lineHeight: '16px'
+ }
+ },
+ components: {
+ MuiLink: {
+ styleOverrides: {
+ root: {
+ '&:hover': {
+ color: getCssVarValue('--hover-primary')
+ }
+ }
+ }
+ },
+ MuiIconButton: {
+ styleOverrides: {
+ root: {
+ '&:hover': {
+ color: 'white'
+ }
+ }
+ }
+ },
+ MuiButton: {
+ styleOverrides: {
+ root: {
+ fontSize: getCssVarValue('--font-size-primary'),
+ lineHeight: '20px',
+ borderRadius: getCssVarValue('--button-border-radius')
+ },
+ contained: {
+ 'paddingTop': '14px',
+ 'paddingBottom': '14px',
+ 'borderRadius': getCssVarValue('--button-border-radius'),
+ 'backgroundColor': 'primary.main',
+ 'textTransform': 'none',
+ 'outline': 'none',
+ 'color': getCssVarValue('--white'),
+ 'fontWeight': getCssVarValue('--font-weight-regular'),
+ 'fontFamily': getCssVarValue('--font-family-sans-serif'),
+ 'boxShadow': 'none',
+ '&:hover': {
+ boxShadow: 'none',
+ color: getCssVarValue('--white')
+ }
+ },
+ outlined: {
+ 'paddingTop': '14px',
+ 'paddingBottom': '14px',
+ 'borderRadius': getCssVarValue('--button-border-radius'),
+ 'textTransform': 'none',
+ '&:hover': {
+ backgroundColor: getCssVarValue('--hover-primary'),
+ borderColor: getCssVarValue('--hover-primary'),
+ color: getCssVarValue('--white')
+ }
+ }
+ }
+ },
+ MuiTooltip: {
+ styleOverrides: {
+ tooltip: {
+ lineHeight: '20px',
+ fontSize: getCssVarValue('--font-size-tertiary'),
+ color: getCssVarValue('--black'),
+ backgroundColor: getCssVarValue('--white'),
+ fontWeight: getCssVarValue('--font-weight-regular'),
+ fontFamily: getCssVarValue('--font-family-sans-serif'),
+ borderRadius: '4px',
+ maxWidth: '270px',
+ boxShadow: '0px 0px 10px 0px rgba(153,153,153,1)',
+ padding: '17px 24px'
+ },
+ arrow: {
+ color: getCssVarValue('--white')
+ }
+ }
+ }
+ }
+});
+
+export default theme;
diff --git a/src/globalState/index.ts b/src/globalState/index.ts
index e25398c26..2439290aa 100644
--- a/src/globalState/index.ts
+++ b/src/globalState/index.ts
@@ -9,6 +9,7 @@ export * from './provider/ConsultantListProvider';
export * from './provider/ConsultingTypesProvider';
export * from './provider/E2EEProvider';
export * from './provider/LocaleProvider';
+export * from './provider/RegistrationProvider';
export * from './provider/NotificationsProvider';
export * from './provider/SessionsDataProvider';
export * from './provider/SessionTypeProvider';
@@ -21,6 +22,7 @@ export * from './provider/RocketChatGlobalSettingsProvider';
export * from './provider/InformalProvider';
export * from './provider/AppConfigProvider';
export * from './provider/ModalProvider';
+export * from './provider/TopicsProvider';
export * from './context/LocaleContext';
export * from './context/UserDataContext';
diff --git a/src/globalState/interfaces/TopicGroups.ts b/src/globalState/interfaces/TopicGroups.ts
new file mode 100644
index 000000000..7790b0f59
--- /dev/null
+++ b/src/globalState/interfaces/TopicGroups.ts
@@ -0,0 +1,5 @@
+export interface TopicGroup {
+ id: number;
+ name: string;
+ topicIds: number[];
+}
diff --git a/src/globalState/interfaces/TopicsDataInterface.ts b/src/globalState/interfaces/TopicsDataInterface.ts
index 87ee3e0dd..334e681e2 100644
--- a/src/globalState/interfaces/TopicsDataInterface.ts
+++ b/src/globalState/interfaces/TopicsDataInterface.ts
@@ -1,9 +1,16 @@
export interface TopicsDataInterface {
id: number;
name: string;
+ slug: string;
description: string;
internalIdentifier: string;
status: string;
createDate: string;
updateDate: string;
+ titles: {
+ short: string;
+ long: string;
+ registrationDropdown: string;
+ welcome: string;
+ };
}
diff --git a/src/globalState/interfaces/index.ts b/src/globalState/interfaces/index.ts
index adb61be71..07577fc9c 100644
--- a/src/globalState/interfaces/index.ts
+++ b/src/globalState/interfaces/index.ts
@@ -12,6 +12,7 @@ export * from './SessionsDataInterface';
export * from './TenantDataInterface';
export * from './ToolsInterface';
export * from './TopicsDataInterface';
+export * from './TopicGroups';
export * from './TranslationConfig';
export * from './UserDataInterface';
export * from './VideoCallDataInterface';
diff --git a/src/globalState/provider/LegalLinksProvider.tsx b/src/globalState/provider/LegalLinksProvider.tsx
index c6f53b067..ab3d40bb9 100644
--- a/src/globalState/provider/LegalLinksProvider.tsx
+++ b/src/globalState/provider/LegalLinksProvider.tsx
@@ -1,5 +1,5 @@
import { createContext, ReactNode, useCallback, useMemo } from 'react';
-import { LegalLinkInterface } from '../interfaces/LegalLinkInterface';
+import { LegalLinkInterface } from '../interfaces';
import * as React from 'react';
import { useAppConfig } from '../../hooks/useAppConfig';
@@ -44,7 +44,7 @@ export function LegalLinksProvider({
const legalLinks = useMemo(
() =>
- (externalLegalLinks ?? settings.legalLinks ?? []).map(
+ (externalLegalLinks ?? settings?.legalLinks ?? []).map(
({ url, ...legalLink }) => ({
...legalLink,
getUrl: (params: {
@@ -58,7 +58,7 @@ export function LegalLinksProvider({
)
})
),
- [externalLegalLinks, settings.legalLinks, getUrl]
+ [externalLegalLinks, settings?.legalLinks, getUrl]
);
return (
diff --git a/src/globalState/provider/RegistrationProvider.tsx b/src/globalState/provider/RegistrationProvider.tsx
new file mode 100644
index 000000000..e714e6a7f
--- /dev/null
+++ b/src/globalState/provider/RegistrationProvider.tsx
@@ -0,0 +1,260 @@
+import {
+ createContext,
+ Dispatch,
+ PropsWithChildren,
+ SetStateAction,
+ useCallback,
+ useContext,
+ useEffect,
+ useMemo,
+ useState
+} from 'react';
+import * as React from 'react';
+import { AgencyDataInterface, TopicsDataInterface } from '../interfaces';
+import { UrlParamsContext } from './UrlParamsProvider';
+import { getUrlParameter } from '../../utils/getUrlParameter';
+import { apiGetTopicById } from '../../api/apiGetTopicId';
+import { apiGetAgencyById } from '../../api';
+import { TopicSelection } from '../../extensions/components/registration/topicSelection/TopicSelection';
+import { ZipcodeInput } from '../../extensions/components/registration/zipcodeInput/ZipcodeInput';
+import { AgencySelection } from '../../extensions/components/registration/agencySelection/AgencySelection';
+import { AccountData } from '../../extensions/components/registration/accountData/AccountData';
+import { RouteProps, useRouteMatch } from 'react-router-dom';
+
+export const RegistrationContext = createContext(
+ {}
+);
+
+interface SessionStorageData {
+ username: string;
+ password: string;
+ agencyId: number;
+ mainTopicId: number;
+ topicGroupId?: number;
+ topicId?: number;
+ zipcode: string;
+}
+
+export interface RegistrationData extends SessionStorageData {
+ agency: AgencyDataInterface;
+ mainTopic: TopicsDataInterface;
+ topic?: TopicsDataInterface;
+}
+
+interface RegistrationContextInterface {
+ disabledNextButton?: boolean;
+ setDisabledNextButton?: Dispatch>;
+ registrationData?: RegistrationData;
+ updateRegistrationData?: (data: Partial) => void;
+ availableSteps?: {
+ component: any;
+ route: Omit & { path: string };
+ name: string;
+ //urlSuffix?: string;
+ mandatoryFields?: string[];
+ urlParams?: string[];
+ }[];
+ hasConsultantError?: boolean;
+ hasAgencyError?: boolean;
+ hasTopicError?: boolean;
+}
+
+export const registrationSessionStorageKey = 'registrationData';
+
+export function RegistrationProvider({ children }: PropsWithChildren<{}>) {
+ const getSessionStorageData = (): SessionStorageData =>
+ JSON.parse(
+ sessionStorage.getItem(registrationSessionStorageKey) || '{}'
+ );
+ const setSessionStorageData = (data: Partial) =>
+ sessionStorage.setItem(
+ registrationSessionStorageKey,
+ JSON.stringify(data)
+ );
+
+ const { url } = useRouteMatch();
+
+ const [disabledNextButton, setDisabledNextButton] = useState(true);
+ const [hasTopicError, setHasTopicError] = useState(false);
+ const [hasAgencyError, setHasAgencyError] = useState(false);
+ const [hasConsultantError, setHasConsultantError] =
+ useState(false);
+ const [registrationData, setRegistrationData] =
+ useState();
+
+ const preselectedTopicId = getUrlParameter('tid');
+ const preselectedAgencyId = getUrlParameter('aid');
+ const preselectedConsultantId = getUrlParameter('cid');
+ const {
+ loaded,
+ agency: preselectedAgency,
+ topic: preselectedTopic,
+ zipcode: preselectedZipcode,
+ consultant: preselectedConsultant
+ } = useContext(UrlParamsContext);
+
+ const defaultSteps = useMemo(
+ () => [
+ {
+ component: TopicSelection,
+ name: 'topic-selection',
+ route: {
+ path: `${url}/topic-selection`,
+ exact: true
+ },
+ mandatoryFields: ['mainTopic'],
+ condition: ({ topic }) => !!topic
+ },
+ {
+ component: ZipcodeInput,
+ name: 'zipcode',
+ route: {
+ path: `${url}/zipcode`,
+ exact: true
+ },
+ mandatoryFields: ['zipcode'],
+ condition: ({ zipcode }) => !!zipcode
+ },
+ {
+ component: AgencySelection,
+ name: 'agency-selection',
+ route: {
+ path: `${url}/agency-selection`,
+ exact: true
+ },
+ mandatoryFields: ['agency'],
+ condition: ({ agency }) => !!agency
+ },
+ {
+ component: AccountData,
+ name: 'account-data',
+ route: {
+ path: `/account-data`,
+ exact: true
+ },
+ mandatoryFields: ['username', 'password']
+ }
+ ],
+ [url]
+ );
+ const [availableSteps, setAvailableSteps] = useState(defaultSteps);
+
+ // Init already stored data from session storage
+ useEffect(() => {
+ (async () => {
+ const registrationData =
+ getSessionStorageData() as RegistrationData;
+ if (registrationData.mainTopicId) {
+ registrationData.mainTopic = await apiGetTopicById(
+ registrationData.mainTopicId
+ );
+ }
+ if (registrationData.agencyId) {
+ // Load agency
+ registrationData.agency = await apiGetAgencyById(
+ registrationData.agencyId
+ );
+ }
+ if (registrationData.topicId) {
+ registrationData.topic = await apiGetTopicById(
+ registrationData.topicId
+ );
+ }
+ setRegistrationData(registrationData);
+ })();
+ }, []);
+
+ const updateRegistrationData = useCallback(
+ (data?: Partial) => {
+ setRegistrationData((registrationData) => ({
+ ...registrationData,
+ ...data
+ }));
+ },
+ []
+ );
+
+ useEffect(() => {
+ const { topic, mainTopic, agency, ...sessionStorageData } =
+ registrationData || {};
+
+ setSessionStorageData({
+ ...sessionStorageData,
+ topicId: topic?.id,
+ mainTopicId: mainTopic?.id,
+ agencyId: agency?.id
+ });
+ }, [registrationData]);
+
+ useEffect(() => {
+ // Check if agency matches preselected topic
+ const hasTopicError = preselectedTopicId && !preselectedTopic;
+
+ // Check if agency matches preselected topic
+ const hasAgencyError =
+ preselectedAgencyId && preselectedTopic && !preselectedAgency;
+
+ setHasConsultantError(
+ preselectedConsultantId && !preselectedConsultant
+ );
+ setHasTopicError(hasTopicError);
+ setHasAgencyError(hasAgencyError);
+
+ updateRegistrationData({
+ ...(preselectedZipcode ? { zipcode: preselectedZipcode } : {}),
+ ...(preselectedAgency ? { agency: preselectedAgency } : {}),
+ ...(preselectedTopic ? { mainTopic: preselectedTopic } : {})
+ });
+
+ setAvailableSteps(
+ defaultSteps.filter(
+ (step) =>
+ !step.condition?.({
+ agency: preselectedAgency,
+ topic: preselectedTopic,
+ zipcode: preselectedZipcode
+ })
+ )
+ );
+ }, [
+ updateRegistrationData,
+ preselectedAgencyId,
+ preselectedConsultantId,
+ preselectedTopicId,
+ defaultSteps,
+ preselectedTopic,
+ preselectedAgency,
+ preselectedZipcode,
+ preselectedConsultant
+ ]);
+
+ const context = useMemo(
+ () => ({
+ disabledNextButton,
+ setDisabledNextButton,
+ registrationData,
+ updateRegistrationData: updateRegistrationData,
+ availableSteps,
+ hasConsultantError,
+ hasAgencyError,
+ hasTopicError
+ }),
+ [
+ availableSteps,
+ disabledNextButton,
+ hasAgencyError,
+ hasConsultantError,
+ hasTopicError,
+ registrationData,
+ updateRegistrationData
+ ]
+ );
+
+ if (!loaded) return null;
+
+ return (
+
+ {children}
+
+ );
+}
diff --git a/src/globalState/provider/RocketChatSubscriptionsProvider.tsx b/src/globalState/provider/RocketChatSubscriptionsProvider.tsx
index f18774a14..2c6180eb4 100644
--- a/src/globalState/provider/RocketChatSubscriptionsProvider.tsx
+++ b/src/globalState/provider/RocketChatSubscriptionsProvider.tsx
@@ -9,7 +9,6 @@ import {
useState
} from 'react';
import { getValueFromCookie } from '../../components/sessionCookie/accessSessionCookie';
-import { RocketChatContext } from '../index';
import {
EVENT_NOTIFICATION,
EVENT_ROOMS_CHANGED,
@@ -23,6 +22,7 @@ import { ISubscriptions } from '../../types/rc/Subscriptions';
import { IRoom } from '../../types/rc/Room';
import useDebounceCallback from '../../hooks/useDebounceCallback';
import { apiPostError, ERROR_LEVEL_WARN } from '../../api/apiPostError';
+import { RocketChatContext } from './RocketChatProvider';
type RocketChatSubscriptionsContextProps = {
subscriptionsReady: boolean;
diff --git a/src/globalState/provider/SessionsDataProvider.tsx b/src/globalState/provider/SessionsDataProvider.tsx
index e2873caff..b7a8bdf85 100644
--- a/src/globalState/provider/SessionsDataProvider.tsx
+++ b/src/globalState/provider/SessionsDataProvider.tsx
@@ -68,7 +68,7 @@ function reducer(
case UPDATE_SESSIONS: {
const { sessions } = action;
const newSessions = [...state.sessions];
- sessions.forEach((s) => {
+ (sessions ?? []).forEach((s) => {
const newChatItem = getChatItemForSession(s);
const index = newSessions.findIndex((s) => {
const chatItem = getChatItemForSession(s);
@@ -90,7 +90,7 @@ function reducer(
case REMOVE_SESSIONS: {
const { ids } = action;
const newSessions = [...state.sessions];
- ids.forEach((id) => {
+ (ids ?? []).forEach((id) => {
const index = newSessions.findIndex((s) => {
const chatItem = getChatItemForSession(s);
return chatItem.id === id || chatItem.groupId === id;
diff --git a/src/globalState/provider/TopicsProvider.tsx b/src/globalState/provider/TopicsProvider.tsx
new file mode 100644
index 000000000..e634372ed
--- /dev/null
+++ b/src/globalState/provider/TopicsProvider.tsx
@@ -0,0 +1,65 @@
+import * as React from 'react';
+import {
+ createContext,
+ useState,
+ useContext,
+ useEffect,
+ useCallback
+} from 'react';
+import { TopicsDataInterface } from '../interfaces';
+import { apiGetTopicsData } from '../../api/apiGetTopicsData';
+import { LocaleContext } from '../context/LocaleContext';
+
+export const TopicsContext = createContext<{
+ topics: Array;
+ refreshTopics: () => void;
+}>(null);
+
+export function TopicsProvider(props) {
+ const [topics, setTopics] = useState>();
+ const { locale } = useContext(LocaleContext);
+
+ const refreshTopics = useCallback(() => {
+ apiGetTopicsData()
+ .then((topics) => setTopics(topics))
+ .catch(() => setTopics([]));
+ }, []);
+
+ useEffect(() => {
+ refreshTopics();
+ }, [refreshTopics, locale]);
+
+ if (topics === undefined) return null;
+
+ return (
+
+ {props.children}
+
+ );
+}
+
+export function getTopics(topics: Array, id?: number) {
+ if (id == null) {
+ return undefined;
+ }
+
+ const topic = topics.find((cur) => cur.id === id);
+ if (!topic) {
+ throw new Error(`No topic found for id "${id}".`);
+ }
+
+ return topic;
+}
+
+export function useTopics() {
+ const { topics } = useContext(TopicsContext);
+ if (!topics) {
+ throw new Error('`TopicsProvider` was not initialized.');
+ }
+
+ return topics;
+}
+
+export function useTopic(id?: number) {
+ return getTopics(useTopics(), id);
+}
diff --git a/src/globalState/provider/UrlParamsProvider.tsx b/src/globalState/provider/UrlParamsProvider.tsx
index 3fd5f664e..236ece2c2 100644
--- a/src/globalState/provider/UrlParamsProvider.tsx
+++ b/src/globalState/provider/UrlParamsProvider.tsx
@@ -20,13 +20,15 @@ export const UrlParamsContext = createContext<{
topic: TopicsDataInterface | null;
loaded: boolean;
slugFallback: string;
+ zipcode: string;
}>({
agency: null,
consultingType: null,
consultant: null,
topic: null,
loaded: false,
- slugFallback: undefined
+ slugFallback: undefined,
+ zipcode: undefined
});
export const UrlParamsProvider = ({ children }: PropsWithChildren<{}>) => {
@@ -35,8 +37,15 @@ export const UrlParamsProvider = ({ children }: PropsWithChildren<{}>) => {
() => (document.location.href = settings.urls.toRegistration),
[settings.urls.toRegistration]
);
- const { agency, consultingType, consultant, topic, loaded, slugFallback } =
- useUrlParamsLoader(handleBadRequest);
+ const {
+ agency,
+ consultingType,
+ consultant,
+ topic,
+ loaded,
+ slugFallback,
+ zipcode
+ } = useUrlParamsLoader(handleBadRequest);
const context = useMemo(
() => ({
@@ -45,9 +54,18 @@ export const UrlParamsProvider = ({ children }: PropsWithChildren<{}>) => {
consultant,
topic,
loaded,
- slugFallback
+ slugFallback,
+ zipcode
}),
- [agency, consultingType, consultant, topic, loaded, slugFallback]
+ [
+ agency,
+ consultingType,
+ consultant,
+ topic,
+ loaded,
+ slugFallback,
+ zipcode
+ ]
);
return (
diff --git a/src/globalState/state.tsx b/src/globalState/state.tsx
index 91aa2a867..059f53280 100644
--- a/src/globalState/state.tsx
+++ b/src/globalState/state.tsx
@@ -12,7 +12,8 @@ import {
AnonymousConversationStartedProvider,
SessionsDataProvider,
ModalProvider,
- AgencySpecificProvider
+ AgencySpecificProvider,
+ TopicsProvider
} from '.';
function ProviderComposer({ contexts, children }) {
@@ -33,6 +34,7 @@ function ContextProvider({ children }) {
,
,
,
+ ,
,
,
,
diff --git a/src/hooks/useJoinGroupChat.ts b/src/hooks/useJoinGroupChat.ts
index a61269051..aa4a03677 100644
--- a/src/hooks/useJoinGroupChat.ts
+++ b/src/hooks/useJoinGroupChat.ts
@@ -1,5 +1,5 @@
import { useCallback } from 'react';
-import { apiPutGroupChat, GROUP_CHAT_API } from '../api/apiPutGroupChat';
+import { apiPutGroupChat, GROUP_CHAT_API } from '../api';
import { useTenant } from '../globalState';
export const useJoinGroupChat = () => {
@@ -7,11 +7,11 @@ export const useJoinGroupChat = () => {
const joinGroupChat = useCallback(
(gcid: string) => {
- if (tenantData?.settings.featureGroupChatV2Enabled && gcid) {
+ if (tenantData?.settings?.featureGroupChatV2Enabled && gcid) {
apiPutGroupChat(gcid, GROUP_CHAT_API.ASSIGN).then();
}
},
- [tenantData?.settings.featureGroupChatV2Enabled]
+ [tenantData]
);
return {
diff --git a/src/resources/img/illustrations/consultant-found.svg b/src/resources/img/illustrations/consultant-found.svg
new file mode 100644
index 000000000..622bec66a
--- /dev/null
+++ b/src/resources/img/illustrations/consultant-found.svg
@@ -0,0 +1,15 @@
+
diff --git a/src/resources/img/illustrations/hello-banner.svg b/src/resources/img/illustrations/hello-banner.svg
new file mode 100644
index 000000000..949d2699a
--- /dev/null
+++ b/src/resources/img/illustrations/hello-banner.svg
@@ -0,0 +1,31 @@
+
diff --git a/src/resources/img/illustrations/no-results.svg b/src/resources/img/illustrations/no-results.svg
new file mode 100644
index 000000000..68e206623
--- /dev/null
+++ b/src/resources/img/illustrations/no-results.svg
@@ -0,0 +1,24 @@
+
diff --git a/src/resources/scripts/config.ts b/src/resources/scripts/config.ts
index ba5196fea..d4541d89c 100644
--- a/src/resources/scripts/config.ts
+++ b/src/resources/scripts/config.ts
@@ -18,7 +18,7 @@ export const config: AppConfigInterface = {
enableWalkthrough: false, // Feature flag to enable walkthrough (false by default here & true in the theme repo)
disableVideoAppointments: false, // Feature flag to enable Video-Termine page
multitenancyWithSingleDomainEnabled: false, // Feature flag to enable the multi tenancy with a single domain ex: lands
- useTenantService: false,
+ useTenantService: true,
useApiClusterSettings: true, // Feature flag to enable the cluster use the cluster settings instead of the config file
mainTenantSubdomainForSingleDomainMultitenancy: 'app',
attachmentEncryption: true, // Feature flag for attachment end to end encryption - e2e must also be enabled in rocket.chat
diff --git a/src/resources/scripts/endpoints.ts b/src/resources/scripts/endpoints.ts
index 4c6ee5651..fb0cba15a 100644
--- a/src/resources/scripts/endpoints.ts
+++ b/src/resources/scripts/endpoints.ts
@@ -106,6 +106,7 @@ export const endpoints = {
registerAnonymousAsker:
apiUrl + '/service/conversations/askers/anonymous/new',
registerAsker: apiUrl + '/service/users/askers/new',
+ baseUserService: apiUrl + '/service/users',
registerAskerNewConsultingType:
apiUrl + '/service/users/askers/consultingType/new',
rejectVideoCall: apiUrl + '/service/videocalls/reject',
@@ -121,6 +122,7 @@ export const endpoints = {
teamSessionsBase:
apiUrl + '/service/conversations/consultants/teamsessions/',
tenantServiceBase: apiUrl + '/service/tenant',
+ topicGroups: apiUrl + '/service/topic-groups/',
topicsData: apiUrl + '/service/topic/public/',
twoFactorAuth: apiUrl + '/service/users/2fa',
twoFactorAuthApp: apiUrl + '/service/users/2fa/app',
diff --git a/src/resources/styles/mui-variables-mapping.scss b/src/resources/styles/mui-variables-mapping.scss
new file mode 100644
index 000000000..0c339ea95
--- /dev/null
+++ b/src/resources/styles/mui-variables-mapping.scss
@@ -0,0 +1,38 @@
+// Mui only accepts css variables, here is a mapping for needed scss variables to css variable
+
+:root {
+ --font-family-sans-serif: #{$font-family-sans-serif};
+ --font-family-divider: #{$font-family-sans-serif};
+ --font-weight-light: #{$font-weight-light};
+ --font-weight-regular: #{$font-weight-regular};
+ --font-weight-medium: #{$font-weight-medium};
+ --font-weight-bold: #{$font-weight-bold};
+ --white: #{$white};
+ --primary: #{$primary};
+ --background-light: #{$background-light};
+ --background-lighter: #{$background-lighter};
+ --button-border-radius: #{$button-border-radius};
+ --hover-primary: #{$hover-primary};
+ --secondary: #{$secondary};
+ --primary-3: #{$primary-3};
+ --tertiary: #{$tertiary};
+ --black: #{$black};
+ --form-error: #{$form-error};
+ --form-success: #{$form-success};
+ --font-size-h1: #{$font-size-h1};
+ --font-size-h2: #{$font-size-h2};
+ --font-size-h3: #{$font-size-h3};
+ --font-size-h4: #{$font-size-h4};
+ --font-size-h5: #{$font-size-h5};
+ --font-size-super-large: #{$font-size-super-large};
+ --font-size-super-mobile: #{$font-size-super-mobile};
+ --font-size-h1-mobile: #{$font-size-h1-mobile};
+ --font-size-primary: #{$font-size-primary};
+ --font-size-secondary: #{$font-size-secondary};
+ --font-size-tertiary: #{$font-size-tertiary};
+ --line-height-primar: #{$line-height-primary};
+ --line-height-secondary: #{$line-height-secondary};
+ --line-height-tertiary: #{$line-height-tertiary};
+ --line-height-quaternary: #{$line-height-quaternary};
+ --line-size-subheadline: #{$font-size-subheadline};
+}
diff --git a/src/utils/loadConsultingTypesForAgencies.ts b/src/utils/loadConsultingTypesForAgencies.ts
index 09a183fea..594f3f5f1 100644
--- a/src/utils/loadConsultingTypesForAgencies.ts
+++ b/src/utils/loadConsultingTypesForAgencies.ts
@@ -6,7 +6,9 @@ export const loadConsultingTypesForAgencies = async (
): Promise => {
// Get unique consultingTypes to prevent multiple requests to api
const uniqueConsultingTypeIds = [
- ...new Set(agencies.map((a) => a?.consultingType).filter(Boolean))
+ ...new Set(
+ agencies.map((a) => a?.consultingType).filter((ct) => ct !== null)
+ )
];
return Promise.all(
diff --git a/src/utils/useUrlParamsLoader.tsx b/src/utils/useUrlParamsLoader.tsx
index 6005dddb2..99f052278 100644
--- a/src/utils/useUrlParamsLoader.tsx
+++ b/src/utils/useUrlParamsLoader.tsx
@@ -18,14 +18,17 @@ import { apiGetTopicsData } from '../api/apiGetTopicsData';
export default function useUrlParamsLoader(handleBadRequest?: () => void) {
const { setLocale } = useContext(LocaleContext);
- const { consultingTypeSlug } = useParams<{
+ const { consultingTypeSlug, topicSlug } = useParams<{
consultingTypeSlug: string;
+ topicSlug: string;
}>();
const settings = useAppConfig();
const agencyId = getUrlParameter('aid');
const consultantId = getUrlParameter('cid');
const topicIdOrName = getUrlParameter('tid');
const language = getUrlParameter('lang');
+ const zipcodeParam =
+ getUrlParameter('zipcode') || getUrlParameter('postcode');
const [consultingType, setConsultingType] =
useState(null);
@@ -35,22 +38,29 @@ export default function useUrlParamsLoader(handleBadRequest?: () => void) {
const [loaded, setLoaded] = useState(false);
const [topic, setTopic] = useState(null);
const [slugFallback, setSlugFallback] = useState();
+ const [zipcode, setZipcode] = useState();
const loadTopic = useCallback(
async (agency) => {
let topic = null;
if (isNumber(topicIdOrName)) {
topic = await apiGetTopicById(topicIdOrName).catch(() => null);
- } else if (isString(topicIdOrName)) {
+ } else if (isString(topicIdOrName) || isString(topicSlug)) {
topic = await apiGetTopicsData()
.then(
(allTopics) =>
allTopics.find(
(topic) =>
- topic.name?.toLowerCase() ===
- decodeURIComponent(
- topicIdOrName.toLowerCase()
- )
+ (topicIdOrName &&
+ topic.name?.toLowerCase() ===
+ decodeURIComponent(
+ topicIdOrName.toLowerCase()
+ )) ||
+ (topicSlug &&
+ topic.slug?.toLowerCase() ===
+ decodeURIComponent(
+ topicSlug.toLowerCase()
+ ))
) || null
)
.catch(() => null);
@@ -67,7 +77,7 @@ export default function useUrlParamsLoader(handleBadRequest?: () => void) {
return [agency, topic];
},
- [topicIdOrName]
+ [topicIdOrName, topicSlug]
);
const handleConsultant = useCallback(
@@ -123,7 +133,7 @@ export default function useUrlParamsLoader(handleBadRequest?: () => void) {
} else if (
// If the consultingType does not match the consultant's consultingTypes, set the consultingType to null
!consultant.agencies.some(
- (a) =>
+ (a: AgencyDataInterface) =>
!consultingType ||
a.consultingType === consultingType?.id
)
@@ -172,7 +182,7 @@ export default function useUrlParamsLoader(handleBadRequest?: () => void) {
}
}
- if (topicIdOrName !== null) {
+ if (topicIdOrName !== null || topicSlug) {
[agency, topic] = await loadTopic(agency);
}
@@ -197,6 +207,11 @@ export default function useUrlParamsLoader(handleBadRequest?: () => void) {
return;
}
+ const zipcodeRegex = new RegExp(/^(0[1-9]|[1-9]\d)\d{3}$/);
+ if (zipcodeParam && zipcodeRegex.test(zipcodeParam)) {
+ setZipcode(zipcodeParam);
+ }
+
setTopic(topic);
setConsultant(consultant);
setConsultingType(consultingType);
@@ -211,6 +226,8 @@ export default function useUrlParamsLoader(handleBadRequest?: () => void) {
agencyId,
consultantId,
topicIdOrName,
+ topicSlug,
+ zipcodeParam,
settings.multitenancyWithSingleDomainEnabled,
settings.urls.toRegistration,
settings?.registration?.useConsultingTypeSlug,
@@ -225,5 +242,13 @@ export default function useUrlParamsLoader(handleBadRequest?: () => void) {
}
}, [language, setLocale]);
- return { agency, consultant, consultingType, loaded, topic, slugFallback };
+ return {
+ agency,
+ consultant,
+ consultingType,
+ loaded,
+ topic,
+ slugFallback,
+ zipcode
+ };
}
diff --git a/src/utils/validateInputValue.ts b/src/utils/validateInputValue.ts
index 0a324a26f..ed0c9a4bf 100644
--- a/src/utils/validateInputValue.ts
+++ b/src/utils/validateInputValue.ts
@@ -1,15 +1,15 @@
-const hasNumber = (value: string) => {
+export const hasNumber = (value: string) => {
return new RegExp(/[0-9]/).test(value);
};
-const hasMixedLetters = (value: string) => {
+export const hasMixedLetters = (value: string) => {
return (
new RegExp(/[a-zßäöü]/).test(value) &&
new RegExp(/[A-ZÄÖÜ]/).test(value)
);
};
-const hasSpecialChar = (value: string) => {
+export const hasSpecialChar = (value: string) => {
return new RegExp(/[^a-zßäöüA-ZÄÖÜ0-9]/).test(value);
};
diff --git a/tsconfig.json b/tsconfig.json
index dfe7834bb..1fba7b53e 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -21,7 +21,7 @@
"downlevelIteration": true,
"typeRoots": ["node_modules/@types"]
},
- "include": ["src"],
+ "include": ["src", "cypress/support", ".storybook"],
"exclude": ["node_modules", "src/extensions/cypress/**/*.cy.ts"],
"ts-node": {
"compilerOptions": {