From 5d25cd68088694dd2ccd8d3644eb6b8d60a7dddf Mon Sep 17 00:00:00 2001 From: Marc Itzenthaler Date: Sat, 27 Jan 2024 12:06:50 +0100 Subject: [PATCH] feat: improved extension logic to be able to import original file in extension --- .github/workflows/build.yml | 11 + config/webpack.config.js | 81 +- cypress/e2e/appointments.cy.ts | 148 +- cypress/e2e/videoconference.cy.ts | 2 +- cypress/support/commands.ts | 2 +- cypress/support/commands/appointments.ts | 4 +- cypress/support/commands/askerSessions.ts | 2 +- .../support/commands/consultantSessions.ts | 2 +- cypress/support/commands/login.ts | 2 +- cypress/support/commands/messages.ts | 2 +- cypress/support/index.d.ts | 45 + cypress/support/sessions.ts | 2 +- cypress/support/websocket.ts | 39 +- package-lock.json | 145 +- package.json | 17 +- src/api/apiAgencyLanguages.ts | 2 +- src/api/apiAgencySelection.ts | 5 +- src/api/apiFrontendSettings.ts | 2 +- src/api/apiGetAgencyId.ts | 2 +- ...ppointmentsServiceBookingEventsByUserId.ts | 2 +- src/api/apiGetChatRoomById.ts | 2 +- src/api/apiGetConsultant.ts | 2 +- src/api/apiGetConsultantAppointments.ts | 2 +- src/api/apiGetConsultantSessionList.ts | 2 +- src/api/apiGetConsultingType.ts | 2 +- src/api/apiGetConsultingTypes.ts | 2 +- src/api/apiGetGroupMembers.ts | 10 - src/api/apiGetSessionRooms.ts | 2 +- src/api/apiGetTenantTheming.ts | 2 +- src/api/apiGetTools.ts | 2 +- src/api/apiGetTopicId.ts | 2 +- src/api/apiGetTopicsData.ts | 2 +- src/api/apiGetUserData.ts | 2 +- src/api/apiGetUserDataBySessionId.ts | 8 +- src/api/apiPostRegistration.ts | 2 +- src/api/apiServerSettings.ts | 2 +- src/api/appointments/deleteAppointment.ts | 2 +- src/api/appointments/getAppointment.ts | 2 +- src/api/appointments/getAppointments.ts | 2 +- src/api/appointments/postAppointments.ts | 2 +- src/api/appointments/putAppointment.ts | 2 +- src/api/index.ts | 1 - src/api/videocalls/getJwt.ts | 2 +- .../E2EEncryptionSupportBanner.tsx | 2 +- src/components/agencySelection/AgencyInfo.tsx | 2 +- .../agencySelection/AgencySelection.tsx | 62 +- src/components/app/RocketChat.ts | 1 + src/components/app/RouterConfig.tsx | 7 +- src/components/app/app.tsx | 6 +- src/components/askerInfo/AskerInfo.tsx | 89 +- src/components/askerInfo/AskerInfoAssign.tsx | 13 +- src/components/askerInfo/AskerInfoContent.tsx | 71 + src/components/askerInfo/AskerInfoData.tsx | 13 +- src/components/askerInfo/AskerInfoTools.tsx | 4 +- .../askerInfo/AskerInfoToolsOptions.tsx | 1 - .../askerInfo/askerInfoAssign.styles.scss | 5 - src/components/box/Box.tsx | 28 +- src/components/box/box.module.scss | 36 + src/components/box/box.styles.scss | 11 - src/components/checkbox/Checkbox.tsx | 2 + .../ConsultingTypeAgencySelection.tsx | 3 +- src/components/devToolbar/DevToolbar.tsx | 2 +- .../downloadICSFile.styles.scss | 4 + src/components/enquiry/WriteEnquiry.tsx | 8 +- src/components/error/Error.tsx | 4 +- .../formAccordion/FormAccordion.tsx | 8 +- .../FormAccordionRegistrationText.tsx | 2 +- src/components/groupChat/GroupChatInfo.tsx | 511 ++-- .../groupChat/JoinGroupChatView.tsx | 12 +- src/components/login/Login.tsx | 2 +- src/components/message/MessageDisplayName.tsx | 2 +- .../message/MessageItemComponent.tsx | 10 +- src/components/message/MessageMetaData.tsx | 4 +- .../messageSubmitInterfaceComponent.tsx | 23 +- .../useDraftMessage.tsx | 3 +- .../profile/AskerConsultingTypeData.tsx | 1 + src/components/profile/AskerRegistration.tsx | 1 + ...AskerRegistrationExternalAgencyOverlay.tsx | 3 +- src/components/profile/profile.routes.ts | 11 +- src/components/profile/profileHelp.routes.ts | 2 +- src/components/profile/profileHelpers.ts | 6 +- .../profile/profileSettings.routes.ts | 7 +- src/components/registration/Registration.tsx | 4 + .../registration/RegistrationForm.tsx | 9 +- src/components/registration/WelcomeScreen.tsx | 2 +- .../serviceExplanation/ServiceExplanation.tsx | 4 +- src/components/session/AcceptAssign.tsx | 2 +- src/components/session/AcceptLiveChatView.tsx | 9 +- .../session/SessionItemComponent.tsx | 16 +- src/components/session/SessionStream.tsx | 6 +- src/components/session/SessionView.tsx | 32 +- .../session/SubscriptionKeyLost.tsx | 2 +- src/components/session/sessionHelpers.ts | 2 +- .../sessionAssign/RequestSessionAssign.tsx | 6 +- .../sessionAssign/SessionAssign.tsx | 4 +- .../sessionHeader/GroupChatHeader/index.tsx | 215 +- .../useStartVideoCall/index.ts | 3 +- .../sessionHeader/SessionHeaderComponent.tsx | 74 +- src/components/sessionMenu/SessionMenu.tsx | 20 +- src/components/sessionsList/SessionsList.tsx | 13 +- .../SessionListItemComponent.tsx | 12 +- .../termsandconditions/TermsAndConditions.tsx | 9 +- src/components/text/Text.tsx | 3 + .../twoFactorAuth/twoFactorAuth.styles.scss | 14 +- .../bookings/components/Booking/booking.tsx | 6 +- .../components/Calcom/cal.styles.scss | 8 +- .../NoBookings/noBookingsBooked.tsx | 7 +- .../bookings/components/booking.styles.scss | 53 +- .../hooks/useAskerHasAssignedConsultant.ts | 4 +- .../components/SessionCard/SessionCard.tsx | 10 +- .../components/AgencySelection/index.tsx | 2 +- .../ConsultingTypeSelection/index.tsx | 3 +- .../components/FallbackInformation/index.tsx | 2 +- .../components/NoAgencyFound/index.tsx | 2 +- .../PreSelectedAgency/PreselectedAgency.tsx | 2 +- .../ProposedAgencies/ProposedAgencies.tsx | 2 +- .../hooks/useAgenciesForRegistration.ts | 8 +- ...useConsultantAgenciesAndConsultingTypes.ts | 2 +- src/globalState/helpers/stateHelpers.ts | 13 +- src/globalState/index.ts | 12 +- .../AppConfig/AppConfigInterface.ts | 8 + .../ConsultingSessionDataInterface.ts | 22 + src/globalState/interfaces/index.ts | 17 + .../provider/ActiveSessionProvider.tsx | 23 +- .../RocketChatUsersOfRoomProvider.tsx | 124 +- .../provider/UrlParamsProvider.tsx | 6 +- src/hooks/useAppConfig.tsx | 3 +- src/hooks/useBrowserNotification.ts | 2 +- src/hooks/useE2EE.tsx | 13 +- src/hooks/useUserMutate.ts | 3 +- src/i18n.ts | 2 +- src/resources/i18n/de/common.json | 1421 +++++---- src/resources/i18n/de/consultingTypes.json | 292 +- src/resources/i18n/de@informal/common.json | 628 ++-- src/resources/i18n/en/common.json | 2547 ++++++++--------- src/resources/i18n/en/consultingTypes.json | 390 +-- src/resources/scripts/config.ts | 26 +- src/utils/appConfig.ts | 2 +- src/utils/tenantSettingsHelper.ts | 2 +- src/utils/transformBookingData.ts | 2 +- src/utils/useTenantTheming.ts | 2 +- src/utils/useTyping.ts | 2 +- src/utils/useUrlParamsLoader.tsx | 6 +- src/utils/videoCallHelpers.ts | 5 +- 144 files changed, 4065 insertions(+), 3638 deletions(-) create mode 100644 cypress/support/index.d.ts delete mode 100644 src/api/apiGetGroupMembers.ts create mode 100644 src/components/askerInfo/AskerInfoContent.tsx delete mode 100644 src/components/askerInfo/askerInfoAssign.styles.scss create mode 100644 src/components/box/box.module.scss delete mode 100644 src/components/box/box.styles.scss create mode 100644 src/globalState/interfaces/ConsultingSessionDataInterface.ts create mode 100644 src/globalState/interfaces/index.ts diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 985deda62..a086bb833 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,6 +32,17 @@ jobs: node-version: 18 registry-url: 'https://npm.pkg.github.com' cache: 'npm' + - name: Get npm cache directory + id: npm-cache-dir + shell: bash + run: echo "dir=$(npm config get cache)" >> ${GITHUB_OUTPUT} + - name: Cache npm dependencies + uses: actions/cache@v4 + with: + path: ${{ steps.npm-cache-dir.outputs.dir }} + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- - name: Load .env file uses: xom9ikk/dotenv@v2 with: diff --git a/config/webpack.config.js b/config/webpack.config.js index a1610b2e3..64e969541 100644 --- a/config/webpack.config.js +++ b/config/webpack.config.js @@ -91,26 +91,6 @@ const getTemplate = (templatePath) => { return path.resolve(paths.appSrc, templatePath); }; -const localAliases = (paths) => - paths - // Remove paths which are not overridden - .filter((localPath) => { - const fullPath = path.resolve(process.cwd(), `./${localPath}`); - try { - fs.statSync(fullPath); - return true; - } catch (error) { - return false; - } - }) - .map( - (localPath) => - new webpack.NormalModuleReplacementPlugin( - new RegExp(localPath), - path.resolve(process.cwd(), `./${localPath}`) - ) - ); - // This is the production and development configuration. // It is focused on developer experience, fast rebuilds, and a minimal bundle. module.exports = function (webpackEnv) { @@ -845,34 +825,51 @@ module.exports = function (webpackEnv) { fs.existsSync(`${newPath}${originalExt}`) && !fs.lstatSync(`${newPath}${originalExt}`).isDirectory() ) { - console.log( - `Overwritten ${originalPath} -> ${newPath}${originalExt}` - ); + // Skip override logic if issuer is itself + if ( + result.contextInfo.issuer === + `${newPath}${originalExt}` + ) { + console.log( + `Self reference ${originalPath} -> ${newPath}${originalExt}` + ); + return; + } if (result.createData) { - result.createData.resource = `${newPath}${originalExt}`; - result.createData.context = path.dirname( - `${newPath}.${originalExt}` + console.log( + `Overwritten ${originalPath} -> ${newPath}${originalExt}` + ); + result.request = result.request.replace( + originalPath, + `${newPath}${originalExt}` + ); + result.context = path.dirname( + `${newPath}${originalExt}` + ); + if (result.createData.request) { + result.createData.resource = + result.createData.resource.replace( + paths.appSrc, + paths.appExtensions + ); + result.createData.request = + result.createData.request.replace( + originalPath, + `${newPath}` + ); + result.createData.context = path.dirname( + `${newPath}${originalExt}` + ); + } + } else { + console.log( + `No createData ${originalPath} -> ${newPath}${originalExt}` ); } } } - ), - ...localAliases([ - 'src/resources/img/illustrations/answer.svg', - 'src/resources/img/illustrations/arrow.svg', - 'src/resources/img/illustrations/bad-request.svg', - 'src/resources/img/illustrations/check.svg', - 'src/resources/img/illustrations/consultant.svg', - 'src/resources/img/illustrations/envelope-check.svg', - 'src/resources/img/illustrations/internal-server-error.svg', - 'src/resources/img/illustrations/not-found.svg', - 'src/resources/img/illustrations/unauthorized.svg', - 'src/resources/img/illustrations/waiting.svg', - 'src/resources/img/illustrations/waving.svg', - 'src/resources/img/illustrations/welcome.svg', - 'src/resources/img/illustrations/x.svg' - ]) + ) ].filter(Boolean), // Turn off performance processing because we utilize // our own hints via the FileSizeReporter diff --git a/cypress/e2e/appointments.cy.ts b/cypress/e2e/appointments.cy.ts index 4e9cb4c6f..b821ad189 100644 --- a/cypress/e2e/appointments.cy.ts +++ b/cypress/e2e/appointments.cy.ts @@ -7,7 +7,7 @@ import { } from '../support/websocket'; const handleUiEdit = (cy, index, text, proceed = false) => { - cy.get('.appointments .box') + cy.get('.appointments *[class^="box_"]') .eq(index) .find('.appointment__actions') .eq(1) @@ -26,7 +26,7 @@ const handleUiEdit = (cy, index, text, proceed = false) => { }; const handleUiDelete = (cy, index, proceed = false) => { - cy.get('.appointments .box') + cy.get('.appointments *[class^="box_"]') .eq(index) .find('.appointment__actions') .eq(1) @@ -100,42 +100,39 @@ describe('appointments', () => { cy.contains('Video - Termine').click(); cy.wait('@appointments_get'); - cy.get('.appointments .box').should('not.exist'); + cy.get('.appointments *[class^="box_"]').should('not.exist'); cy.get('.appointments__actions .button__wrapper button').click(); - cy.get('#overlay .onlineMeetingForm .react-datepicker--date') - .click() - .get( - '#overlay .onlineMeetingForm .react-datepicker--date .react-datepicker .react-datepicker__day--today' - ) - .get( - '#overlay .onlineMeetingForm .react-datepicker--date .react-datepicker .react-datepicker__day--today' - ) + cy.get( + '#overlay .onlineMeetingForm .react-datepicker--date' + ).click(); + cy.get( + '#overlay .onlineMeetingForm .react-datepicker--date .react-datepicker .react-datepicker__day--today' + ) .should('not.have.class', 'react-datepicker__day--disabled') - .click() - .get( - '#overlay .onlineMeetingForm .react-datepicker--time input' - ) - .should( - 'have.value', - `${(dMT.getHours() + 100).toString().substring(1)}:${( - dMT.getMinutes() + 100 - ) - .toString() - .substring(1)}` + .click(); + cy.get( + '#overlay .onlineMeetingForm .react-datepicker--time input' + ).should( + 'have.value', + `${(dMT.getHours() + 100).toString().substring(1)}:${( + dMT.getMinutes() + 100 ) - .get('#overlay .onlineMeetingForm textarea') - .type('Meine Beschreibung') - .get('#overlay .overlay__buttons button') + .toString() + .substring(1)}` + ); + cy.get('#overlay .onlineMeetingForm textarea').type( + 'Meine Beschreibung' + ); + cy.get('#overlay .overlay__buttons button') .contains('Speichern') .click(); cy.wait('@appointments_post'); - cy.get('.appointments .box').should('have.length', 1); - cy.get('.appointments .box .appointment__description').should( - 'contain.text', - 'Meine Beschreibung' - ); + cy.get('.appointments *[class^="box_"]').should('have.length', 1); + cy.get( + '.appointments *[class^="box_"] .appointment__description' + ).should('contain.text', 'Meine Beschreibung'); cy.appointments(); }); @@ -170,16 +167,19 @@ describe('appointments', () => { }); it('Edit appointment', () => { - cy.get('.appointments .box').should('have.length', 3); - cy.get('.appointments .box') + cy.get('.appointments *[class^="box_"]').should( + 'have.length', + 3 + ); + cy.get('.appointments *[class^="box_"]') .eq(0) .find('.appointment__description') .should('contain.text', 'Mein Termin 1'); - cy.get('.appointments .box') + cy.get('.appointments *[class^="box_"]') .eq(1) .find('.appointment__description') .should('contain.text', 'Mein Termin 2'); - cy.get('.appointments .box') + cy.get('.appointments *[class^="box_"]') .eq(2) .find('.appointment__description') .should('contain.text', 'Mein Termin 3'); @@ -192,18 +192,18 @@ describe('appointments', () => { handleUiEdit(cy, 2, ' hat jetzt noch mehr Inhalt', true); // Check list - cy.get('.appointments .box') + cy.get('.appointments *[class^="box_"]') .eq(0) .find('.appointment__description') .should( 'contain.text', 'Mein Termin 1 hat jetzt mehr Inhalt' ); - cy.get('.appointments .box') + cy.get('.appointments *[class^="box_"]') .eq(1) .find('.appointment__description') .should('contain.text', 'Mein Termin 2'); - cy.get('.appointments .box') + cy.get('.appointments *[class^="box_"]') .eq(2) .find('.appointment__description') .should( @@ -213,55 +213,70 @@ describe('appointments', () => { }); it('Delete appointment', () => { - cy.get('.appointments .box').should('have.length', 3); - cy.get('.appointments .box') + cy.get('.appointments *[class^="box_"]').should( + 'have.length', + 3 + ); + cy.get('.appointments *[class^="box_"]') .eq(0) .find('.appointment__description') .should('contain.text', 'Mein Termin 1'); - cy.get('.appointments .box') + cy.get('.appointments *[class^="box_"]') .eq(1) .find('.appointment__description') .should('contain.text', 'Mein Termin 2'); - cy.get('.appointments .box') + cy.get('.appointments *[class^="box_"]') .eq(2) .find('.appointment__description') .should('contain.text', 'Mein Termin 3'); // Press delete and cancel handleUiDelete(cy, 1, false); - cy.get('.appointments .box').should('have.length', 3); + cy.get('.appointments *[class^="box_"]').should( + 'have.length', + 3 + ); // Press delete and proceed handleUiDelete(cy, 1, true); - cy.get('.appointments .box').should('have.length', 2); + cy.get('.appointments *[class^="box_"]').should( + 'have.length', + 2 + ); - cy.get('.appointments .box') + cy.get('.appointments *[class^="box_"]') .eq(0) .find('.appointment__description') .should('contain.text', 'Mein Termin 1'); - cy.get('.appointments .box') + cy.get('.appointments *[class^="box_"]') .eq(1) .find('.appointment__description') .should('contain.text', 'Mein Termin 3'); handleUiDelete(cy, 0, true); handleUiDelete(cy, 0, true); - cy.get('.appointments .box').should('have.length', 0); + cy.get('.appointments *[class^="box_"]').should( + 'have.length', + 0 + ); cy.get('.appointments').contains( 'Aktuell gibt es keine Termine' ); }); it('Copy appointment link', () => { - cy.get('.appointments .box').should('have.length', 3); + cy.get('.appointments *[class^="box_"]').should( + 'have.length', + 3 + ); - cy.get('.appointments .box') + cy.get('.appointments *[class^="box_"]') .eq(0) .find('[data-cy=appointment_url]') .then(($url) => { const appointmentLink = $url.text(); - cy.get('.appointments .box') + cy.get('.appointments *[class^="box_"]') .eq(0) .find('[data-cy=appointment_link] span') .click(); @@ -285,9 +300,12 @@ describe('appointments', () => { }); it('Show appointment qr code', () => { - cy.get('.appointments .box').should('have.length', 3); + cy.get('.appointments *[class^="box_"]').should( + 'have.length', + 3 + ); - cy.get('.appointments .box') + cy.get('.appointments *[class^="box_"]') .eq(0) .find('[data-cy=appointment_qr_code] button') .click(); @@ -337,13 +355,16 @@ describe('appointments', () => { }); it('Enabled - E2EE not supported', () => { - cy.get('.appointments .box').should('have.length', 3); + cy.get('.appointments *[class^="box_"]').should( + 'have.length', + 3 + ); cy.window().then((window) => { cy.stub(window, 'RTCRtpSender').returns(undefined); }); - cy.get('.appointments .box') + cy.get('.appointments *[class^="box_"]') .eq(0) .find('[data-cy=appointment_start] button') .click(); @@ -363,13 +384,16 @@ describe('appointments', () => { }); it('Enabled - E2EE supported', () => { - cy.get('.appointments .box').should('have.length', 3); + cy.get('.appointments *[class^="box_"]').should( + 'have.length', + 3 + ); cy.window().then((window) => { cy.stub(window, 'open').as('windowOpen'); }); - cy.get('.appointments .box') + cy.get('.appointments *[class^="box_"]') .eq(0) .find('[data-cy=appointment_start] button') .click(); @@ -404,14 +428,17 @@ describe('appointments', () => { }); it('Disabled - E2EE not supported', () => { - cy.get('.appointments .box').should('have.length', 3); + cy.get('.appointments *[class^="box_"]').should( + 'have.length', + 3 + ); cy.window().then((window) => { cy.stub(window, 'open').as('windowOpen'); cy.stub(window, 'RTCRtpSender').returns(undefined); }); - cy.get('.appointments .box') + cy.get('.appointments *[class^="box_"]') .eq(0) .find('[data-cy=appointment_start] button') .click(); @@ -431,13 +458,16 @@ describe('appointments', () => { }); it('Disabled - E2EE supported', () => { - cy.get('.appointments .box').should('have.length', 3); + cy.get('.appointments *[class^="box_"]').should( + 'have.length', + 3 + ); cy.window().then((window) => { cy.stub(window, 'open').as('windowOpen'); }); - cy.get('.appointments .box') + cy.get('.appointments *[class^="box_"]') .eq(0) .find('[data-cy=appointment_start] button') .click(); diff --git a/cypress/e2e/videoconference.cy.ts b/cypress/e2e/videoconference.cy.ts index 921b94a2d..49505eb10 100644 --- a/cypress/e2e/videoconference.cy.ts +++ b/cypress/e2e/videoconference.cy.ts @@ -6,7 +6,7 @@ import { mockWebSocket, startWebSocketServer } from '../support/websocket'; -import { AppointmentsDataInterface } from '../../src/globalState/interfaces/AppointmentsDataInterface'; +import { AppointmentsDataInterface } from '../../src/globalState/interfaces'; class FakeJitsiMeetExternalAPI { private _handler: { diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts index 1e200734b..c798443d3 100644 --- a/cypress/support/commands.ts +++ b/cypress/support/commands.ts @@ -6,7 +6,7 @@ import './commands/mockApi'; import './commands/socket'; import { LoginArgs } from './commands/login'; -import { AppointmentsDataInterface } from '../../src/globalState/interfaces/AppointmentsDataInterface'; +import { AppointmentsDataInterface } from '../../src/globalState/interfaces'; declare global { namespace Cypress { diff --git a/cypress/support/commands/appointments.ts b/cypress/support/commands/appointments.ts index 7c35d727f..178ba9f6f 100644 --- a/cypress/support/commands/appointments.ts +++ b/cypress/support/commands/appointments.ts @@ -1,6 +1,6 @@ import { v4 as uuid } from 'uuid'; import { deepMerge } from '../helpers'; -import { AppointmentsDataInterface } from '../../../src/globalState/interfaces/AppointmentsDataInterface'; +import { AppointmentsDataInterface } from '../../../src/globalState/interfaces'; export let appointments: AppointmentsDataInterface[] = []; @@ -31,7 +31,7 @@ export const updateAppointment = ( Cypress.Commands.add( 'appointments', (props?: { [key: string]: any }, index?: number) => - new Promise((resolve) => { + new Cypress.Promise((resolve) => { let appointment = undefined; if (!props) { setAppointments([]); diff --git a/cypress/support/commands/askerSessions.ts b/cypress/support/commands/askerSessions.ts index 42c9c2d5c..e8c964558 100644 --- a/cypress/support/commands/askerSessions.ts +++ b/cypress/support/commands/askerSessions.ts @@ -20,7 +20,7 @@ export const updateAskerSession = ( Cypress.Commands.add( 'askerSession', (props: { [key: string]: any } = {}, index?: number) => - new Promise((resolve) => { + new Cypress.Promise((resolve) => { updateAskerSession(props, index); resolve(undefined); }) diff --git a/cypress/support/commands/consultantSessions.ts b/cypress/support/commands/consultantSessions.ts index c0f0b75ff..d7e88ed25 100644 --- a/cypress/support/commands/consultantSessions.ts +++ b/cypress/support/commands/consultantSessions.ts @@ -26,7 +26,7 @@ export const updateConsultantSession = ( Cypress.Commands.add( 'consultantSession', (props: { [key: string]: any } = {}, index?: number) => - new Promise((resolve) => { + new Cypress.Promise((resolve) => { updateConsultantSession(props, index); resolve(undefined); }) diff --git a/cypress/support/commands/login.ts b/cypress/support/commands/login.ts index 375cbe913..52986dbc6 100644 --- a/cypress/support/commands/login.ts +++ b/cypress/support/commands/login.ts @@ -1,4 +1,4 @@ -import { UserDataInterface } from '../../../src/globalState'; +import { UserDataInterface } from '../../../src/globalState/interfaces'; import { CyHttpMessages, RouteHandler } from 'cypress/types/net-stubbing'; export const USER_ASKER = 'asker'; diff --git a/cypress/support/commands/messages.ts b/cypress/support/commands/messages.ts index de4a48065..b7be4d5f3 100644 --- a/cypress/support/commands/messages.ts +++ b/cypress/support/commands/messages.ts @@ -35,7 +35,7 @@ export const addMessage = ( Cypress.Commands.add( 'addMessage', (props: { [key: string]: any } = {}, index?: number) => - new Promise((resolve) => { + new Cypress.Promise((resolve) => { addMessage(props, index); resolve(undefined); }) diff --git a/cypress/support/index.d.ts b/cypress/support/index.d.ts new file mode 100644 index 000000000..50878d37e --- /dev/null +++ b/cypress/support/index.d.ts @@ -0,0 +1,45 @@ +/// + +import { LoginArgs } from './commands/login'; +import { AppointmentsDataInterface } from '../../src/globalState/interfaces'; +import * as Bluebird from 'cypress/types/bluebird'; + +declare global { + namespace Cypress { + interface Chainable { + login(args?: LoginArgs): Chainable; + + fastLogin(args?: LoginArgs): Chainable; + + appointments( + args?: Partial, + index?: number + ): Bluebird; + + askerSession( + args?: { [key: string]: any }, + index?: number + ): Bluebird; + + consultantSession( + args?: { [key: string]: any }, + index?: number + ): Bluebird; + + addMessage( + props?: { [key: string]: any }, + index?: number + ): Bluebird; + + mockApi(): Chainable; + + willReturn(name: string, data: any): Chainable; + + emitDirectMessage(index?: number): Chainable; + + emitVideoCallRequest(): Chainable; + + waitForSubscriptions(events: string[]): Chainable; + } + } +} diff --git a/cypress/support/sessions.ts b/cypress/support/sessions.ts index 781ee6d99..7f881da46 100644 --- a/cypress/support/sessions.ts +++ b/cypress/support/sessions.ts @@ -1,6 +1,6 @@ import { v4 as uuid } from 'uuid'; import { SESSION_LIST_TYPES } from '../../src/components/session/sessionHelpers'; -import { SessionUserDataInterface } from '../../src/globalState'; +import { SessionUserDataInterface } from '../../src/globalState/interfaces'; export const generateConsultantSession = ({ type, diff --git a/cypress/support/websocket.ts b/cypress/support/websocket.ts index d14840f42..c93e8a6d9 100644 --- a/cypress/support/websocket.ts +++ b/cypress/support/websocket.ts @@ -208,29 +208,26 @@ export const startWebSocketServer = () => { JSON.stringify({ id: parsedMessage.id, msg: 'result', - result: { - total: 2, - records: [ - { - _id: 'asker1', - username: 'asker1', - status: 'busy', - _updatedAt: { - $date: 1677018431963 - }, - name: null + result: [ + { + _id: 'asker1', + username: 'asker1', + status: 'busy', + _updatedAt: { + $date: 1677018431963 }, - { - _id: 'consultant1', - username: 'consultant1', - status: 'offline', - name: 'consultant1', - _updatedAt: { - $date: 1677016800740 - } + name: null + }, + { + _id: 'consultant1', + username: 'consultant1', + status: 'offline', + name: 'consultant1', + _updatedAt: { + $date: 1677016800740 } - ] - } + } + ] }) ); break; diff --git a/package-lock.json b/package-lock.json index ef84d0083..e86054f27 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,6 +42,7 @@ "bytebuffer": "^5.0.1", "caniuse-lite": "^1.0.30001579", "case-sensitive-paths-webpack-plugin": "^2.4.0", + "classnames": "^2.5.1", "clsx": "^1.1.1", "copy-webpack-plugin": "^12.0.2", "core-js": "^3.35.1", @@ -73,6 +74,7 @@ "fs-extra": "^11.2.0", "get-contrast": "^3.0.0", "hi-base32": "0.5.1", + "html-react-parser": "^1.4.14", "html-webpack-plugin": "^5.6.0", "i18next": "^21.8.16", "i18next-browser-languagedetector": "^6.1.5", @@ -6499,7 +6501,8 @@ }, "node_modules/classnames": { "version": "2.5.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, "node_modules/clean-css": { "version": "5.3.3", @@ -12997,6 +13000,92 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/html-dom-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/html-dom-parser/-/html-dom-parser-1.2.0.tgz", + "integrity": "sha512-2HIpFMvvffsXHFUFjso0M9LqM+1Lm22BF+Df2ba+7QHJXjk63pWChEnI6YG27eaWqUdfnh5/Vy+OXrNTtepRsg==", + "dependencies": { + "domhandler": "4.3.1", + "htmlparser2": "7.2.0" + } + }, + "node_modules/html-dom-parser/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/html-dom-parser/node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/html-dom-parser/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/html-dom-parser/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/html-dom-parser/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/html-dom-parser/node_modules/htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, "node_modules/html-entities": { "version": "2.4.0", "funding": [ @@ -13044,6 +13133,34 @@ "void-elements": "3.1.0" } }, + "node_modules/html-react-parser": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-1.4.14.tgz", + "integrity": "sha512-pxhNWGie8Y+DGDpSh8cTa0k3g8PsDcwlfolA+XxYo1AGDeB6e2rdlyv4ptU9bOTiZ2i3fID+6kyqs86MN0FYZQ==", + "dependencies": { + "domhandler": "4.3.1", + "html-dom-parser": "1.2.0", + "react-property": "2.0.0", + "style-to-js": "1.1.1" + }, + "peerDependencies": { + "react": "0.14 || 15 || 16 || 17 || 18" + } + }, + "node_modules/html-react-parser/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, "node_modules/html-tags": { "version": "3.3.1", "dev": true, @@ -13424,6 +13541,11 @@ "node": ">=10" } }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, "node_modules/inquirer": { "version": "8.2.5", "dev": true, @@ -18739,6 +18861,11 @@ "react-dom": "^16.8.0 || ^17 || ^18" } }, + "node_modules/react-property": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.0.tgz", + "integrity": "sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw==" + }, "node_modules/react-refresh": { "version": "0.14.0", "license": "MIT", @@ -20733,6 +20860,22 @@ "dev": true, "license": "ISC" }, + "node_modules/style-to-js": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.1.tgz", + "integrity": "sha512-RJ18Z9t2B02sYhZtfWKQq5uplVctgvjTfLWT7+Eb1zjUjIrWzX5SdlkwLGQozrqarTmEzJJ/YmdNJCUNI47elg==", + "dependencies": { + "style-to-object": "0.3.0" + } + }, + "node_modules/style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, "node_modules/stylehacks": { "version": "6.0.2", "license": "MIT", diff --git a/package.json b/package.json index 73c3add25..29c92bbdb 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "bytebuffer": "^5.0.1", "caniuse-lite": "^1.0.30001579", "case-sensitive-paths-webpack-plugin": "^2.4.0", + "classnames": "^2.5.1", "clsx": "^1.1.1", "copy-webpack-plugin": "^12.0.2", "core-js": "^3.35.1", @@ -77,6 +78,7 @@ "fs-extra": "^11.2.0", "get-contrast": "^3.0.0", "hi-base32": "0.5.1", + "html-react-parser": "^1.4.14", "html-webpack-plugin": "^5.6.0", "i18next": "^21.8.16", "i18next-browser-languagedetector": "^6.1.5", @@ -170,10 +172,10 @@ "scripts": { "start": "node proxy/server.js", "dev": "node scripts/start.js", - "dev:server": "nodemon --watch scripts --watch config --watch src/setupProxy.js --watch proxy --exec \"npm run dev\"", + "dev:server": "nodemon", "build": "node scripts/build.js", - "test": "cross-env BROWSER=none REACT_APP_API_URL=http://127.0.0.1:9001 HTTPS=0 PORT=9001 WDS_SOCKET_PORT=9001 concurrently --kill-others --success first \"npm run dev\" \"wait-on http://127.0.0.1:9001 && cypress run\"", - "test:build": "cross-env BROWSER=none PORT=9001 CYPRESS_WS_URL=http://127.0.0.1:9002 REACT_APP_API_URL=http://127.0.0.1:9001 concurrently --kill-others --success first \"npm run start\" \"wait-on http://127.0.0.1:9001 && cypress run\"", + "test": "cross-env FAST_REFRESH=false BROWSER=none REACT_APP_API_URL=http://127.0.0.1:9001 HTTPS=0 PORT=9001 WDS_SOCKET_PORT=9001 concurrently --kill-others --success first \"npm run dev\" \"wait-on http://127.0.0.1:9001 && cypress run\"", + "test:build": "cross-env FAST_REFRESH=false BROWSER=none PORT=9001 CYPRESS_WS_URL=http://127.0.0.1:9002 REACT_APP_API_URL=http://127.0.0.1:9001 concurrently --kill-others --success first \"npm run start\" \"wait-on http://127.0.0.1:9001 && cypress run\"", "release": "standard-version", "lint": "npm run lint:scripts && npm run lint:style", "lint:scripts": "eslint src && tsc", @@ -251,5 +253,14 @@ "extends": [ "@commitlint/config-conventional" ] + }, + "nodemonConfig": { + "exec": "npm run dev", + "watch": [ + "scripts/", + "config/", + "proxy/" + ], + "delay": 2500 } } diff --git a/src/api/apiAgencyLanguages.ts b/src/api/apiAgencyLanguages.ts index d71491f1e..48aeef863 100644 --- a/src/api/apiAgencyLanguages.ts +++ b/src/api/apiAgencyLanguages.ts @@ -1,7 +1,7 @@ import { endpoints } from '../resources/scripts/endpoints'; import { fetchData, FETCH_METHODS, FETCH_SUCCESS } from './fetchData'; -import { AgencyLanguagesInterface } from '../globalState'; +import { AgencyLanguagesInterface } from '../globalState/interfaces'; export const apiAgencyLanguages = async ( agencyId: number, diff --git a/src/api/apiAgencySelection.ts b/src/api/apiAgencySelection.ts index 18eb3cfb4..87779050b 100644 --- a/src/api/apiAgencySelection.ts +++ b/src/api/apiAgencySelection.ts @@ -1,13 +1,16 @@ import { endpoints } from '../resources/scripts/endpoints'; import { fetchData, FETCH_METHODS, FETCH_ERRORS } from './fetchData'; import { VALID_POSTCODE_LENGTH } from '../components/agencySelection/agencySelectionHelpers'; -import { AgencyDataInterface } from '../globalState'; +import { AgencyDataInterface } from '../globalState/interfaces'; export const apiAgencySelection = async ( params: { postcode: string; consultingType: number | undefined; topicId?: number; + age?: number; + gender?: string; + counsellingRelation?: string; }, signal?: AbortSignal ): Promise | null> => { diff --git a/src/api/apiFrontendSettings.ts b/src/api/apiFrontendSettings.ts index 087d33be2..22efb8bc4 100644 --- a/src/api/apiFrontendSettings.ts +++ b/src/api/apiFrontendSettings.ts @@ -1,6 +1,6 @@ import { endpoints } from '../resources/scripts/endpoints'; import { fetchData, FETCH_METHODS } from './fetchData'; -import { AppConfigInterface } from '../globalState'; +import { AppConfigInterface } from '../globalState/interfaces'; export const apiFrontendSettings = async (): Promise => fetchData({ diff --git a/src/api/apiGetAgencyId.ts b/src/api/apiGetAgencyId.ts index 73d95bc68..87830c130 100644 --- a/src/api/apiGetAgencyId.ts +++ b/src/api/apiGetAgencyId.ts @@ -1,6 +1,6 @@ import { endpoints } from '../resources/scripts/endpoints'; import { fetchData, FETCH_METHODS, FETCH_ERRORS } from './fetchData'; -import { AgencyDataInterface } from '../globalState'; +import { AgencyDataInterface } from '../globalState/interfaces'; export const apiGetAgencyById = async ( agencyId: any diff --git a/src/api/apiGetAppointmentsServiceBookingEventsByUserId.ts b/src/api/apiGetAppointmentsServiceBookingEventsByUserId.ts index 6ee6500f5..ee978b446 100644 --- a/src/api/apiGetAppointmentsServiceBookingEventsByUserId.ts +++ b/src/api/apiGetAppointmentsServiceBookingEventsByUserId.ts @@ -1,4 +1,4 @@ -import { BookingEventsInterface } from '../globalState/interfaces/BookingsInterface'; +import { BookingEventsInterface } from '../globalState/interfaces'; import { endpoints } from '../resources/scripts/endpoints'; import { fetchData, FETCH_METHODS } from './fetchData'; diff --git a/src/api/apiGetChatRoomById.ts b/src/api/apiGetChatRoomById.ts index 9d2a81cf6..1d822cbcc 100644 --- a/src/api/apiGetChatRoomById.ts +++ b/src/api/apiGetChatRoomById.ts @@ -1,6 +1,6 @@ import { endpoints } from '../resources/scripts/endpoints'; import { fetchData, FETCH_METHODS, FETCH_ERRORS } from './fetchData'; -import { ListItemInterface } from '../globalState'; +import { ListItemInterface } from '../globalState/interfaces'; export const apiGetChatRoomById = async ( chatId: number, diff --git a/src/api/apiGetConsultant.ts b/src/api/apiGetConsultant.ts index 45430fb99..312641049 100644 --- a/src/api/apiGetConsultant.ts +++ b/src/api/apiGetConsultant.ts @@ -1,6 +1,6 @@ import { endpoints } from '../resources/scripts/endpoints'; import { fetchData, FETCH_METHODS, FETCH_ERRORS } from './fetchData'; -import { ConsultantDataInterface } from '../globalState'; +import { ConsultantDataInterface } from '../globalState/interfaces'; import { apiGetConsultingType } from './apiGetConsultingType'; import { apiGetConsultingTypes } from './apiGetConsultingTypes'; diff --git a/src/api/apiGetConsultantAppointments.ts b/src/api/apiGetConsultantAppointments.ts index 8f5298110..1c4357ef7 100644 --- a/src/api/apiGetConsultantAppointments.ts +++ b/src/api/apiGetConsultantAppointments.ts @@ -1,4 +1,4 @@ -import { BookingEventsInterface } from '../globalState/interfaces/BookingsInterface'; +import { BookingEventsInterface } from '../globalState/interfaces'; import { endpoints } from '../resources/scripts/endpoints'; import { BookingsStatus } from '../utils/consultant'; import { fetchData, FETCH_METHODS } from './fetchData'; diff --git a/src/api/apiGetConsultantSessionList.ts b/src/api/apiGetConsultantSessionList.ts index 0b9e29a38..a21f2f6fe 100644 --- a/src/api/apiGetConsultantSessionList.ts +++ b/src/api/apiGetConsultantSessionList.ts @@ -4,7 +4,7 @@ import { SESSION_LIST_TAB_ARCHIVE, SESSION_LIST_TYPES } from '../components/session/sessionHelpers'; -import { ListItemsResponseInterface } from '../globalState'; +import { ListItemsResponseInterface } from '../globalState/interfaces'; import { FETCH_ERRORS, FETCH_METHODS, fetchData } from './fetchData'; export const INITIAL_FILTER: string = 'all'; diff --git a/src/api/apiGetConsultingType.ts b/src/api/apiGetConsultingType.ts index b5d230d0e..f37ac894b 100644 --- a/src/api/apiGetConsultingType.ts +++ b/src/api/apiGetConsultingType.ts @@ -1,4 +1,4 @@ -import { ConsultingTypeInterface } from '../globalState'; +import { ConsultingTypeInterface } from '../globalState/interfaces'; import { endpoints } from '../resources/scripts/endpoints'; import { fetchData, FETCH_ERRORS, FETCH_METHODS } from './fetchData'; diff --git a/src/api/apiGetConsultingTypes.ts b/src/api/apiGetConsultingTypes.ts index a36db6730..65dac1476 100644 --- a/src/api/apiGetConsultingTypes.ts +++ b/src/api/apiGetConsultingTypes.ts @@ -1,4 +1,4 @@ -import { ConsultingTypeBasicInterface } from '../globalState'; +import { ConsultingTypeBasicInterface } from '../globalState/interfaces'; import { endpoints } from '../resources/scripts/endpoints'; import { fetchData, FETCH_METHODS } from './fetchData'; diff --git a/src/api/apiGetGroupMembers.ts b/src/api/apiGetGroupMembers.ts deleted file mode 100644 index 00aa120bd..000000000 --- a/src/api/apiGetGroupMembers.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { endpoints } from '../resources/scripts/endpoints'; -import { FETCH_METHODS, fetchData } from './fetchData'; - -export const apiGetGroupMembers = async (chatId: number): Promise => { - const url = `${endpoints.groupChatBase + chatId}/members`; - return fetchData({ - url: url, - method: FETCH_METHODS.GET - }); -}; diff --git a/src/api/apiGetSessionRooms.ts b/src/api/apiGetSessionRooms.ts index 5febe066d..2bfe8272a 100644 --- a/src/api/apiGetSessionRooms.ts +++ b/src/api/apiGetSessionRooms.ts @@ -1,6 +1,6 @@ import { endpoints } from '../resources/scripts/endpoints'; import { fetchData, FETCH_METHODS, FETCH_ERRORS } from './fetchData'; -import { ListItemInterface } from '../globalState'; +import { ListItemInterface } from '../globalState/interfaces'; export const apiGetSessionRoomsByGroupIds = async ( rcGroupIds: string[], diff --git a/src/api/apiGetTenantTheming.ts b/src/api/apiGetTenantTheming.ts index b2727d461..22c43165b 100644 --- a/src/api/apiGetTenantTheming.ts +++ b/src/api/apiGetTenantTheming.ts @@ -1,6 +1,6 @@ import { fetchData, FETCH_METHODS, FETCH_ERRORS } from './fetchData'; import { endpoints } from '../resources/scripts/endpoints'; -import { TenantDataInterface } from '../globalState/interfaces/TenantDataInterface'; +import { TenantDataInterface } from '../globalState/interfaces'; export const apiGetTenantTheming = async (): Promise => { return fetchData({ diff --git a/src/api/apiGetTools.ts b/src/api/apiGetTools.ts index edfd9d5a3..e16066d31 100644 --- a/src/api/apiGetTools.ts +++ b/src/api/apiGetTools.ts @@ -1,4 +1,4 @@ -import { APIToolsInterface } from '../globalState/interfaces/ToolsInterface'; +import { APIToolsInterface } from '../globalState/interfaces'; import { endpoints } from '../resources/scripts/endpoints'; import { fetchData, FETCH_ERRORS, FETCH_METHODS } from './fetchData'; diff --git a/src/api/apiGetTopicId.ts b/src/api/apiGetTopicId.ts index 9d89a1884..19c1c1194 100644 --- a/src/api/apiGetTopicId.ts +++ b/src/api/apiGetTopicId.ts @@ -1,4 +1,4 @@ -import { TopicsDataInterface } from '../globalState/interfaces/TopicsDataInterface'; +import { TopicsDataInterface } from '../globalState/interfaces'; import { apiGetTopicsData } from './apiGetTopicsData'; export const apiGetTopicById = async ( diff --git a/src/api/apiGetTopicsData.ts b/src/api/apiGetTopicsData.ts index 998be16a9..c53f4c426 100644 --- a/src/api/apiGetTopicsData.ts +++ b/src/api/apiGetTopicsData.ts @@ -1,6 +1,6 @@ import { endpoints } from '../resources/scripts/endpoints'; import { fetchData, FETCH_ERRORS, FETCH_METHODS } from './fetchData'; -import { TopicsDataInterface } from '../globalState/interfaces/TopicsDataInterface'; +import { TopicsDataInterface } from '../globalState/interfaces'; export const apiGetTopicsData = async (): Promise => { const url = endpoints.topicsData; diff --git a/src/api/apiGetUserData.ts b/src/api/apiGetUserData.ts index 0634f8bf2..74668d815 100644 --- a/src/api/apiGetUserData.ts +++ b/src/api/apiGetUserData.ts @@ -1,5 +1,5 @@ import { endpoints } from '../resources/scripts/endpoints'; -import { UserDataInterface } from '../globalState'; +import { UserDataInterface } from '../globalState/interfaces'; import { fetchData, FETCH_METHODS } from './fetchData'; export const apiGetUserData = async ( diff --git a/src/api/apiGetUserDataBySessionId.ts b/src/api/apiGetUserDataBySessionId.ts index 3bc849f73..e6086c5a9 100644 --- a/src/api/apiGetUserDataBySessionId.ts +++ b/src/api/apiGetUserDataBySessionId.ts @@ -1,12 +1,14 @@ import { endpoints } from '../resources/scripts/endpoints'; -import { fetchData, FETCH_METHODS } from './fetchData'; +import { fetchData, FETCH_METHODS, FETCH_ERRORS } from './fetchData'; +import { ConsultingSessionDataInterface } from '../globalState/interfaces'; export const apiGetUserDataBySessionId = async ( sessionId: number -): Promise => { +): Promise => { return fetchData({ url: endpoints.userDataBySessionId(sessionId), rcValidation: true, - method: FETCH_METHODS.GET + method: FETCH_METHODS.GET, + responseHandling: [FETCH_ERRORS.FORBIDDEN] }); }; diff --git a/src/api/apiPostRegistration.ts b/src/api/apiPostRegistration.ts index ed715bcf5..a10a0b2a8 100644 --- a/src/api/apiPostRegistration.ts +++ b/src/api/apiPostRegistration.ts @@ -1,6 +1,6 @@ import { autoLogin } from '../components/registration/autoLogin'; import { removeAllCookies } from '../components/sessionCookie/accessSessionCookie'; -import { TenantDataInterface } from '../globalState/interfaces/TenantDataInterface'; +import { TenantDataInterface } from '../globalState/interfaces'; import { FETCH_ERRORS, FETCH_METHODS, fetchData } from './fetchData'; import { COOKIE_KEY } from '../globalState'; diff --git a/src/api/apiServerSettings.ts b/src/api/apiServerSettings.ts index bae1d16b5..bd3a8595e 100644 --- a/src/api/apiServerSettings.ts +++ b/src/api/apiServerSettings.ts @@ -1,6 +1,6 @@ import { endpoints } from '../resources/scripts/endpoints'; import { fetchData, FETCH_METHODS } from './fetchData'; -import { ServerAppConfigInterface } from '../globalState'; +import { ServerAppConfigInterface } from '../globalState/interfaces'; export const apiServerSettings = async (): Promise => fetchData({ diff --git a/src/api/appointments/deleteAppointment.ts b/src/api/appointments/deleteAppointment.ts index 4231fc753..b437cf9bb 100644 --- a/src/api/appointments/deleteAppointment.ts +++ b/src/api/appointments/deleteAppointment.ts @@ -1,6 +1,6 @@ import { endpoints } from '../../resources/scripts/endpoints'; import { fetchData, FETCH_METHODS, FETCH_ERRORS } from './../fetchData'; -import { AppointmentsDataInterface } from '../../globalState/interfaces/AppointmentsDataInterface'; +import { AppointmentsDataInterface } from '../../globalState/interfaces'; export const deleteAppointment = async ( appointmentId: string diff --git a/src/api/appointments/getAppointment.ts b/src/api/appointments/getAppointment.ts index 3f8717adc..65c87dc93 100644 --- a/src/api/appointments/getAppointment.ts +++ b/src/api/appointments/getAppointment.ts @@ -1,4 +1,4 @@ -import { AppointmentsDataInterface } from '../../globalState/interfaces/AppointmentsDataInterface'; +import { AppointmentsDataInterface } from '../../globalState/interfaces'; import { endpoints } from '../../resources/scripts/endpoints'; import { FETCH_ERRORS, FETCH_METHODS, fetchData } from '../fetchData'; diff --git a/src/api/appointments/getAppointments.ts b/src/api/appointments/getAppointments.ts index 3b934db96..0ef908bc6 100644 --- a/src/api/appointments/getAppointments.ts +++ b/src/api/appointments/getAppointments.ts @@ -1,4 +1,4 @@ -import { AppointmentsDataInterface } from '../../globalState/interfaces/AppointmentsDataInterface'; +import { AppointmentsDataInterface } from '../../globalState/interfaces'; import { endpoints } from '../../resources/scripts/endpoints'; import { FETCH_ERRORS, FETCH_METHODS, fetchData } from '../fetchData'; diff --git a/src/api/appointments/postAppointments.ts b/src/api/appointments/postAppointments.ts index aa923a91e..6adf45acc 100644 --- a/src/api/appointments/postAppointments.ts +++ b/src/api/appointments/postAppointments.ts @@ -3,7 +3,7 @@ import { fetchData, FETCH_METHODS, FETCH_ERRORS } from './../fetchData'; import { AppointmentsDataInterface, STATUS_CREATED -} from '../../globalState/interfaces/AppointmentsDataInterface'; +} from '../../globalState/interfaces'; export const postAppointments = async ( data: Partial diff --git a/src/api/appointments/putAppointment.ts b/src/api/appointments/putAppointment.ts index 83eda57e4..6567d72e3 100644 --- a/src/api/appointments/putAppointment.ts +++ b/src/api/appointments/putAppointment.ts @@ -1,6 +1,6 @@ import { endpoints } from '../../resources/scripts/endpoints'; import { fetchData, FETCH_METHODS, FETCH_ERRORS } from './../fetchData'; -import { AppointmentsDataInterface } from '../../globalState/interfaces/AppointmentsDataInterface'; +import { AppointmentsDataInterface } from '../../globalState/interfaces'; export const putAppointment = async ( appointmentId: string, diff --git a/src/api/index.ts b/src/api/index.ts index 44d6af074..0bbb47cae 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -16,7 +16,6 @@ export * from './apiGetAppointmentServiceTeam'; export * from './apiGetApiAppointmentServiceEventTypes'; export * from './apiGetAppointmentsServiceBookingEventsByUserId'; export * from './apiGetGroupChatInfo'; -export * from './apiGetGroupMembers'; export * from './apiGetSessionData'; export * from './apiGetUserData'; export * from './apiGroupChatSettings'; diff --git a/src/api/videocalls/getJwt.ts b/src/api/videocalls/getJwt.ts index aa81cadc8..37ade97ba 100644 --- a/src/api/videocalls/getJwt.ts +++ b/src/api/videocalls/getJwt.ts @@ -1,4 +1,4 @@ -import { VideoCallJwtDataInterface } from '../../globalState/interfaces/VideoCallDataInterface'; +import { VideoCallJwtDataInterface } from '../../globalState/interfaces'; import { endpoints } from '../../resources/scripts/endpoints'; import { FETCH_ERRORS, FETCH_METHODS, fetchData } from '../fetchData'; diff --git a/src/components/E2EEncryptionSupportBanner/E2EEncryptionSupportBanner.tsx b/src/components/E2EEncryptionSupportBanner/E2EEncryptionSupportBanner.tsx index 870b6c5d2..88151a29f 100644 --- a/src/components/E2EEncryptionSupportBanner/E2EEncryptionSupportBanner.tsx +++ b/src/components/E2EEncryptionSupportBanner/E2EEncryptionSupportBanner.tsx @@ -12,9 +12,9 @@ import { ConsultingTypesContext, hasUserAuthority, SessionsDataContext, - STATUS_EMPTY, UserDataContext } from '../../globalState'; +import { STATUS_EMPTY } from '../../globalState/interfaces'; import { Link } from 'react-router-dom'; export const E2EEncryptionSupportBanner = () => { diff --git a/src/components/agencySelection/AgencyInfo.tsx b/src/components/agencySelection/AgencyInfo.tsx index 77e0abc8a..4f7d27bd4 100644 --- a/src/components/agencySelection/AgencyInfo.tsx +++ b/src/components/agencySelection/AgencyInfo.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import { useEffect, useState } from 'react'; -import { AgencyDataInterface } from '../../globalState'; +import { AgencyDataInterface } from '../../globalState/interfaces'; import { ReactComponent as InfoIcon } from '../../resources/img/icons/i.svg'; import { isMobile } from 'react-device-detect'; import { Text } from '../text/Text'; diff --git a/src/components/agencySelection/AgencySelection.tsx b/src/components/agencySelection/AgencySelection.tsx index 60f85e09c..f1238d5c8 100644 --- a/src/components/agencySelection/AgencySelection.tsx +++ b/src/components/agencySelection/AgencySelection.tsx @@ -1,11 +1,10 @@ import * as React from 'react'; import { useEffect, useState } from 'react'; +import { useLocaleData, useTenant } from '../../globalState'; import { AgencyDataInterface, - ConsultingTypeBasicInterface, - useLocaleData, - useTenant -} from '../../globalState'; + ConsultingTypeBasicInterface +} from '../../globalState/interfaces'; import { apiAgencySelection, FETCH_ERRORS } from '../../api'; import { InputField, InputFieldItem } from '../inputField/InputField'; import { VALID_POSTCODE_LENGTH } from './agencySelectionHelpers'; @@ -41,6 +40,8 @@ export interface AgencySelectionProps { initialPostcode?: string; hideExternalAgencies?: boolean; onKeyDown?: Function; + age?: number; + gender?: string; } export const AgencySelection = (props: AgencySelectionProps) => { @@ -86,7 +87,9 @@ export const AgencySelection = (props: AgencySelectionProps) => { const response = await apiAgencySelection({ postcode: DEFAULT_POSTCODE, consultingType: props.consultingType.id, - topicId: props?.mainTopicId + topicId: props?.mainTopicId, + age: props?.age, + gender: props?.gender }); const defaultAgency = response[0]; @@ -101,7 +104,14 @@ export const AgencySelection = (props: AgencySelectionProps) => { } })(); // eslint-disable-next-line react-hooks/exhaustive-deps - }, [autoSelectAgency, props.consultingType.id, props?.mainTopicId, locale]); + }, [ + autoSelectAgency, + props.consultingType.id, + props?.mainTopicId, + props?.age, + props?.gender, + locale + ]); useEffect(() => { if (isSelectedAgencyValidated()) { @@ -150,7 +160,9 @@ export const AgencySelection = (props: AgencySelectionProps) => { await apiAgencySelection({ postcode: selectedPostcode, consultingType: props.consultingType.id, - topicId: props?.mainTopicId + topicId: props?.mainTopicId, + age: props?.age, + gender: props?.gender }).finally(() => setIsLoading(false)) ).filter( (agency) => @@ -163,23 +175,21 @@ export const AgencySelection = (props: AgencySelectionProps) => { setProposedAgencies(null); } } catch (err: any) { - if ( - err.message === FETCH_ERRORS.EMPTY && - props.consultingType.id !== null - ) { + if (err.message === FETCH_ERRORS.EMPTY) { setProposedAgencies(null); - setPostcodeFallbackLink( - parsePlaceholderString( - settings.postcodeFallbackUrl, - { - url: props.consultingType.urls - .registrationPostcodeFallbackUrl, - postcode: selectedPostcode - } - ) - ); + if (props.consultingType.id !== null) { + setPostcodeFallbackLink( + parsePlaceholderString( + settings.postcodeFallbackUrl, + { + url: props.consultingType.urls + .registrationPostcodeFallbackUrl, + postcode: selectedPostcode + } + ) + ); + } } - return; } })(); } else if ( @@ -194,7 +204,13 @@ export const AgencySelection = (props: AgencySelectionProps) => { } } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [selectedPostcode, props.consultingType.id, props?.mainTopicId]); + }, [ + selectedPostcode, + props.consultingType.id, + props?.mainTopicId, + props?.age, + props?.gender + ]); const postcodeInputItem: InputFieldItem = { name: 'postcode', diff --git a/src/components/app/RocketChat.ts b/src/components/app/RocketChat.ts index e06690b53..fe778cf12 100644 --- a/src/components/app/RocketChat.ts +++ b/src/components/app/RocketChat.ts @@ -43,6 +43,7 @@ type filter = { export type UserResponse = { name: string | null; + displayName: string | null; status: Status; username: string; _id: string; diff --git a/src/components/app/RouterConfig.tsx b/src/components/app/RouterConfig.tsx index 144288ec3..0a9f82a78 100644 --- a/src/components/app/RouterConfig.tsx +++ b/src/components/app/RouterConfig.tsx @@ -19,11 +19,8 @@ import { CreateGroupChatView } from '../groupChat/CreateChatView'; import { GroupChatInfo } from '../groupChat/GroupChatInfo'; import { Appointments } from '../appointment/Appointments'; import VideoConference from '../videoConference/VideoConference'; -import { - AppConfigInterface, - AUTHORITIES, - hasUserAuthority -} from '../../globalState'; +import { AUTHORITIES, hasUserAuthority } from '../../globalState'; +import { AppConfigInterface } from '../../globalState/interfaces'; import { ReactComponent as OverviewIconOutline } from '../../resources/img/icons/overview_outline.svg'; import { ReactComponent as OverviewIconFilled } from '../../resources/img/icons/overview_filled.svg'; diff --git a/src/components/app/app.tsx b/src/components/app/app.tsx index 068e9239d..fde577de7 100644 --- a/src/components/app/app.tsx +++ b/src/components/app/app.tsx @@ -17,14 +17,16 @@ import ErrorBoundary from './ErrorBoundary'; import { LanguagesProvider } from '../../globalState/provider/LanguagesProvider'; import { TenantThemingLoader } from './TenantThemingLoader'; import { - AppConfigInterface, AppConfigProvider, InformalProvider, - LegalLinkInterface, LocaleProvider, NotificationsContext, TenantProvider } from '../../globalState'; +import { + AppConfigInterface, + LegalLinkInterface +} from '../../globalState/interfaces'; import { LegalLinksProvider } from '../../globalState/provider/LegalLinksProvider'; import { useAppConfig } from '../../hooks/useAppConfig'; import { DevToolbarWrapper } from '../devToolbar/DevToolbar'; diff --git a/src/components/askerInfo/AskerInfo.tsx b/src/components/askerInfo/AskerInfo.tsx index 56ac8eaad..629684d4a 100644 --- a/src/components/askerInfo/AskerInfo.tsx +++ b/src/components/askerInfo/AskerInfo.tsx @@ -1,25 +1,12 @@ import * as React from 'react'; -import { useCallback, useContext, useEffect, useState } from 'react'; +import { useContext, useEffect } from 'react'; import { Link, useParams, useHistory } from 'react-router-dom'; -import { - SESSION_LIST_TAB, - SESSION_LIST_TYPES -} from '../session/sessionHelpers'; -import { - AUTHORITIES, - hasUserAuthority, - SessionTypeContext, - TenantContext, - UserDataContext -} from '../../globalState'; +import { SESSION_LIST_TAB } from '../session/sessionHelpers'; +import { SessionTypeContext, ActiveSessionProvider } from '../../globalState'; import { Loading } from '../app/Loading'; -import { AskerInfoData } from './AskerInfoData'; import { ReactComponent as BackIcon } from '../../resources/img/icons/arrow-left.svg'; import { ReactComponent as PersonIcon } from '../../resources/img/icons/person.svg'; -import { AskerInfoAssign } from './AskerInfoAssign'; -import '../profile/profile.styles'; import './askerInfo.styles'; -import { ActiveSessionContext } from '../../globalState/provider/ActiveSessionProvider'; import { useSearchParam } from '../../hooks/useSearchParams'; import { useSession } from '../../hooks/useSession'; import { useResponsive } from '../../hooks/useResponsive'; @@ -29,38 +16,29 @@ import { mobileUserProfileView } from '../app/navigationHandler'; import { useTranslation } from 'react-i18next'; -import { AskerInfoTools } from './AskerInfoTools'; -import { Box } from '../box/Box'; import { RocketChatUsersOfRoomProvider } from '../../globalState/provider/RocketChatUsersOfRoomProvider'; +import { AskerInfoContent } from './AskerInfoContent'; export const AskerInfo = () => { const { t: translate } = useTranslation(); - const { tenant } = useContext(TenantContext); const { rcGroupId: groupIdFromParam } = useParams<{ rcGroupId: string }>(); const history = useHistory(); - const { userData } = useContext(UserDataContext); - const { type, path: listPath } = useContext(SessionTypeContext); + const { path: listPath } = useContext(SessionTypeContext); const { session: activeSession, ready } = useSession(groupIdFromParam); - const [isPeerChat, setIsPeerChat] = useState(false); const sessionListTab = useSearchParam('sessionListTab'); useEffect(() => { - if (!ready) { + if (!ready || activeSession) { return; } - if (!activeSession) { - history.push( - listPath + - (sessionListTab ? `?sessionListTab=${sessionListTab}` : '') - ); - return; - } - - setIsPeerChat(activeSession.item.isPeerChat); + history.push( + listPath + + (sessionListTab ? `?sessionListTab=${sessionListTab}` : '') + ); }, [activeSession, history, listPath, ready, sessionListTab]); const { fromL } = useResponsive(); @@ -74,37 +52,12 @@ export const AskerInfo = () => { desktopView(); }, [fromL]); - const isSessionAssignAvailable = useCallback( - () => - !hasUserAuthority(AUTHORITIES.ASKER_DEFAULT, userData) && - !activeSession.isLive && - !activeSession.isGroup && - ((type === SESSION_LIST_TYPES.ENQUIRY && - hasUserAuthority( - AUTHORITIES.ASSIGN_CONSULTANT_TO_ENQUIRY, - userData - ) && - isPeerChat) || - (type !== SESSION_LIST_TYPES.ENQUIRY && - ((isPeerChat && - hasUserAuthority( - AUTHORITIES.ASSIGN_CONSULTANT_TO_PEER_SESSION, - userData - )) || - (!isPeerChat && - hasUserAuthority( - AUTHORITIES.ASSIGN_CONSULTANT_TO_SESSION, - userData - ))))), - [activeSession, isPeerChat, type, userData] - ); - if (!activeSession) { - return ; + return ; } return ( - +
@@ -150,25 +103,11 @@ export const AskerInfo = () => {

{activeSession.user.username}

- - - - {tenant?.settings?.featureToolsEnabled && ( - - - - )} - {isSessionAssignAvailable() && ( - -
- -
-
- )} +
-
+ ); }; diff --git a/src/components/askerInfo/AskerInfoAssign.tsx b/src/components/askerInfo/AskerInfoAssign.tsx index 1a245bfb4..e16191738 100644 --- a/src/components/askerInfo/AskerInfoAssign.tsx +++ b/src/components/askerInfo/AskerInfoAssign.tsx @@ -1,16 +1,20 @@ import * as React from 'react'; import { useContext } from 'react'; import { + ActiveSessionContext, UserDataContext, hasUserAuthority, AUTHORITIES } from '../../globalState'; import { RequestSessionAssign } from '../sessionAssign/RequestSessionAssign'; import { Text } from '../text/Text'; -import { ActiveSessionContext } from '../../globalState/provider/ActiveSessionProvider'; import { useTranslation } from 'react-i18next'; -export const AskerInfoAssign = () => { +export const AskerInfoAssign = ({ + title = 'userProfile.reassign.title' +}: { + title?: string | null; +}) => { const { t: translate } = useTranslation(); const { activeSession } = useContext(ActiveSessionContext); const { userData } = useContext(UserDataContext); @@ -19,10 +23,7 @@ export const AskerInfoAssign = () => { !activeSession.isLive && hasUserAuthority(AUTHORITIES.CONSULTANT_DEFAULT, userData) && ( <> - + { + const { tenant } = useContext(TenantContext); + const { activeSession } = useContext(ActiveSessionContext); + const { userData } = useContext(UserDataContext); + + const { type } = useContext(SessionTypeContext); + + const isSessionAssignAvailable = useCallback(() => { + const isPeerChat = activeSession.item.isPeerChat; + return ( + !hasUserAuthority(AUTHORITIES.ASKER_DEFAULT, userData) && + !activeSession.isLive && + !activeSession.isGroup && + ((type === SESSION_LIST_TYPES.ENQUIRY && + hasUserAuthority( + AUTHORITIES.ASSIGN_CONSULTANT_TO_ENQUIRY, + userData + ) && + isPeerChat) || + (type !== SESSION_LIST_TYPES.ENQUIRY && + ((isPeerChat && + hasUserAuthority( + AUTHORITIES.ASSIGN_CONSULTANT_TO_PEER_SESSION, + userData + )) || + (!isPeerChat && + hasUserAuthority( + AUTHORITIES.ASSIGN_CONSULTANT_TO_SESSION, + userData + ))))) + ); + }, [activeSession, type, userData]); + + return ( + <> + + + + {tenant?.settings?.featureToolsEnabled && ( + + + + )} + {isSessionAssignAvailable() && ( + +
+ +
+
+ )} + + ); +}; diff --git a/src/components/askerInfo/AskerInfoData.tsx b/src/components/askerInfo/AskerInfoData.tsx index a43dd474a..2928bc0b2 100644 --- a/src/components/askerInfo/AskerInfoData.tsx +++ b/src/components/askerInfo/AskerInfoData.tsx @@ -1,13 +1,16 @@ import * as React from 'react'; import { useContext } from 'react'; import { handleNumericTranslation } from '../../utils/translate'; -import { getContact, useConsultingType } from '../../globalState'; +import { + getContact, + useConsultingType, + ActiveSessionContext +} from '../../globalState'; import { convertUserDataObjectToArray, getUserDataTranslateBase } from '../profile/profileHelpers'; import { Text } from '../text/Text'; -import { ActiveSessionContext } from '../../globalState/provider/ActiveSessionProvider'; import { useTranslation } from 'react-i18next'; export const AskerInfoData = () => { @@ -16,10 +19,7 @@ export const AskerInfoData = () => { const consultingType = useConsultingType(activeSession.item.consultingType); - const userSessionData = getContact( - activeSession, - translate('sessionList.user.consultantUnknown') - ).sessionData; + const userSessionData = getContact(activeSession).sessionData; const preparedUserSessionData = convertUserDataObjectToArray(userSessionData); @@ -35,6 +35,7 @@ export const AskerInfoData = () => { ? translate( [ `consultingType.${consultingType.id}.titles.default`, + `consultingType.fallback.titles.default`, consultingType.titles.default ], { ns: 'consultingTypes' } diff --git a/src/components/askerInfo/AskerInfoTools.tsx b/src/components/askerInfo/AskerInfoTools.tsx index e40228db4..20fe244c9 100644 --- a/src/components/askerInfo/AskerInfoTools.tsx +++ b/src/components/askerInfo/AskerInfoTools.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import { useContext, useEffect, useState } from 'react'; import { apiGetUserDataBySessionId } from '../../api/apiGetUserDataBySessionId'; -import { ActiveSessionContext } from '../../globalState/provider/ActiveSessionProvider'; +import { ActiveSessionContext } from '../../globalState'; import { ReactComponent as NewWindow } from '../../resources/img/icons/new-window.svg'; import { endpoints } from '../../resources/scripts/endpoints'; import { refreshKeycloakAccessToken } from '../sessionCookie/refreshKeycloakAccessToken'; @@ -13,7 +13,7 @@ import { useTranslation } from 'react-i18next'; export const AskerInfoTools = () => { const { t: translate } = useTranslation(); const { activeSession } = useContext(ActiveSessionContext); - const [askerId, setAskerId] = useState(); + const [askerId, setAskerId] = useState(); const openToolsLink = () => { refreshKeycloakAccessToken().then((resp) => { diff --git a/src/components/askerInfo/AskerInfoToolsOptions.tsx b/src/components/askerInfo/AskerInfoToolsOptions.tsx index 8631c18fa..2ad01f6d7 100644 --- a/src/components/askerInfo/AskerInfoToolsOptions.tsx +++ b/src/components/askerInfo/AskerInfoToolsOptions.tsx @@ -246,7 +246,6 @@ export const AskerInfoToolsOptions = ( return (
- { - return ( -
-
{children}
-
- ); -}; +export const Box = ({ children, title, type }: BoxProps) => ( +
+ {title &&
{title}
} +
{children}
+
+); diff --git a/src/components/box/box.module.scss b/src/components/box/box.module.scss new file mode 100644 index 000000000..74a16d486 --- /dev/null +++ b/src/components/box/box.module.scss @@ -0,0 +1,36 @@ +.box { + background: rgba(255, 255, 255, 0.7); + border: 1px solid rgba(255, 255, 255, 0.7); + padding: $grid-base-two; + margin-bottom: $grid-base; + border-radius: $box-border-radius; + + @include breakpoint($fromMedium) { + padding: $grid-base-three; + margin-bottom: $grid-base-two; + } + + &--info { + border-color: $form-medium; + color: $form-medium; + } + + &--error { + background-color: $form-error; + color: $form-error; + } + + &--success { + background-color: $form-success; + color: $form-success; + } + + &__title { + font-style: normal; + font-weight: 700; + font-size: 16px; + line-height: 24px; + color: rgba(0, 0, 0, 0.87); + margin-bottom: 16px; + } +} diff --git a/src/components/box/box.styles.scss b/src/components/box/box.styles.scss deleted file mode 100644 index 93c480e51..000000000 --- a/src/components/box/box.styles.scss +++ /dev/null @@ -1,11 +0,0 @@ -.box { - background: rgba(255, 255, 255, 0.7); - padding: $grid-base-two; - margin-bottom: $grid-base; - border-radius: $box-border-radius; - - @include breakpoint($fromMedium) { - padding: $grid-base-three; - margin-bottom: $grid-base-two; - } -} diff --git a/src/components/checkbox/Checkbox.tsx b/src/components/checkbox/Checkbox.tsx index 2f6491b88..9258c3dc5 100644 --- a/src/components/checkbox/Checkbox.tsx +++ b/src/components/checkbox/Checkbox.tsx @@ -8,6 +8,7 @@ export interface CheckboxItem { labelId: string; labelClass?: string; label: string; + value?: string; description?: string; checked: boolean; } @@ -24,6 +25,7 @@ export const Checkbox = (props) => { className="checkbox__input" type="checkbox" name={checkboxItem.name} + value={checkboxItem.value} defaultChecked={checkboxItem.checked} /> {checkboxItem.checked && ( diff --git a/src/components/consultingTypeSelection/ConsultingTypeAgencySelection.tsx b/src/components/consultingTypeSelection/ConsultingTypeAgencySelection.tsx index dfb35f333..1b7b222f0 100644 --- a/src/components/consultingTypeSelection/ConsultingTypeAgencySelection.tsx +++ b/src/components/consultingTypeSelection/ConsultingTypeAgencySelection.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import { useEffect, useState } from 'react'; -import { AgencyDataInterface } from '../../globalState'; +import { AgencyDataInterface } from '../../globalState/interfaces'; import './consultingTypeAgencySelection.styles'; import '../profile/profile.styles'; import { RadioButton } from '../radioButton/RadioButton'; @@ -56,6 +56,7 @@ export const ConsultingTypeAgencySelection = ({ label: translate( [ `consultingType.${consultingType.id}.titles.long`, + `consultingType.fallback.titles.long`, consultingType.titles.long ], { ns: 'consultingTypes' } diff --git a/src/components/devToolbar/DevToolbar.tsx b/src/components/devToolbar/DevToolbar.tsx index 9a5d74cd8..a7a6e7e7e 100644 --- a/src/components/devToolbar/DevToolbar.tsx +++ b/src/components/devToolbar/DevToolbar.tsx @@ -12,7 +12,7 @@ import { getValueFromCookie, setValueInCookie } from '../sessionCookie/accessSessionCookie'; -import { AppConfigInterface } from '../../globalState'; +import { AppConfigInterface } from '../../globalState/interfaces'; import { useAppConfig } from '../../hooks/useAppConfig'; import { REQUEST_COLLECTOR_EVENT, diff --git a/src/components/downloadICSFile/downloadICSFile.styles.scss b/src/components/downloadICSFile/downloadICSFile.styles.scss index 58b4f66de..f708aaabf 100644 --- a/src/components/downloadICSFile/downloadICSFile.styles.scss +++ b/src/components/downloadICSFile/downloadICSFile.styles.scss @@ -1,6 +1,10 @@ .downloadICSFile { &--flex { display: flex; + + svg { + min-width: 20px; + } } &--primary { diff --git a/src/components/enquiry/WriteEnquiry.tsx b/src/components/enquiry/WriteEnquiry.tsx index eafef2737..efb90a069 100644 --- a/src/components/enquiry/WriteEnquiry.tsx +++ b/src/components/enquiry/WriteEnquiry.tsx @@ -12,8 +12,8 @@ import { useParams, useHistory } from 'react-router-dom'; import { Overlay, OVERLAY_FUNCTIONS, OverlayItem } from '../overlay/Overlay'; import { BUTTON_TYPES } from '../button/Button'; import { endpoints } from '../../resources/scripts/endpoints'; -import { buildExtendedSession, STATUS_EMPTY } from '../../globalState'; -import { ActiveSessionContext } from '../../globalState/provider/ActiveSessionProvider'; +import { buildExtendedSession, ActiveSessionProvider } from '../../globalState'; +import { STATUS_EMPTY } from '../../globalState/interfaces'; import { desktopView, @@ -219,7 +219,7 @@ export const WriteEnquiry: React.FC = () => { /> )}
- + { /> - + {overlayActive && ( { diff --git a/src/components/formAccordion/FormAccordion.tsx b/src/components/formAccordion/FormAccordion.tsx index 150379ffd..bf21e92fd 100644 --- a/src/components/formAccordion/FormAccordion.tsx +++ b/src/components/formAccordion/FormAccordion.tsx @@ -9,12 +9,11 @@ import { useState } from 'react'; import './formAccordion.styles'; +import { useTenant, AgencySpecificContext } from '../../globalState'; import { RequiredComponentsInterface, - RegistrationNotesInterface, - useTenant, - AgencySpecificContext -} from '../../globalState'; + RegistrationNotesInterface +} from '../../globalState/interfaces'; import { FormAccordionItem } from '../formAccordion/FormAccordionItem'; import { RegistrationUsername } from '../registration/RegistrationUsername'; import { RegistrationAge } from '../registration/RegistrationAge'; @@ -266,6 +265,7 @@ export const FormAccordion = ({ label: translate( [ `consultingType.${consultingType.id}.requiredComponents.age.${option.value}`, + `consultingType.fallback.requiredComponents.age.${option.value}`, option.label ], { ns: 'consultingTypes' } diff --git a/src/components/formAccordion/FormAccordionRegistrationText.tsx b/src/components/formAccordion/FormAccordionRegistrationText.tsx index 656094642..4a4d8b60e 100644 --- a/src/components/formAccordion/FormAccordionRegistrationText.tsx +++ b/src/components/formAccordion/FormAccordionRegistrationText.tsx @@ -1,4 +1,4 @@ -import { AgencyDataInterface } from '../../globalState'; +import { AgencyDataInterface } from '../../globalState/interfaces'; import './formAccordionRegistrationText.styles'; interface FormAccordionRegistrationTextProps { diff --git a/src/components/groupChat/GroupChatInfo.tsx b/src/components/groupChat/GroupChatInfo.tsx index dbc085a54..e1f649698 100644 --- a/src/components/groupChat/GroupChatInfo.tsx +++ b/src/components/groupChat/GroupChatInfo.tsx @@ -6,14 +6,15 @@ import { SessionTypeContext, UserDataContext, hasUserAuthority, - useTenant + useTenant, + ActiveSessionContext, + ActiveSessionProvider } from '../../globalState'; import { isUserModerator, SESSION_LIST_TAB } from '../session/sessionHelpers'; import { Button, ButtonItem, BUTTON_TYPES } from '../button/Button'; import { OVERLAY_FUNCTIONS, Overlay, OverlayItem } from '../overlay/Overlay'; import { apiGetGroupChatInfo, - apiGetGroupMembers, apiPutGroupChat, GROUP_CHAT_API } from '../../api'; @@ -47,6 +48,10 @@ import { GroupChatCopyLinks } from './GroupChatCopyLinks'; import { useAppConfig } from '../../hooks/useAppConfig'; import { useTranslation } from 'react-i18next'; import { getPrettyDateFromMessageDate } from '../../utils/dateHelpers'; +import { + RocketChatUsersOfRoomContext, + RocketChatUsersOfRoomProvider +} from '../../globalState/provider/RocketChatUsersOfRoomProvider'; export const GroupChatInfo = () => { const settings = useAppConfig(); @@ -66,14 +71,10 @@ export const GroupChatInfo = () => { const { userData } = useContext(UserDataContext); const { path: listPath } = useContext(SessionTypeContext); - const [subscriberList, setSubscriberList] = useState(null); const [overlayItem, setOverlayItem] = useState(null); const [overlayActive, setOverlayActive] = useState(false); const [redirectToSessionsList, setRedirectToSessionsList] = useState(false); - const [isUserBanOverlayOpen, setIsUserBanOverlayOpen] = - useState(false); const [isRequestInProgress, setIsRequestInProgress] = useState(false); - const [bannedUsers, setBannedUsers] = useState([]); const [isV2GroupChat, setIsV2GroupChat] = useState(false); const { session: activeSession, ready } = useSession(groupIdFromParam); @@ -106,32 +107,6 @@ export const GroupChatInfo = () => { return; } - if (activeSession.item.active) { - apiGetGroupMembers(activeSession.item.id) - .then((response) => { - const subscribers = response.members.map((member) => ({ - isModerator: isUserModerator({ - chatItem: activeSession.item, - rcUserId: member._id - }), - ...member - })); - setSubscriberList(subscribers); - }) - .catch((error) => { - console.log('error', error); - }); - apiGetGroupChatInfo(activeSession.item.id).then((response) => { - if (response.bannedUsers) { - const decryptedBannedUsers = - response.bannedUsers.map(decodeUsername); - setBannedUsers(decryptedBannedUsers); - } else { - setBannedUsers([]); - } - }); - } - if (activeSession.isGroup && !activeSession.item.consultingType) { setIsV2GroupChat(true); } @@ -266,246 +241,270 @@ export const GroupChatInfo = () => { } return ( -
-
-
- - - -

- {translate('groupChat.info.headline')} -

-
-
-

- {activeSession.item.topic} -

-
-
-
-
-
- - {activeSession.item.active ? ( - - ) : null} -
-

{activeSession.item.topic}

-
- {activeSession.item.active && activeSession.item.subscribed ? ( -
-
- )} - {subscriberList ? ( - subscriberList.map((subscriber, index) => ( -
-
- {subscriber.displayName - ? decodeUsername( - subscriber.displayName - ) - : decodeUsername( - subscriber.username - )} - {isCurrentUserModerator && - !subscriber.isModerator && ( - <> - - { - setBannedUsers([ - ...bannedUsers, - username - ]); - setIsUserBanOverlayOpen( - true - ); - }} - /> - {' '} - { - setIsUserBanOverlayOpen( - false - ); - }} - > - - )} - {isCurrentUserModerator && - bannedUsers.includes( - subscriber.username - ) && ( - - )} -
-
- )) - ) : ( -
-

- {translate( - 'groupChat.info.subscribers.empty' + ) : null} +

+
+ + type="divider" + /> + + {featureGroupChatV2Enabled && isV2GroupChat && ( +
+ +
+ )} +
- )} -
-
- +
+ - {(showCreator || showCreateDate) && ( -
- {showCreator && ( -
-

- {translate( - 'groupChat.info.settings.creator' - )} -

-

- { - activeSession.consultant - .displayName - } -

+ {(showCreator || showCreateDate) && ( +
+ {showCreator && ( +
+

+ {translate( + 'groupChat.info.settings.creator' + )} +

+

+ { + activeSession.consultant + .displayName + } +

+
+ )} + {showCreateDate && ( +
+

+ {translate( + 'groupChat.info.settings.createDate' + )} +

+

+ {getCreationDate( + new Date( + activeSession.item.createdAt + ) + )} +

+
+ )}
)} - {showCreateDate && ( -
+ {preparedSettings.map((item, index) => ( +

- {translate( - 'groupChat.info.settings.createDate' - )} + {item.label}

- {getCreationDate( - new Date( - activeSession.item.createdAt - ) - )} + {item.value}

- )} -
- )} - {preparedSettings.map((item, index) => ( -
-

- {item.label} -

-

- {item.value} -

+ ))} + {isGroupChatOwner(activeSession, userData) && + !activeSession.item.active ? ( + +
- ))} - {isGroupChatOwner(activeSession, userData) && - !activeSession.item.active ? ( - -
+ {overlayActive ? ( + + ) : null} +
+ + + ); +}; + +const SubscriberList = ({ + isCurrentUserModerator +}: { + isCurrentUserModerator: boolean; +}) => { + const { t: translate } = useTranslation(); + + const { activeSession } = useContext(ActiveSessionContext); + const { users, moderators } = useContext(RocketChatUsersOfRoomContext); + + const [isUserBanOverlayOpen, setIsUserBanOverlayOpen] = + useState(false); + const [bannedUsers, setBannedUsers] = useState([]); + + useEffect(() => { + if (activeSession.item.active) { + apiGetGroupChatInfo(activeSession.item.id).then((response) => { + if (response.bannedUsers) { + const decryptedBannedUsers = + response.bannedUsers.map(decodeUsername); + setBannedUsers(decryptedBannedUsers); + } else { + setBannedUsers([]); + } + }); + } + }, [activeSession.item.active, activeSession.item.id]); + + return ( + <> + {users ? ( + users.map((subscriber) => ( +
+
+ {subscriber.displayName + ? decodeUsername(subscriber.displayName) + : decodeUsername(subscriber.username)} + {isCurrentUserModerator && + !moderators.includes(subscriber._id) && ( + <> + + { + setBannedUsers([ + ...bannedUsers, + username + ]); + setIsUserBanOverlayOpen( + true + ); + }} + /> + {' '} + { + setIsUserBanOverlayOpen(false); + }} + > + + )} + {isCurrentUserModerator && + bannedUsers.includes(subscriber.username) && ( + + )} +
+
+ )) + ) : ( +
+

+ {translate('groupChat.info.subscribers.empty')} +

-
- {overlayActive ? ( - - ) : null} -
+ )} + ); }; diff --git a/src/components/groupChat/JoinGroupChatView.tsx b/src/components/groupChat/JoinGroupChatView.tsx index f827a66a8..6065bb6b3 100644 --- a/src/components/groupChat/JoinGroupChatView.tsx +++ b/src/components/groupChat/JoinGroupChatView.tsx @@ -6,7 +6,8 @@ import { hasUserAuthority, SessionTypeContext, useConsultingType, - UserDataContext + UserDataContext, + ActiveSessionContext } from '../../globalState'; import { mobileListView } from '../app/navigationHandler'; import { SessionHeaderComponent } from '../sessionHeader/SessionHeaderComponent'; @@ -25,7 +26,6 @@ import { ReactComponent as WarningIcon } from '../../resources/img/icons/i.svg'; import './joinChat.styles'; import { Headline } from '../headline/Headline'; import { Text } from '../text/Text'; -import { ActiveSessionContext } from '../../globalState/provider/ActiveSessionProvider'; import { ReactComponent as XIcon } from '../../resources/img/illustrations/x.svg'; import { useE2EE } from '../../hooks/useE2EE'; import { encryptForParticipant } from '../../utils/encryptionHelpers'; @@ -319,7 +319,13 @@ export const JoinGroupChatView = ({ consultingType?.id ?? 'noConsultingType' }.groupChatRules`; const translatedRules: { [key: string]: string } = - i18n.getResource(i18n.language, 'consultingTypes', transKey) || {}; + i18n.getResource(i18n.language, 'consultingTypes', transKey) || + i18n.getResource( + i18n.language, + 'consultingTypes', + `consultingType.fallback.groupChatRules` + ) || + {}; if (Object.keys(translatedRules).length > 0) { groupChatRules = Object.values(translatedRules); } diff --git a/src/components/login/Login.tsx b/src/components/login/Login.tsx index 2bbb322f7..f028fb82f 100644 --- a/src/components/login/Login.tsx +++ b/src/components/login/Login.tsx @@ -28,9 +28,9 @@ import { RocketChatGlobalSettingsContext, TenantContext, UserDataContext, - UserDataInterface, LocaleContext } from '../../globalState'; +import { UserDataInterface } from '../../globalState/interfaces'; import '../../resources/styles/styles'; import './login.styles'; import useIsFirstVisit from '../../utils/useIsFirstVisit'; diff --git a/src/components/message/MessageDisplayName.tsx b/src/components/message/MessageDisplayName.tsx index 417533f3d..37074e37a 100644 --- a/src/components/message/MessageDisplayName.tsx +++ b/src/components/message/MessageDisplayName.tsx @@ -7,7 +7,7 @@ import { } from '../../utils/dateHelpers'; import { ReactComponent as ArrowForwardIcon } from '../../resources/img/icons/arrow-forward.svg'; import { ForwardMessageDTO } from './MessageItemComponent'; -import { ActiveSessionContext } from '../../globalState/provider/ActiveSessionProvider'; +import { ActiveSessionContext } from '../../globalState'; import { useTranslation } from 'react-i18next'; interface MessageDisplayNameProps { diff --git a/src/components/message/MessageItemComponent.tsx b/src/components/message/MessageItemComponent.tsx index 177eb9271..ddd10a3c8 100644 --- a/src/components/message/MessageItemComponent.tsx +++ b/src/components/message/MessageItemComponent.tsx @@ -6,12 +6,15 @@ import { UserDataContext, hasUserAuthority, AUTHORITIES, - ConsultingTypeInterface, - STATUS_ARCHIVED, E2EEContext, SessionTypeContext, - RocketChatGlobalSettingsContext + RocketChatGlobalSettingsContext, + ActiveSessionContext } from '../../globalState'; +import { + ConsultingTypeInterface, + STATUS_ARCHIVED +} from '../../globalState/interfaces'; import { isUserModerator, SESSION_LIST_TYPES } from '../session/sessionHelpers'; import { ForwardMessage } from './ForwardMessage'; import { MessageMetaData } from './MessageMetaData'; @@ -30,7 +33,6 @@ import { FurtherSteps } from './FurtherSteps'; import { MessageAttachment } from './MessageAttachment'; import { Text } from '../text/Text'; import './message.styles'; -import { ActiveSessionContext } from '../../globalState/provider/ActiveSessionProvider'; import { Appointment } from './Appointment'; import { decryptText, MissingKeyError } from '../../utils/encryptionHelpers'; import { e2eeParams } from '../../hooks/useE2EE'; diff --git a/src/components/message/MessageMetaData.tsx b/src/components/message/MessageMetaData.tsx index 5d9cd4ddf..8f82c8e45 100644 --- a/src/components/message/MessageMetaData.tsx +++ b/src/components/message/MessageMetaData.tsx @@ -3,11 +3,11 @@ import { useContext } from 'react'; import { UserDataContext, hasUserAuthority, - AUTHORITIES + AUTHORITIES, + ActiveSessionContext } from '../../globalState'; import { formatToHHMM } from '../../utils/dateHelpers'; import { ReactComponent as CheckmarkIcon } from '../../resources/img/icons/checkmark.svg'; -import { ActiveSessionContext } from '../../globalState/provider/ActiveSessionProvider'; import { useTranslation } from 'react-i18next'; interface MessageMetaDataProps { diff --git a/src/components/messageSubmitInterface/messageSubmitInterfaceComponent.tsx b/src/components/messageSubmitInterface/messageSubmitInterfaceComponent.tsx index e5ef2d00e..1f86ca2c7 100644 --- a/src/components/messageSubmitInterface/messageSubmitInterfaceComponent.tsx +++ b/src/components/messageSubmitInterface/messageSubmitInterfaceComponent.tsx @@ -15,17 +15,15 @@ import { Checkbox, CheckboxItem } from '../checkbox/Checkbox'; import { AUTHORITIES, getContact, - hasUserAuthority -} from '../../globalState/helpers/stateHelpers'; -import { + hasUserAuthority, AnonymousConversationFinishedContext, E2EEContext, SessionTypeContext, - STATUS_ARCHIVED, - STATUS_FINISHED, useTenant, - UserDataContext + UserDataContext, + ActiveSessionContext } from '../../globalState'; +import { STATUS_ARCHIVED, STATUS_FINISHED } from '../../globalState/interfaces'; import { apiPutDearchive, apiSendEnquiry, @@ -74,7 +72,6 @@ import './messageSubmitInterface.styles'; import './messageSubmitInterface.yellowTheme.styles'; import clsx from 'clsx'; import { mobileListView } from '../app/navigationHandler'; -import { ActiveSessionContext } from '../../globalState/provider/ActiveSessionProvider'; import { Button, ButtonItem, BUTTON_TYPES } from '../button/Button'; import { Headline } from '../headline/Headline'; import { useTranslation } from 'react-i18next'; @@ -856,17 +853,13 @@ export const MessageSubmitInterfaceComponent = ({ const getMessageSubmitInfo = useCallback((): MessageSubmitInfoInterface => { let infoData; if (activeInfo === INFO_TYPES.ABSENT) { + const contact = getContact(activeSession); infoData = { isInfo: true, infoHeadline: `${ - getContact( - activeSession, - translate('sessionList.user.consultantUnknown') - ).displayName || - getContact( - activeSession, - translate('sessionList.user.consultantUnknown') - ).username + contact?.displayName || + contact?.username || + translate('sessionList.user.consultantUnknown') } ${translate('consultant.absent.message')} `, infoMessage: activeSession.consultant.absenceMessage }; diff --git a/src/components/messageSubmitInterface/useDraftMessage.tsx b/src/components/messageSubmitInterface/useDraftMessage.tsx index f24c335e6..920f8ea02 100644 --- a/src/components/messageSubmitInterface/useDraftMessage.tsx +++ b/src/components/messageSubmitInterface/useDraftMessage.tsx @@ -7,9 +7,8 @@ import { } from '../../api'; import { decryptText, encryptText } from '../../utils/encryptionHelpers'; import { apiPostError, ERROR_LEVEL_WARN } from '../../api/apiPostError'; -import { ActiveSessionContext } from '../../globalState/provider/ActiveSessionProvider'; import { useE2EE } from '../../hooks/useE2EE'; -import { E2EEContext } from '../../globalState'; +import { E2EEContext, ActiveSessionContext } from '../../globalState'; import { convertFromRaw, EditorState } from 'draft-js'; import { markdownToDraft } from 'markdown-draft-js'; import { EVENT_PRE_LOGOUT } from '../logout/logout'; diff --git a/src/components/profile/AskerConsultingTypeData.tsx b/src/components/profile/AskerConsultingTypeData.tsx index 20f5087ab..7f353bcbc 100644 --- a/src/components/profile/AskerConsultingTypeData.tsx +++ b/src/components/profile/AskerConsultingTypeData.tsx @@ -33,6 +33,7 @@ export const AskerConsultingTypeData = () => { text={translate( [ `consultingType.${resort.agency.consultingType}.titles.default`, + `consultingType.fallback.titles.default`, consultingTypes.find( (cur) => cur.id === diff --git a/src/components/profile/AskerRegistration.tsx b/src/components/profile/AskerRegistration.tsx index cbc06bf2b..5bf35e942 100644 --- a/src/components/profile/AskerRegistration.tsx +++ b/src/components/profile/AskerRegistration.tsx @@ -114,6 +114,7 @@ export const AskerRegistration: React.FC = () => { label: translate( [ `consultingType.${option.id}.titles.registrationDropdown`, + `consultingType.fallback.titles.registrationDropdown`, option.label ], { ns: 'consultingTypes' } diff --git a/src/components/profile/AskerRegistrationExternalAgencyOverlay.tsx b/src/components/profile/AskerRegistrationExternalAgencyOverlay.tsx index 52a2e862b..def933e81 100644 --- a/src/components/profile/AskerRegistrationExternalAgencyOverlay.tsx +++ b/src/components/profile/AskerRegistrationExternalAgencyOverlay.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import { Overlay, OVERLAY_FUNCTIONS } from '../overlay/Overlay'; import { ReactComponent as ArrowIcon } from '../../resources/img/illustrations/arrow.svg'; import { BUTTON_TYPES } from '../button/Button'; -import { ConsultingTypeBasicInterface } from '../../globalState'; +import { ConsultingTypeBasicInterface } from '../../globalState/interfaces'; import { useTranslation } from 'react-i18next'; interface AskerRegistrationExternalAgencyOverlayProps { @@ -35,6 +35,7 @@ export const AskerRegistrationExternalAgencyOverlay = ({ translate( [ `consultingType.${consultingType.id}.titles.default`, + `consultingType.fallback.titles.default`, consultingType.titles.default ], { ns: 'consultingTypes' } diff --git a/src/components/profile/profile.routes.ts b/src/components/profile/profile.routes.ts index 93006a51c..9d99b715e 100644 --- a/src/components/profile/profile.routes.ts +++ b/src/components/profile/profile.routes.ts @@ -1,8 +1,4 @@ -import { - AppConfigInterface, - AUTHORITIES, - hasUserAuthority -} from '../../globalState'; +import { AUTHORITIES, hasUserAuthority } from '../../globalState'; import { ConsultantInformation } from './ConsultantInformation'; import { ConsultantSpokenLanguages } from './ConsultantSpokenLanguages'; import { ConsultantAgencies } from './ConsultantAgencies'; @@ -21,7 +17,10 @@ import { OverviewSessions } from './OverviewMobile/Sessions'; import { profileRoutesSettings } from './profileSettings.routes'; import { profileRoutesHelp } from './profileHelp.routes'; import { ConsultantLiveChatAvailability } from './ConsultantLiveChatAvailability'; -import { TenantDataInterface } from '../../globalState/interfaces/TenantDataInterface'; +import { + TenantDataInterface, + AppConfigInterface +} from '../../globalState/interfaces'; import { EmailNotification } from './EmailNotifications'; import { BrowserNotification } from './BrowserNotifications'; import { browserNotificationsSettings } from '../../utils/notificationHelpers'; diff --git a/src/components/profile/profileHelp.routes.ts b/src/components/profile/profileHelp.routes.ts index ae8c5eb01..91c4e4c47 100644 --- a/src/components/profile/profileHelp.routes.ts +++ b/src/components/profile/profileHelp.routes.ts @@ -1,4 +1,4 @@ -import { AppSettingsInterface } from '../../globalState'; +import { AppSettingsInterface } from '../../globalState/interfaces'; import { COLUMN_LEFT, SingleComponentType, diff --git a/src/components/profile/profileHelpers.ts b/src/components/profile/profileHelpers.ts index f54612bbf..8f5336dee 100644 --- a/src/components/profile/profileHelpers.ts +++ b/src/components/profile/profileHelpers.ts @@ -1,8 +1,8 @@ +import { getConsultingType } from '../../globalState'; import { UserDataInterface, - ConsultingTypeBasicInterface, - getConsultingType -} from '../../globalState'; + ConsultingTypeBasicInterface +} from '../../globalState/interfaces'; export const convertUserDataObjectToArray = (object) => { const array = []; diff --git a/src/components/profile/profileSettings.routes.ts b/src/components/profile/profileSettings.routes.ts index 48dbc21ba..ef717535e 100644 --- a/src/components/profile/profileSettings.routes.ts +++ b/src/components/profile/profileSettings.routes.ts @@ -1,8 +1,5 @@ -import { - hasUserAuthority, - AUTHORITIES, - AppConfigInterface -} from '../../globalState'; +import { hasUserAuthority, AUTHORITIES } from '../../globalState'; +import { AppConfigInterface } from '../../globalState/interfaces'; import { COLUMN_LEFT, COLUMN_RIGHT, diff --git a/src/components/registration/Registration.tsx b/src/components/registration/Registration.tsx index 35bf44644..68bd3da5a 100644 --- a/src/components/registration/Registration.tsx +++ b/src/components/registration/Registration.tsx @@ -96,6 +96,7 @@ export const Registration = ({ )} ${translate( [ `consultingType.${consultant.agencies[0].consultingTypeRel.id}.titles.long`, + `consultingType.fallback.titles.long`, consultant.agencies[0].consultingTypeRel.titles.long ], { ns: 'consultingTypes' } @@ -131,6 +132,7 @@ export const Registration = ({ )} ${translate( [ `consultingType.${consultingType.id}.titles.long`, + `consultingType.fallback.titles.long`, consultingType.titles.long ], { ns: 'consultingTypes' } @@ -171,6 +173,7 @@ export const Registration = ({ ? translate( [ `consultingType.${consultingType?.id}.titles.welcome`, + `consultingType.fallback.titles.welcome`, consultingType?.titles.welcome ], { ns: 'consultingTypes' } @@ -188,6 +191,7 @@ export const Registration = ({ ? translate( [ `consultingType.${consultingType?.id}.titles.long`, + `consultingType.fallback.titles.long`, consultingType?.titles.long ], { ns: 'consultingTypes' } diff --git a/src/components/registration/RegistrationForm.tsx b/src/components/registration/RegistrationForm.tsx index 7c5afa28b..0766a6b20 100644 --- a/src/components/registration/RegistrationForm.tsx +++ b/src/components/registration/RegistrationForm.tsx @@ -6,13 +6,15 @@ import { endpoints } from '../../resources/scripts/endpoints'; import { Overlay, OVERLAY_FUNCTIONS, OverlayItem } from '../overlay/Overlay'; import { redirectToApp } from './autoLogin'; import { - AgencyDataInterface, - ConsultingTypeInterface, NOTIFICATION_TYPE_ERROR, NotificationsContext, TenantContext, useLocaleData } from '../../globalState'; +import { + AgencyDataInterface, + ConsultingTypeInterface +} from '../../globalState/interfaces'; import { FormAccordion } from '../formAccordion/FormAccordion'; import { ReactComponent as WelcomeIcon } from '../../resources/img/illustrations/welcome.svg'; import './registrationForm.styles'; @@ -27,7 +29,7 @@ import { getTenantSettings } from '../../utils/tenantSettingsHelper'; import { budibaseLogout } from '../budibase/budibaseLogout'; import { getUrlParameter } from '../../utils/getUrlParameter'; import { UrlParamsContext } from '../../globalState/provider/UrlParamsProvider'; -import { TopicsDataInterface } from '../../globalState/interfaces/TopicsDataInterface'; +import { TopicsDataInterface } from '../../globalState/interfaces'; import { ConsultingTypeRegistrationDefaults } from '../../containers/registration/components/ProposedAgencies/ProposedAgencies'; import { apiPostError, ERROR_LEVEL_ERROR } from '../../api/apiPostError'; @@ -228,6 +230,7 @@ export const RegistrationForm = () => { ? translate( [ `consultingType.${consultingType.id}.titles.long`, + `consultingType.fallback.titles.long`, consultingType.titles.long ], { ns: 'consultingTypes' } diff --git a/src/components/registration/WelcomeScreen.tsx b/src/components/registration/WelcomeScreen.tsx index a2a1f33d3..6e2ed4dc9 100644 --- a/src/components/registration/WelcomeScreen.tsx +++ b/src/components/registration/WelcomeScreen.tsx @@ -3,7 +3,7 @@ import { Button, ButtonItem, BUTTON_TYPES } from '../button/Button'; import { Text } from '../text/Text'; import { Headline } from '../headline/Headline'; import { ServiceExplanation } from '../serviceExplanation/ServiceExplanation'; -import { RegistrationWelcomeScreenInterface } from '../../globalState'; +import { RegistrationWelcomeScreenInterface } from '../../globalState/interfaces'; import './welcomeScreen.styles'; import { useTranslation } from 'react-i18next'; import { useHistory } from 'react-router-dom'; diff --git a/src/components/serviceExplanation/ServiceExplanation.tsx b/src/components/serviceExplanation/ServiceExplanation.tsx index b968bea91..0a073e630 100644 --- a/src/components/serviceExplanation/ServiceExplanation.tsx +++ b/src/components/serviceExplanation/ServiceExplanation.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import { useTranslation } from 'react-i18next'; -import { RegistrationWelcomeScreenInterface } from '../../globalState'; +import { RegistrationWelcomeScreenInterface } from '../../globalState/interfaces'; import { EnvelopeIcon, LockIcon, @@ -44,6 +44,7 @@ export const ServiceExplanation = ({ title: translate( [ `consultingType.${consultingTypeId}.welcomeScreen.anonymous.title`, + `consultingType.fallback.welcomeScreen.anonymous.title`, welcomeScreenConfig?.anonymous.title ?? 'registration.welcomeScreen.info4.title' ], @@ -52,6 +53,7 @@ export const ServiceExplanation = ({ text: translate( [ `consultingType.${consultingTypeId}.welcomeScreen.anonymous.text`, + `consultingType.fallback.welcomeScreen.anonymous.text`, welcomeScreenConfig?.anonymous.text ?? 'registration.welcomeScreen.info4.text' ], diff --git a/src/components/session/AcceptAssign.tsx b/src/components/session/AcceptAssign.tsx index 594a191d7..8fecffdda 100644 --- a/src/components/session/AcceptAssign.tsx +++ b/src/components/session/AcceptAssign.tsx @@ -8,7 +8,7 @@ import { useState } from 'react'; import { useParams, useHistory } from 'react-router-dom'; -import { ActiveSessionContext } from '../../globalState/provider/ActiveSessionProvider'; +import { ActiveSessionContext } from '../../globalState'; import './session.styles'; import { Overlay, OVERLAY_FUNCTIONS, OverlayItem } from '../overlay/Overlay'; import { useSearchParam } from '../../hooks/useSearchParams'; diff --git a/src/components/session/AcceptLiveChatView.tsx b/src/components/session/AcceptLiveChatView.tsx index 978c77915..d50bc87cc 100644 --- a/src/components/session/AcceptLiveChatView.tsx +++ b/src/components/session/AcceptLiveChatView.tsx @@ -1,7 +1,6 @@ import * as React from 'react'; import { useCallback, useContext, useEffect, useRef, useState } from 'react'; -import { getContact } from '../../globalState'; -import { ActiveSessionContext } from '../../globalState/provider/ActiveSessionProvider'; +import { getContact, ActiveSessionContext } from '../../globalState'; import './session.styles'; import { FETCH_ERRORS } from '../../api'; import { SessionHeaderComponent } from '../sessionHeader/SessionHeaderComponent'; @@ -78,10 +77,8 @@ export const AcceptLiveChatView = ({ text={`${translate( 'enquiry.anonymous.infoLabel.start' )}${ - getContact( - activeSession, - translate('sessionList.user.consultantUnknown') - ).username + getContact(activeSession)?.username || + translate('sessionList.user.consultantUnknown') }${translate('enquiry.anonymous.infoLabel.end')}`} />
diff --git a/src/components/session/SessionItemComponent.tsx b/src/components/session/SessionItemComponent.tsx index a4ae8cb8f..b835cf15e 100644 --- a/src/components/session/SessionItemComponent.tsx +++ b/src/components/session/SessionItemComponent.tsx @@ -21,19 +21,19 @@ import { Button, BUTTON_TYPES, ButtonItem } from '../button/Button'; import { apiGetConsultingType } from '../../api'; import { AUTHORITIES, - ConsultingTypeInterface, getContact, hasUserAuthority, UserDataContext, SessionTypeContext, - useTenant + useTenant, + ActiveSessionContext } from '../../globalState'; +import { ConsultingTypeInterface } from '../../globalState/interfaces'; import './session.styles'; import './session.yellowTheme.styles'; import { useDebouncedCallback } from 'use-debounce'; import { ReactComponent as ArrowDoubleDownIcon } from '../../resources/img/icons/arrow-double-down.svg'; import smoothScroll from './smoothScrollHelper'; -import { ActiveSessionContext } from '../../globalState/provider/ActiveSessionProvider'; import { DragAndDropArea } from '../dragAndDropArea/DragAndDropArea'; import useMeasure from 'react-use-measure'; import { AcceptAssign } from './AcceptAssign'; @@ -394,12 +394,10 @@ export const SessionItemComponent = (props: SessionItemProps) => { { bannedUsers.includes(userData.userName)) ) { return ( - - + - + ); } @@ -174,27 +175,30 @@ export const SessionView = () => { activeSession.isLive ) { return ( - - + - + ); } return ( - - + - + ); }; diff --git a/src/components/session/SubscriptionKeyLost.tsx b/src/components/session/SubscriptionKeyLost.tsx index d2e54dd72..c0d6a100a 100644 --- a/src/components/session/SubscriptionKeyLost.tsx +++ b/src/components/session/SubscriptionKeyLost.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import { useCallback, useContext, useState } from 'react'; import { Button, BUTTON_TYPES } from '../button/Button'; -import { ActiveSessionContext } from '../../globalState/provider/ActiveSessionProvider'; +import { ActiveSessionContext } from '../../globalState'; import { ALIAS_MESSAGE_TYPES, apiSendAliasMessage diff --git a/src/components/session/sessionHelpers.ts b/src/components/session/sessionHelpers.ts index 39c73f746..0522cc829 100644 --- a/src/components/session/sessionHelpers.ts +++ b/src/components/session/sessionHelpers.ts @@ -6,7 +6,7 @@ import { STATUS_ARCHIVED, STATUS_EMPTY, STATUS_ENQUIRY -} from '../../globalState/interfaces/SessionsDataInterface'; +} from '../../globalState/interfaces'; import { MessageItem } from '../message/MessageItemComponent'; import { diff --git a/src/components/sessionAssign/RequestSessionAssign.tsx b/src/components/sessionAssign/RequestSessionAssign.tsx index 874f1aa5a..158aa7200 100644 --- a/src/components/sessionAssign/RequestSessionAssign.tsx +++ b/src/components/sessionAssign/RequestSessionAssign.tsx @@ -15,10 +15,10 @@ import { E2EEContext, SessionTypeContext, UserDataContext, - UserDataInterface + ActiveSessionContext } from '../../globalState'; +import { UserDataInterface } from '../../globalState/interfaces'; import { SelectDropdown } from '../select/SelectDropdown'; -import { ActiveSessionContext } from '../../globalState/provider/ActiveSessionProvider'; import { useE2EE } from '../../hooks/useE2EE'; import { ALIAS_MESSAGE_TYPES, @@ -212,6 +212,8 @@ export const RequestSessionAssign = (props: { value?: string }) => { return (
; @@ -50,12 +50,12 @@ export const GroupChatHeader = ({ bannedUsers }: GroupChatHeaderProps) => { const { releaseToggles } = useAppConfig(); - const [subscriberList, setSubscriberList] = useState([]); const [isUserBanOverlayOpen, setIsUserBanOverlayOpen] = useState(false); const { t } = useTranslation(['common', 'consultingTypes', 'agencies']); const { activeSession } = useContext(ActiveSessionContext); + const { users, moderators } = useContext(RocketChatUsersOfRoomContext); const { userData } = useContext(UserDataContext); const { type, path: listPath } = useContext(SessionTypeContext); const sessionListTab = useSearchParam('sessionListTab'); @@ -77,10 +77,7 @@ export const GroupChatHeader = ({ rcUserId: getValueFromCookie('rc_uid') }); - const userSessionData = getContact( - activeSession, - t('sessionList.user.consultantUnknown') - ).sessionData; + const userSessionData = getContact(activeSession)?.sessionData || {}; const isAskerInfoAvailable = () => !hasUserAuthority(AUTHORITIES.ASKER_DEFAULT, userData) && consultingType?.showAskerProfile && @@ -94,21 +91,7 @@ export const GroupChatHeader = ({ const handleFlyout = (e) => { if (!isSubscriberFlyoutOpen) { - apiGetGroupMembers(activeSession.item.id) - .then((response) => { - const subscribers = response.members.map((member) => ({ - isModerator: isUserModerator({ - chatItem: activeSession.item, - rcUserId: member._id - }), - ...member - })); - setSubscriberList(subscribers); - setIsSubscriberFlyoutOpen(true); - }) - .catch((error) => { - console.error(error); - }); + setIsSubscriberFlyoutOpen(true); } else if (e.target.id === 'subscriberButton') { setIsSubscriberFlyoutOpen(false); } @@ -221,109 +204,111 @@ export const GroupChatHeader = ({ {isSubscriberFlyoutOpen && (
    - {subscriberList.map( - (subscriber, index) => ( -
  • ( +
  • { + if ( !bannedUsers.includes( subscriber.username - ) && - !subscriber.isModerator - ? 'has-flyout' - : '' + ) + ) { + setFlyoutOpenId( + subscriber._id + ); } - key={index} - onClick={() => { - if ( - !bannedUsers.includes( - subscriber.username - ) - ) { - setFlyoutOpenId( - subscriber._id - ); - } - }} - > - - {decodeUsername( - subscriber.displayName || - subscriber.username - )} - - {isCurrentUserModerator && - !subscriber.isModerator && ( - <> - + + {decodeUsername( + subscriber.displayName || + subscriber.username + )} + + {isCurrentUserModerator && + !moderators.includes( + subscriber._id + ) && ( + <> + + setFlyoutOpenId( + null + ) + } + > + - setFlyoutOpenId( - null - ) - } - > - { - setIsUserBanOverlayOpen( - true - ); - }} - /> - {' '} - { + handleUserBan={() => { setIsUserBanOverlayOpen( - false + true ); }} - > - - )} - {isCurrentUserModerator && - bannedUsers.includes( - subscriber.username - ) && ( - + {' '} + - )} -
  • - ) - )} + handleOverlay={() => { + setIsUserBanOverlayOpen( + false + ); + }} + > + + )} + {isCurrentUserModerator && + bannedUsers.includes( + subscriber.username + ) && ( + + )} + + ))}
)} diff --git a/src/components/sessionHeader/GroupChatHeader/useStartVideoCall/index.ts b/src/components/sessionHeader/GroupChatHeader/useStartVideoCall/index.ts index 985e70cc1..d932685dd 100644 --- a/src/components/sessionHeader/GroupChatHeader/useStartVideoCall/index.ts +++ b/src/components/sessionHeader/GroupChatHeader/useStartVideoCall/index.ts @@ -1,7 +1,6 @@ import { useCallback, useContext, useEffect, useRef, useState } from 'react'; import { apiStartVideoCall } from '../../../../api'; -import { UserDataContext } from '../../../../globalState'; -import { ActiveSessionContext } from '../../../../globalState/provider/ActiveSessionProvider'; +import { UserDataContext, ActiveSessionContext } from '../../../../globalState'; import { generatePath } from 'react-router-dom'; import { useAppConfig } from '../../../../hooks/useAppConfig'; diff --git a/src/components/sessionHeader/SessionHeaderComponent.tsx b/src/components/sessionHeader/SessionHeaderComponent.tsx index 9f6dd3239..e8126644e 100644 --- a/src/components/sessionHeader/SessionHeaderComponent.tsx +++ b/src/components/sessionHeader/SessionHeaderComponent.tsx @@ -8,25 +8,29 @@ import { AUTHORITIES, getContact, hasUserAuthority, - SessionConsultantInterface, SessionTypeContext, useConsultingType, - UserDataContext + UserDataContext, + ActiveSessionContext } from '../../globalState'; +import { SessionConsultantInterface } from '../../globalState/interfaces'; import { getViewPathForType, SESSION_LIST_TAB, SESSION_LIST_TYPES } from '../session/sessionHelpers'; import { SessionMenu } from '../sessionMenu/SessionMenu'; -import { convertUserDataObjectToArray } from '../profile/profileHelpers'; +import { + convertUserDataObjectToArray, + getUserDataTranslateBase +} from '../profile/profileHelpers'; import { ReactComponent as BackIcon } from '../../resources/img/icons/arrow-left.svg'; -import { ActiveSessionContext } from '../../globalState/provider/ActiveSessionProvider'; import './sessionHeader.styles'; import './sessionHeader.yellowTheme.styles'; import { useSearchParam } from '../../hooks/useSearchParams'; import { useTranslation } from 'react-i18next'; import { GroupChatHeader } from './GroupChatHeader'; +import { useAppConfig } from '../../hooks/useAppConfig'; export interface SessionHeaderProps { consultantAbsent?: SessionConsultantInterface; @@ -44,29 +48,20 @@ export const SessionHeaderComponent = (props: SessionHeaderProps) => { const { activeSession } = useContext(ActiveSessionContext); const { userData } = useContext(UserDataContext); const consultingType = useConsultingType(activeSession.item.consultingType); + const settings = useAppConfig(); + + const contact = getContact(activeSession); + const userSessionData = contact?.sessionData; - const username = getContact( - activeSession, - translate('sessionList.user.consultantUnknown') - ).username; - const displayName = getContact( - activeSession, - translate('sessionList.user.consultantUnknown') - ).displayName; - const userSessionData = getContact( - activeSession, - translate('sessionList.user.consultantUnknown') - ).sessionData; const preparedUserSessionData = hasUserAuthority(AUTHORITIES.CONSULTANT_DEFAULT, userData) && userSessionData && !activeSession.isLive ? convertUserDataObjectToArray(userSessionData) : null; - const translateBase = - activeSession.item.consultingType === 0 - ? 'user.userAddiction' - : 'user.userU25'; + const translateBase = getUserDataTranslateBase( + activeSession.item.consultingType + ); const [isSubscriberFlyoutOpen, setIsSubscriberFlyoutOpen] = useState(false); const sessionListTab = useSearchParam('sessionListTab'); @@ -104,13 +99,17 @@ export const SessionHeaderComponent = (props: SessionHeaderProps) => { } }; + const enquiryUserProfileCondition = + typeof settings?.user?.profile?.visibleOnEnquiry === 'function' + ? settings.user.profile.visibleOnEnquiry(userSessionData) + : settings?.user?.profile?.visibleOnEnquiry; + const isAskerInfoAvailable = () => !hasUserAuthority(AUTHORITIES.ASKER_DEFAULT, userData) && consultingType?.showAskerProfile && activeSession.isSession && !activeSession.isLive && - ((type === SESSION_LIST_TYPES.ENQUIRY && - Object.entries(userSessionData).length !== 0) || + ((type === SESSION_LIST_TYPES.ENQUIRY && enquiryUserProfileCondition) || SESSION_LIST_TYPES.ENQUIRY !== type); if (activeSession.isGroup) { @@ -170,8 +169,16 @@ export const SessionHeaderComponent = (props: SessionHeaderProps) => { !isAskerInfoAvailable() })} > - {hasUserAuthority(AUTHORITIES.ASKER_DEFAULT, userData) && ( -

{displayName || username}

+ {(hasUserAuthority(AUTHORITIES.ASKER_DEFAULT, userData) || + hasUserAuthority( + AUTHORITIES.ANONYMOUS_DEFAULT, + userData + )) && ( +

+ {contact?.displayName || + contact?.username || + translate('sessionList.user.consultantUnknown')} +

)} {hasUserAuthority( AUTHORITIES.CONSULTANT_DEFAULT, @@ -179,16 +186,22 @@ export const SessionHeaderComponent = (props: SessionHeaderProps) => { ) ? ( isAskerInfoAvailable() ? ( -

{username}

+

+ {contact?.username || + translate( + 'sessionList.user.consultantUnknown' + )} +

) : ( -

{username}

+

+ {contact?.username || + translate( + 'sessionList.user.consultantUnknown' + )} +

) ) : null} - {hasUserAuthority( - AUTHORITIES.ANONYMOUS_DEFAULT, - userData - ) &&

{displayName || username}

}
{ ? translate( [ `consultingType.${consultingType.id}.titles.short`, + `consultingType.fallback.titles.short`, consultingType.titles.short ], { ns: 'consultingTypes' } diff --git a/src/components/sessionMenu/SessionMenu.tsx b/src/components/sessionMenu/SessionMenu.tsx index 2e57e131c..c5ece8529 100644 --- a/src/components/sessionMenu/SessionMenu.tsx +++ b/src/components/sessionMenu/SessionMenu.tsx @@ -10,14 +10,16 @@ import { generatePath, Link, Redirect, useHistory } from 'react-router-dom'; import { AnonymousConversationFinishedContext, AUTHORITIES, - ExtendedSessionInterface, hasUserAuthority, - SessionItemInterface, SessionTypeContext, - STATUS_FINISHED, useConsultingType, - UserDataContext + UserDataContext, + ActiveSessionContext } from '../../globalState'; +import { + SessionItemInterface, + STATUS_FINISHED +} from '../../globalState/interfaces'; import { SESSION_LIST_TAB, SESSION_LIST_TAB_ARCHIVE, @@ -60,12 +62,12 @@ import { ReactComponent as CameraOnIcon } from '../../resources/img/icons/camera import { ReactComponent as CalendarMonthPlusIcon } from '../../resources/img/icons/calendar-plus.svg'; import { supportsE2EEncryptionVideoCall } from '../../utils/videoCallHelpers'; import DeleteSession from '../session/DeleteSession'; -import { ActiveSessionContext } from '../../globalState/provider/ActiveSessionProvider'; import { Text } from '../text/Text'; import { useSearchParam } from '../../hooks/useSearchParams'; import { useAppConfig } from '../../hooks/useAppConfig'; import { useTranslation } from 'react-i18next'; import { LegalLinksContext } from '../../globalState/provider/LegalLinksProvider'; +import { RocketChatUsersOfRoomContext } from '../../globalState/provider/RocketChatUsersOfRoomProvider'; type TReducedSessionItemInterface = Omit< SessionItemInterface, @@ -584,7 +586,6 @@ export const SessionMenu = (props: SessionMenuProps) => { {activeSession.isGroup && ( { }; const SessionMenuFlyoutGroup = ({ - activeSession, groupChatInfoLink, editGroupChatSettingsLink, handleLeaveGroupChat, handleStopGroupChat, bannedUsers }: { - activeSession: ExtendedSessionInterface; groupChatInfoLink: string; editGroupChatSettingsLink: string; handleStopGroupChat: MouseEventHandler; @@ -640,11 +639,14 @@ const SessionMenuFlyoutGroup = ({ }) => { const { t: translate } = useTranslation(); const { userData } = useContext(UserDataContext); + const { activeSession } = useContext(ActiveSessionContext); + const { moderators } = useContext(RocketChatUsersOfRoomContext); return ( <> {activeSession.item.subscribed && - !bannedUsers?.includes(userData.userName) && ( + !bannedUsers?.includes(userData.userName) && + moderators.length > 1 && (
( - - + ) )} diff --git a/src/components/sessionsListItem/SessionListItemComponent.tsx b/src/components/sessionsListItem/SessionListItemComponent.tsx index a0c5c7a2f..0c6890f52 100644 --- a/src/components/sessionsListItem/SessionListItemComponent.tsx +++ b/src/components/sessionsListItem/SessionListItemComponent.tsx @@ -17,12 +17,15 @@ import { E2EEContext, hasUserAuthority, SessionTypeContext, - STATUS_FINISHED, - TopicSessionInterface, useConsultingType, UserDataContext, - useTenant + useTenant, + ActiveSessionContext } from '../../globalState'; +import { + STATUS_FINISHED, + TopicSessionInterface +} from '../../globalState/interfaces'; import { getGroupChatDate } from '../session/sessionDateHelpers'; import { markdownToDraft } from 'markdown-draft-js'; import { convertFromRaw } from 'draft-js'; @@ -41,7 +44,6 @@ import { useSearchParam } from '../../hooks/useSearchParams'; import { SessionListItemLastMessage } from './SessionListItemLastMessage'; import { ALIAS_MESSAGE_TYPES } from '../../api/apiSendAliasMessage'; import { useTranslation } from 'react-i18next'; -import { ActiveSessionContext } from '../../globalState/provider/ActiveSessionProvider'; interface SessionListItemProps { defaultLanguage: string; @@ -269,6 +271,7 @@ export const SessionListItemComponent = ({ ? translate( [ `consultingType.${consultingType.id}.titles.default`, + `consultingType.fallback.titles.default`, consultingType.titles.default ], { ns: 'consultingTypes' } @@ -384,6 +387,7 @@ export const SessionListItemComponent = ({ ? translate( [ `consultingType.${consultingType.id}.titles.default`, + `consultingType.fallback.titles.default`, consultingType.titles.default ], { ns: 'consultingTypes' } diff --git a/src/components/termsandconditions/TermsAndConditions.tsx b/src/components/termsandconditions/TermsAndConditions.tsx index 4085c690d..40cb3c471 100644 --- a/src/components/termsandconditions/TermsAndConditions.tsx +++ b/src/components/termsandconditions/TermsAndConditions.tsx @@ -6,12 +6,11 @@ import { Headline } from '../headline/Headline'; import './termsandconfitions.styles.scss'; import { useTranslation } from 'react-i18next'; import { OVERLAY_TERMS_AND_CONDITION } from '../../globalState/interfaces/AppConfig/OverlaysConfigInterface'; +import { UserDataContext, useTenant } from '../../globalState'; import { - UserDataContext, - UserDataInterface, - useTenant -} from '../../globalState'; -import { TenantDataInterface } from '../../globalState/interfaces/TenantDataInterface'; + TenantDataInterface, + UserDataInterface +} from '../../globalState/interfaces'; import { Checkbox, CheckboxItem } from '../checkbox/Checkbox'; import { apiPatchUserData } from '../../api/apiPatchUserData'; import { logout } from '../logout/logout'; diff --git a/src/components/text/Text.tsx b/src/components/text/Text.tsx index fc1c12e17..d4c1f54b2 100644 --- a/src/components/text/Text.tsx +++ b/src/components/text/Text.tsx @@ -39,6 +39,9 @@ export const Text = (props: TextProps) => { return labelContent; }; + // Do not render text component if content is empty + if (!props.title && !props.text) return null; + return (

{ useEffect(() => { apiGetAskerSessionList().then(({ sessions }) => { - const session = sessions.find((s) => !!s.consultant); + const session = sessions.find((s) => !!s.agency); setSession(session); const consultant = session?.consultant; const agencyId = session?.agency?.id; diff --git a/src/containers/bookings/components/Calcom/cal.styles.scss b/src/containers/bookings/components/Calcom/cal.styles.scss index 3e4b25d29..e89900607 100644 --- a/src/containers/bookings/components/Calcom/cal.styles.scss +++ b/src/containers/bookings/components/Calcom/cal.styles.scss @@ -1,10 +1,7 @@ .contentWrapper__booking { > div { - height: calc(100% - 75px); - - @include breakpoint($fromLarge) { - height: 100%; - } + overflow: auto; + height: 100%; } cal-inline { @@ -13,7 +10,6 @@ @include breakpoint($fromLarge) { align-items: center; - padding-bottom: 100px; } iframe { diff --git a/src/containers/bookings/components/NoBookings/noBookingsBooked.tsx b/src/containers/bookings/components/NoBookings/noBookingsBooked.tsx index 1af5d238e..ecfa4bdc8 100644 --- a/src/containers/bookings/components/NoBookings/noBookingsBooked.tsx +++ b/src/containers/bookings/components/NoBookings/noBookingsBooked.tsx @@ -15,9 +15,9 @@ import { Box } from '../../../../components/box/Box'; import { AUTHORITIES, hasUserAuthority, - ListItemInterface, UserDataContext } from '../../../../globalState'; +import { ListItemInterface } from '../../../../globalState/interfaces'; interface NoBookings { sessions: ListItemInterface[]; @@ -60,8 +60,9 @@ export const NoBookingsBooked: React.FC = ({ sessions }) => { ${sessions ?.filter((session) => session.agency !== null) ?.map( - (consultant) => - consultant.consultant.username + ({ consultant }) => + consultant.displayName || + consultant.username )}:`} type="standard" /> diff --git a/src/containers/bookings/components/booking.styles.scss b/src/containers/bookings/components/booking.styles.scss index 29bcc58b7..997c698dd 100644 --- a/src/containers/bookings/components/booking.styles.scss +++ b/src/containers/bookings/components/booking.styles.scss @@ -25,6 +25,7 @@ $headerHeight: 80px; &__header { display: flex; + flex: 0; align-items: center; justify-content: space-between; padding: $grid-base-three; @@ -116,12 +117,17 @@ $headerHeight: 80px; } } + &__wrapper { + display: flex; + flex-direction: column; + } + &__innerWrapper { display: flex; + flex: 1; flex-direction: column; padding: 0 $grid-base-three; overflow-x: hidden; - height: 100%; &-event { display: grid; @@ -217,6 +223,7 @@ $headerHeight: 80px; } p { + word-break: normal; margin-left: 0.5rem; } } @@ -276,6 +283,7 @@ $headerHeight: 80px; margin-bottom: 0.5rem; p { + word-break: normal; margin-left: 0.5rem; } } @@ -372,10 +380,34 @@ $headerHeight: 80px; &__video-link-grid { display: none; - grid-template-columns: 0.465fr 1fr 0.42fr; + grid-template-columns: 0.29fr 1fr 0.42fr; min-height: 32px; align-items: flex-end; + @media only screen and (width >= 950px) { + grid-template-columns: 0.33fr 1fr 0.42fr; + } + + @media only screen and (width >= 1010px) { + grid-template-columns: 0.35fr 1fr 0.42fr; + } + + @media only screen and (width >= 1050px) { + grid-template-columns: 0.37fr 1fr 0.42fr; + } + + @media only screen and (width >= 1075px) { + grid-template-columns: 0.43fr 1fr 0.42fr; + } + + @media only screen and (width >= 1095px) { + grid-template-columns: 0.44fr 1fr 0.42fr; + } + + @media only screen and (width >= 1200px) { + grid-template-columns: 0.465fr 1fr 0.42fr; + } + @include breakpoint($fromXXLarge) { grid-template-columns: 0.48fr 1fr 0.405fr; } @@ -393,15 +425,28 @@ $headerHeight: 80px; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; + position: relative; + left: 20px; + + @media only screen and (width >= 1077px) { + position: initial; + left: 0; + } } @include breakpoint($fromLarge) { - word-break: keep-all; display: flex; align-items: center; svg { - margin-left: 0.75rem; + position: relative; + right: -50px; + + @media only screen and (width >= 1077px) { + position: initial; + right: 0; + margin-left: 0.75rem; + } } } } diff --git a/src/containers/bookings/hooks/useAskerHasAssignedConsultant.ts b/src/containers/bookings/hooks/useAskerHasAssignedConsultant.ts index b2489534c..97e51c194 100644 --- a/src/containers/bookings/hooks/useAskerHasAssignedConsultant.ts +++ b/src/containers/bookings/hooks/useAskerHasAssignedConsultant.ts @@ -1,11 +1,11 @@ import { useContext, useEffect, useState } from 'react'; -import { apiGetAskerSessionList } from '../../../api/apiGetAskerSessionList'; +import { apiGetAskerSessionList } from '../../../api'; import { AUTHORITIES, hasUserAuthority, - ListItemInterface, UserDataContext } from '../../../globalState'; +import { ListItemInterface } from '../../../globalState/interfaces'; export const useAskerHasAssignedConsultant = () => { const { userData } = useContext(UserDataContext); diff --git a/src/containers/overview/components/SessionCard/SessionCard.tsx b/src/containers/overview/components/SessionCard/SessionCard.tsx index 05d920ec2..f07c23eca 100644 --- a/src/containers/overview/components/SessionCard/SessionCard.tsx +++ b/src/containers/overview/components/SessionCard/SessionCard.tsx @@ -3,14 +3,14 @@ import { SESSION_LIST_TYPES } from '../../../../components/session/sessionHelper import { SessionListItemComponent } from '../../../../components/sessionsListItem/SessionListItemComponent'; import { buildExtendedSession, - SessionTypeProvider + SessionTypeProvider, + ActiveSessionProvider } from '../../../../globalState'; import { useConsultantData } from '../../hooks/useConsultantData'; import { EmptyType } from '../EmptyState'; import { OverviewCard } from '../OverviewCard/OverviewCard'; import './sessionCard.styles.scss'; import { LanguagesContext } from '../../../../globalState/provider/LanguagesProvider'; -import { ActiveSessionContext } from '../../../../globalState/provider/ActiveSessionProvider'; import { RocketChatUsersOfRoomProvider } from '../../../../globalState/provider/RocketChatUsersOfRoomProvider'; interface SessionCardProps { @@ -46,9 +46,9 @@ export const SessionCard = ({ ?.slice(0, 9) .map((session) => buildExtendedSession(session, '')) .map((activeSession, index) => ( - - + ))} diff --git a/src/containers/registration/components/AgencySelection/index.tsx b/src/containers/registration/components/AgencySelection/index.tsx index c2e7efec1..bd6c60987 100644 --- a/src/containers/registration/components/AgencySelection/index.tsx +++ b/src/containers/registration/components/AgencySelection/index.tsx @@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next'; import { AgencyInfo } from '../../../../components/agencySelection/AgencyInfo'; import { AgencyLanguages } from '../../../../components/agencySelection/AgencyLanguages'; import { RadioButton } from '../../../../components/radioButton/RadioButton'; -import { AgencyDataInterface } from '../../../../globalState'; +import { AgencyDataInterface } from '../../../../globalState/interfaces'; interface AgencySelectionArgs { checkedValue: string; diff --git a/src/containers/registration/components/ConsultingTypeSelection/index.tsx b/src/containers/registration/components/ConsultingTypeSelection/index.tsx index f7b39fca6..addc2c87e 100644 --- a/src/containers/registration/components/ConsultingTypeSelection/index.tsx +++ b/src/containers/registration/components/ConsultingTypeSelection/index.tsx @@ -5,7 +5,7 @@ import { SelectDropdown, SelectDropdownItem } from '../../../../components/select/SelectDropdown'; -import { ConsultingTypeInterface } from '../../../../globalState'; +import { ConsultingTypeInterface } from '../../../../globalState/interfaces'; interface ConsultingTypeSelectionArgs { value: string; @@ -29,6 +29,7 @@ export const ConsultingTypeSelection = ({ label: t( [ `consultingType.${consultingType.id}.titles.long`, + `consultingType.fallback.titles.long`, consultingType.titles.long ], { ns: 'consultingTypes' } diff --git a/src/containers/registration/components/FallbackInformation/index.tsx b/src/containers/registration/components/FallbackInformation/index.tsx index 94c0c168f..e81345191 100644 --- a/src/containers/registration/components/FallbackInformation/index.tsx +++ b/src/containers/registration/components/FallbackInformation/index.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { useTranslation } from 'react-i18next'; import { Notice } from '../../../../components/notice/Notice'; import { Text } from '../../../../components/text/Text'; -import { ConsultingTypeBasicInterface } from '../../../../globalState'; +import { ConsultingTypeBasicInterface } from '../../../../globalState/interfaces'; import { useAppConfig } from '../../../../hooks/useAppConfig'; import { parsePlaceholderString } from '../../../../utils/parsePlaceholderString'; diff --git a/src/containers/registration/components/NoAgencyFound/index.tsx b/src/containers/registration/components/NoAgencyFound/index.tsx index 4242368e8..43456b82b 100644 --- a/src/containers/registration/components/NoAgencyFound/index.tsx +++ b/src/containers/registration/components/NoAgencyFound/index.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { useTranslation } from 'react-i18next'; import { Text } from '../../../../components/text/Text'; -import { ConsultingTypeBasicInterface } from '../../../../globalState'; +import { ConsultingTypeBasicInterface } from '../../../../globalState/interfaces'; import { FallbackInformation } from '../FallbackInformation'; interface NoAgencyFoundArgs { diff --git a/src/containers/registration/components/PreSelectedAgency/PreselectedAgency.tsx b/src/containers/registration/components/PreSelectedAgency/PreselectedAgency.tsx index bdff7faa3..c561a4c75 100644 --- a/src/containers/registration/components/PreSelectedAgency/PreselectedAgency.tsx +++ b/src/containers/registration/components/PreSelectedAgency/PreselectedAgency.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import { useTranslation } from 'react-i18next'; -import { AgencyDataInterface } from '../../../../globalState'; +import { AgencyDataInterface } from '../../../../globalState/interfaces'; import { Headline } from '../../../../components/headline/Headline'; import { RadioButton } from '../../../../components/radioButton/RadioButton'; import { AgencyInfo } from '../../../../components/agencySelection/AgencyInfo'; diff --git a/src/containers/registration/components/ProposedAgencies/ProposedAgencies.tsx b/src/containers/registration/components/ProposedAgencies/ProposedAgencies.tsx index 1e3863354..528f4981c 100644 --- a/src/containers/registration/components/ProposedAgencies/ProposedAgencies.tsx +++ b/src/containers/registration/components/ProposedAgencies/ProposedAgencies.tsx @@ -12,7 +12,7 @@ import { VALIDITY_VALID, VALIDITY_INVALID } from '../../../../components/registration/registrationHelpers'; -import { AgencyDataInterface } from '../../../../globalState'; +import { AgencyDataInterface } from '../../../../globalState/interfaces'; import { LABEL_TYPES, Text } from '../../../../components/text/Text'; import './proposedAgencies.styles.scss'; import { useTranslation } from 'react-i18next'; diff --git a/src/containers/registration/hooks/useAgenciesForRegistration.ts b/src/containers/registration/hooks/useAgenciesForRegistration.ts index 322ef7e9b..f73ad6e4a 100644 --- a/src/containers/registration/hooks/useAgenciesForRegistration.ts +++ b/src/containers/registration/hooks/useAgenciesForRegistration.ts @@ -2,15 +2,15 @@ import unionBy from 'lodash/unionBy'; import { useContext, useEffect, useMemo, useState } from 'react'; import { apiAgencySelection } from '../../../api'; import { DEFAULT_POSTCODE } from '../../../components/registration/prefillPostcode'; +import { useTenant } from '../../../globalState'; import { AgencyDataInterface, - ConsultingTypeInterface, - useTenant -} from '../../../globalState'; + ConsultingTypeInterface +} from '../../../globalState/interfaces'; import { useConsultantAgenciesAndConsultingTypes } from './useConsultantAgenciesAndConsultingTypes'; import { ConsultingTypeRegistrationDefaults } from '../components/ProposedAgencies/ProposedAgencies'; import { UrlParamsContext } from '../../../globalState/provider/UrlParamsProvider'; -import { TopicsDataInterface } from '../../../globalState/interfaces/TopicsDataInterface'; +import { TopicsDataInterface } from '../../../globalState/interfaces'; interface AgenciesForRegistrationArgs { consultingType: ConsultingTypeInterface; diff --git a/src/containers/registration/hooks/useConsultantAgenciesAndConsultingTypes.ts b/src/containers/registration/hooks/useConsultantAgenciesAndConsultingTypes.ts index 0cb4c7053..5e0e965dd 100644 --- a/src/containers/registration/hooks/useConsultantAgenciesAndConsultingTypes.ts +++ b/src/containers/registration/hooks/useConsultantAgenciesAndConsultingTypes.ts @@ -4,7 +4,7 @@ import unionBy from 'lodash/unionBy'; import { ConsultingTypeInterface, AgencyDataInterface -} from '../../../globalState'; +} from '../../../globalState/interfaces'; import { useAppConfig } from '../../../hooks/useAppConfig'; import { UrlParamsContext } from '../../../globalState/provider/UrlParamsProvider'; diff --git a/src/globalState/helpers/stateHelpers.ts b/src/globalState/helpers/stateHelpers.ts index 735fbbc08..a22acfd16 100644 --- a/src/globalState/helpers/stateHelpers.ts +++ b/src/globalState/helpers/stateHelpers.ts @@ -103,21 +103,16 @@ export const getExtendedSession = ( return buildExtendedSession(session, sessionGroupId); }; -export const getContact = ( - activeSession: ListItemInterface, - unknownTranslation: string -): any => { - if (activeSession && activeSession.user) { +export const getContact = (activeSession: ListItemInterface): any => { + if (activeSession?.user) { return activeSession.user; } - if (activeSession && activeSession.consultant) { + if (activeSession?.consultant) { return activeSession.consultant; } - return { - username: unknownTranslation - }; + return null; }; export const getSessionsDataKeyForSessionType = (sessionType) => { diff --git a/src/globalState/index.ts b/src/globalState/index.ts index fcc60b1f8..e25398c26 100644 --- a/src/globalState/index.ts +++ b/src/globalState/index.ts @@ -1,16 +1,6 @@ export * from './helpers/stateHelpers'; -export * from './interfaces/AppConfig'; - -export * from './interfaces/AuthDataInterface'; -export * from './interfaces/SessionsDataInterface'; -export * from './interfaces/UserDataInterface'; -export * from './interfaces/ConsultingTypeInterface'; -export * from './interfaces/LegalLinkInterface'; -export * from './interfaces/ServerAppConfigInterface'; -export * from './interfaces/TranslationConfig'; -export * from './interfaces/GroupChatConfig'; -export * from './interfaces/AppConfig'; +export * from './provider/ActiveSessionProvider'; export * from './provider/AgencySpecificProvider'; export * from './provider/AnonymousConversationFinishedProvider'; export * from './provider/AnonymousEnquiryAcceptedProvider'; diff --git a/src/globalState/interfaces/AppConfig/AppConfigInterface.ts b/src/globalState/interfaces/AppConfig/AppConfigInterface.ts index 880bcac39..a00e7bab1 100644 --- a/src/globalState/interfaces/AppConfig/AppConfigInterface.ts +++ b/src/globalState/interfaces/AppConfig/AppConfigInterface.ts @@ -8,6 +8,7 @@ import { InitOptions } from 'i18next'; import { OverlaysConfigInterface } from './OverlaysConfigInterface'; import { TranslationConfig } from '../TranslationConfig'; import { GroupChatConfig } from '../GroupChatConfig'; +import { SessionUserDataInterface } from '../SessionsDataInterface'; export interface AppConfigInterface extends AppSettingsInterface { urls: AppConfigUrlsInterface; @@ -37,6 +38,13 @@ export interface AppConfigInterface extends AppSettingsInterface { }; }; }; + user?: { + profile?: { + visibleOnEnquiry: + | boolean + | ((sessionUserData: SessionUserDataInterface) => boolean); + }; + }; } interface ReleaseToggles { diff --git a/src/globalState/interfaces/ConsultingSessionDataInterface.ts b/src/globalState/interfaces/ConsultingSessionDataInterface.ts new file mode 100644 index 000000000..f69a59034 --- /dev/null +++ b/src/globalState/interfaces/ConsultingSessionDataInterface.ts @@ -0,0 +1,22 @@ +import { TopicsDataInterface } from './TopicsDataInterface'; + +export interface ConsultingSessionDataInterface { + age: number; + agencyId: number; + askerId: string; + askerRcId: string; + askerUserName: string; + consultantId: string; + consultantRcId: string; + consultingType: number; + counsellingRelation: string; + feedbackGroupId: string; + gender: string; + groupId: string; + id: number; + isMonitoring: boolean; + isTeamSession: boolean; + mainTopic: TopicsDataInterface; + postcode: string; + topics: TopicsDataInterface[]; +} diff --git a/src/globalState/interfaces/index.ts b/src/globalState/interfaces/index.ts new file mode 100644 index 000000000..adb61be71 --- /dev/null +++ b/src/globalState/interfaces/index.ts @@ -0,0 +1,17 @@ +export * from './AppConfig'; +export * from './AppointmentsDataInterface'; +export * from './AuthDataInterface'; +export * from './BookingsInterface'; +export * from './ConsultingSessionDataInterface'; +export * from './ConsultingTypeInterface'; +export * from './E2EEDataInterface'; +export * from './GroupChatConfig'; +export * from './LegalLinkInterface'; +export * from './ServerAppConfigInterface'; +export * from './SessionsDataInterface'; +export * from './TenantDataInterface'; +export * from './ToolsInterface'; +export * from './TopicsDataInterface'; +export * from './TranslationConfig'; +export * from './UserDataInterface'; +export * from './VideoCallDataInterface'; diff --git a/src/globalState/provider/ActiveSessionProvider.tsx b/src/globalState/provider/ActiveSessionProvider.tsx index 271313a3c..1442347f3 100644 --- a/src/globalState/provider/ActiveSessionProvider.tsx +++ b/src/globalState/provider/ActiveSessionProvider.tsx @@ -1,8 +1,25 @@ -import { createContext } from 'react'; +import * as React from 'react'; +import { createContext, useMemo } from 'react'; import { ExtendedSessionInterface } from '..'; -export const ActiveSessionContext = createContext<{ +type ActiveSessionContextProps = { activeSession: ExtendedSessionInterface | null; reloadActiveSession?: () => void; readActiveSession?: () => void; -}>(null); +}; + +export const ActiveSessionContext = + createContext(null); + +export const ActiveSessionProvider: React.FC = ({ + children, + ...params +}) => { + const contextValue = useMemo(() => params, [params]); + + return ( + + {children} + + ); +}; diff --git a/src/globalState/provider/RocketChatUsersOfRoomProvider.tsx b/src/globalState/provider/RocketChatUsersOfRoomProvider.tsx index 642328788..d95b5ea38 100644 --- a/src/globalState/provider/RocketChatUsersOfRoomProvider.tsx +++ b/src/globalState/provider/RocketChatUsersOfRoomProvider.tsx @@ -5,18 +5,24 @@ import { useCallback, useContext, useEffect, + useMemo, useState } from 'react'; import { RocketChatContext } from './RocketChatProvider'; import { METHOD_GET_USERS_OF_ROOM, + SUB_STREAM_ROOM_MESSAGES, UserResponse } from '../../components/app/RocketChat'; import { ActiveSessionContext } from './ActiveSessionProvider'; +import useUpdatingRef from '../../hooks/useUpdatingRef'; +import { isUserModerator } from '../../components/session/sessionHelpers'; +import { RocketChatGetUserRolesContext } from './RocketChatSytemUsersProvider'; type RocketChatUsersOfRoomContextProps = { ready: boolean; users: UserResponse[]; + moderators: string[]; total: number; reload: (roomId: string) => Promise; }; @@ -25,18 +31,49 @@ export const RocketChatUsersOfRoomContext = createContext(null); type RocketChatUsersOfRoomProviderProps = { + watch?: boolean; children: ReactNode; }; export const RocketChatUsersOfRoomProvider = ({ + watch = false, children }: RocketChatUsersOfRoomProviderProps) => { - const { sendMethod, ready: socketReady } = useContext(RocketChatContext); + const { + sendMethod, + ready: socketReady, + subscribe, + unsubscribe + } = useContext(RocketChatContext); const { activeSession } = useContext(ActiveSessionContext); + const { systemUsers } = useContext(RocketChatGetUserRolesContext); const [ready, setReady] = useState(false); const [total, setTotal] = useState(0); const [users, setUsers] = useState([]); + const [moderators, setModerators] = useState(undefined); + + const canLoadMembers = useMemo( + () => + activeSession?.item && + (!activeSession.isGroup || activeSession.item.active), + [activeSession?.isGroup, activeSession?.item] + ); + + // Get all moderators of room + useEffect(() => { + if (!canLoadMembers) return; + setModerators( + users + .filter((user) => + isUserModerator({ + chatItem: activeSession.item, + rcUserId: user._id + }) + ) + .map((user) => user._id) + ); + }, [canLoadMembers, activeSession?.item, users]); const load = useCallback( async (rid: string) => { @@ -46,41 +83,98 @@ export const RocketChatUsersOfRoomProvider = ({ { limit: 0, skip: 0 } ]); - if (res) { - setUsers(res.records); - setTotal(res.total); - return res.records; + if (!res) console.error('No users found for room: ', rid); + + // Filter system user and users with unencrypted username (Maybe more system users) + const users = (res?.records || []) + .filter( + (member) => + member.username !== 'System' && + member.username.indexOf('enc.') === 0 && + !systemUsers.find( + (systemUser) => systemUser._id === member._id + ) + ) + .map((user) => ({ ...user, displayName: user.name })); + setUsers(users); + setTotal(res?.total || 0); + return users; + }, + [sendMethod, systemUsers] + ); + + const onUsersChange = useCallback( + (args) => { + if (args.length === 0) return; + + // If user added (au) or removed (ru) update members list + if (args.find(({ t }) => t === 'au' || t === 'ru')) { + load(activeSession?.rid); } - console.error('No users found for room: ', rid); - setUsers([]); - setTotal(0); - return []; }, - [sendMethod] + [load, activeSession?.rid] ); + const onUsersChangeRef = useUpdatingRef(onUsersChange); + useEffect(() => { - if (socketReady && activeSession?.rid) { + let subscribed = false; + + if (socketReady && canLoadMembers) { load(activeSession.rid).then(() => { setReady(true); }); + + if (watch) { + subscribed = true; + subscribe( + { + name: SUB_STREAM_ROOM_MESSAGES, + roomId: activeSession?.rid + }, + onUsersChangeRef + ); + } } else if (!activeSession?.rid && activeSession.isEmptyEnquiry) { setReady(true); } return () => { setReady(false); + if (subscribed) { + subscribed = false; + unsubscribe( + { + name: SUB_STREAM_ROOM_MESSAGES, + roomId: activeSession?.rid + }, + onUsersChangeRef + ); + } }; - }, [activeSession?.rid, socketReady, load, activeSession.isEmptyEnquiry]); + }, [ + activeSession?.rid, + socketReady, + load, + activeSession?.isEmptyEnquiry, + canLoadMembers, + subscribe, + unsubscribe, + onUsersChangeRef, + watch + ]); + + const context = useMemo( + () => ({ ready, users, moderators, total, reload: load }), + [ready, users, moderators, total, load] + ); if (!ready) { return null; } return ( - + {children} ); diff --git a/src/globalState/provider/UrlParamsProvider.tsx b/src/globalState/provider/UrlParamsProvider.tsx index faa7cd84d..7d0596bbf 100644 --- a/src/globalState/provider/UrlParamsProvider.tsx +++ b/src/globalState/provider/UrlParamsProvider.tsx @@ -2,10 +2,10 @@ import React, { createContext, FC } from 'react'; import { AgencyDataInterface, ConsultantDataInterface, - ConsultingTypeInterface -} from '..'; + ConsultingTypeInterface, + TopicsDataInterface +} from '../interfaces'; import useUrlParamsLoader from '../../utils/useUrlParamsLoader'; -import { TopicsDataInterface } from '../interfaces/TopicsDataInterface'; export const UrlParamsContext = createContext<{ agency: AgencyDataInterface | null; diff --git a/src/hooks/useAppConfig.tsx b/src/hooks/useAppConfig.tsx index 9991ca3b0..d6d13463a 100644 --- a/src/hooks/useAppConfig.tsx +++ b/src/hooks/useAppConfig.tsx @@ -1,4 +1,5 @@ -import { AppConfigContext, AppConfigInterface } from '../globalState'; +import { AppConfigContext } from '../globalState'; +import { AppConfigInterface } from '../globalState/interfaces'; import React from 'react'; export const useAppConfig = (): AppConfigInterface => { diff --git a/src/hooks/useBrowserNotification.ts b/src/hooks/useBrowserNotification.ts index 669037ee2..4d244123d 100644 --- a/src/hooks/useBrowserNotification.ts +++ b/src/hooks/useBrowserNotification.ts @@ -1,7 +1,7 @@ import { useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { useHistory } from 'react-router-dom'; -import { ListItemInterface } from '../globalState'; +import { ListItemInterface } from '../globalState/interfaces'; import { isBrowserNotificationTypeEnabled, sendNotification diff --git a/src/hooks/useE2EE.tsx b/src/hooks/useE2EE.tsx index 6ac7976c9..03dd5550a 100644 --- a/src/hooks/useE2EE.tsx +++ b/src/hooks/useE2EE.tsx @@ -16,7 +16,6 @@ import { ALIAS_MESSAGE_TYPES, apiSendAliasMessage } from '../api/apiSendAliasMessage'; -import { RocketChatGetUserRolesContext } from '../globalState/provider/RocketChatSytemUsersProvider'; import { RocketChatUsersOfRoomContext } from '../globalState/provider/RocketChatUsersOfRoomProvider'; export const ENCRYPT_ROOM_STATE_GET_MEMBERS = 'get_members'; @@ -76,7 +75,6 @@ export const useE2EE = ( const { subscriptionsReady, subscriptions, roomsReady, rooms } = useContext( RocketChatSubscriptionsContext ); - const { systemUsers } = useContext(RocketChatGetUserRolesContext); const { reload: reloadUsersOfRoom } = useContext( RocketChatUsersOfRoomContext ); @@ -118,15 +116,9 @@ export const useE2EE = ( const usersOfRoom = await reloadUsersOfRoom(roomId); - // Filter system user and users with unencrypted username (Maybe more system users) + // Filter active user skip it const filteredMembers = usersOfRoom.filter( - (member) => - member.username !== 'System' && - member.username.indexOf('enc.') === 0 && - !systemUsers.find( - (systemUser) => systemUser._id === member._id - ) && - (!skipCurrentUser || member._id !== rcUid) + (member) => !skipCurrentUser || member._id !== rcUid ); let unhandledMembers = filteredMembers.length; @@ -222,7 +214,6 @@ export const useE2EE = ( [ rid, reloadUsersOfRoom, - systemUsers, rcUid, keyData.keyID, keyData.sessionKeyExportedString diff --git a/src/hooks/useUserMutate.ts b/src/hooks/useUserMutate.ts index e357f458b..e71a2887b 100644 --- a/src/hooks/useUserMutate.ts +++ b/src/hooks/useUserMutate.ts @@ -1,7 +1,8 @@ import { useCallback, useContext, useState } from 'react'; import { apiPutEmail } from '../api'; import { apiPatchUserData } from '../api/apiPatchUserData'; -import { UserDataContext, UserDataInterface } from '../globalState'; +import { UserDataContext } from '../globalState'; +import { UserDataInterface } from '../globalState/interfaces'; interface UserMutateOptions { onSuccess?: () => void; diff --git a/src/i18n.ts b/src/i18n.ts index 37c35b5e4..e01a64f2c 100644 --- a/src/i18n.ts +++ b/src/i18n.ts @@ -15,7 +15,7 @@ import { STORAGE_KEY_ENABLE_TRANSLATION_CHECK, STORAGE_KEY_TRANSLATION_DISABLE_CACHE } from './components/devToolbar/DevToolbar'; -import { TranslationConfig } from './globalState/interfaces/TranslationConfig'; +import { TranslationConfig } from './globalState/interfaces'; import { FETCH_METHODS, FETCH_SUCCESS, fetchData } from './api'; export const FALLBACK_LNG = 'de'; diff --git a/src/resources/i18n/de/common.json b/src/resources/i18n/de/common.json index 2de3c829f..8d762db8a 100644 --- a/src/resources/i18n/de/common.json +++ b/src/resources/i18n/de/common.json @@ -1,5 +1,11 @@ { "absence": { + "checkbox": { + "label": "Ratsuchende über meine Abwesenheit informieren" + }, + "input": { + "infoText": "Ratsuchende sehen diese Abwesenheitsnachricht, können Ihnen aber weiterhin schreiben." + }, "overlay": { "button1": { "label": "Ja" @@ -11,15 +17,8 @@ "buttonLabel": "Schließen", "headline": "Der Status Ihrer Abwesenheitsnachricht wurde erfolgreich aktualisiert." }, - "copy": "Ihre Abwesenheitsnachricht ist momentan aktiviert.
Möchten Sie diese deaktivieren?", "headline": "Willkommen zurück!" - }, - "checkbox": { - "label": "Ratsuchende über meine Abwesenheit informieren" - }, - "input": { - "infoText": "Ratsuchende sehen diese Abwesenheitsnachricht, können Ihnen aber weiterhin schreiben." } }, "aliases": { @@ -56,8 +55,8 @@ }, "headline": "Möchten Sie diesen Chat beenden?", "success": { - "headline": "Der Chat wurde erfolgreich beendet.", - "button": "Zu Caritas.de" + "button": "Zu Caritas.de", + "headline": "Der Chat wurde erfolgreich beendet." } } }, @@ -71,6 +70,11 @@ } }, "waitingroom": { + "closed": { + "description": "Auf unserer Website finden Sie im jeweiligen Themenbereich die Öffnungszeiten des Chats.", + "headline": "Momentan ist unser Live-Chat nicht besetzt.", + "illustrationTitle": "Chat geschlossen" + }, "dataProtection": { "button": "Ich bin einverstanden", "description": "Danach dürfen unsere Berater_innen einen Chat mit Ihnen starten.", @@ -82,25 +86,20 @@ "description": "Es tut uns leid, da ist wohl etwas schiefgelaufen.
Versuchen Sie es erneut.", "headline": "Ups!" }, - "closed": { - "headline": "Momentan ist unser Live-Chat nicht besetzt.", - "description": "Auf unserer Website finden Sie im jeweiligen Themenbereich die Öffnungszeiten des Chats.", - "illustrationTitle": "Chat geschlossen" - }, "headline": "Bitte haben Sie etwas Geduld", "info": { "accountDeletion": "Um Ihre Anonymität zu schützen, löschen wir Ihre Nachrichten spätestens 48 Stunden nachdem der Chat beendet wurde." }, "overlay": { "acceptance": { - "headline": "Herzlich willkommen!", + "button": "Jetzt chatten", "copy": "Sie werden von Ihrer Berater_in im Chat erwartet. Sind Sie bereit?", - "button": "Jetzt chatten" + "headline": "Herzlich willkommen!" }, "rejection": { - "headline": "Chat-Zeit beendet.", + "button": "Zur Registrierung", "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 Werktagen bei Ihnen.", - "button": "Zur Registrierung" + "headline": "Chat-Zeit beendet." } }, "redirect": { @@ -118,25 +117,27 @@ } }, "app": { - "title": "Beratung & Hilfe", + "back": "Zurück", "claim": "Online. Anonym. Sicher.", - "save": "Speichern", - "remove": "Entfernen", - "download": "Herunterladen", - "stage": { "title": "Beratung & Hilfe" }, - "logout": "Abmelden", "close": "Schließen", - "open": "Öffnen", + "closeBanner": "Banner schließen", "delete": "Eingabe löschen", - "scrollDown": "Nach unten scrollen", + "download": "Herunterladen", + "faulty": "Fehlerhaft", + "logout": "Abmelden", "menu": "Weitere Funktionen", - "back": "Zurück", "next": "Weiter", - "successful": "Erfolgreich", - "faulty": "Fehlerhaft", + "open": "Öffnen", + "remove": "Entfernen", + "save": "Speichern", + "scrollDown": "Nach unten scrollen", "selectLanguage": "Sprache wählen", - "wait": "Bitte warten", - "closeBanner": "Banner schließen" + "stage": { + "title": "Beratung & Hilfe" + }, + "successful": "Erfolgreich", + "title": "Beratung & Hilfe", + "wait": "Bitte warten" }, "appointments": { "copy": { @@ -149,6 +150,7 @@ "title": "Einladungslink in Zwischenablage kopieren" } }, + "newAppointment": "Neuer Videotermin", "noAppointments": "Aktuell gibt es keine Termine", "notification": { "saved": { @@ -162,7 +164,6 @@ "time": "Beginn (hh:mm)", "title": "Titel" }, - "start": "Video-Call starten", "overlay": { "add": { "button": { @@ -190,7 +191,8 @@ "copy": "Sie starten jetzt den Video-Call. Eingeladene Teilnehmer_innen können ab sofort mit dem Einladungslink beitreten.", "headline": "Video-Call starten" } - } + }, + "start": "Video-Call starten" }, "qrCode": { "headline": "Einladungslink QR-Code", @@ -198,8 +200,7 @@ }, "showLess": "Weniger anzeigen", "showMore": "Mehr anzeigen", - "title": "Terminübersicht", - "newAppointment": "Neuer Videotermin" + "title": "Terminübersicht" }, "archive": { "overlay": { @@ -217,8 +218,8 @@ } }, "submitInfo": { - "message": "Sobald Sie oder der Ratsuchende eine Nachricht schreibt, wird der Nachrichtenverlauf automatisch wieder in die Liste der Ratsuchenden eingeordnet.", - "headline": "Die Beratung ist archiviert." + "headline": "Die Beratung ist archiviert.", + "message": "Sobald Sie oder der Ratsuchende eine Nachricht schreibt, wird der Nachrichtenverlauf automatisch wieder in die Liste der Ratsuchenden eingeordnet." } }, "attachments": { @@ -266,10 +267,10 @@ "1": "Sie haben ", "2": " gebannt." }, - "trigger": "Bannen", "overlay": { "close": " Hinweis schließen" - } + }, + "trigger": "Bannen" }, "banned": { "headline": "Sie wurden gebannt.", @@ -287,21 +288,22 @@ "calender": { "add": "Kalender hinzufügen", "integration": { - "office365": "Office 365/ Outlook Kalender", + "apple": "Apple Kalender", "caldav": "CalDav Server Kalender", "google": "Google Kalender", - "apple": "Apple Kalender" + "office365": "Office 365/ Outlook Kalender" }, "synchronise": "Synchronisieren", "synchroniseCalender": { - "title": "Kalender synchronisieren", - "description": "Synchronisieren Sie Ihren Kalender, den Sie in Ihrer Beratungsstelle nutzen, mit der Online Beratung. Ihre Verfügbarkeit wird dann automatisch angepasst und Terminkonflikte verhindert." + "description": "Synchronisieren Sie Ihren Kalender, den Sie in Ihrer Beratungsstelle nutzen, mit der Online Beratung. Ihre Verfügbarkeit wird dann automatisch angepasst und Terminkonflikte verhindert.", + "title": "Kalender synchronisieren" }, "synchronised": { "calendars": "Synchronisierte Kalender" } }, "event": { + "appointmentType": "Gewünschte Terminart", "asker": "Ratsuchende_r", "booking": { "cancel": "Absagen", @@ -310,15 +312,24 @@ "copy": { "link": { "notification": { - "title": "Link kopiert", - "text": "Einlandungslink zum Video-Call in Zwischenablage kopiert!" + "text": "Einlandungslink zum Video-Call in Zwischenablage kopiert!", + "title": "Link kopiert" } } }, "description": "Ihre Nachricht zum Termin", + "linkVideo": "Link zum Video-Call", + "location": { + "CHAT": "Text-Chat", + "IN_PERSON": "In der Beratungsstelle", + "LINK": "Videoberatung", + "PHONE_CALL": "Telefon-Beratung", + "USER_PHONE": "Telefon-Beratung", + "VIDEO_CALL": "Videoberatung" + }, "show": { - "more": "Mehr anzeigen", - "less": "Weniger anzeigen" + "less": "Weniger anzeigen", + "more": "Mehr anzeigen" }, "tab": { "booked": "Gebuchte Termine", @@ -326,32 +337,17 @@ "expired": "Vergangen", "settings": "Einstellungen" }, + "tooltip": { + "adviceSeeker": "Falls Ihr:e Berater:in den Termin nicht in dem von Ihnen gewählten Modus wahrnehmen kann, generieren wir für Sie immer einen Link zum Video-Call als Alternative.", + "consultant": "Falls Sie den Termin nicht in dem vom Ratsuchenden gewählten Modus wahrnehmen können, generieren wir für Sie immer einen Link zum Video-Call als Alternative." + }, "your": { "counselor": "Ihr Berater" - }, - "linkVideo": "Link zum Video-Call", - "appointmentType": "Gewünschte Terminart", - "location": { - "IN_PERSON": "In der Beratungsstelle", - "PHONE_CALL": "Telefon-Beratung", - "USER_PHONE": "Telefon-Beratung", - "VIDEO_CALL": "Videoberatung", - "CHAT": "Text-Chat", - "LINK": "Videoberatung" - }, - "tooltip": { - "consultant": "Falls Sie den Termin nicht in dem vom Ratsuchenden gewählten Modus wahrnehmen können, generieren wir für Sie immer einen Link zum Video-Call als Alternative.", - "adviceSeeker": "Falls Ihr:e Berater:in den Termin nicht in dem von Ihnen gewählten Modus wahrnehmen kann, generieren wir für Sie immer einen Link zum Video-Call als Alternative." } }, "info": { "video": "Videoberatung" }, - "video": { - "button": { - "label": "Video-Call starten" - } - }, "mobile": { "calendar": { "label": "Termin erstellen" @@ -359,30 +355,35 @@ }, "my": { "booking": { - "title": "Aktuell sind keine Termine geplant.", - "schedule": "Vereinbaren Sie jetzt einen Termin mit" + "schedule": "Vereinbaren Sie jetzt einen Termin mit", + "title": "Aktuell sind keine Termine geplant." } }, - "schedule": "Termin vereinbaren" + "schedule": "Termin vereinbaren", + "video": { + "button": { + "label": "Video-Call starten" + } + } }, "chatFlyout": { + "archive": "Archivieren", "askerProfil": "Ratsuchendenprofil", "dataProtection": "Datenschutz", + "dearchive": "Dearchivieren", + "editGroupChat": "Chat-Einstellungen", "feedback": "Feedback", "groupChatInfo": "Chat-Info", "imprint": "Impressum", - "editGroupChat": "Chat-Einstellungen", "leaveGroupChat": "Chat verlassen", - "stopGroupChat": "Chat beenden", - "archive": "Archivieren", - "dearchive": "Dearchivieren", - "remove": "Löschen" + "remove": "Löschen", + "stopGroupChat": "Chat beenden" }, "consultant": { - "jobTitle": "Berater_in", "absent": { "message": " ist abwesend" - } + }, + "jobTitle": "Berater_in" }, "date": { "day": { @@ -483,8 +484,8 @@ } }, "successOverlay": { - "headline": "Sie haben Ihren Account bei der Caritas Beratung & Hilfe erfolgreich gelöscht.", - "button": "Schließen" + "button": "Schließen", + "headline": "Sie haben Ihren Account bei der Caritas Beratung & Hilfe erfolgreich gelöscht." } }, "deleteSession": { @@ -506,53 +507,53 @@ } }, "e2ee": { - "hint": "Ihre Nachrichten sind Ende-zu-Ende verschlüsselt. Das bedeutet, niemand außerhalb dieses Chats kann die Nachrichten lesen. Nicht einmal die Online-Beratungs-Plattform.", - "message": { - "encryption": { - "error": "Nachricht verschlüsselt - Fehler beim Entschlüsseln", - "text": "Nachricht verschlüsselt" - } - }, "attachment": { - "encrypted": "Datei für Download entschlüsseln", - "is_decrypting": "Datei wird entschlüsselt", "decryption_error": "Fehler beim Entschlüsseln", - "save": "Datei downloaden", + "encrypted": "Datei für Download entschlüsseln", "error": { - "title": "Leider, konnten wir die Datei nicht entschlüsseln und downloaden.", - "text": "Bitten Sie den Sender oder die Senderin, die Datei erneut zu schicken. Downloaden Sie dann die neue Datei." - } + "text": "Bitten Sie den Sender oder die Senderin, die Datei erneut zu schicken. Downloaden Sie dann die neue Datei.", + "title": "Leider, konnten wir die Datei nicht entschlüsseln und downloaden." + }, + "is_decrypting": "Datei wird entschlüsselt", + "save": "Datei downloaden" }, + "hint": "Ihre Nachrichten sind Ende-zu-Ende verschlüsselt. Das bedeutet, niemand außerhalb dieses Chats kann die Nachrichten lesen. Nicht einmal die Online-Beratungs-Plattform.", "inProgress": { - "headline": "Einen Moment bitte.", + "confirm": "Bitte warten Sie, bis die Verschlüsselung abgeschlossen ist!", "copy": "Ihre Sicherheit ist uns wichtig! Wir verschlüsseln gerade Ihren Chat. Dies kann einen Moment dauern.", - "confirm": "Bitte warten Sie, bis die Verschlüsselung abgeschlossen ist!" + "headline": "Einen Moment bitte." + }, + "message": { + "encryption": { + "error": "Nachricht verschlüsselt - Fehler beim Entschlüsseln", + "text": "Nachricht verschlüsselt" + } }, "roomNotFound": { "notice": { "line1": "Ohh!", - "line2": "Es tut uns leid, da ist wohl etwas schief gelaufen.", + "line2": "Es tut uns leid, da ist wohl etwas schiefgelaufen.", "line3": "Bitte laden Sie die Seite neu und probieren Sie es nochmal.", "link": "Seite neu laden" } }, "subscriptionKeyLost": { "message": { + "more": "Mehr erfahren", "primary": "Ein_e Chat-Teilnehmer_in hat keinen Zugriff mehr auf den Nachrichtenverlauf.", - "secondary": "Ein_e Chat-Teilnehmer_in hatte zwischenzeitlich keinen Zugriff mehr auf den Nachrichtenverlauf. Nun können alle Chat-Teilnehmer wieder auf den Nachrichtenverlauf zugreifen.", - "more": "Mehr erfahren" + "secondary": "Ein_e Chat-Teilnehmer_in hatte zwischenzeitlich keinen Zugriff mehr auf den Nachrichtenverlauf. Nun können alle Chat-Teilnehmer wieder auf den Nachrichtenverlauf zugreifen." }, "notice": { "link": "Benachrichtigung schicken", + "more": "Mehr erfahren", "text": "Da Sie Ihr Passwort zurückgesetzt haben, sind die Nachrichten für Sie momentan nicht lesbar. Sobald ein_e Chat-Teilnehmer_in den Chat wieder öffnet, können Sie die Nachrichten wieder lesen und neue schreiben.", - "title": "Ihre Sicherheit ist uns wichtig!", - "more": "Mehr erfahren" + "title": "Ihre Sicherheit ist uns wichtig!" }, "overlay": { - "copy": "Ihre Nachrichten sind aus Sicherheitsgründen Ende-zu-Ende verschlüsselt. Das bedeutet, niemand außerhalb dieses Chats kann die Nachrichten lesen. Nicht einmal die Online-Beratungs-Plattform.

Wenn das Passwort zurückgesetzt wird, sind die Nachrichten vorübergehend nicht lesbar. Sobald ein_e weitere_r Chat-Teilnehmer_in den Chat wieder öffnet, können die Nachrichten neu verschlüsselt werden. Somit können wieder allen Chat-Teilnehmer_innen Nachrichten lesen und schreiben.", "button": { "close": "Schließen" }, + "copy": "Ihre Nachrichten sind aus Sicherheitsgründen Ende-zu-Ende verschlüsselt. Das bedeutet, niemand außerhalb dieses Chats kann die Nachrichten lesen. Nicht einmal die Online-Beratungs-Plattform.

Wenn das Passwort zurückgesetzt wird, sind die Nachrichten vorübergehend nicht lesbar. Sobald ein_e weitere_r Chat-Teilnehmer_in den Chat wieder öffnet, können die Nachrichten neu verschlüsselt werden. Somit können wieder allen Chat-Teilnehmer_innen Nachrichten lesen und schreiben.", "headline": "Ende-zu-Ende Verschlüsselung" } } @@ -564,8 +565,13 @@ }, "anonymous": { "infoLabel": { - "start": "Starten Sie nun den Chat mit ", - "end": "." + "end": ".", + "start": "Starten Sie nun den Chat mit " + } + }, + "language": { + "selection": { + "headline": "Bitte wählen Sie die Sprache, in der Sie beraten werden wollen." } }, "write": { @@ -578,6 +584,12 @@ "iconTitle": "Willkommen" }, "input": { + "attachement": "Anhang hinzufügen", + "button": { + "title": "Nachricht senden" + }, + "emojies": "Emoji einfügen", + "format": "Text formatieren", "placeholder": { "asker": "Schreiben Sie uns, was Sie bewegt.", "consultant": "Nachricht an Klient_in schreiben", @@ -586,27 +598,17 @@ "peer": "Nachricht an Teamleiter_in schreiben" }, "groupChat": "Nachricht schreiben" - }, - "button": { - "title": "Nachricht senden" - }, - "attachement": "Anhang hinzufügen", - "emojies": "Emoji einfügen", - "format": "Text formatieren" + } }, "overlay": { - "copy": "Innerhalb von zwei Werktagen erhalten Sie eine Antwort von uns.", "button": "Zur Nachricht", + "copy": "Innerhalb von zwei Werktagen erhalten Sie eine Antwort von uns.", "headline": "Vielen Dank für Ihre Nachricht!" } - }, - "language": { - "selection": { - "headline": "Bitte wählen Sie die Sprache, in der Sie beraten werden wollen." - } } }, "error": { + "login": "Einloggen", "statusCodes": { "400": { "description": "Die von Ihnen eingegebene URL ist ungültig.", @@ -624,49 +626,25 @@ "description": "Wie es aussieht, haben wir momentan ein Serverproblem.
Versuchen Sie es später noch einmal.", "headline": "Ups!" } - }, - "login": "Einloggen" + } }, "furtherSteps": { - "consultant.info": "Der_die Ratsuchende wurde folgendermaßen über die nächsten Schritte informiert.", - "headline": "So geht es weiter:", "arrowTitle": "Weiter", - "step1": { - "info": "Wir haben Ihre Nachricht erhalten.", - "iconTitle": "Geöffneter Brief" - }, - "step2": { - "info": "Jetzt finden wir eine_n passende_n Berater_in für Sie.", - "iconTitle": "Berater Brille" - }, - "step3": { - "info": "Ihr_e Berater_in antwortet innerhalb von 2 Werktagen.", - "iconTitle": "Sprechblasen" - }, - "emailNotification": { - "button": "E-Mail-Adresse angeben", - "headline": "E-Mail-Benachrichtigung erhalten & Passwort zurücksetzen", - "infoText": "Wenn Sie Ihre E-Mail-Adresse angeben (freiwillig)

  • erhalten Sie eine E-Mail-Benachrichtigung, wenn Ihre Berater_in Ihnen geschrieben hat
  • können Sie Ihr Passwort zurücksetzen, falls Sie es vergessen haben.
Ihre E-Mail-Adresse kann von den Berater_innen nicht eingesehen werden." - }, - "twoFactorAuth": { - "button": "Konto schützen", - "headline": "Der Schutz Ihrer Daten ist uns wichtig", - "infoText": "Sichern Sie Ihr Konto vor einem möglichen unbefugten Zugriff. Nutzen Sie einen zweiten Faktor (App oder E-Mail) für die Anmeldung in der Online-Beratung." - }, + "consultant.info": "Der_die Ratsuchende wurde folgendermaßen über die nächsten Schritte informiert.", "email": { "overlay": { - "headline": "E-Mail-Adresse angeben", - "input": { - "label": "E-Mail", - "valid": "Ihre E-Mail-Adresse ist gültig.", - "invalid": "Ihre E-Mail-Adresse ist nicht gültig.", - "unavailable": "Diese E-Mail-Adresse ist bereits registriert." - }, "button1": { "label": "Speichern" }, "button2": { "label": "Schließen" + }, + "headline": "E-Mail-Adresse angeben", + "input": { + "invalid": "Ihre E-Mail-Adresse ist nicht gültig.", + "label": "E-Mail", + "unavailable": "Diese E-Mail-Adresse ist bereits registriert.", + "valid": "Ihre E-Mail-Adresse ist gültig." } }, "success": { @@ -675,37 +653,31 @@ } } }, - "voluntaryInfo": { - "headline": "Wir wollen Sie bestmöglichst beraten", - "infoText": "Dabei hilft es uns, wenn Sie weitere freiwillige Angaben zu sich und Ihrem Anliegen machen.", - "button": "Angaben hinzufügen", - "overlay": { - "button1": { - "label": "Speichern" - }, - "button2": { - "label": "Schließen" - }, - "copy": "Für die Beratung würden uns folgende Angaben sehr helfen.", - "headline": "Freiwillige Angaben", - "success": { - "headline": "Vielen Dank. Ihre freiwilligen Angaben wurden erfolgreich gespeichert." - } - } + "emailNotification": { + "button": "E-Mail-Adresse angeben", + "headline": "E-Mail-Benachrichtigung erhalten & Passwort zurücksetzen", + "infoText": "Wenn Sie Ihre E-Mail-Adresse angeben (freiwillig)
  • erhalten Sie eine E-Mail-Benachrichtigung, wenn Ihre Berater_in Ihnen geschrieben hat
  • können Sie Ihr Passwort zurücksetzen, falls Sie es vergessen haben.
Ihre E-Mail-Adresse kann von den Berater_innen nicht eingesehen werden." + }, + "headline": "So geht es weiter:", + "step1": { + "iconTitle": "Geöffneter Brief", + "info": "Wir haben Ihre Nachricht erhalten." + }, + "step2": { + "iconTitle": "Berater Brille", + "info": "Jetzt finden wir eine_n passende_n Berater_in für Sie." + }, + "step3": { + "iconTitle": "Sprechblasen", + "info": "Ihr_e Berater_in antwortet innerhalb von 2 Werktagen." + }, + "twoFactorAuth": { + "button": "Konto schützen", + "headline": "Der Schutz Ihrer Daten ist uns wichtig", + "infoText": "Sichern Sie Ihr Konto vor einem möglichen unbefugten Zugriff. Nutzen Sie einen zweiten Faktor (App oder E-Mail) für die Anmeldung in der Online-Beratung." } }, "groupChat": { - "qrCode": { - "headline": "Ihr Gruppenchat QR-Code", - "text": "Wenn Sie diesen QR-Code mit jemandem teilen, kann diese Person ihn mit der Handykamera scannen, um der Gruppe beizutreten. Sie können den Code auch herunterladen.", - "download": { - "filename": "qr-code-{{filename}}" - }, - "overlay": { - "close": "Schließen", - "download": "QR-Code als .png herunterladen" - } - }, "active": { "sessionInfo": { "subscriber": "Teilnehmende" @@ -716,7 +688,19 @@ "label": "Abbrechen" } }, + "copy": { + "link": { + "notification": { + "text": "Link in Zwischenablage kopiert!", + "title": "Link kopiert" + }, + "text": "Einladungs-Link kopieren" + } + }, "create": { + "agencySelect": { + "label": "Beratungsstelle" + }, "beginDateInput": { "label": "Beginn (hh:mm)" }, @@ -735,12 +719,9 @@ "option5": "2,5 Stunden", "option6": "3 Stunden" }, - "agencySelect": { - "label": "Beratungsstelle" - }, "hintMessage": { - "label": "Hinweisfeld", - "explanation": "Hinweis: Diese Informationen sind für alle Administrator:innen des Gruppenchats sichtbar." + "explanation": "Hinweis: Diese Informationen sind für alle Administrator:innen des Gruppenchats sichtbar.", + "label": "Hinweisfeld" }, "listItem": { "label": "Neuer Chat" @@ -760,8 +741,8 @@ }, "createError": { "overlay": { - "headline": "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.", - "buttonLabel": "Schließen" + "buttonLabel": "Schließen", + "headline": "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut." } }, "createSuccess": { @@ -770,28 +751,19 @@ "headline": "Sie haben erfolgreich einen Chat angelegt." } }, - "copy": { - "link": { - "text": "Einladungs-Link kopieren", - "notification": { - "text": "Link in Zwischenablage kopiert!", - "title": "Link kopiert" - } - } - }, "edit": { "title": "Chat-Einstellungen" }, "info": { "headline": "Chat-Info", - "subscribers": { - "headline": "Teilnehmende", - "empty": "keine Teilnehmenden vorhanden" - }, "settings": { + "agency": "Beratungsstelle", + "createDate": "Erstellungsdatum", + "creator": "Ersteller", "duration": "Dauer", "edit": "Bearbeiten", "headline": "Chat-Einstellungen", + "hintMessage": "Hinweis", "repetition": { "label": "Wiederholungen", "single": "einmalig", @@ -799,11 +771,11 @@ }, "startDate": "Datum", "startTime": "Beginn", - "topic": "Thema des Chats", - "agency": "Beratungsstelle", - "hintMessage": "Hinweis", - "creator": "Ersteller", - "createDate": "Erstellungsdatum" + "topic": "Thema des Chats" + }, + "subscribers": { + "empty": "keine Teilnehmenden vorhanden", + "headline": "Teilnehmende" } }, "join": { @@ -849,10 +821,21 @@ "listItem": { "activeLabel": "Aktiv", "subjectEmpty": { - "self": "Sie haben den Chat erstellt.", - "other": "Der Chat wurde erstellt." + "other": "Der Chat wurde erstellt.", + "self": "Sie haben den Chat erstellt." } }, + "qrCode": { + "download": { + "filename": "qr-code-{{filename}}" + }, + "headline": "Ihr Gruppenchat QR-Code", + "overlay": { + "close": "Schließen", + "download": "QR-Code als .png herunterladen" + }, + "text": "Wenn Sie diesen QR-Code mit jemandem teilen, kann diese Person ihn mit der Handykamera scannen, um der Gruppe beizutreten. Sie können den Code auch herunterladen." + }, "save": { "button": { "label": "Speichern" @@ -889,33 +872,13 @@ "help": { "googleChrome": "Google Chrome", "msEdge": "Microsoft Edge", - "safari": "Safari", "openInNewTab": "In neuem Tab öffnen", + "safari": "Safari", "videoCall": { - "waitingRoom": { - "headline": "Es liegt nicht an Ihnen, sondern an Ihrem Browser.", - "infoBox": { - "headline": "Ihr Browser unterstützt keine Video-Calls.", - "text": "Damit Sie an Video-Calls teilnehmen können, verwenden Sie bitte Google Chrome, Microsoft Edge oder Safari." - }, - "subline1": "Haben Sie noch keinen Google Chrome, Microsoft Edge oder Safari?", - "text1": "Laden Sie sich einen der Browser herunter.", - "subline2": "Sie haben bereits Google Chrome, Microsoft Edge oder Safari?", - "text2": "Öffnen Sie nun Ihren Link zur Online-Beratung mit einem der unterstützten Browser.", - "copyLink": "Link kopieren", - "copiedLink": "Link kopiert!" - }, - "banner": { - "content": "Bitte verwenden Sie einen anderen Browser, um Video-Calls zu ermöglichen.", - "more": "Mehr erfahren" - }, "asker": { "headline": "Video-Call", "intro": "Damit Sie an Video-Calls teilnehmen können, müssen Sie sich über einen der unterstützten Browser anmelden. Die Chat-Beratung funktioniert weiterhin mit Firefox.", "steps": { - "1.1": "Folgen Sie dem Link zu ", - "1.2": " oder ", - "1.3": " (nur für macOS und iOS verfügbar)", "2": "Laden Sie einen der unterstützten Browser herunter.", "3": "Installieren Sie diesen auf Ihrem PC/Laptop/Tablet/Smartphone.", "4": { @@ -924,19 +887,23 @@ }, "5": "Melden Sie sich bei der Online-Beratung an.", "6": "Bitten Sie Ihre_n Berater_in Sie nochmals anzurufen.", + "1.1": "Folgen Sie dem Link zu ", + "1.2": " oder ", + "1.3": " (nur für macOS und iOS verfügbar)", "headline": { "1": "Schritt-für-Schritt-Anleitung", "2": "Sie haben bereits Google Chrome, Microsoft Edge oder Safari?" } } }, + "banner": { + "content": "Bitte verwenden Sie einen anderen Browser, um Video-Calls zu ermöglichen.", + "more": "Mehr erfahren" + }, "consultant": { "headline": "Video-Call", "intro": "Um einen Video-Call durchführen zu können, müssen Sie sich über einen der unterstützten Browser anmelden. Die Chat-Beratung funktioniert weiterhin mit Firefox.", "steps": { - "1.1": "Folgen Sie dem Link zu ", - "1.2": " oder ", - "1.3": " (nur für macOS und iOS verfügbar)", "2": "Laden Sie einen der unterstützten Browser herunter. Dafür brauchen Sie möglicherweise die Unterstützung Ihrer EDV.", "3": "Installieren Sie diesen auf Ihrem PC/Laptop/Tablet/Smartphone.", "4": { @@ -945,6 +912,9 @@ }, "5": "Melden Sie sich bei der Online-Beratung an.", "6": "Starten Sie den Video-Call.", + "1.1": "Folgen Sie dem Link zu ", + "1.2": " oder ", + "1.3": " (nur für macOS und iOS verfügbar)", "headline": { "1": "Schritt-für-Schritt-Anleitung", "2": "Sie haben bereits Google Chrome, Microsoft Edge oder Safari?" @@ -958,17 +928,29 @@ }, "text": "Link kopieren", "title": "Link in Zwischenablage kopieren" + }, + "waitingRoom": { + "copiedLink": "Link kopiert!", + "copyLink": "Link kopieren", + "headline": "Es liegt nicht an Ihnen, sondern an Ihrem Browser.", + "infoBox": { + "headline": "Ihr Browser unterstützt keine Video-Calls.", + "text": "Damit Sie an Video-Calls teilnehmen können, verwenden Sie bitte Google Chrome, Microsoft Edge oder Safari." + }, + "subline1": "Haben Sie noch keinen Google Chrome, Microsoft Edge oder Safari?", + "subline2": "Sie haben bereits Google Chrome, Microsoft Edge oder Safari?", + "text1": "Laden Sie sich einen der Browser herunter.", + "text2": "Öffnen Sie nun Ihren Link zur Online-Beratung mit einem der unterstützten Browser." } } }, "jitsi": { "btn": { - "default": "Video-Link kopieren", - "copied": "Video-Link wurde in die Zwischenablage kopiert" + "copied": "Video-Link wurde in die Zwischenablage kopiert", + "default": "Video-Link kopieren" } }, "languages": { - "de": "Deutsch", "aa": "Afar", "ab": "Abchasisch", "ae": "Avestisch", @@ -1001,6 +983,7 @@ "cv": "Tschuwaschisch", "cy": "Walisisch", "da": "Dänisch", + "de": "Deutsch", "dv": "Dhivehi", "dz": "Dzongkha", "ee": "Ewe", @@ -1154,31 +1137,30 @@ "zu": "isiZulu" }, "login": { + "button": { + "label": "Anmelden" + }, "consultant": { "overlay": { - "success": { - "headline": "Herzlich willkommen", - "button": "Weiter" - }, "cancel": { "button": "Zur Übersicht" + }, + "success": { + "button": "Weiter", + "headline": "Herzlich willkommen" } } }, - "button": { - "label": "Anmelden" - }, "headline": "Login", "legal": { "infoText": { - "impressum": "Impressum", - "dataprotection": "Datenschutzerklärung" + "dataprotection": "Datenschutzerklärung", + "impressum": "Impressum" } }, "password": { - "label": "Passwort", "hide": "Passwort verbergen", - "show": "Passwort anzeigen", + "label": "Passwort", "reset": { "warn": { "overlay": { @@ -1190,12 +1172,13 @@ "title": "Durch das Zurücksetzen des Passworts kann der Zugriff auf Ihre Nachrichten eventuell nicht mehr gewährleistet werden." } } - } + }, + "show": "Passwort anzeigen" }, "register": { "infoText": { - "title": "Noch nicht registriert?", - "copy": "Wir beraten Sie gerne zu folgenden Themen:" + "copy": "Wir beraten Sie gerne zu folgenden Themen:", + "title": "Noch nicht registriert?" }, "linkLabel": "Zu den Beratungsthemen" }, @@ -1218,6 +1201,7 @@ "missing": "Bitte geben Sie den Code aus Ihrer App für die Zwei-Faktor-Authentifizierung ein." } }, + "deletedAccount": "Ihr Account wurde zur Löschung vorgemerkt. Ihre Daten werden in den nächsten 24 Stunden gelöscht.", "email": { "otp": { "missing": "Bitte geben Sie den Code aus Ihrer E-Mail für die Zwei-Faktor-Authentifizierung ein." @@ -1226,8 +1210,7 @@ "unauthorized": { "otp": "Ihre Zugangsdaten sind nicht korrekt. Bitte versuchen Sie es erneut.", "text": "Benutzername oder Passwort sind nicht korrekt. Bitte versuchen Sie es erneut." - }, - "deletedAccount": "Ihr Account wurde zur Löschung vorgemerkt. Ihre Daten werden in den nächsten 24 Stunden gelöscht." + } } } }, @@ -1261,21 +1244,50 @@ "title": "Nachricht in Zwischenablage kopieren" }, "dayBeforeYesterday": "Vorgestern", + "delete": { + "delete": "Löschen", + "deleted": { + "other": "Diese Nachricht wurde gelöscht.", + "own": "Sie haben diese Nachricht gelöscht." + }, + "overlay": { + "cancel": "Abbrechen", + "confirm": "Löschen", + "copy": "Möchten Sie die Nachricht wirklich löschen?", + "headline": "Nachricht löschen" + } + }, "forward": { "label": "Weitergeleitete Nachricht von {{username}}, {{date}} um {{time}}", "title": "Textnachricht an\nFeedback weiterleiten" }, + "groupChat": "Gruppenchat", "isMyMessage": { "name": "Ich" }, + "liveChat": "Live-Chat", + "newEnquiry": "Neue Anfrage", + "note": { + "title": "Notiz" + }, + "read": "gelesen", + "sent": "zugestellt", "submit": { "booking": { - "headline": "Oder vereinbare jetzt einen Termin", - "buttonLabel": "Termin zur Beratung vereinbaren" + "buttonLabel": "Termin zur Beratung vereinbaren", + "headline": "Oder vereinbare jetzt einen Termin" } }, "today": "Heute", "tomorrow": "Morgen", + "unread": "ungelesen", + "video": { + "callActive": "Videokonferenz läuft", + "description": "Sie können jetzt an der Videokonferenz teilnehmen", + "join": "Beitreten", + "moderatorEndedTitle": "Videokonferenz wurde beendet: {{time}}", + "moderatorStartedTitle": "Moderator:in {{name}} hat eine Videokonferenz gestartet" + }, "write": { "peer": { "checkbox": { @@ -1283,36 +1295,7 @@ } } }, - "yesterday": "Gestern", - "delete": { - "delete": "Löschen", - "deleted": { - "own": "Sie haben diese Nachricht gelöscht.", - "other": "Diese Nachricht wurde gelöscht." - }, - "overlay": { - "headline": "Nachricht löschen", - "copy": "Möchten Sie die Nachricht wirklich löschen?", - "cancel": "Abbrechen", - "confirm": "Löschen" - } - }, - "note": { - "title": "Notiz" - }, - "unread": "ungelesen", - "read": "gelesen", - "sent": "zugestellt", - "groupChat": "Gruppenchat", - "liveChat": "Live-Chat", - "newEnquiry": "Neue Anfrage", - "video": { - "moderatorStartedTitle": "Moderator:in {{name}} hat eine Videokonferenz gestartet", - "moderatorEndedTitle": "Videokonferenz wurde beendet: {{time}}", - "callActive": "Videokonferenz läuft", - "description": "Sie können jetzt an der Videokonferenz teilnehmen", - "join": "Beitreten" - } + "yesterday": "Gestern" }, "navigation": { "appointments": "Video - Termine", @@ -1327,6 +1310,10 @@ }, "consultant": { "enquiries": "Erstanfragen", + "peersessions": { + "large": "Peer Beratungen", + "small": "Peer Ber." + }, "sessions": { "large": "Meine Beratungen", "small": "Nachrichten" @@ -1334,10 +1321,6 @@ "teamsessions": { "large": "Team Beratungen", "small": "Team Ber." - }, - "peersessions": { - "large": "Peer Beratungen", - "small": "Peer Ber." } }, "language": "Sprache", @@ -1346,19 +1329,19 @@ "tools": "Meine Tools" }, "notifications": { - "message": { - "new": "Sie haben eine neue Nachricht!" - }, "enquiry": { "new": "Sie haben eine neue Live-Chat Anfrage!" }, + "error": "Fehlgeschlagen", + "info": "Information", "initialRequest": { "new": "Sie haben eine neue Erstanfrage!" }, - "warning": "Warnung", - "error": "Fehlgeschlagen", + "message": { + "new": "Sie haben eine neue Nachricht!" + }, "success": "Erfolgreich", - "info": "Information" + "warning": "Warnung" }, "overlay": { "step": { @@ -1367,77 +1350,84 @@ } }, "timeout": { - "headline": "Einen Moment bitte.", - "confirm": "Möchten Sie die Seite wirklich verlassen?" + "confirm": "Möchten Sie die Seite wirklich verlassen?", + "headline": "Einen Moment bitte." } }, "overview": { - "title": "Willkommen zurück!", - "myMessagesTitle": "{{countStr}} ungelesene Nachrichten", - "initialInquiriesTitle": "{{countStr}} Erstanfragen", - "upcomingAppointments": "Ihre nächsten {{countStr}} Termine", - "upcomingAppointment": "Ihr nächster Termin", - "emptyMessages": "Du hast alles im Blick, alle Nachrichten sind gelesen!", - "emptyInitialMessage": "Sehr gut, alle Erstanfragen sind bearbeitet!", + "appointmentsEmpty": "Heute stehen keine Termine an, Verabrede Dich mit Ratsuchenden um das zu ändern", "emptyAppointments": "Heute stehen keine Termine an, Verabrede Dich mit Ratsuchenden um das zu ändern", "emptyAppointmentsMobile": "Keine Termine derzeit, Verabrede Dich mit Ratsuchenden um das zu ändern", - "viewAll": "Alle Anzeigen", - "myMessagesEmpty": "Du hast alles im Blick, alle Nachrichten sind gelesen!", + "emptyInitialMessage": "Sehr gut, alle Erstanfragen sind bearbeitet!", + "emptyMessages": "Du hast alles im Blick, alle Nachrichten sind gelesen!", "initialInquiriesEmpty": "Sehr gut, alle Erstanfragen sind bearbeitet!", - "appointmentsEmpty": "Heute stehen keine Termine an, Verabrede Dich mit Ratsuchenden um das zu ändern", - "start": "Starten" + "initialInquiriesTitle": "{{countStr}} Erstanfragen", + "myMessagesEmpty": "Du hast alles im Blick, alle Nachrichten sind gelesen!", + "myMessagesTitle": "{{countStr}} ungelesene Nachrichten", + "start": "Starten", + "title": "Willkommen zurück!", + "upcomingAppointment": "Ihr nächster Termin", + "upcomingAppointments": "Ihre nächsten {{countStr}} Termine", + "viewAll": "Alle anzeigen" }, "preconditions": { "cookie": { + "button": "Zurück zur vorherigen Seite", "headline": "Bitte aktivieren Sie Cookies, um fortzufahren", "paragraph": { "1": "Bitte aktivieren Sie bei Ihrem Browser Cookies, um die Anmeldung zu ermöglichen.", "2": "Nachdem Sie Cookies in Ihrem Browser aktiviert haben, klicken Sie einfach auf die Schaltfläche unten, um zur vorhergehenden Seite zurückzukehren." - }, - "button": "Zurück zur vorherigen Seite" + } } }, "profile": { "appLanguage": { - "title": "Sprache", - "info": "Stellen Sie hier die Sprache der Anwendung ein." + "info": "Stellen Sie hier die Sprache der Anwendung ein.", + "title": "Sprache" }, - "data": { - "title": { - "agencies": "Meine Beratungsstellen", - "asker": "Über mich", - "information": "Kontaktdaten", - "private": "Private Daten" + "browserNotifications": { + "denied": { + "message": "Sie haben den Empfang von Benachrichtigungen für diesen Browser abgelehnt. Um Push-Benachrichtigungen zu aktivieren, müssen Sie diese zuerst in Ihren Browsereinstellungen zulassen." }, - "info": { - "private": "Diese Daten können die Ratsuchenden nicht einsehen.", - "public": "Mit dem Anzeigenamen erscheinen Sie bei den Ratsuchenden." + "description": "Wenn Sie online sind, informieren wir Sie in diesem Browser, wenn Sie eine neue Nachricht erhalten haben.", + "initialEnquiry": { + "title": "Eine neue Erstanfrage ist eingegangen" }, - "edit": { - "button": { - "cancel": "Abbrechen", - "save": "Speichern", - "edit": "Bearbeiten" - } + "newMessage": { + "description": "Einer der Ihnen zugewiesenen Ratsuchenden hat Ihnen geantwortet", + "title": "Neue Chat-Nachricht" }, + "title": "Browser-Benachrichtigungen", + "toggle": "Benachrichtigungen in diesem Browser erhalten" + }, + "data": { "agency": { "label": "Beratungsstelle", "registrationLink": { - "text": "Link kopieren", - "title": "Registrierungslink zur Beratungsstelle in Zwischenablage kopieren", "notification": { "text": "Registrierungslink zur Beratungsstelle in Zwischenablage kopiert!", "title": "Link kopiert" - } + }, + "text": "Link kopieren", + "title": "Registrierungslink zur Beratungsstelle in Zwischenablage kopieren" } }, - "profileIcon": "Profilbild", - "userName": "Benutzername", "displayName": "Anzeigename", - "firstName": "Vorname", - "lastName": "Nachname", + "edit": { + "button": { + "cancel": "Abbrechen", + "edit": "Bearbeiten", + "save": "Speichern" + } + }, "email": "E-Mail-Adresse", "emailInfo": "Die Angabe Ihrer E-Mail ist freiwillig und wird ausschließlich verwendet, um Sie über neue Antworten Ihrer_r Berater_in zu informieren. Ihre E-Mail-Adresse ist für Berater_innen nicht sichtbar.", + "firstName": "Vorname", + "info": { + "private": "Diese Daten können die Ratsuchenden nicht einsehen.", + "public": "Mit dem Anzeigenamen erscheinen Sie bei den Ratsuchenden." + }, + "lastName": "Nachname", "personal": { "registrationLink": { "notification": { @@ -1449,19 +1439,28 @@ "tooltip": "Teilen Sie Ihren persönlichen Kontakt-Link mit jemanden, damit diese Person eine Onlineberatung direkt mit Ihnen starten kann." } }, + "profileIcon": "Profilbild", "register": { + "button": { + "label": "Registrieren" + }, "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 Moderator_innen geleitet.", "singleChats": "In diesen Themenfeldern erhalten Sie eine persönliche Beratung. Schreiben Sie uns Ihr Anliegen!" }, - "button": { - "label": "Registrieren" - }, "consultingTypeSelect": { "label": "Themenfelder" }, "headline": "Benötigen Sie auch zu anderen Themen Rat oder Hilfe?
Wir unterstützen Sie gerne." }, + "registerError": { + "overlay": { + "button": { + "label": "Schließen" + }, + "headline": "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut." + } + }, "registerSuccess": { "overlay": { "button1": { @@ -1478,14 +1477,18 @@ "headline": "Sie haben sich erfolgreich für ein neues Themenfeld registriert." } }, - "registerError": { - "overlay": { - "headline": "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.", - "button": { - "label": "Schließen" - } - } - } + "title": { + "agencies": "Meine Beratungsstellen", + "asker": "Über mich", + "information": "Kontaktdaten", + "private": "Private Daten" + }, + "userName": "Benutzername" + }, + "documentation": { + "description": "Haben Sie Fragen? Im Handbuch finden Sie detaillierte Informationen zu den wichtigsten Funktionen der Online-Beratungsplattform.", + "link": "Zum Handbuch", + "title": "Handbuch zur Beratungsplattform" }, "externalRegistration": { "cancel": "Abbrechen", @@ -1502,11 +1505,11 @@ }, "functions": { "absence": { - "title": "Meine Abwesenheit", - "label": "Hinterlegen Sie eine Abwesenheitsnachricht", "activated": { "label": "Deaktivieren Sie Ihre Abwesenheit, um eine Nachricht zu hinterlegen oder sie zu bearbeiten." - } + }, + "label": "Hinterlegen Sie eine Abwesenheitsnachricht", + "title": "Meine Abwesenheit" }, "masterKey": { "saveError": "Beim Passwort ändern ist ein Problem aufgetaucht. Bitte versuchen Sie es erneut." @@ -1529,10 +1532,10 @@ "label": "Aktuelles Passwort" }, "overlay": { - "headline": "Sie haben Ihr Passwort erfolgreich geändert. Sie werden nun zum Login weitergeleitet.", "button": { "label": "Einloggen" - } + }, + "headline": "Sie haben Ihr Passwort erfolgreich geändert. Sie werden nun zum Login weitergeleitet." }, "same": "Ihr Passwort ist identisch.", "secure": "Ihr Passwort ist sicher.", @@ -1541,8 +1544,8 @@ } }, "security": { - "title": "Sicherheit", - "button": "Passwort ändern" + "button": "Passwort ändern", + "title": "Sicherheit" }, "spokenLanguages": { "saveError": "Beim Speichern ist ein Problem aufgetaucht. Bitte versuchen Sie es erneut." @@ -1552,11 +1555,22 @@ "header": { "title": "Profil" }, + "liveChat": { + "subtitle": "Aktivieren Sie Ihre Verfügbarkeit und sehen Sie in den Erstanfragen unter „Live-Chat Anfragen“ die wartenden anonymen Ratsuchenden.", + "title": "Meine Live-Chat Verfügbarkeit", + "toggleLabel": "Bin verfügbar" + }, "noContent": "Keine Angabe", "notifications": { - "title": "E-Mail-Benachrichtigungen", - "subtitle": "Wir benachrichtigen Sie, wenn Sie:", + "appointmentNotificationEnabled": { + "description": "Ein Termin wurde angesetzt, verschoben oder abgesagt", + "title": "Termine" + }, "description": "Wir informieren Sie per E-Mail, wenn Sie eine neue Nachricht erhalten haben.", + "error": { + "description": "Leider können wir Ihre Einstellungen momentan nicht aktualisieren. Bitte versuchen Sie es später noch einmal.", + "title": "Etwas ist schiefgelaufen." + }, "follow": { "up": { "email": { @@ -1564,89 +1578,58 @@ } } }, - "mainEmail": { - "title": "E-Mail-Benachrichtigungen zulassen" - }, "initialEnquiry": { "title": "Eine neue Erstanfrage ist eingegangen" }, + "mainEmail": { + "title": "E-Mail-Benachrichtigungen zulassen" + }, "newMessageAdviceSeeker": { - "title": "Neue Chat-Nachricht", - "description": "Wir informieren Sie, solange Sie nicht im System angemeldet sind" + "description": "Wir informieren Sie, solange Sie nicht im System angemeldet sind", + "title": "Neue Chat-Nachricht" }, "newMessageConsultant": { - "title": "Neue Chat-Nachricht", - "description": "Einer der Ihnen zugewiesenen Ratsuchenden hat Ihnen geantwortet. Wir informieren Sie, solange Sie nicht im System angemeldet sind." - }, - "reassignmentConsultant": { - "title": "Neuzuweisung eines Ratsuchenden", - "description": "Kollege_in hat ihnen eine_n Ratsuchende_n zugewiesen." - }, - "reassignmentAdviceSeeker": { - "title": "Beraterwechsel", - "description": "Ihr_e Berater_in hat um Erlaubnis gebeten, Sie einem neuen Berater zuzuweisen." - }, - "appointmentNotificationEnabled": { - "title": "Termine", - "description": "Ein Termin wurde angesetzt, verschoben oder abgesagt" - }, - "error": { - "title": "Etwas ist schief gelaufen.", - "description": "Leider können wir Ihre Einstellungen momentan nicht aktualisieren. Bitte versuchen Sie es später noch einmal." - }, - "toggleError": { - "title": "Etwas ist schiefgelaufen.", - "description": "Leider können wir Ihre Benachrichtigungen zurzeit nicht aktivieren. Bitte versuchen Sie es später noch einmal." + "description": "Einer der Ihnen zugewiesenen Ratsuchenden hat Ihnen geantwortet. Wir informieren Sie, solange Sie nicht im System angemeldet sind.", + "title": "Neue Chat-Nachricht" }, "noEmail": { - "info": "Sie haben noch keine E-Mail-Adresse hinzugefügt.", "button": "E-Mail-Adresse hinzufügen", + "info": "Sie haben noch keine E-Mail-Adresse hinzugefügt.", "modal": { - "title": "E-Mail-Adresse hinzufügen", - "description": "Die Angabe Ihrer E-Mail-Adresse ist freiwillig und wird ausschließlich verwendet, um Sie über neue Antworten Ihrer_r Berater_in zu informieren. Ihre E-Mail-Adresse ist für Berater_innen nicht sichtbar.", "confirm": "Hinzufügen", + "description": "Die Angabe Ihrer E-Mail-Adresse ist freiwillig und wird ausschließlich verwendet, um Sie über neue Antworten Ihrer_r Berater_in zu informieren. Ihre E-Mail-Adresse ist für Berater_innen nicht sichtbar.", "emailInput": { - "label": "E-Mail", - "valid": "Ihre E-Mail-Adresse ist gültig.", "invalid": "Ihre E-Mail-Adresse ist nicht gültig.", - "unavailable": "Diese E-Mail-Adresse ist bereits registriert." + "label": "E-Mail", + "unavailable": "Diese E-Mail-Adresse ist bereits registriert.", + "valid": "Ihre E-Mail-Adresse ist gültig." }, - "errorTitle": "Etwas ist schief gelaufen.", - "errorMessage": "Leider können wir Ihre E-Mail-Adresse momentan nicht speichern. Bitte versuchen Sie es später noch einmal oder kontaktieren Sie unseren Support." + "errorMessage": "Leider können wir Ihre E-Mail-Adresse momentan nicht speichern. Bitte versuchen Sie es später noch einmal oder kontaktieren Sie unseren Support.", + "errorTitle": "Etwas ist schiefgelaufen.", + "title": "E-Mail-Adresse hinzufügen" } - } - }, - "browserNotifications": { - "title": "Browser-Benachrichtigungen", - "description": "Wenn Sie online sind, informieren wir Sie in diesem Browser, wenn Sie eine neue Nachricht erhalten haben.", - "toggle": "Benachrichtigungen in diesem Browser erhalten", - "initialEnquiry": { - "title": "Eine neue Erstanfrage ist eingegangen" }, - "newMessage": { - "title": "Neue Chat-Nachricht", - "description": "Einer der Ihnen zugewiesenen Ratsuchenden hat Ihnen geantwortet" + "reassignmentAdviceSeeker": { + "description": "Ihr_e Berater_in hat um Erlaubnis gebeten, Sie einem neuen Berater zuzuweisen.", + "title": "Beraterwechsel" }, - "denied": { - "message": "Sie haben den Empfang von Benachrichtigungen für diesen Browser abgelehnt. Um Push-Benachrichtigungen zu aktivieren, müssen Sie diese zuerst in Ihren Browsereinstellungen zulassen." - } - }, - "documentation": { - "title": "Handbuch zur Beratungsplattform", - "description": "Haben Sie Fragen? Im Handbuch finden Sie detaillierte Informationen zu den wichtigsten Funktionen der Online-Beratungsplattform.", - "link": "Zum Handbuch" - }, - "liveChat": { - "title": "Meine Live-Chat Verfügbarkeit", - "subtitle": "Aktivieren Sie Ihre Verfügbarkeit und sehen Sie in den Erstanfragen unter „Live-Chat Anfragen“ die wartenden anonymen Ratsuchenden.", - "toggleLabel": "Bin verfügbar" + "reassignmentConsultant": { + "description": "Kollege_in hat ihnen eine_n Ratsuchende_n zugewiesen.", + "title": "Neuzuweisung eines Ratsuchenden" + }, + "subtitle": "Wir benachrichtigen Sie, wenn Sie:", + "title": "E-Mail-Benachrichtigungen", + "toggleError": { + "description": "Leider können wir Ihre Benachrichtigungen zurzeit nicht aktivieren. Bitte versuchen Sie es später noch einmal.", + "title": "Etwas ist schiefgelaufen." + } }, "routes": { "activities": { "absence": "Meine Abwesenheit", + "availability": "Meine Verfügbarkeit", "statistics": "Meine Statistik", - "title": "Meine Aktivitäten", - "availability": "Meine Verfügbarkeit" + "title": "Meine Aktivitäten" }, "display": "Anzeige", "general": { @@ -1663,12 +1646,12 @@ "title": "Benachrichtigungen" }, "settings": { - "title": "Einstellungen", "security": { "2fa": "Zwei-Faktor-Authentifizierung", "changePassword": "Passwort ändern", "title": "Sicherheit" - } + }, + "title": "Einstellungen" } }, "spokenLanguages": { @@ -1677,11 +1660,11 @@ }, "statistics": { "complete": { - "title": "Ihre Statistik über Ihren gewählten Beratungszeitraum können Sie hier herunterladen:", - "filename": "Statistik Online-Beratung", "download": { "label": "Download Excel Datei" - } + }, + "filename": "Statistik Online-Beratung", + "title": "Ihre Statistik über Ihren gewählten Beratungszeitraum können Sie hier herunterladen:" }, "csvHeader": { "numberOfAppointments": "Termine gebucht", @@ -1693,14 +1676,14 @@ "period": { "currentMonth": "aktuellen Monats", "currentYear": "aktuellen Jahres", - "lastMonth": "letzten Monats", - "lastYear": "vergangenen Jahres", - "prefix": "Ihre Zahlen des", "display": { "default": "DD.MM.JJJJ - DD.MM.JJJJ", "prefix": "Im Zeitraum vom ", "suffix": " haben Sie:" - } + }, + "lastMonth": "letzten Monats", + "lastYear": "vergangenen Jahres", + "prefix": "Ihre Zahlen des" }, "title": "Meine Statistik" }, @@ -1737,6 +1720,7 @@ "download": { "filename": "qr-code-{{filename}}" }, + "iconTitle": "QR-Code", "link": { "text": "QR-Code anzeigen" }, @@ -1752,8 +1736,7 @@ "headline": "Ihr persönlicher QR-Code", "info": "Wenn Sie Ihren QR-Code mit jemandem teilen, kann diese Person ihn mit der Handykamera scannen, um mit Ihnen direkt Kontakt aufzunehmen. Alternativ können Sie den Code auch herunterladen." } - }, - "iconTitle": "QR-Code" + } }, "registration": { "accordion": { @@ -1769,11 +1752,20 @@ "headline": "Alter angeben" }, "agency": { + "headline": "Beratungsstelle wählen", "preselected": { - "prefix": "Ihre vorausgewählte Beratungsstelle: ", - "isTeam": "Sie werden von einem Team beraten." - }, - "headline": "Beratungsstelle wählen" + "isTeam": "Sie werden von einem Team beraten.", + "prefix": "Ihre vorausgewählte Beratungsstelle: " + } + }, + "agencyPreselected": { + "headline": "Bitte geben Sie Ihre Postleitzahl an", + "intro": { + "overline": "Warum benötigen wir Ihre Postleitzahl?", + "point1": "kennen dann die Hilfen rund um Ihren Wohnort", + "point2": "kennen die Gesetze Ihres Bundeslandes", + "subline": "Unsere Fachleute:" + } }, "agencySelection": { "headline": "Beratungsstelle wählen", @@ -1798,17 +1790,8 @@ } }, "title": { - "start": "Beratungsstellen zur Postleitzahl", - "end": ":" - } - }, - "agencyPreselected": { - "headline": "Bitte geben Sie Ihre Postleitzahl an", - "intro": { - "overline": "Warum benötigen wir Ihre Postleitzahl?", - "subline": "Unsere Fachleute:", - "point1": "kennen dann die Hilfen rund um Ihren Wohnort", - "point2": "kennen die Gesetze Ihres Bundeslandes" + "end": ":", + "start": "Beratungsstellen zur Postleitzahl" } }, "consultingType": { @@ -1817,29 +1800,29 @@ } }, "consultingTypeAgencySelection": { + "agency": { + "headline": "Bitte wählen Sie eine Beratungsstelle", + "infoText": "Ihr_e Berater_in ist in mehreren Beratungsstellen tätig. Bitte wählen Sie Ihre gewünschte Beratungsstelle." + }, "consultingType": { "headline": "Bitte wählen Sie ein Themenfeld", "infoText": "Ihr_e Berater_in ist in mehreren Themenfeldern tätig. Bitte wählen Sie Ihr gewünschtes Themenfeld.", "select": { "label": "Themenfeld" } - }, - "agency": { - "headline": "Bitte wählen Sie eine Beratungsstelle", - "infoText": "Ihr_e Berater_in ist in mehreren Beratungsstellen tätig. Bitte wählen Sie Ihre gewünschte Beratungsstelle." } }, "dataProtection": { "label": { - "prefix": "Ich habe die ", "and": " und ", + "prefix": "Ich habe die ", "suffix": " zur Kenntnis genommen. Für Authentifizierung und Navigation verwendet diese Webseite Cookies." } }, "error": { "required_field_missing": { - "title": "Leider ist etwas schiefgelaufen.", - "text": "Bitte versuchen Sie es später noch einmal." + "text": "Bitte versuchen Sie es später noch einmal.", + "title": "Leider ist etwas schiefgelaufen." } }, "form": { @@ -1854,7 +1837,6 @@ "headline": "Welches dieser Problemfelder ist für Sie aktuell am wichtigsten?", "noTopics": "Derzeit können leider keine Themen ausgewählt werden. Führen Sie die Anmeldung im nächsten Schritt fort." }, - "overline": "Willkommen bei der Online-Beratung", "overlay": { "success": { "button": "Nachricht verfassen", @@ -1862,16 +1844,17 @@ "headline": "Herzlich willkommen
bei der Beratung & Hilfe der Caritas." } }, + "overline": "Willkommen bei der Online-Beratung", "password": { "confirmation": { "label": "Passwort wiederholen" }, "criteria": { "fulfilled": "Erfüllt", - "upperLowerCase": "Groß-/Kleinschreibung", + "length": "mindestens 9 Zeichen", "number": "mindestens eine Zahl", "specialChar": "mindestens ein Sonderzeichen", - "length": "mindestens 9 Zeichen" + "upperLowerCase": "Groß-/Kleinschreibung" }, "headline": "Passwort wählen", "input": { @@ -1916,11 +1899,11 @@ "start": "Registrierung" }, "user": { - "label": "Benutzername", "infoText": "Um Ihre Anonymität zu schützen, raten wir Ihnen nicht Ihren tatsächlichen Namen oder Initialen zu verwenden.
Wählen Sie bitte einen geeigneten Benutzernamen mit min. 5 Zeichen.", + "label": "Benutzername", "suitable": "Ihr Benutzername ist geeignet.", - "unsuitable": "Ihr Benutzername ist zu kurz.", - "unavailable": "Der Benutzername ist bereits vergeben." + "unavailable": "Der Benutzername ist bereits vergeben.", + "unsuitable": "Ihr Benutzername ist zu kurz." }, "username": { "headline": "Benutzernamen wählen" @@ -1951,70 +1934,46 @@ }, "releaseNote": { "content": { + "checkbox": "Diese Meldung nicht mehr anzeigen.", "headline": "Wir haben Neuigkeiten!", - "intro": "Folgendes hat sich bei der Online-Beratung geändert:", - "checkbox": "Diese Meldung nicht mehr anzeigen." + "intro": "Folgendes hat sich bei der Online-Beratung geändert:" }, "overlay": { "close": "Schließen" } }, - "termsAndConditionOverlay": { - "title": { - "termsAndCondition": "Aktualisierung unserer Nutzungsbedingungen", - "privacy": "Aktualisierung unserer Datenschutzerklärung", - "termsAndConditionAndPrivacy": "Aktualisierung unserer Nutzungsbedingungen und Datenschutzerklärung" - }, - "labels": { - "termsAndCondition": "Nutzungsbedingungen", - "privacy": "Datenschutzerklärung", - "here": "hier" - }, - "contentLine1": { - "termsAndCondition": "Wir haben die Nutzungsbedingungen der Online-Beratung aktualisiert. Um die Online-Beratung weiter nutzen zu können, benötigen wir Ihre Zustimmung.", - "privacy": "Wir haben die Datenschutzerklärung der Online-Beratung aktualisiert. Den aktuellen Stand finden Sie hier.", - "termsAndConditionAndPrivacy": "Wir haben die Nutzungsbedingungen und Datenschutzerklärung der Online-Beratung aktualisiert. Um die Online-Beratung weiter nutzen zu können, benötigen wir Ihre Zustimmung." - }, - "contentLine2": { - "termsAndCondition": "Ich habe die Nutzungsbedingungen zur Kenntnis genommen.\n Damit erkläre ich mich einverstanden.", - "termsAndConditionAndPrivacy": "Ich habe die Nutzungsbedingungen und Datenschutzerklärung\n zur Kenntnis genommen. Damit erkläre ich mich einverstanden." - }, - "buttons": { - "decline": "Ablehnen", - "accept": "Zustimmen", - "continue": "Weiter" - } - }, - "session": { "acceptance": { - "overlay": { - "headline": "Sie haben die Erstanfrage erfolgreich angenommen und finden diese nun unter „Meine Beratungen“." - }, "button": { "label": "Antworten" + }, + "overlay": { + "headline": "Sie haben die Erstanfrage erfolgreich angenommen und finden diese nun unter „Meine Beratungen“." } }, "alreadyAssigned": { "overlay": { - "headline": "Sie haben diese Beratung bereits zugewiesen.", "button": { "cancel": "Schließen", "redirect": "Antworten" - } + }, + "headline": "Sie haben diese Beratung bereits zugewiesen." } }, "anonymous": { "takenByOtherConsultant": { - "overlay": { - "headline": "Diese Erstanfrage wurde bereits von einem anderen Berater angenommen." - }, "button": { "label": "Schließen" + }, + "overlay": { + "headline": "Diese Erstanfrage wurde bereits von einem anderen Berater angenommen." } } }, "assignOther": { + "button": { + "label": "Schließen" + }, "inProgress": "Die Beratung wird gerade zugewiesen.", "overlay": { "headline": { @@ -2024,40 +1983,43 @@ "subtitle": { "noTeam": "{{newConsultant}} ist somit für die_den Ratsuchende_n verantwortlich und kann den kompletten Nachrichtenverlauf lesen. Sie haben keinen Zugriff mehr auf die Nachrichten.", "team": { - "self": "{{newConsultant}} ist somit für die_den Ratsuchende_n verantwortlich. Stimmt {{toAskerName}} der Zuweisung zu, finden Sie den Chatverlauf in Ihren Nachrichten und nicht mehr unter Teamberatung.", - "other": "{{newConsultant}} ist somit für die_den Ratsuchende_n verantwortlich. Stimmt {{toAskerName}} der Zuweisung zu, finden Sie den Chatverlauf unter Teamberatung und nicht mehr in Ihren Nachrichten." + "other": "{{newConsultant}} ist somit für die_den Ratsuchende_n 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_den Ratsuchende_n verantwortlich. Stimmt {{toAskerName}} der Zuweisung zu, finden Sie den Chatverlauf in Ihren Nachrichten und nicht mehr unter Teamberatung." } } - }, - "button": { - "label": "Schließen" } }, "assignSelf": { - "inProgress": "Die Beratung wird Ihnen gerade zugewiesen.", - "overlay": { - "headline1": "Sie haben die Beratung erfolgreich angenommen. Sie wurde in Meine Beratungen verschoben.", - "headline2": "Beratung zuweisen", - "subtitle": "Möchten Sie diese Beratung wirklich zuweisen?", - "button": { - "cancel": "Abbruch", - "assign": "Zuweisen" - } - }, "button1": { "label": "Antworten" }, "button2": { "label": "Schließen" + }, + "inProgress": "Die Beratung wird Ihnen gerade zugewiesen.", + "overlay": { + "button": { + "assign": "Zuweisen", + "cancel": "Abbruch" + }, + "headline1": "Sie haben die Beratung erfolgreich angenommen. Sie wurde in Meine Beratungen verschoben.", + "headline2": "Beratung zuweisen", + "subtitle": "Möchten Sie diese Beratung wirklich zuweisen?" } }, - "consultant": { "prefix": "Berater_in - " }, "divider": { "lastRead": "Zuletzt gelesen" }, + "dragAndDrop": { + "explanation": { + "insideDropArea": "Legen Sie die Datei hier ab, um sie hochzuladen.", + "outsideDropArea": "Ziehen Sie die Datei in das Feld, um sie hochzuladen." + }, + "restrictions": ".jpg, .png, .pdf, .docx, .xlsx bis maximal {{attachment_filesize}} MB" + }, "empty": "Bitte wählen Sie eine Nachricht aus", "feedback": { "label": "Feedback" @@ -2067,37 +2029,19 @@ "prefix": "Moderator_in - " } }, - "u25": { - "assignment": { - "placeholder": "Beratung zuweisen" - } - }, - "unreadCount": { - "maxValue": "99+" - }, - "dragAndDrop": { - "explanation": { - "insideDropArea": "Legen Sie die Datei hier ab, um sie hochzuladen.", - "outsideDropArea": "Ziehen Sie die Datei in das Feld, um sie hochzuladen." - }, - "restrictions": ".jpg, .png, .pdf, .docx, .xlsx bis maximal {{attachment_filesize}} MB" - }, "reassign": { "system": { "message": { "reassign": { + "accept": "Akzeptieren", "accepted": { - "title": { - "self": "{{oldConsultant}} hat Ihnen {{client}} übergeben.", - "other": "{{oldConsultant}} hat {{newConsultant}} {{client}} übergeben." - }, - "description": { - "self": "Sie sind nun für {{client}} verantwortlich.", - "other": "{{consultant}} ist nun für {{client}} verantwortlich." - }, "consultant": { "title": "{{newConsultant}} kümmert sich nun um Sie und Ihre Anliegen." }, + "description": { + "other": "{{consultant}} ist nun für {{client}} verantwortlich.", + "self": "Sie sind nun für {{client}} verantwortlich." + }, "new": { "consultant": { "description": "Wir haben {{newConsultant1}} benachrichtigt. Sie können nun Nachrichten an {{newConsultant2}} schicken." @@ -2107,21 +2051,24 @@ "consultant": { "description": "Wir haben {{newConsultant}} benachrichtigt. {{oldConsultant}} ist nicht mehr für Sie zuständig." } + }, + "title": { + "other": "{{oldConsultant}} hat {{newConsultant}} {{client}} übergeben.", + "self": "{{oldConsultant}} hat Ihnen {{client}} übergeben." } }, - "accept": "Akzeptieren", "decline": "Ablehnen", "declined": { "description": { - "self": "Sie sind weiterhin für {{client}} verantwortlich.", - "other": "{{consultant}} ist weiterhin für {{client}} verantwortlich." + "other": "{{consultant}} ist weiterhin für {{client}} verantwortlich.", + "self": "Sie sind weiterhin für {{client}} verantwortlich." }, - "title": "{{client}} hat die Zuweisung abgelehnt.", "old": { "consultant": { "title": "{{oldConsultant}} kümmert sich weiterhin um Sie und Ihre Anliegen." } - } + }, + "title": "{{client}} hat die Zuweisung abgelehnt." }, "description": { "noTeam": "{{newConsultant}} kann somit den kompletten Nachrichtenverlauf lesen und ist für Sie verantwortlich. {{oldConsultant}} hat keinen Zugriff mehr auf die Nachrichten.", @@ -2129,19 +2076,27 @@ }, "question": "Stimmen Sie der Übergabe zu?", "sent": { - "title": "Anfrage zur Zuweisung versendet", "description": { "noTeam": "Sobald {{client1}} der Zuweisung zustimmt, wird {{client2}} an {{newConsultant}} mit dem kompletten Nachrichtenverlauf übergeben.", "team": { - "self": "Sobald {{client1}} der Zuweisung zustimmt, ist {{newConsultant}} für {{client2}} verantwortlich. Sie finden den Chatverlauf dann unter Teamberatung und nicht mehr hier in Ihren Nachrichten.", - "other": "Sobald {{client1}} der Zuweisung zustimmt, ist {{newConsultant}} für {{client2}} verantwortlich. Sie finden den Chatverlauf dann in Ihren Nachrichten und nicht mehr hier unter Teamberatung." + "other": "Sobald {{client1}} der Zuweisung zustimmt, ist {{newConsultant}} für {{client2}} verantwortlich. Sie finden den Chatverlauf dann in Ihren Nachrichten und nicht mehr hier unter Teamberatung.", + "self": "Sobald {{client1}} der Zuweisung zustimmt, ist {{newConsultant}} für {{client2}} verantwortlich. Sie finden den Chatverlauf dann unter Teamberatung und nicht mehr hier in Ihren Nachrichten." } - } + }, + "title": "Anfrage zur Zuweisung versendet" }, "title": "{{oldConsultant}} möchte Sie an {{newConsultant}} übergeben." } } } + }, + "u25": { + "assignment": { + "placeholder": "Beratung zuweisen" + } + }, + "unreadCount": { + "maxValue": "99+" } }, "sessionList": { @@ -2149,23 +2104,19 @@ "createChat.buttonTitle": "Chat anlegen", "empty": { "anonymous": "Aktuell warten keine anonymen Ratsuchenden auf einen Live-Chat", + "archived": "Es sind noch keine Beratungen archiviert", "known": "Aktuell liegen keine Erstanfragen vor", "mySessions": "Sie haben zurzeit keine aktiven Beratungen", - "teamSessions": "Ihr Team hat keine aktiven Beratungen", "peerSessions": "Sie haben zurzeit keine aktiven Peer-Beratungen", - "archived": "Es sind noch keine Beratungen archiviert" - }, - "unavailable": { - "description": "Aktivieren Sie Ihre Verfügbarkeit und erhalten Sie hier die Live-Chat Anfragen von anonymen Ratsuchenden", - "buttonLabel": "Verfügbarkeit aktivieren" + "teamSessions": "Ihr Team hat keine aktiven Beratungen" }, "filter": { - "placeholder": "Filter", "option": { "all": "Alle Beratungen", "feedbackMain": "Feedback benötigt", "feedbackPeer": "Feedback vorhanden" - } + }, + "placeholder": "Filter" }, "peersessions": { "headline": "Peer-Beratungen" @@ -2188,6 +2139,10 @@ "postfix": "Uhr" } }, + "unavailable": { + "buttonLabel": "Verfügbarkeit aktivieren", + "description": "Aktivieren Sie Ihre Verfügbarkeit und erhalten Sie hier die Live-Chat Anfragen von anonymen Ratsuchenden" + }, "user": { "consultantUnknown": "Berater_innen-Suche läuft", "headline": "Meine Beratungen", @@ -2214,6 +2169,32 @@ "text": "Vielen Dank für Ihre Anfrage. Wir antworten Ihnen werktags innerhalb von 48 Stunden. Wenn Sie Ihre E-Mail-Adresse angegeben haben, erhalten Sie eine Benachrichtigung, sobald unsere Antwort vorliegt." } }, + "termsAndConditionOverlay": { + "buttons": { + "accept": "Zustimmen", + "continue": "Weiter", + "decline": "Ablehnen" + }, + "contentLine1": { + "privacy": "Wir haben die Datenschutzerklärung der Online-Beratung aktualisiert. Den aktuellen Stand finden Sie hier.", + "termsAndCondition": "Wir haben die Nutzungsbedingungen der Online-Beratung aktualisiert. Um die Online-Beratung weiter nutzen zu können, benötigen wir Ihre Zustimmung.", + "termsAndConditionAndPrivacy": "Wir haben die Nutzungsbedingungen und Datenschutzerklärung der Online-Beratung aktualisiert. Um die Online-Beratung weiter nutzen zu können, benötigen wir Ihre Zustimmung." + }, + "contentLine2": { + "termsAndCondition": "Ich habe die Nutzungsbedingungen zur Kenntnis genommen.\n Damit erkläre ich mich einverstanden.", + "termsAndConditionAndPrivacy": "Ich habe die Nutzungsbedingungen und Datenschutzerklärung\n zur Kenntnis genommen. Damit erkläre ich mich einverstanden." + }, + "labels": { + "here": "hier", + "privacy": "Datenschutzerklärung", + "termsAndCondition": "Nutzungsbedingungen" + }, + "title": { + "privacy": "Aktualisierung unserer Datenschutzerklärung", + "termsAndCondition": "Aktualisierung unserer Nutzungsbedingungen", + "termsAndConditionAndPrivacy": "Aktualisierung unserer Nutzungsbedingungen und Datenschutzerklärung" + } + }, "text": { "label": { "hint": "Hinweis" @@ -2223,37 +2204,68 @@ "button": { "label": "Öffnen" }, - "shared": "Mit dem/der Berater/in geteilt", "calendar": { - "title": "Mein Kalender", - "description": "Tragen Sie Ihre Urlaube oder sonstigen Termine in den Kalender ein, sodass die Ratsuchenden in dieser Zeit keine Termine bei Ihnen buchen können.
Melden Sie sich mit der gleichen E-Mail-Adresse und Passwort an, das Sie auch hier bei der Online Beratung verwenden.", "button": { "label": "Öffnen" - } - } + }, + "description": "Tragen Sie Ihre Urlaube oder sonstigen Termine in den Kalender ein, sodass die Ratsuchenden in dieser Zeit keine Termine bei Ihnen buchen können.
Melden Sie sich mit der gleichen E-Mail-Adresse und Passwort an, das Sie auch hier bei der Online Beratung verwenden.", + "title": "Mein Kalender" + }, + "shared": "Mit dem/der Berater/in geteilt" }, "twoFactorAuth": { - "subtitle": "Nutzen Sie neben Ihrem Passwort einen zweiten Faktor für die Anmeldung. Dadurch wird Ihr Konto zusätzlich abgesichert.", "activate": { - "radio": { - "label": { - "app": "App", - "email": "E-Mail-Adresse" + "app": { + "step2": { + "copy": "Bitte installieren Sie sich auf Ihrem Smartphone oder Tablet eine passende Authenticator-App, wie zum Beispiel die FreeOTP oder Google Authenticator App. Beide Apps sind im Google Play oder Apple App Store verfügbar.", + "download": { + "apple": "Download im Apple App Store", + "google": "Download im Google Play Store" + }, + "title": "Installieren Sie sich die App", + "tool1": { + "title": "FreeOTP App:", + "url": { + "apple": "https://apps.apple.com/de/app/freeotp-authenticator/id872559395", + "google": "https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp" + } + }, + "tool2": { + "title": "Google Authenticator App:", + "url": { + "apple": "https://apps.apple.com/de/app/google-authenticator/id388497605", + "google": "https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2" + } + }, + "visualisation": { + "label": "Installation" + } }, - "tooltip": { - "app": "Installieren Sie sich die App. Die App generiert Ihnen einen Code den Sie bei der Anmeldung eingeben müssen.", - "email": "Sie erhalten bei der Anmeldung eine E-Mail mit einem Code. Diesen Code müssen Sie dann eingeben." - } - }, - "step1": { - "app": "Mit Authenticator Application", - "copy": "Installieren Sie sich auf Ihrem Smartphone oder Tablet eine passende Authenticator-App. Alternativ können Sie auch Ihre E-Mail-Adresse als zweiten Faktor verwenden.", - "email": "Per E-Mail", - "title": "Zweiten Faktor wählen", - "visualisation": { - "label": "Auswahl" + "step3": { + "connect": { + "divider": "oder", + "key": "Öffnen Sie die App und geben Sie den folgenden 32-stelligen Schlüssel ein:", + "qrCode": "Öffnen Sie die App und scannen Sie den folgenden QR-Code:" + }, + "copy": "Sie haben zwei Möglichkeiten, die Online-Beratung zur App hinzuzufügen:", + "title": "Fügen Sie die Online-Beratung zur App hinzu", + "visualisation": { + "label": "Hinzufügen" + } + }, + "step4": { + "copy": "Geben Sie den Einmal-Code ein, der von der App generiert wird und klicken Sie auf „Speichern“, um die Einrichtung abzuschließen.", + "title": "Einmal-Code eingeben", + "visualisation": { + "label": "Verknüpfung" + } }, - "disable": "Authentifizierung deaktivieren" + "step5": { + "title": "App-Verknüpfung erfolgreich eingerichtet.", + "visualisation": { + "label": "Bestätigung" + } + } }, "email": { "input": { @@ -2267,8 +2279,8 @@ "valid": "E-Mail-Adresse angeben" }, "resend": { - "hint": "Wir haben Ihnen einen Code an Ihre E-Mail-Adresse geschickt. Bitte geben Sie den Code ein.", "headline": "Es hat nicht funktioniert?", + "hint": "Wir haben Ihnen einen Code an Ihre E-Mail-Adresse geschickt. Bitte geben Sie den Code ein.", "new": "Neuen Code senden", "sent": "Neuer Code gesendet" }, @@ -2296,58 +2308,6 @@ } } }, - "app": { - "step2": { - "title": "Installieren Sie sich die App", - "copy": "Bitte installieren Sie sich auf Ihrem Smartphone oder Tablet eine passende Authenticator-App, wie zum Beispiel die FreeOTP oder Google Authenticator App. Beide Apps sind im Google Play oder Apple App Store verfügbar.", - "visualisation": { - "label": "Installation" - }, - "tool1": { - "title": "FreeOTP App:", - "url": { - "google": "https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp", - "apple": "https://apps.apple.com/de/app/freeotp-authenticator/id872559395" - } - }, - "tool2": { - "title": "Google Authenticator App:", - "url": { - "google": "https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2", - "apple": "https://apps.apple.com/de/app/google-authenticator/id388497605" - } - }, - "download": { - "google": "Download im Google Play Store", - "apple": "Download im Apple App Store" - } - }, - "step3": { - "title": "Fügen Sie die Online-Beratung zur App hinzu", - "copy": "Sie haben zwei Möglichkeiten, die Online-Beratung zur App hinzuzufügen:", - "visualisation": { - "label": "Hinzufügen" - }, - "connect": { - "qrCode": "Öffnen Sie die App und scannen Sie den folgenden QR-Code:", - "divider": "oder", - "key": "Öffnen Sie die App und geben Sie den folgenden 32-stelligen Schlüssel ein:" - } - }, - "step4": { - "title": "Einmal-Code eingeben", - "copy": "Geben Sie den Einmal-Code ein, der von der App generiert wird und klicken Sie auf „Speichern“, um die Einrichtung abzuschließen.", - "visualisation": { - "label": "Verknüpfung" - } - }, - "step5": { - "title": "App-Verknüpfung erfolgreich eingerichtet.", - "visualisation": { - "label": "Bestätigung" - } - } - }, "otp": { "input": { "label": { @@ -2356,16 +2316,32 @@ "text": "Einmal-Code" } } + }, + "radio": { + "label": { + "app": "App", + "email": "E-Mail-Adresse" + }, + "tooltip": { + "app": "Installieren Sie sich die App. Die App generiert Ihnen einen Code den Sie bei der Anmeldung eingeben müssen.", + "email": "Sie erhalten bei der Anmeldung eine E-Mail mit einem Code. Diesen Code müssen Sie dann eingeben." + } + }, + "step1": { + "app": "Mit Authenticator Application", + "copy": "Installieren Sie sich auf Ihrem Smartphone oder Tablet eine passende Authenticator-App. Alternativ können Sie auch Ihre E-Mail-Adresse als zweiten Faktor verwenden.", + "disable": "Authentifizierung deaktivieren", + "email": "Per E-Mail", + "title": "Zweiten Faktor wählen", + "visualisation": { + "label": "Auswahl" + } } }, + "edit": "Bearbeiten", "email": { "change": { "confirmOverlay": { - "title": "E-Mail-Adresse bearbeiten", - "copy": { - "1": "Sie nutzen diese E-Mail-Adresse als zweiten Faktor für eine sichere Anmeldung.", - "2": "Deaktivieren Sie die Zwei-Faktor-Authentifizierung, um die E-Mail-Adresse zu bearbeiten." - }, "binding": { "copy": { "1": "Sie können Ihre E-Mail-Adresse nicht ändern, solange Sie diese als zweiten Faktor für eine sichere Anmeldung verwenden.", @@ -2376,7 +2352,12 @@ "confirm": "Authentifizierung deaktivieren", "deny": "Abbrechen", "edit": "Zweiter Faktor bearbeiten" - } + }, + "copy": { + "1": "Sie nutzen diese E-Mail-Adresse als zweiten Faktor für eine sichere Anmeldung.", + "2": "Deaktivieren Sie die Zwei-Faktor-Authentifizierung, um die E-Mail-Adresse zu bearbeiten." + }, + "title": "E-Mail-Adresse bearbeiten" } }, "delete": { @@ -2392,12 +2373,12 @@ }, "copy": "Sichern Sie Ihr Konto vor einem möglichen unbefugten Zugriff. Nutzen Sie einen zweiten Faktor (App oder E-Mail) für die Anmeldung in der Online Beratung.", "obligatory": { + "copy": "Sie müssen jetzt einen zweiten Faktor (App oder E-Mail) für die Anmeldung in der Online-Beratung hinterlegen. Das dient der Sicherheit und schützt Ihr Konto vor einem möglichen unbefugten Zugriff.

Ohne einen zweiten Faktor dürfen Sie nicht mehr online beraten.", "moment": { - "title": "Schützen Sie Ihr Konto bis spätestens {{date}}", - "copy": "Sie müssen bis zum {{date1}} einen zweiten Faktor (App oder E-Mail) für die Anmeldung in der Online-Beratung hinterlegen. Das dient der Sicherheit und schützt Ihr Konto vor einem möglichen unbefugten Zugriff.

Achtung: Ohne einen zweiten Faktor dürfen Sie nach dem {{date2}} nicht mehr online beraten." + "copy": "Sie müssen bis zum {{date1}} einen zweiten Faktor (App oder E-Mail) für die Anmeldung in der Online-Beratung hinterlegen. Das dient der Sicherheit und schützt Ihr Konto vor einem möglichen unbefugten Zugriff.

Achtung: Ohne einen zweiten Faktor dürfen Sie nach dem {{date2}} nicht mehr online beraten.", + "title": "Schützen Sie Ihr Konto bis spätestens {{date}}" }, - "title": "Schützen Sie nun Ihr Konto", - "copy": "Sie müssen jetzt einen zweiten Faktor (App oder E-Mail) für die Anmeldung in der Online-Beratung hinterlegen. Das dient der Sicherheit und schützt Ihr Konto vor einem möglichen unbefugten Zugriff.

Ohne einen zweiten Faktor dürfen Sie nicht mehr online beraten." + "title": "Schützen Sie nun Ihr Konto" }, "title": "Schützen Sie Ihr Konto" }, @@ -2408,6 +2389,7 @@ "next": "Weiter", "save": "Speichern" }, + "subtitle": "Nutzen Sie neben Ihrem Passwort einen zweiten Faktor für die Anmeldung. Dadurch wird Ihr Konto zusätzlich abgesichert.", "switch": { "active": { "label": "Zwei-Faktor-Authentifizierung aktiviert" @@ -2421,8 +2403,7 @@ "label": "Ihr zweiter Faktor" } }, - "title": "Zwei-Faktor-Authentifizierung", - "edit": "Bearbeiten" + "title": "Zwei-Faktor-Authentifizierung" }, "typingIndicator": { "multipleUsers": { @@ -2438,19 +2419,7 @@ }, "user": { "userAddiction": { - "age": { - "headline": "Alter", - "selectLabel": "Alter auswählen", - "0": "0-17", - "1": "18-20", - "2": "21-30", - "3": "31-40", - "4": "41-59", - "5": "60+", - "null": "Keine Angabe" - }, "addictiveDrugs": { - "headline": "Suchtmittel", "0": "Alkohol", "1": "Drogen", "2": "Legal Highs", @@ -2459,24 +2428,35 @@ "5": "Glücksspiel", "6": "Internet/Computer", "7": "Essstörungen", - "8": "Andere" + "8": "Andere", + "headline": "Suchtmittel" + }, + "age": { + "0": "0-17", + "1": "18-20", + "2": "21-30", + "3": "31-40", + "4": "41-59", + "5": "60+", + "headline": "Alter", + "null": "Keine Angabe", + "selectLabel": "Alter auswählen" }, "gender": { - "headline": "Geschlecht", "0": "Weiblich", "1": "Männlich", - "2": "Divers" + "2": "Divers", + "headline": "Geschlecht" }, "relation": { - "headline": "Hintergrund", "0": "Betroffen", "1": "Angehörig", - "2": "Anderes" + "2": "Anderes", + "headline": "Hintergrund" } }, "userU25": { "age": { - "selectLabel": "Alter auswählen*", "0": "unter 12", "1": "12", "2": "13", @@ -2499,22 +2479,22 @@ "53": "23", "54": "24", "55": "25", - "56": "26" + "56": "26", + "selectLabel": "Alter auswählen*" }, "gender": { - "headline": "Geschlecht", "0": "Weiblich", "1": "Männlich", - "2": "Divers" + "2": "Divers", + "headline": "Geschlecht" }, "relation": { - "headline": "Hintergrund", "0": "Betroffen", "1": "Angehörig", - "2": "Anderes" + "2": "Anderes", + "headline": "Hintergrund" }, "state": { - "selectLabel": "Bundesland auswählen*", "0": "außerhalb Deutschlands", "1": "Baden-Württemberg", "2": "Bayern", @@ -2531,31 +2511,12 @@ "13": "Sachsen", "14": "Sachsen-Anhalt", "15": "Schleswig-Holstein", - "16": "Thüringen" + "16": "Thüringen", + "selectLabel": "Bundesland auswählen*" } } }, "userProfile": { - "tools": { - "description": "Schalten Sie Tools für die_den Ratsuchende_n frei. ", - "openModal": "Tool-Beschreibungen anzeigen", - "optionsPlaceholder": "Wähle eine Option...", - "title": "Tools", - "options": { - "saveError": "Beim Werkzeugwechsel ist ein Problem aufgetreten. Bitte versuchen Sie es erneut." - }, - "share": { - "sharedContent": "Zu den geteilten Inhalten", - "title": "Sehen Sie hier, welche Inhalte mit Ihnen geteilt wurden.", - "info": "Nur zugewiesene Berater_innen können die Inhalte der Ratsuchenden einsehen. Wenn Sie aus der Teamberatung auf die Inhalte zugreifen, sind die Ratsuchenden nicht vorausgewählt." - }, - "modal": { - "confirm": "Freischalten", - "deny": "Abbrechen", - "description": "Wählen Sie die Tools aus, die Sie dem_der Ratsuchenden zur Verfügung stellen möchten.", - "title": "Tool für die Ratsuchenden" - } - }, "data": { "addictiveDrugs": "Suchtmittel", "age": "Alter", @@ -2569,6 +2530,26 @@ "reassign": { "description": "Sie können die Unterhaltung einem anderen Teammitglied zuweisen. Diese Person ist dann für die_den Ratsuchende_n verantwortlich.", "title": "Zuweisung" + }, + "tools": { + "description": "Schalten Sie Tools für die_den Ratsuchende_n frei. ", + "modal": { + "confirm": "Freischalten", + "deny": "Abbrechen", + "description": "Wählen Sie die Tools aus, die Sie dem_der Ratsuchenden zur Verfügung stellen möchten.", + "title": "Tool für die Ratsuchenden" + }, + "openModal": "Tool-Beschreibungen anzeigen", + "options": { + "saveError": "Beim Werkzeugwechsel ist ein Problem aufgetreten. Bitte versuchen Sie es erneut." + }, + "optionsPlaceholder": "Wähle eine Option...", + "share": { + "info": "Nur zugewiesene Berater_innen können die Inhalte der Ratsuchenden einsehen. Wenn Sie aus der Teamberatung auf die Inhalte zugreifen, sind die Ratsuchenden nicht vorausgewählt.", + "sharedContent": "Zu den geteilten Inhalten", + "title": "Sehen Sie hier, welche Inhalte mit Ihnen geteilt wurden." + }, + "title": "Tools" } }, "videoCall": { @@ -2610,40 +2591,29 @@ }, "statusPage": { "closed": { - "title": "Ihr Video-Call wurde erfolgreich beendet.", - "action": "Bitte schließen Sie diesen Tab, um zu Beratung & Hilfe zurückzukehren." + "action": "Bitte schließen Sie diesen Tab, um zu Beratung & Hilfe zurückzukehren.", + "title": "Ihr Video-Call wurde erfolgreich beendet." }, "unauthorized": { - "title": "Kein Zutritt!", + "action": "Bitte schließen Sie diesen Tab, um zu Beratung & Hilfe zurückzukehren.", "reason": "Leider sind Sie nicht berechtigt diese Seite einzusehen.", - "action": "Bitte schließen Sie diesen Tab, um zu Beratung & Hilfe zurückzukehren." + "title": "Kein Zutritt!" } } }, "videoConference": { "waitingroom": { - "title": { - "start": "Warteraum" - }, "dataProtection": { "button": "Bestätigen", "description": "Danach dürfen unsere Berater_innen einen Video-Call mit Ihnen starten.", "headline": "Herzlich willkommen!", "label": { - "text": "Ich habe die {{legal_links}} zur Kenntnis genommen. Für Authentifizierung und Navigation verwendet diese Webseite Cookies. Damit erkläre ich mich einverstanden.", - "and": "und" + "and": "und", + "text": "Ich habe die {{legal_links}} zur Kenntnis genommen. Für Authentifizierung und Navigation verwendet diese Webseite Cookies. Damit erkläre ich mich einverstanden." }, "subline": "Bitte bestätigen Sie unsere Datenschutzbestimmungen." }, - "waitingImageTitle": "Wartende Person mit Kaffee", - "welcomeImageTitle": "Willkommen", "errorImageTitle": "Fehlgeschlagen", - "headline": "Bitte haben Sie etwas Geduld", - "subline": "Der Video-Call hat noch nicht begonnen. Sie werden weitergeleitet, sobald Ihr_e Berater_in den Video-Call startet.", - "paused": { - "headline": "Der Video-Call wurde beendet", - "subline": "Der Video-Call wurde beendet. Sollten Ihr_e Berater_in nur abwesend sein werden Sie in den Video-Call weitergeleitet, sobald Ihr_e Berater_in den Video-Call fortsetzt." - }, "errorPage": { "button": "Neu laden", "consultant": { @@ -2655,54 +2625,65 @@ "description": "Sie wurden nicht zugelassen. Leider können Sie an diesem Video-Call nicht teilnehmen, da Ihr_e Berater_in Sie nicht zugelassen hat.", "headline": "Sie wurden nicht zugelassen" } - } + }, + "headline": "Bitte haben Sie etwas Geduld", + "paused": { + "headline": "Der Video-Call wurde beendet", + "subline": "Der Video-Call wurde beendet. Sollten Ihr_e Berater_in nur abwesend sein werden Sie in den Video-Call weitergeleitet, sobald Ihr_e Berater_in den Video-Call fortsetzt." + }, + "subline": "Der Video-Call hat noch nicht begonnen. Sie werden weitergeleitet, sobald Ihr_e Berater_in den Video-Call startet.", + "title": { + "start": "Warteraum" + }, + "waitingImageTitle": "Wartende Person mit Kaffee", + "welcomeImageTitle": "Willkommen" } }, "walkthrough": { - "title": "Rundgang", - "subtitle": "Um Ihnen die einzelnen Funktionen zu erklären, haben wir einen kurzen Rundgang für Sie vorbereitet.
Sie können ihn jederzeit abbrechen oder in Ihrem Profil erneut starten.", - "switch": { - "active": { - "label": "Rundgang aktiv" - }, - "deactive": { - "label": "Rundgang aktiviert" - } - }, "step": { - "next": "Weiter", - "prev": "Zurück", - "done": "Fertig", - "step": "Schritt", - "of": "von", "0": { - "title": "Rundgang", - "intro": "Um Ihnen die einzelnen Funktionen zu erklären, haben wir einen kurzen Rundgang für Sie vorbereitet.

Sie können ihn jederzeit abbrechen oder in ihrem Profil erneut starten." + "intro": "Um Ihnen die einzelnen Funktionen zu erklären, haben wir einen kurzen Rundgang für Sie vorbereitet.

Sie können ihn jederzeit abbrechen oder in ihrem Profil erneut starten.", + "title": "Rundgang" }, "1": { - "title": "Erstanfragen", - "intro": "Hier finden Sie eine Übersicht über alle offenen Anfragen, die noch keinem Berater zugeordnet sind. Ihr gesamtes Team hat Zugriff auf diese Übersicht.\n

Die ältesten Anfragen stehen oben, die neuesten ganz unten, damit Sie die zuerst eingegangenen leichter finden können.\n

In dem Moment, in dem Sie auf 'Anfrage annehmen' klicken, wird die Anfrage sofort in Ihren Bereich 'Meine Beratungen' verschoben und die anderen Berater_innen sehen sie nicht mehr." + "intro": "Hier finden Sie eine Übersicht über alle offenen Anfragen, die noch keinem Berater zugeordnet sind. Ihr gesamtes Team hat Zugriff auf diese Übersicht.\n

Die ältesten Anfragen stehen oben, die neuesten ganz unten, damit Sie die zuerst eingegangenen leichter finden können.\n

In dem Moment, in dem Sie auf 'Anfrage annehmen' klicken, wird die Anfrage sofort in Ihren Bereich 'Meine Beratungen' verschoben und die anderen Berater_innen sehen sie nicht mehr.", + "title": "Erstanfragen" }, "2": { - "title": "Live-Chat Anfragen", - "intro": "Von hier aus können Sie einen Chat mit einem/einer Ratsuchenden beginnen, der/die sich gerade im Warteraum befindet.

Die Ratsuchenden werden mit einem anonymen Namen gekennzeichnet, wie zum Beispiel \"Ratsuchende_r 11\".

Wenn Sie den Chat starten möchten, klicken Sie auf \"Chat starten\" und Sie können das Gespräch unter der Rubrik \"Meine Beratungen\" fortsetzen." + "intro": "Von hier aus können Sie einen Chat mit einem/einer Ratsuchenden beginnen, der/die sich gerade im Warteraum befindet.

Die Ratsuchenden werden mit einem anonymen Namen gekennzeichnet, wie zum Beispiel \"Ratsuchende_r 11\".

Wenn Sie den Chat starten möchten, klicken Sie auf \"Chat starten\" und Sie können das Gespräch unter der Rubrik \"Meine Beratungen\" fortsetzen.", + "title": "Live-Chat Anfragen" }, "3": { - "title": "Meine Beratungen", - "intro": "In diesem Bereich finden Sie alle Anfragen, die Sie angenommen haben. \n

Der Nachrichtenverlauf, der zuletzt bearbeitet wurde, steht ganz oben.\nFalls der/die Ratsuchende gerade im Warteraum online ist, sehen Sie das Label \"Aktiv\" direkt neben dem Namen." + "intro": "In diesem Bereich finden Sie alle Anfragen, die Sie angenommen haben. \n

Der Nachrichtenverlauf, der zuletzt bearbeitet wurde, steht ganz oben.\nFalls der/die Ratsuchende gerade im Warteraum online ist, sehen Sie das Label \"Aktiv\" direkt neben dem Namen.", + "title": "Meine Beratungen" }, "4": { - "title": "Archiv", - "intro": "Damit Sie nicht durch nicht aktive Unterhaltungen abgelenkt werden, können Sie einige der Unterhaltungen archivieren.

Sie werden dann nicht gelöscht, sondern nur in die Registerkarte \"Archiv\" verschoben.

Jedes Mal, wenn Sie oder der/die Ratsuchende etwas in eine archivierte Unterhaltung schreiben, wird dieser Nachrichtenverlauf wieder in die Liste der Ratsuchenden eingeordnet." + "intro": "Damit Sie nicht durch nicht aktive Unterhaltungen abgelenkt werden, können Sie einige der Unterhaltungen archivieren.

Sie werden dann nicht gelöscht, sondern nur in die Registerkarte \"Archiv\" verschoben.

Jedes Mal, wenn Sie oder der/die Ratsuchende etwas in eine archivierte Unterhaltung schreiben, wird dieser Nachrichtenverlauf wieder in die Liste der Ratsuchenden eingeordnet.", + "title": "Archiv" }, "5": { - "title": "Team-Beratungen", - "intro": "In diesem Bereich können Sie alle aktiven Beratungen, die jemand in Ihrem Team gerade bearbeitet, einsehen und zu ihnen beitragen." + "intro": "In diesem Bereich können Sie alle aktiven Beratungen, die jemand in Ihrem Team gerade bearbeitet, einsehen und zu ihnen beitragen.", + "title": "Team-Beratungen" }, "6": { - "title": "Profil", - "intro": "Im Profilbereich können Sie persönliche und öffentliche Informationen verwalten, die Abwesenheitsnachricht während Ihres Urlaubs aktivieren, Ihr Passwort ändern und viele andere Funktionen (wie die Einrichtung der 2-Faktor-Authentifizierung) nutzen." + "intro": "Im Profilbereich können Sie persönliche und öffentliche Informationen verwalten, die Abwesenheitsnachricht während Ihres Urlaubs aktivieren, Ihr Passwort ändern und viele andere Funktionen (wie die Einrichtung der 2-Faktor-Authentifizierung) nutzen.", + "title": "Profil" + }, + "done": "Fertig", + "next": "Weiter", + "of": "von", + "prev": "Zurück", + "step": "Schritt" + }, + "subtitle": "Um Ihnen die einzelnen Funktionen zu erklären, haben wir einen kurzen Rundgang für Sie vorbereitet.
Sie können ihn jederzeit abbrechen oder in Ihrem Profil erneut starten.", + "switch": { + "active": { + "label": "Rundgang aktiv" + }, + "deactive": { + "label": "Rundgang aktiviert" } - } + }, + "title": "Rundgang" } } diff --git a/src/resources/i18n/de/consultingTypes.json b/src/resources/i18n/de/consultingTypes.json index 239d9760d..0de3b4ce9 100644 --- a/src/resources/i18n/de/consultingTypes.json +++ b/src/resources/i18n/de/consultingTypes.json @@ -1,15 +1,15 @@ { "consultingType": { "0": { + "anonymous": { + "title": "Anonym und kostenfrei" + }, "titles": { "default": "Suchtberatung", - "short": "Sucht", "long": "Suchtberatung", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "Suchtberatung" - }, - "anonymous": { - "title": "Anonym und kostenfrei" + "registrationDropdown": "Suchtberatung", + "short": "Sucht", + "welcome": "Willkommen bei der Online-Beratung" }, "welcomeScreen": { "anonymous": { @@ -18,13 +18,6 @@ } }, "1": { - "titles": { - "default": "[U25]", - "short": "[U25]", - "long": "Beratung für suizidgefährdete junge Menschen [U25]", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "Beratung für suizidgefährdete junge Menschen [U25]" - }, "anonymous": { "text": "Du bleibst anonym und erhältst kostenfreie Beratung und Hilfe", "title": "Anonym und kostenfrei" @@ -48,18 +41,25 @@ "14": "25", "15": "über 25" } + }, + "titles": { + "default": "[U25]", + "long": "Beratung für suizidgefährdete junge Menschen [U25]", + "registrationDropdown": "Beratung für suizidgefährdete junge Menschen [U25]", + "short": "[U25]", + "welcome": "Willkommen bei der Online-Beratung" } }, "2": { + "anonymous": { + "title": "Anonym und kostenfrei" + }, "titles": { "default": "Schwangerschaftsberatung", - "short": "Schwangerschaft", "long": "Schwangerschaftsberatung", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "Schwangerschaftsberatung" - }, - "anonymous": { - "title": "Anonym und kostenfrei" + "registrationDropdown": "Schwangerschaftsberatung", + "short": "Schwangerschaft", + "welcome": "Willkommen bei der Online-Beratung" }, "welcomeScreen": { "anonymous": { @@ -68,15 +68,15 @@ } }, "3": { + "anonymous": { + "title": "Anonym und kostenfrei" + }, "titles": { "default": "Eltern und Familien", - "short": "Eltern Familie", "long": "Beratung für Eltern und Familien", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "Eltern und Familien" - }, - "anonymous": { - "title": "Anonym und kostenfrei" + "registrationDropdown": "Eltern und Familien", + "short": "Eltern Familie", + "welcome": "Willkommen bei der Online-Beratung" }, "welcomeScreen": { "anonymous": { @@ -85,15 +85,15 @@ } }, "4": { + "anonymous": { + "title": "Anonym und kostenfrei" + }, "titles": { "default": "Kurberatung", - "short": "Kurberatung", "long": "Kurberatung für Mütter und Väter", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "Kurberatung" - }, - "anonymous": { - "title": "Anonym und kostenfrei" + "registrationDropdown": "Kurberatung", + "short": "Kurberatung", + "welcome": "Willkommen bei der Online-Beratung" }, "welcomeScreen": { "anonymous": { @@ -102,15 +102,15 @@ } }, "5": { + "anonymous": { + "title": "Anonym und kostenfrei" + }, "titles": { "default": "Schuldnerberatung", - "short": "Schulden", "long": "Beratung zum Thema Schulden", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "Schuldnerberatung" - }, - "anonymous": { - "title": "Anonym und kostenfrei" + "registrationDropdown": "Schuldnerberatung", + "short": "Schulden", + "welcome": "Willkommen bei der Online-Beratung" }, "welcomeScreen": { "anonymous": { @@ -119,15 +119,15 @@ } }, "6": { + "anonymous": { + "title": "Anonym und kostenfrei" + }, "titles": { "default": "Sozialberatung", - "short": "ASB", "long": "Allgemeine Sozialberatung", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "Sozialberatung" - }, - "anonymous": { - "title": "Anonym und kostenfrei" + "registrationDropdown": "Sozialberatung", + "short": "ASB", + "welcome": "Willkommen bei der Online-Beratung" }, "welcomeScreen": { "anonymous": { @@ -136,15 +136,15 @@ } }, "7": { + "anonymous": { + "title": "Anonym und kostenfrei" + }, "titles": { "default": "Leben im Alter", - "short": "Alter", "long": "Leben im Alter", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "Leben im Alter" - }, - "anonymous": { - "title": "Anonym und kostenfrei" + "registrationDropdown": "Leben im Alter", + "short": "Alter", + "welcome": "Willkommen bei der Online-Beratung" }, "welcomeScreen": { "anonymous": { @@ -153,15 +153,15 @@ } }, "8": { + "anonymous": { + "title": "Anonym und kostenfrei" + }, "titles": { "default": "Beeinträchtigung", - "short": "Beeinträchtigung", "long": "Leben mit Behinderung und psychischer Erkrankung", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "Beeinträchtigung" - }, - "anonymous": { - "title": "Anonym und kostenfrei" + "registrationDropdown": "Beeinträchtigung", + "short": "Beeinträchtigung", + "welcome": "Willkommen bei der Online-Beratung" }, "welcomeScreen": { "anonymous": { @@ -170,15 +170,15 @@ } }, "9": { + "anonymous": { + "title": "Anonym und kostenfrei" + }, "titles": { "default": "Go on – Start up!", - "short": "Go on – Start up!", "long": "Go on – Start up!", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "Go on – Start up!" - }, - "anonymous": { - "title": "Anonym und kostenfrei" + "registrationDropdown": "Go on – Start up!", + "short": "Go on – Start up!", + "welcome": "Willkommen bei der Online-Beratung" }, "welcomeScreen": { "anonymous": { @@ -187,15 +187,15 @@ } }, "10": { + "anonymous": { + "title": "Anonym und kostenfrei" + }, "titles": { "default": "Rechtliche Betreuung und Vorsorge", - "short": "(rechtl.) Betreuung", "long": "Rechtliche Betreuung und Vorsorge", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "Rechtliche Betreuung und Vorsorge" - }, - "anonymous": { - "title": "Anonym und kostenfrei" + "registrationDropdown": "Rechtliche Betreuung und Vorsorge", + "short": "(rechtl.) Betreuung", + "welcome": "Willkommen bei der Online-Beratung" }, "welcomeScreen": { "anonymous": { @@ -204,15 +204,15 @@ } }, "11": { + "anonymous": { + "title": "Anonym und kostenfrei" + }, "titles": { "default": "Straffälligenhilfe", - "short": "Straffälligenhilfe", "long": "Beratung für Angehörige von Straffälligen", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "Straffälligenhilfe" - }, - "anonymous": { - "title": "Anonym und kostenfrei" + "registrationDropdown": "Straffälligenhilfe", + "short": "Straffälligenhilfe", + "welcome": "Willkommen bei der Online-Beratung" }, "welcomeScreen": { "anonymous": { @@ -221,15 +221,15 @@ } }, "12": { + "anonymous": { + "title": "Anonym und kostenfrei" + }, "titles": { "default": "HIV / AIDS", - "short": "HIV", "long": "HIV/AIDS-Beratung", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "HIV / AIDS" - }, - "anonymous": { - "title": "Anonym und kostenfrei" + "registrationDropdown": "HIV / AIDS", + "short": "HIV", + "welcome": "Willkommen bei der Online-Beratung" }, "welcomeScreen": { "anonymous": { @@ -238,15 +238,15 @@ } }, "13": { + "anonymous": { + "title": "Anonym und kostenfrei" + }, "titles": { "default": "Kinder-Reha", - "short": "Kinder-Reha", "long": "Kinder- und Jugend-Rehabilitation", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "Kinder-Reha" - }, - "anonymous": { - "title": "Anonym und kostenfrei" + "registrationDropdown": "Kinder-Reha", + "short": "Kinder-Reha", + "welcome": "Willkommen bei der Online-Beratung" }, "welcomeScreen": { "anonymous": { @@ -255,15 +255,15 @@ } }, "14": { + "anonymous": { + "title": "Anonym und kostenfrei" + }, "titles": { "default": "Kinder Jugendliche", - "short": "Kinder Jugendliche", "long": "Beratung für Kinder und Jugendliche", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "Kinder Jugendliche" - }, - "anonymous": { - "title": "Anonym und kostenfrei" + "registrationDropdown": "Kinder Jugendliche", + "short": "Kinder Jugendliche", + "welcome": "Willkommen bei der Online-Beratung" }, "welcomeScreen": { "anonymous": { @@ -272,20 +272,20 @@ } }, "15": { - "titles": { - "default": "Sucht", - "short": "Sucht", - "long": "Sucht-Selbsthilfe – Kreuzbund-Chat", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "Sucht-Selbsthilfe - Kreuzbund" + "anonymous": { + "title": "Anonym und kostenfrei" }, "groupChatRules": { "0": "In der Sucht-Selbsthilfe duzen wir uns, sowohl in den Gruppen vor Ort als auch hier im Chat. Wer damit Probleme hat, teile das im Chat mit – wir stellen uns gerne darauf ein!", "1": "Menschen sind verschieden, ihre Meinungen sind es auch. Aufeinander zu achten sowie wertschätzende Chat-Beiträge gewährleisten ein helfendes Miteinander.", "2": "Moderator_innen haben die Aufgabe, dafür zu sorgen, dass sich die Chat-Teilnehmenden austauschen können. Sie bieten gegebenenfalls auch Sucht-Themen zur Diskussion an. Ihren Aufforderungen ist zu folgen, beispielsweise dann, wenn Chat-Regeln nicht eingehalten werden." }, - "anonymous": { - "title": "Anonym und kostenfrei" + "titles": { + "default": "Sucht", + "long": "Sucht-Selbsthilfe – Kreuzbund-Chat", + "registrationDropdown": "Sucht-Selbsthilfe - Kreuzbund", + "short": "Sucht", + "welcome": "Willkommen bei der Online-Beratung" }, "welcomeScreen": { "anonymous": { @@ -294,15 +294,15 @@ } }, "16": { + "anonymous": { + "title": "Anonym und kostenfrei" + }, "titles": { "default": "Migrationsberatung", - "short": "Migrationsberatung", "long": "Migrationsberatung", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "Migrationsberatung" - }, - "anonymous": { - "title": "Anonym und kostenfrei" + "registrationDropdown": "Migrationsberatung", + "short": "Migrationsberatung", + "welcome": "Willkommen bei der Online-Beratung" }, "welcomeScreen": { "anonymous": { @@ -311,15 +311,15 @@ } }, "17": { + "anonymous": { + "title": "Anonym" + }, "titles": { "default": "Auswanderung", - "short": "Auswanderung", "long": "Aus-/Rück- & Weiterwanderung", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "Auswanderung" - }, - "anonymous": { - "title": "Anonym" + "registrationDropdown": "Auswanderung", + "short": "Auswanderung", + "welcome": "Willkommen bei der Online-Beratung" }, "welcomeScreen": { "anonymous": { @@ -328,15 +328,15 @@ } }, "18": { + "anonymous": { + "title": "Anonym und kostenfrei" + }, "titles": { "default": "Hospiz-Palliativ-Trauer", - "short": "Hospiz-Palliativ", "long": "Hospiz-, Palliativ- und Trauerberatung", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "Hospiz-Palliativ-Trauer" - }, - "anonymous": { - "title": "Anonym und kostenfrei" + "registrationDropdown": "Hospiz-Palliativ-Trauer", + "short": "Hospiz-Palliativ", + "welcome": "Willkommen bei der Online-Beratung" }, "welcomeScreen": { "anonymous": { @@ -345,15 +345,15 @@ } }, "19": { + "anonymous": { + "title": "Anonym und kostenfrei" + }, "titles": { "default": "Regionale Angebote", - "short": "Regionale Angebote", "long": "Regionale Angebote", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "Regionale Angebote" - }, - "anonymous": { - "title": "Anonym und kostenfrei" + "registrationDropdown": "Regionale Angebote", + "short": "Regionale Angebote", + "welcome": "Willkommen bei der Online-Beratung" }, "welcomeScreen": { "anonymous": { @@ -362,15 +362,15 @@ } }, "20": { + "anonymous": { + "title": "Anonym und kostenfrei" + }, "titles": { "default": "Jungen und Männer", - "short": "Jungen und Männer", "long": "Jungen- und Männerberatung", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "Jungen und Männer" - }, - "anonymous": { - "title": "Anonym und kostenfrei" + "registrationDropdown": "Jungen und Männer", + "short": "Jungen und Männer", + "welcome": "Willkommen bei der Online-Beratung" }, "welcomeScreen": { "anonymous": { @@ -379,37 +379,37 @@ } }, "21": { + "anonymous": { + "title": "Anonym und kostenfrei" + }, + "groupChatRules": { + "0": "In der Selbsthilfe duzen wir uns, sowohl in den Gruppen vor Ort als auch hier im Chat. Wer damit Probleme hat, teile das im Chat mit – wir stellen uns gerne darauf ein!", + "1": "Menschen sind verschieden, ihre Meinungen sind es auch. Aufeinander zu achten sowie wertschätzende Chat-Beiträge gewährleisten ein helfendes Miteinander.", + "2": "Moderator_innen haben die Aufgabe, dafür zu sorgen, dass sich die Chat-User_innen austauschen können. Ihren Aufforderungen ist zu folgen, beispielsweise dann, wenn Chat-Regeln nicht eingehalten werden." + }, "titles": { "default": "Selbsthilfe Vechta", - "short": "Selbsthilfe", "long": "Kontakt- und Beratungsstelle Selbsthilfe", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "Selbsthilfe Vechta" - }, - "anonymous": { - "title": "Anonym und kostenfrei" + "registrationDropdown": "Selbsthilfe Vechta", + "short": "Selbsthilfe", + "welcome": "Willkommen bei der Online-Beratung" }, "welcomeScreen": { "anonymous": { "text": "Sie bleiben anonym und erhalten kostenfreie Beratung und Hilfe" } - }, - "groupChatRules": { - "0": "In der Selbsthilfe duzen wir uns, sowohl in den Gruppen vor Ort als auch hier im Chat. Wer damit Probleme hat, teile das im Chat mit – wir stellen uns gerne darauf ein!", - "1": "Menschen sind verschieden, ihre Meinungen sind es auch. Aufeinander zu achten sowie wertschätzende Chat-Beiträge gewährleisten ein helfendes Miteinander.", - "2": "Moderator_innen haben die Aufgabe, dafür zu sorgen, dass sich die Chat-User_innen austauschen können. Ihren Aufforderungen ist zu folgen, beispielsweise dann, wenn Chat-Regeln nicht eingehalten werden." } }, "22": { + "anonymous": { + "title": "Anonym und kostenfrei" + }, "titles": { "default": "#gemeinsamstatteinsam", - "short": "#gse", "long": "#gemeinsamstatteinsam – Onlineberatung für junge Menschen in besonderen Zeiten", - "welcome": "Willkommen bei der Online-Beratung", - "registrationDropdown": "#gemeinsamstatteinsam" - }, - "anonymous": { - "title": "Anonym und kostenfrei" + "registrationDropdown": "#gemeinsamstatteinsam", + "short": "#gse", + "welcome": "Willkommen bei der Online-Beratung" }, "welcomeScreen": { "anonymous": { diff --git a/src/resources/i18n/de@informal/common.json b/src/resources/i18n/de@informal/common.json index 76615c5cf..025aad168 100644 --- a/src/resources/i18n/de@informal/common.json +++ b/src/resources/i18n/de@informal/common.json @@ -1,13 +1,13 @@ { "absence": { + "input": { + "infoText": "Ratsuchende sehen diese Abwesenheitsnachricht, können Dir aber weiterhin schreiben." + }, "overlay": { - "copy": "Deine Abwesenheitsnachricht ist momentan aktiviert.
Möchtest Du diese deaktivieren?", "changeSuccess": { "headline": "Der Status Deiner Abwesenheitsnachricht wurde erfolgreich aktualisiert." - } - }, - "input": { - "infoText": "Ratsuchende sehen diese Abwesenheitsnachricht, können Dir aber weiterhin schreiben." + }, + "copy": "Deine Abwesenheitsnachricht ist momentan aktiviert.
Möchtest Du diese deaktivieren?" } }, "aliases": { @@ -18,11 +18,11 @@ "appointments": { "onlineMeeting": { "overlay": { - "start": { - "copy": "Du startest jetzt den Video-Call. Eingeladene Teilnehmer_innen können ab sofort mit dem Einladungslink beitreten." - }, "delete": { "copy": "Möchtest Du diesen Video-Call wirklich löschen?" + }, + "start": { + "copy": "Du startest jetzt den Video-Call. Eingeladene Teilnehmer_innen können ab sofort mit dem Einladungslink beitreten." } } }, @@ -53,16 +53,16 @@ "headline": "Deine Datei konnte nicht gesendet werden.", "message": "Deine Datei konnte nicht gesendet werden. Erlaubt sind Bilder (jpg und png), sowie Dokumente (docx und pdf). Bitte versuche es erneut." }, - "size": { - "headline": "Deine gewählte Datei ist zu groß.", - "message": "Du kannst max. {{attachment_filesize}}MB hochladen." + "other": { + "message": "Bitte versuche es erneut." }, "quota": { "headline": "Du hast das Limit zum Hochladen erreicht.", "message": "Bitte versuche es morgen erneut." }, - "other": { - "message": "Bitte versuche es erneut." + "size": { + "headline": "Deine gewählte Datei ist zu groß.", + "message": "Du kannst max. {{attachment_filesize}}MB hochladen." } }, "list": { @@ -95,12 +95,12 @@ }, "event": { "description": "Deine Nachricht zum Termin", + "tooltip": { + "adviceSeeker": "Falls Dein:e Berater:in den Termin nicht in dem von Dir gewählten Modus wahrnehmen kann, generieren wir für Dich immer einen Link zum Video-Call als Alternative.", + "consultant": "Falls Du den Termin nicht in dem vom Ratsuchenden gewählten Modus wahrnehmen kannst, generieren wir für Dich immer einen Link zum Video-Call als Alternative." + }, "your": { "counselor": "Dein Berater" - }, - "tooltip": { - "consultant": "Falls Du den Termin nicht in dem vom Ratsuchenden gewählten Modus wahrnehmen kannst, generieren wir für Dich immer einen Link zum Video-Call als Alternative.", - "adviceSeeker": "Falls Dein:e Berater:in den Termin nicht in dem von Dir gewählten Modus wahrnehmen kann, generieren wir für Dich immer einen Link zum Video-Call als Alternative." } }, "my": { @@ -109,17 +109,10 @@ } } }, - "termsAndConditionOverlay": { - "contentLine1": { - "termsAndCondition": "Wir haben die Nutzungsbedingungen der Online-Beratung aktualisiert. Um die Online-Beratung weiter nutzen zu können, benötigen wir Deine Zustimmung.", - "privacy": "Wir haben die Datenschutzerklärung der Online-Beratung aktualisiert. Den aktuellen Stand findest Du hier.", - "termsAndConditionAndPrivacy": "Wir haben die Nutzungsbedingungen und Datenschutzerklärung der Online-Beratung aktualisiert. Um die Online-Beratung weiter nutzen zu können, benötigen wir Deine Zustimmung." - } - }, "deleteAccount": { "confirmOverlay": { - "headline": "Möchtest Du Deinen Account wirklich löschen?", "copy": "Dieser Vorgang kann nicht rückgängig gemacht werden.

Dein Account wird innerhalb der nächsten 48 Stunden gelöscht. Deine Daten werden gemäß der geltenden Datenschutzbestimmungen gelöscht.

Bitte gebe Dein Passwort ein, um Deinen Account nun zu löschen.", + "headline": "Möchtest Du Deinen Account wirklich löschen?", "input": { "warning": "Dein Passwort ist nicht korrekt." } @@ -130,8 +123,7 @@ }, "deleteSession": { "confirmOverlay": { - "copy": "Möchtest Du den Chat wirklich löschen?", - "headline": "Chat löschen" + "copy": "Möchtest Du den Chat wirklich löschen?" }, "errorOverlay": { "headline": "Ups! Wir konnten den Chat gerade nicht löschen. Bitte versuche es erneut." @@ -148,22 +140,22 @@ }, "hint": "Deine Nachrichten sind Ende-zu-Ende verschlüsselt. Das bedeutet, niemand außerhalb dieses Chats kann die Nachrichten lesen. Nicht einmal die Online-Beratungs-Plattform.", "inProgress": { - "copy": "Deine Sicherheit ist uns wichtig! Wir verschlüsseln gerade Deinen Chat. Dies kann einen Moment dauern.", - "confirm": "Bitte warte bis die Verschlüsselung abgeschlossen ist!" + "confirm": "Bitte warte bis die Verschlüsselung abgeschlossen ist!", + "copy": "Deine Sicherheit ist uns wichtig! Wir verschlüsseln gerade Deinen Chat. Dies kann einen Moment dauern." + }, + "roomNotFound": { + "notice": { + "line3": "Bitte lade die Seite neu und probiere es nochmal." + } }, "subscriptionKeyLost": { "notice": { - "title": "Deine Sicherheit ist uns wichtig!", - "text": "Da Du Dein Passwort zurückgesetzt hast, sind die Nachrichten für Dich momentan nicht lesbar. Sobald ein_e Chat-Teilnehmer_in den Chat wieder öffnet, kannst Du die Nachrichten wieder lesen und Neue schreiben." + "text": "Da Du Dein Passwort zurückgesetzt hast, sind die Nachrichten für Dich momentan nicht lesbar. Sobald ein_e Chat-Teilnehmer_in den Chat wieder öffnet, kannst Du die Nachrichten wieder lesen und Neue schreiben.", + "title": "Deine Sicherheit ist uns wichtig!" }, "overlay": { "copy": "Deine Nachrichten sind aus Sicherheitsgründen Ende-zu-Ende verschlüsselt. Das bedeutet, niemand außerhalb dieses Chats kann die Nachrichten lesen. Nicht einmal die Online-Beratungs-Plattform.

Wenn das Passwort zurückgesetzt wird, sind die Nachrichten vorübergehend nicht lesbar. Sobald ein_e weitere_r Chat-Teilnehmer_in den Chat wieder öffnet, können die Nachrichten neu verschlüsselt werden. Somit können wieder allen Chat-Teilnehmer_innen Nachrichten lesen und schreiben." } - }, - "roomNotFound": { - "notice": { - "line3": "Bitte lade die Seite neu und probiere es nochmal." - } } }, "enquiry": { @@ -172,27 +164,27 @@ "start": "Starte nun den Chat mit " } }, + "language": { + "selection": { + "headline": "Bitte wähle die Sprache, in der Du beraten werden willst." + } + }, "write": { + "infotext": { + "copy": { + "facts": "
  • Was ist passiert?
  • Wie ist Deine aktuelle Situation?
  • Was beschäftigt Dich?
  • Hast Du eine bestimmte Frage oder weißt Du vielleicht selbst noch nicht so genau, was Dir helfen könnte?
", + "title": "Vielleicht helfen Dir folgende Punkte bei der Formulierung weiter:" + }, + "headline": "Hier ist Platz für Deine Anliegen." + }, "input": { "placeholder": { "asker": "Schreibe uns, was Dich bewegt." } }, - "infotext": { - "headline": "Hier ist Platz für Deine Anliegen.", - "copy": { - "title": "Vielleicht helfen Dir folgende Punkte bei der Formulierung weiter:", - "facts": "
  • Was ist passiert?
  • Wie ist Deine aktuelle Situation?
  • Was beschäftigt Dich?
  • Hast Du eine bestimmte Frage oder weißt Du vielleicht selbst noch nicht so genau, was Dir helfen könnte?
" - } - }, "overlay": { - "headline": "Vielen Dank für Deine Nachricht!", - "copy": "Innerhalb von 2 Werktagen erhältst Du eine Antwort von uns." - } - }, - "language": { - "selection": { - "headline": "Bitte wähle die Sprache, in der Du beraten werden willst." + "copy": "Innerhalb von 2 Werktagen erhältst Du eine Antwort von uns.", + "headline": "Vielen Dank für Deine Nachricht!" } } }, @@ -210,23 +202,11 @@ } }, "furtherSteps": { - "step1": { - "info": "Wir haben Deine Nachricht erhalten." - }, - "step2": { - "info": "Jetzt finden wir eine_n passende_n Berater_in für Dich." - }, - "step3": { - "info": "Dein_e Berater_in antwortet innerhalb von 2 Werktagen." - }, - "emailNotification": { - "infoText": "Wenn Du Deine E-Mail-Adresse angibst (freiwillig)
  • erhältst Du eine E-Mail-Benachrichtigung, wenn Dein_e Berater_in Dir geschrieben hat
  • kannst Du Dein Passwort zurücksetzen, falls Du es vergessen hast.
Deine E-Mail-Adresse kann von den Berater_innen nicht eingesehen werden." - }, "email": { "overlay": { "input": { - "valid": "Deine E-Mail-Adresse ist gültig.", - "invalid": "Deine E-Mail-Adresse ist nicht gültig." + "invalid": "Deine E-Mail-Adresse ist nicht gültig.", + "valid": "Deine E-Mail-Adresse ist gültig." } }, "success": { @@ -235,33 +215,32 @@ } } }, + "emailNotification": { + "infoText": "Wenn Du Deine E-Mail-Adresse angibst (freiwillig)
  • erhältst Du eine E-Mail-Benachrichtigung, wenn Dein_e Berater_in Dir geschrieben hat
  • kannst Du Dein Passwort zurücksetzen, falls Du es vergessen hast.
Deine E-Mail-Adresse kann von den Berater_innen nicht eingesehen werden." + }, + "step1": { + "info": "Wir haben Deine Nachricht erhalten." + }, + "step2": { + "info": "Jetzt finden wir eine_n passende_n Berater_in für Dich." + }, + "step3": { + "info": "Dein_e Berater_in antwortet innerhalb von 2 Werktagen." + }, "twoFactorAuth": { "headline": "Der Schutz Deiner Daten ist uns wichtig", "infoText": "Sichere Dein Konto vor einem möglichen unbefugten Zugriff. Nutze einen zweiten Faktor (App oder E-Mail) für die Anmeldung in der Online-Beratung." - }, - "voluntaryInfo": { - "headline": "Wir wollen Dich bestmöglichst beraten", - "infoText": "Dabei hilft es uns, wenn Du weitere freiwillige Angaben zu Dir und Deinem Anliegen machst.", - "overlay": { - "success": { - "headline": "Vielen Dank. Deine freiwilligen Angaben wurden erfolgreich gespeichert." - } - } } }, "groupChat": { - "qrCode": { - "headline": "Dein Gruppenchat QR-Code", - "text": "Wenn Du diesen QR-Code mit jemandem teilst, kann diese Person ihn mit der Handykamera scannen, um der Gruppe beizutreten. Du kannst den Code auch herunterladen." - }, - "createSuccess": { + "createError": { "overlay": { - "headline": "Du hast erfolgreich einen Chat angelegt." + "headline": "Es ist ein Fehler aufgetreten. Bitte versuche es erneut." } }, - "createError": { + "createSuccess": { "overlay": { - "headline": "Es ist ein Fehler aufgetreten. Bitte versuche es erneut." + "headline": "Du hast erfolgreich einen Chat angelegt." } }, "join": { @@ -290,6 +269,10 @@ "self": "Du hast den Chat erstellt." } }, + "qrCode": { + "headline": "Dein Gruppenchat QR-Code", + "text": "Wenn Du diesen QR-Code mit jemandem teilst, kann diese Person ihn mit der Handykamera scannen, um der Gruppe beizutreten. Du kannst den Code auch herunterladen." + }, "stopChat": { "securityOverlay": { "headline": "Möchtest Du den Chat wirklich beenden?" @@ -303,28 +286,10 @@ }, "help": { "videoCall": { - "waitingRoom": { - "headline": "Es liegt nicht an Dir, sondern an Deinem Browser.", - "infoBox": { - "headline": "Dein Browser unterstützt keine Video-Calls.", - "text": "Damit Du an Video-Calls teilnehmen kannst, verwende bitte Google Chrome, Microsoft Edge oder Safari." - }, - "subline1": "Hast Du noch keinen Google Chrome, Microsoft Edge oder Safari?", - "text1": "Lade einen der Browser herunter.", - "subline2": "Du hast bereits Google Chrome, Microsoft Edge oder Safari?", - "text2": "Öffne nun Deinen Link zur Online-Beratung mit einem der unterstützten Browser." - }, - "banner": { - "content": "Bitte verwende einen anderen Browser, um Video-Calls zu ermöglichen.", - "more": "Mehr erfahren" - }, "asker": { "headline": "Video-Call", "intro": "Damit Du an Video-Calls teilnehmen kannst, musst Du Dich über einen der unterstützten Browser anmelden. Die Chat-Beratung funktioniert weiterhin mit Firefox.", "steps": { - "headline": { - "2": "Du hast bereits Google Chrome, Microsoft Edge oder Safari?" - }, "1": { "1": "Folge dem Link zu ", "2": " oder ", @@ -337,9 +302,16 @@ "2": "Öffne die Online-Beratung mit einem dieser Browser." }, "5": "Melde Dich bei der Online-Beratung an.", - "6": "Bitte Deine_n Berater_in Dich nochmals anzurufen." + "6": "Bitte Deine_n Berater_in Dich nochmals anzurufen.", + "headline": { + "2": "Du hast bereits Google Chrome, Microsoft Edge oder Safari?" + } } }, + "banner": { + "content": "Bitte verwende einen anderen Browser, um Video-Calls zu ermöglichen.", + "more": "Mehr erfahren" + }, "consultant": { "headline": "Video-Call", "intro": "Um einen Video-Call durchführen zu können, musst Du Dich über einen der unterstützten Browser anmelden. Die Chat-Beratung funktioniert weiterhin mit Firefox.", @@ -361,6 +333,17 @@ "2": "Du hast bereits Google Chrome, Microsoft Edge oder Safari?" } } + }, + "waitingRoom": { + "headline": "Es liegt nicht an Dir, sondern an Deinem Browser.", + "infoBox": { + "headline": "Dein Browser unterstützt keine Video-Calls.", + "text": "Damit Du an Video-Calls teilnehmen kannst, verwende bitte Google Chrome, Microsoft Edge oder Safari." + }, + "subline1": "Hast Du noch keinen Google Chrome, Microsoft Edge oder Safari?", + "subline2": "Du hast bereits Google Chrome, Microsoft Edge oder Safari?", + "text1": "Lade einen der Browser herunter.", + "text2": "Öffne nun Deinen Link zur Online-Beratung mit einem der unterstützten Browser." } } }, @@ -374,11 +357,6 @@ "appointmentSet": { "title": "Dein Termin wurde erstellt" }, - "submit": { - "booking": { - "headline": "Oder vereinbaren Sie jetzt einen Termin" - } - }, "delete": { "deleted": { "own": "Du hast diese Nachricht gelöscht." @@ -387,19 +365,24 @@ "copy": "Möchtest Du die Nachricht wirklich löschen?" } }, + "submit": { + "booking": { + "headline": "Oder vereinbaren Sie jetzt einen Termin" + } + }, "video": { "description": "Du kannst jetzt an der Videokonferenz teilnehmen" } }, "notifications": { - "message": { - "new": "Du hast eine neue Nachricht!" - }, "enquiry": { "new": "Du hast eine neue Live-Chat Anfrage!" }, "initialRequest": { "new": "Du hast eine neue Erstanfrage!" + }, + "message": { + "new": "Du hast eine neue Nachricht!" } }, "overlay": { @@ -408,8 +391,8 @@ } }, "overview": { - "upcomingAppointments": "Deine nächsten {{countStr}} Termine", - "upcomingAppointment": "Dein nächster Termin" + "upcomingAppointment": "Dein nächster Termin", + "upcomingAppointments": "Deine nächsten {{countStr}} Termine" }, "preconditions": { "cookie": { @@ -421,90 +404,97 @@ } }, "profile": { - "liveChat": { - "title": "Meine Live-Chat Verfügbarkeit", - "subtitle": "Aktiviere Deine Verfügbarkeit und sehe in den Erstanfragen unter „Live-Chat Anfragen“ die wartenden anonymen Ratsuchenden.", - "toggleLabel": "Bin verfügbar" + "appLanguage": { + "info": "Stelle hier die Sprache der Anwendung ein." + }, + "browserNotifications": { + "denied": { + "message": "Du hast den Empfang von Benachrichtigungen für diesen Browser abgelehnt. Um Push-Benachrichtigungen zu aktivieren, musst Du diese zuerst in Deinen Browsereinstellungen zulassen." + }, + "description": "Wenn Du online bist, informieren wir Dich in diesem Browser, wenn Du eine neue Nachricht erhalten hast.", + "newMessage": { + "description": "Einer der Dir zugewiesenen Ratsuchenden hat Dir geantwortet" + } + }, + "data": { + "emailInfo": "Die Angabe Deiner E-Mail ist freiwillig und wird ausschließlich verwendet, um Dich über neue Antworten Deine_r Berater_in zu informieren. Deine E-Mail-Adresse ist für Berater_innen nicht sichtbar.", + "info": { + "public": "Mit dem Anzeigenamen erscheinst Du bei den Ratsuchenden." + }, + "personal": { + "registrationLink": { + "tooltip": "Teile Deinen persönlichen Kontakt-Link mit jemanden, damit diese Person eine Onlineberatung direkt mit Dir starten kann." + } + }, + "register": { + "consultingModeInfo": { + "singleChats": "In diesen Themenfeldern erhältst Du eine persönliche Beratung. Schreibe uns Dein Anliegen!" + }, + "headline": "Benötigst Du auch zu anderen Themen Rat oder Hilfe?
Wir unterstützen Dich gerne." + }, + "registerError": { + "overlay": { + "headline": "Es ist ein Fehler aufgetreten. Bitte versuche es erneut." + } + }, + "registerSuccess": { + "overlay": { + "headline": "Du hast Dich erfolgreich für ein neues Themenfeld registriert." + } + } + }, + "documentation": { + "description": "Hast Du Fragen? Im Handbuch findest Du detaillierte Informationen zu den wichtigsten Funktionen der Online-Beratungsplattform." + }, + "externalRegistration": { + "copy": { + "end": "“ zu der anderen Anwendung wechseln und Dich dort registrieren? Deine bisherigen Beratungs- und Hilfethemen findest Du weiterhin hier.", + "start": "Möchtest Du für „" + }, + "headline": "Deine gewählte Beratungsstelle nutzt eine andere Anwendung für die Beratung" }, "functions": { "absence": { - "label": "Hinterlege eine Abwesenheitsnachricht", "activated": { "label": "Deaktiviere Deine Abwesenheit, um eine Nachricht zu hinterlegen oder sie zu bearbeiten." - } + }, + "label": "Hinterlege eine Abwesenheitsnachricht" + }, + "masterKey": { + "saveError": "Beim Ändern des Passworts ist ein Problem aufgetaucht. Bitte versuche es erneut." }, "password": { "reset": { - "subtitle": "Wenn Du möchtest, kannst Du hier Dein Passwort ändern. Gebe erst Dein aktuelles Passwort ein, um ein Neues festzulegen.", - "secure": "Dein Passwort ist sicher.", "insecure": "Dein Passwort ist nicht sicher.", - "same": "Dein Passwort ist identisch.", + "instructions": "Dein Passwort muss folgende Kriterien erfüllen, um eine geschützte Beratung zu garantieren:
  • Groß-/Kleinschreibung
  • mind. eine Zahl
  • mind. ein Sonderzeichen (z.B.: ?, !, +, #, &, ...)
  • mind. 9 Zeichen
", "not": { "same": "Dein Passwort ist nicht identisch." }, "old": { "incorrect": "Dein Passwort ist nicht korrekt." }, - "instructions": "Dein Passwort muss folgende Kriterien erfüllen, um eine geschützte Beratung zu garantieren:
  • Groß-/Kleinschreibung
  • mind. eine Zahl
  • mind. ein Sonderzeichen (z.B.: ?, !, +, #, &, ...)
  • mind. 9 Zeichen
", "overlay": { "headline": "Du hast Dein Passwort erfolgreich geändert. Du wirst nun zum Login weitergeleitet." - } + }, + "same": "Dein Passwort ist identisch.", + "secure": "Dein Passwort ist sicher.", + "subtitle": "Wenn Du möchtest, kannst Du hier Dein Passwort ändern. Gebe erst Dein aktuelles Passwort ein, um ein Neues festzulegen." } }, "spokenLanguages": { "saveError": "Beim Speichern ist ein Problem aufgetaucht. Bitte versuche es erneut." - }, - "masterKey": { - "saveError": "Beim Ändern des Passworts ist ein Problem aufgetaucht. Bitte versuche es erneut." } }, - "data": { - "register": { - "headline": "Benötigst Du auch zu anderen Themen Rat oder Hilfe?
Wir unterstützen Dich gerne.", - "consultingModeInfo": { - "singleChats": "In diesen Themenfeldern erhältst Du eine persönliche Beratung. Schreibe uns Dein Anliegen!" - } - }, - "registerSuccess": { - "overlay": { - "headline": "Du hast Dich erfolgreich für ein neues Themenfeld registriert." - } - }, - "registerError": { - "overlay": { - "headline": "Es ist ein Fehler aufgetreten. Bitte versuche es erneut." - } - }, - "personal": { - "registrationLink": { - "tooltip": "Teile Deinen persönlichen Kontakt-Link mit jemanden, damit diese Person eine Onlineberatung direkt mit Dir starten kann." - } - }, - "info": { - "public": "Mit dem Anzeigenamen erscheinst Du bei den Ratsuchenden." - }, - "emailInfo": "Die Angabe Deiner E-Mail ist freiwillig und wird ausschließlich verwendet, um Dich über neue Antworten Deine_r Berater_in zu informieren. Deine E-Mail-Adresse ist für Berater_innen nicht sichtbar." - }, - "externalRegistration": { - "headline": "Deine gewählte Beratungsstelle nutzt eine andere Anwendung für die Beratung", - "copy": { - "start": "Möchtest Du für „", - "end": "“ zu der anderen Anwendung wechseln und Dich dort registrieren? Deine bisherigen Beratungs- und Hilfethemen findest Du weiterhin hier." - } - }, - "statistics": { - "period": { - "prefix": "Deine Zahlen des", - "display": { - "suffix": " hast Du:" - } - }, - "complete": { - "title": "Deine Statistik über Deinen gewählten Beratungszeitraum kannst Du hier herunterladen:" - } + "liveChat": { + "subtitle": "Aktiviere Deine Verfügbarkeit und sehe in den Erstanfragen unter „Live-Chat Anfragen“ die wartenden anonymen Ratsuchenden.", + "title": "Meine Live-Chat Verfügbarkeit", + "toggleLabel": "Bin verfügbar" }, "notifications": { - "subtitle": "Wir benachrichtigen Dich, wenn Du:", + "description": "Wir informieren Dich per E-Mail, wenn Du eine neue Nachricht erhalten hast.", + "error": { + "description": "Leider können wir Deine Einstellungen momentan nicht aktualisieren. Bitte versuche es später noch einmal." + }, "follow": { "up": { "email": { @@ -512,29 +502,16 @@ } } }, - "description": "Wir informieren Dich per E-Mail, wenn Du eine neue Nachricht erhalten hast.", "initialEnquiry": { "description": "Wir informieren Dich auch, wenn Du im System angemeldet bist." }, - "reassignmentAdviceSeeker": { - "description": "Dein_e Berater_in hat um Erlaubnis gebeten, Dich einem neuen Berater zuzuweisen." - }, "newMessageAdviceSeeker": { - "title": "Neue Chat-Nachricht", - "description": "Wir informieren Dich, solange Du nicht im System angemeldet bist." + "description": "Wir informieren Dich, solange Du nicht im System angemeldet bist.", + "title": "Neue Chat-Nachricht" }, "newMessageConsultant": { - "title": "Neue Chat-Nachricht", - "description": "Einer der Dir zugewiesenen Ratsuchenden hat Dir geantwortet. Wir informieren Dich, solange Du nicht im System angemeldet bist." - }, - "reassignmentConsultant": { - "description": "Kollege_in hat Dir eine_n Ratsuchende_n zugewiesen." - }, - "error": { - "description": "Leider können wir Deine Einstellungen momentan nicht aktualisieren. Bitte versuche es später noch einmal." - }, - "toggleError": { - "description": "Leider können wir Deine Benachrichtigungen zurzeit nicht aktivieren. Bitte versuche es später noch einmal." + "description": "Einer der Dir zugewiesenen Ratsuchenden hat Dir geantwortet. Wir informieren Dich, solange Du nicht im System angemeldet bist.", + "title": "Neue Chat-Nachricht" }, "noEmail": { "info": "Du hast noch keine E-Mail-Adresse hinzugefügt.", @@ -542,25 +519,31 @@ "description": "Die Angabe Deiner E-Mail-Adresse ist freiwillig und wird ausschließlich verwendet, um Dich über neue Antworten Deines_r Berater_in zu informieren. Deine E-Mail-Adresse ist für Berater_innen nicht sichtbar.", "errorMessage": "Leider können wir Deine E-Mail-Adresse momentan nicht speichern. Bitte versuche es später noch einmal oder kontaktiere unseren Support." } - } - }, - "browserNotifications": { - "description": "Wenn Du online bist, informieren wir Dich in diesem Browser, wenn Du eine neue Nachricht erhalten hast.", - "newMessage": { - "description": "Einer der Dir zugewiesenen Ratsuchenden hat Dir geantwortet" }, - "denied": { - "message": "Du hast den Empfang von Benachrichtigungen für diesen Browser abgelehnt. Um Push-Benachrichtigungen zu aktivieren, musst Du diese zuerst in Deinen Browsereinstellungen zulassen." + "reassignmentAdviceSeeker": { + "description": "Dein_e Berater_in hat um Erlaubnis gebeten, Dich einem neuen Berater zuzuweisen." + }, + "reassignmentConsultant": { + "description": "Kollege_in hat Dir eine_n Ratsuchende_n zugewiesen." + }, + "subtitle": "Wir benachrichtigen Dich, wenn Du:", + "toggleError": { + "description": "Leider können wir Deine Benachrichtigungen zurzeit nicht aktivieren. Bitte versuche es später noch einmal." } }, - "documentation": { - "description": "Hast Du Fragen? Im Handbuch findest Du detaillierte Informationen zu den wichtigsten Funktionen der Online-Beratungsplattform." - }, "spokenLanguages": { "info": "Wähle die Sprache(n) aus, in der Du die Ratsuchenden beraten kannst. Deutsch ist als Standardsprache vorausgewählt und kann nicht entfernt werden." }, - "appLanguage": { - "info": "Stelle hier die Sprache der Anwendung ein." + "statistics": { + "complete": { + "title": "Deine Statistik über Deinen gewählten Beratungszeitraum kannst Du hier herunterladen:" + }, + "period": { + "display": { + "suffix": " hast Du:" + }, + "prefix": "Deine Zahlen des" + } }, "unsetEmail": { "confirmOverlay": { @@ -580,35 +563,33 @@ } }, "qrCode": { - "personal": { + "agency": { "overlay": { - "headline": "Dein persönlicher QR-Code", - "info": "Wenn Du ihn mit jemandem teilst, kann diese Person ihn mit der Handykamera scannen, um mit Dir direkt Kontakt aufzunehmen. Alternativ kannst Du den Code auch herunterladen." + "info": "Wenn Du den QR-Code mit jemandem teilst, kann diese Person ihn mit der Handykamera scannen, um sich direkt bei der Beratungsstelle {{agency}} zu registrieren. Alternativ kannst Du den Code auch herunterladen." } }, - "agency": { + "personal": { "overlay": { - "info": "Wenn Du den QR-Code mit jemandem teilst, kann diese Person ihn mit der Handykamera scannen, um sich direkt bei der Beratungsstelle {{agency}} zu registrieren. Alternativ kannst Du den Code auch herunterladen." + "headline": "Dein persönlicher QR-Code", + "info": "Wenn Du ihn mit jemandem teilst, kann diese Person ihn mit der Handykamera scannen, um mit Dir direkt Kontakt aufzunehmen. Alternativ kannst Du den Code auch herunterladen." } } }, "registration": { "agency": { "preselected": { - "prefix": "Deine vorausgewählte Beratungsstelle: ", - "isTeam": "Du wirst von einem Team beraten." + "isTeam": "Du wirst von einem Team beraten.", + "prefix": "Deine vorausgewählte Beratungsstelle: " } }, - "consultingType": { - "preselected": { - "prefix": "Dein vorausgewähltes Themenfeld: " + "agencyPreselected": { + "headline": "Bitte gib Deine Postleitzahl an", + "intro": { + "overline": "Warum benötigen wir Deine Postleitzahl?", + "point1": "kennen dann die Hilfen rund um Deinen Wohnort", + "point2": "kennen die Gesetze Deines Bundeslandes" } }, - "user": { - "infoText": "Um Deine Anonymität zu schützen, raten wir Dir nicht Deinen tatsächlichen Namen oder Initialen zu verwenden.
Wähle bitte einen geeigneten Benutzernamen mit min. 5 Zeichen.", - "suitable": "Dein Benutzername ist geeignet.", - "unsuitable": "Dein Benutzername ist zu kurz." - }, "agencySelection": { "intro": { "overline": "Warum hilft Dir auch online eine Beratungsstelle in Deiner Nähe?", @@ -624,31 +605,21 @@ } } }, - "agencyPreselected": { - "headline": "Bitte gib Deine Postleitzahl an", - "intro": { - "overline": "Warum benötigen wir Deine Postleitzahl?", - "point1": "kennen dann die Hilfen rund um Deinen Wohnort", - "point2": "kennen die Gesetze Deines Bundeslandes" + "consultingType": { + "preselected": { + "prefix": "Dein vorausgewähltes Themenfeld: " } }, "consultingTypeAgencySelection": { - "consultingType": { - "headline": "Bitte wähle ein Themenfeld", - "infoText": "Dein_e Berater_in ist in mehreren Themenfeldern tätig. Bitte wähle Dein gewünschtes Themenfeld." - }, "agency": { "headline": "Bitte wähle eine Beratungsstelle", "infoText": "Dein_e Berater_in ist in mehreren Beratungsstellen tätig. Bitte wähle Deine gewünschte Beratungsstelle." + }, + "consultingType": { + "headline": "Bitte wähle ein Themenfeld", + "infoText": "Dein_e Berater_in ist in mehreren Themenfeldern tätig. Bitte wähle Dein gewünschtes Themenfeld." } }, - "password": { - "secure": "Dein Passwort ist sicher.", - "insecure": "Dein Passwort ist nicht sicher.", - "same": "Dein Passwort ist identisch.", - "notSame": "Dein Passwort ist nicht identisch.", - "intro": "Um eine geschützte Beratung zu garantieren, muss Dein Passwort die folgenden Kriterien erfüllen:" - }, "mainTopic": { "headline": "Welches dieser Problemfelder ist für Dich aktuell am wichtigsten?", "noTopics": "Derzeit können leider keine Themen ausgewählt werden. Führe die Anmeldung im nächsten Schritt fort." @@ -658,6 +629,21 @@ "copy": "Du hast Dich erfolgreich registriert." } }, + "password": { + "insecure": "Dein Passwort ist nicht sicher.", + "intro": "Um eine geschützte Beratung zu garantieren, muss Dein Passwort die folgenden Kriterien erfüllen:", + "notSame": "Dein Passwort ist nicht identisch.", + "same": "Dein Passwort ist identisch.", + "secure": "Dein Passwort ist sicher." + }, + "teaser": { + "consultant": "Bitte registriere Dich, um mit Deiner Beraterin / Deinem Berater in Kontakt zu kommen" + }, + "user": { + "infoText": "Um Deine Anonymität zu schützen, raten wir Dir nicht Deinen tatsächlichen Namen oder Initialen zu verwenden.
Wähle bitte einen geeigneten Benutzernamen mit min. 5 Zeichen.", + "suitable": "Dein Benutzername ist geeignet.", + "unsuitable": "Dein Benutzername ist zu kurz." + }, "welcomeScreen": { "info2": { "text": "Schicke Deine Nachricht an eine lokale Beratungsstelle" @@ -665,18 +651,19 @@ "info3": { "text": "Innerhalb von 2 Werktagen bekommst Du eine Antwort" } - }, - "teaser": { - "consultant": "Bitte registriere Dich, um mit Deiner Beraterin / Deinem Berater in Kontakt zu kommen" } }, "session": { - "empty": "Bitte wähle eine Nachricht aus.", "acceptance": { "overlay": { "headline": "Du hast die Erstanfrage erfolgreich angenommen und findest diese nun unter „Meine Beratungen“." } }, + "alreadyAssigned": { + "overlay": { + "headline": "Du hast diese Beratung bereits zugewiesen." + } + }, "assignOther": { "overlay": { "headline": { @@ -686,17 +673,12 @@ "subtitle": { "noTeam": "{{newConsultant}} ist somit für die_den Ratsuchende_n verantwortlich und kann den kompletten Nachrichtenverlauf lesen. Du hast keinen Zugriff mehr auf die Nachrichten.", "team": { - "self": "{{newConsultant}} ist somit für die_den Ratsuchende_n 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_den Ratsuchende_n verantwortlich. Stimmt {{toAskerName}} der Zuweisung zu, findest Du den Chatverlauf unter Teamberatung und nicht mehr in Deinen Nachrichten." + "other": "{{newConsultant}} ist somit für die_den Ratsuchende_n verantwortlich. Stimmt {{toAskerName}} der Zuweisung zu, findest Du den Chatverlauf unter Teamberatung und nicht mehr in Deinen Nachrichten.", + "self": "{{newConsultant}} ist somit für die_den Ratsuchende_n verantwortlich. Stimmt {{toAskerName}} der Zuweisung zu, findest Du den Chatverlauf in Deinen Nachrichten und nicht mehr unter Teamberatung." } } } }, - "alreadyAssigned": { - "overlay": { - "headline": "Du hast diese Beratung bereits zugewiesen." - } - }, "assignSelf": { "inProgress": "Die Beratung wird Dir gerade zugewiesen.", "overlay": { @@ -710,26 +692,18 @@ "outsideDropArea": "Ziehe die Datei in das Feld, um sie hochzuladen." } }, + "empty": "Bitte wähle eine Nachricht aus.", "reassign": { "system": { "message": { "reassign": { - "title": "{{oldConsultant}} möchte Dich an {{newConsultant}} übergeben.", - "description": { - "noTeam": "{{newConsultant}} kann somit den kompletten Nachrichtenverlauf lesen und ist für Dich verantwortlich. {{oldConsultant}} hat keinen Zugriff mehr auf die Nachrichten.", - "team": "{{newConsultant}} kann somit den kompletten Nachrichtenverlauf lesen und ist für Dich verantwortlich." - }, - "question": "Stimmst Du der Übergabe zu?.", "accepted": { - "title": { - "self": "{{oldConsultant}} hat Dir {{client}} übergeben." + "consultant": { + "title": "{{newConsultant}} kümmert sich nun um Dich und Deine Anliegen." }, "description": { "self": "Du bist nun für {{client}} verantwortlich." }, - "consultant": { - "title": "{{newConsultant}} kümmert sich nun um Dich und Deine Anliegen." - }, "new": { "consultant": { "description": "Wir haben {{newConsultant1}} benachrichtigt. Du kannst nun Nachrichten an {{newConsultant2}} schicken." @@ -739,6 +713,9 @@ "consultant": { "description": "Wir haben {{newConsultant}} benachrichtigt. {{oldConsultant}} ist nicht mehr für Dich zuständig." } + }, + "title": { + "self": "{{oldConsultant}} hat Dir {{client}} übergeben." } }, "declined": { @@ -751,14 +728,20 @@ } } }, + "description": { + "noTeam": "{{newConsultant}} kann somit den kompletten Nachrichtenverlauf lesen und ist für Dich verantwortlich. {{oldConsultant}} hat keinen Zugriff mehr auf die Nachrichten.", + "team": "{{newConsultant}} kann somit den kompletten Nachrichtenverlauf lesen und ist für Dich verantwortlich." + }, + "question": "Stimmst Du der Übergabe zu?.", "sent": { "description": { "team": { - "self": "Sobald {{client1}} der Zuweisung zustimmt, ist {{newConsultant}} für {{client2}} verantwortlich. Du findest den Chatverlauf dann unter Teamberatung und nicht mehr hier in Deinen Nachrichten.", - "other": "Sobald {{client1}} der Zuweisung zustimmt, ist {{newConsultant}} für {{client2}} verantwortlich. Du findest den Chatverlauf dann in Deinen Nachrichten und nicht mehr hier unter Teamberatung." + "other": "Sobald {{client1}} der Zuweisung zustimmt, ist {{newConsultant}} für {{client2}} verantwortlich. Du findest den Chatverlauf dann in Deinen Nachrichten und nicht mehr hier unter Teamberatung.", + "self": "Sobald {{client1}} der Zuweisung zustimmt, ist {{newConsultant}} für {{client2}} verantwortlich. Du findest den Chatverlauf dann unter Teamberatung und nicht mehr hier in Deinen Nachrichten." } } - } + }, + "title": "{{oldConsultant}} möchte Dich an {{newConsultant}} übergeben." } } } @@ -767,8 +750,8 @@ "sessionList": { "empty": { "mySessions": "Du hast zurzeit keine aktiven Beratungen", - "teamSessions": "Dein Team hat keine aktiven Beratungen", - "peerSessions": "Du hast zurzeit keine aktiven Peer-Beratungen" + "peerSessions": "Du hast zurzeit keine aktiven Peer-Beratungen", + "teamSessions": "Dein Team hat keine aktiven Beratungen" }, "unavailable": { "description": "Aktiviere Deine Verfügbarkeit und erhalte hier die Live-Chat Anfragen von anonymen Ratsuchenden" @@ -783,23 +766,37 @@ "text": "Vielen Dank für Deine Anfrage. Wir antworten Dir werktags innerhalb von 48 Stunden. Wenn Du Deine E-Mail-Adresse angegeben hast, erhältst Du eine Benachrichtigung, sobald unsere Antwort vorliegt." } }, + "termsAndConditionOverlay": { + "contentLine1": { + "privacy": "Wir haben die Datenschutzerklärung der Online-Beratung aktualisiert. Den aktuellen Stand findest Du hier.", + "termsAndCondition": "Wir haben die Nutzungsbedingungen der Online-Beratung aktualisiert. Um die Online-Beratung weiter nutzen zu können, benötigen wir Deine Zustimmung.", + "termsAndConditionAndPrivacy": "Wir haben die Nutzungsbedingungen und Datenschutzerklärung der Online-Beratung aktualisiert. Um die Online-Beratung weiter nutzen zu können, benötigen wir Deine Zustimmung." + } + }, "tools": { "calendar": { "description": "Trage Deine Urlaube oder sonstigen Termine in den Kalender ein, sodass die Ratsuchenden in dieser Zeit keine Termine bei Dir buchen können.
Melde Dich mit der gleichen E-Mail-Adresse und Passwort an, das Du auch hier bei der Online Beratung verwendest." } }, "twoFactorAuth": { - "subtitle": "Nutze neben Deinem Passwort einen zweiten Faktor für die Anmeldung. Dadurch wird Dein Konto zusätzlich abgesichert.", "activate": { - "radio": { - "tooltip": { - "app": "Installiere Dir die App. Die App generiert Dir einen Code, den Du bei der Anmeldung eingeben musst.", - "email": "Du erhältst bei der Anmeldung eine E-Mail mit einem Code. Diesen Code musst Du dann eingeben." + "app": { + "step2": { + "copy": "Bitte installiere Dir auf Deinem Smartphone oder Tablet eine passende Authenticator-App, wie zum Beispiel die FreeOTP oder Google Authenticator App. Beide Apps sind im Google Play oder Apple App Store verfügbar.", + "title": "Installiere Dir die App" + }, + "step3": { + "connect": { + "key": "Öffne die App und gebe den folgenden 32-stelligen Schlüssel ein:", + "qrCode": "Öffne die App und scanne den folgenden QR-Code:" + }, + "copy": "Du hast zwei Möglichkeiten, die Online-Beratung zur App hinzuzufügen:", + "title": "Füge die Online-Beratung zur App hinzu" + }, + "step4": { + "copy": "Gib den Einmal-Code ein, der von der App generiert wird und klicke auf „Speichern“, um die Einrichtung abzuschließen." } }, - "step1": { - "copy": "Installiere Dir auf Deinem Smartphone oder Tablet eine passende Authenticator-App. Alternativ kannst Du auch Deine E-Mail-Adresse als zweiten Faktor verwenden." - }, "email": { "input": { "duplicate": { @@ -820,59 +817,52 @@ } } }, - "app": { - "step2": { - "title": "Installiere Dir die App", - "copy": "Bitte installiere Dir auf Deinem Smartphone oder Tablet eine passende Authenticator-App, wie zum Beispiel die FreeOTP oder Google Authenticator App. Beide Apps sind im Google Play oder Apple App Store verfügbar." - }, - "step3": { - "title": "Füge die Online-Beratung zur App hinzu", - "copy": "Du hast zwei Möglichkeiten, die Online-Beratung zur App hinzuzufügen:", - "connect": { - "qrCode": "Öffne die App und scanne den folgenden QR-Code:", - "key": "Öffne die App und gebe den folgenden 32-stelligen Schlüssel ein:" - } - }, - "step4": { - "copy": "Gib den Einmal-Code ein, der von der App generiert wird und klicke auf „Speichern“, um die Einrichtung abzuschließen." - } - }, "otp": { "input": { "label": { "error": "Die Authentifizierung ist fehlgeschlagen. Bitte wiederhole den Vorgang." } } + }, + "radio": { + "tooltip": { + "app": "Installiere Dir die App. Die App generiert Dir einen Code, den Du bei der Anmeldung eingeben musst.", + "email": "Du erhältst bei der Anmeldung eine E-Mail mit einem Code. Diesen Code musst Du dann eingeben." + } + }, + "step1": { + "copy": "Installiere Dir auf Deinem Smartphone oder Tablet eine passende Authenticator-App. Alternativ kannst Du auch Deine E-Mail-Adresse als zweiten Faktor verwenden." } }, "email": { "change": { "confirmOverlay": { - "copy": { - "1": "Du nutzt diese E-Mail-Adresse als zweiten Faktor für eine sichere Anmeldung.", - "2": "Deaktiviere die Zwei-Faktor-Authentifizierung, um die E-Mail-Adresse zu bearbeiten." - }, "binding": { "copy": { "1": "Du kannst Deine E-Mail Adresse nicht ändern, solange Du diese als zweiten Faktor für eine sichere Anmeldung verwendest.", "2": "Wechsel den zweiten Faktor von \"E-Mail-Adresse\" zu \"App\". Dann kannst Du Deine E-Mail-Adresse ändern." } + }, + "copy": { + "1": "Du nutzt diese E-Mail-Adresse als zweiten Faktor für eine sichere Anmeldung.", + "2": "Deaktiviere die Zwei-Faktor-Authentifizierung, um die E-Mail-Adresse zu bearbeiten." } } } }, "nag": { - "title": "Schütze Dein Konto", "copy": "Sicher Dein Konto vor einem möglichen unbefugten Zugriff. Nutze einen zweiten Faktor (App oder E-Mail) für die Anmeldung in der Online Beratung.", "obligatory": { + "copy": "Du musst jetzt einen zweiten Faktor (App oder E-Mail) für die Anmeldung in der Online-Beratung hinterlegen. Das dient der Sicherheit und schützt Dein Konto vor einem möglichen unbefugten Zugriff.

Ohne einen zweiten Faktor darfst Du nicht mehr online beraten.", "moment": { - "title": "Schütze Dein Konto bis spätestens {{date}}", - "copy": "Du musst bis zum {{date1}} einen zweiten Faktor (App oder E-Mail) für die Anmeldung in der Online-Beratung hinterlegen. Das dient der Sicherheit und schützt Dein Konto vor einem möglichen unbefugten Zugriff.

Achtung: Ohne einen zweiten Faktor darfst Du nach dem {{date2}} nicht mehr online beraten." + "copy": "Du musst bis zum {{date1}} einen zweiten Faktor (App oder E-Mail) für die Anmeldung in der Online-Beratung hinterlegen. Das dient der Sicherheit und schützt Dein Konto vor einem möglichen unbefugten Zugriff.

Achtung: Ohne einen zweiten Faktor darfst Du nach dem {{date2}} nicht mehr online beraten.", + "title": "Schütze Dein Konto bis spätestens {{date}}" }, - "title": "Schütze nun Dein Konto", - "copy": "Du musst jetzt einen zweiten Faktor (App oder E-Mail) für die Anmeldung in der Online-Beratung hinterlegen. Das dient der Sicherheit und schützt Dein Konto vor einem möglichen unbefugten Zugriff.

Ohne einen zweiten Faktor darfst Du nicht mehr online beraten." - } + "title": "Schütze nun Dein Konto" + }, + "title": "Schütze Dein Konto" }, + "subtitle": "Nutze neben Deinem Passwort einen zweiten Faktor für die Anmeldung. Dadurch wird Dein Konto zusätzlich abgesichert.", "switch": { "type": { "label": "Dein zweiter Faktor" @@ -885,27 +875,27 @@ }, "tools": { "description": "Schalte Tools für die_den Ratsuchende_n frei. ", + "modal": { + "description": "Wähle die Tools aus, die Du dem_der Ratsuchenden zur Verfügung stellen möchtest." + }, "options": { "saveError": "Beim Werkzeugwechsel ist ein Problem aufgetreten. Bitte versuche es erneut." }, "share": { - "title": "Sieh hier, welche Inhalte mit Dir geteilt wurden.", - "info": "Nur zugewiesene Berater_innen können die Inhalte der Ratsuchenden einsehen. Wenn Du aus der Teamberatung auf die Inhalte zugreifst, sind die Ratsuchenden nicht vorausgewählt." - }, - "modal": { - "description": "Wähle die Tools aus, die Du dem_der Ratsuchenden zur Verfügung stellen möchtest." + "info": "Nur zugewiesene Berater_innen können die Inhalte der Ratsuchenden einsehen. Wenn Du aus der Teamberatung auf die Inhalte zugreifst, sind die Ratsuchenden nicht vorausgewählt.", + "title": "Sieh hier, welche Inhalte mit Dir geteilt wurden." } } }, "videoCall": { "incomingCall": { - "unsupported": { - "description": "{{username}} versucht Dich anzurufen", - "hint": "Dein Browser erfüllt nicht die notwendigen Sicherheitsanforderungen. Bitte verwende einen anderen Browser, damit Du an Video-Calls teilnehmen kannst." - }, "ignored": "hat versucht Dich zu erreichen.", "rejected": { "prefix": "Du hast versucht" + }, + "unsupported": { + "description": "{{username}} versucht Dich anzurufen", + "hint": "Dein Browser erfüllt nicht die notwendigen Sicherheitsanforderungen. Bitte verwende einen anderen Browser, damit Du an Video-Calls teilnehmen kannst." } }, "overlay": { @@ -915,40 +905,39 @@ }, "statusPage": { "closed": { - "title": "Dein Video-Call wurde erfolgreich beendet.", - "action": "Bitte schließe diesen Tab, um zu Beratung & Hilfe zurückzukehren." + "action": "Bitte schließe diesen Tab, um zu Beratung & Hilfe zurückzukehren.", + "title": "Dein Video-Call wurde erfolgreich beendet." }, "unauthorized": { - "reason": "Leider bist Du nicht berechtigt diese Seite einzusehen.", - "action": "Bitte schließe diesen Tab, um zu Beratung & Hilfe zurückzukehren." + "action": "Bitte schließe diesen Tab, um zu Beratung & Hilfe zurückzukehren.", + "reason": "Leider bist Du nicht berechtigt diese Seite einzusehen." } } }, "videoConference": { "waitingroom": { "dataProtection": { - "subline": "Bitte bestätige unsere Datenschutzbestimmungen.", - "description": "Danach dürfen unsere Berater_innen einen Video-Call mit Dir starten." - }, - "headline": "Bitte habe etwas Geduld", - "subline": "Der Video-Call hat noch nicht begonnen. Du wirst weitergeleitet, sobald Dein_e Berater_in den Video-Call startet.", - "paused": { - "subline": "Der Video-Call wurde beendet. Sollte Dein_e Berater_in nur abwesend sein wirst Du in den Video-Call weitergeleitet, sobald Dein_e Berater_in den Video-Call fortsetzt." + "description": "Danach dürfen unsere Berater_innen einen Video-Call mit Dir starten.", + "subline": "Bitte bestätige unsere Datenschutzbestimmungen." }, "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 Deine_n Berater_in.", "consultant": { "description": "Zu Deinem Link können wir keinen Video-Call finden, da der Video-Call entweder gelöscht oder bereits beendet wurde." }, + "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 Deine_n Berater_in.", "rejected": { - "headline": "Du wurdest nicht zugelassen", - "description": "Du wurdest nicht zugelassen. Leider kannst Du an diesem Video-Call nicht teilnehmen, da Dein_e Berater_in Dich nicht zugelassen hat." + "description": "Du wurdest nicht zugelassen. Leider kannst Du an diesem Video-Call nicht teilnehmen, da Dein_e Berater_in Dich nicht zugelassen hat.", + "headline": "Du wurdest nicht zugelassen" } - } + }, + "headline": "Bitte habe etwas Geduld", + "paused": { + "subline": "Der Video-Call wurde beendet. Sollte Dein_e Berater_in nur abwesend sein wirst Du in den Video-Call weitergeleitet, sobald Dein_e Berater_in den Video-Call fortsetzt." + }, + "subline": "Der Video-Call hat noch nicht begonnen. Du wirst weitergeleitet, sobald Dein_e Berater_in den Video-Call startet." } }, "walkthrough": { - "subtitle": "Um Dir die einzelnen Funktionen zu erklären, haben wir einen kurzen Rundgang für Dich vorbereitet.
Du kannst ihn jederzeit abbrechen oder in Deinem Profil erneut starten.", "step": { "0": { "intro": "Um Dir die einzelnen Funktionen zu erklären, haben wir einen kurzen Rundgang für Dich vorbereitet.

Du kannst ihn jederzeit abbrechen oder in Deinem Profil erneut starten." @@ -971,6 +960,7 @@ "6": { "intro": "Im Profilbereich kannst Du persönliche und öffentliche Informationen verwalten, die Abwesenheitsnachricht während Deines Urlaubs aktivieren, Dein Passwort ändern und viele andere Funktionen (wie die Einrichtung der 2-Faktor-Authentifizierung) nutzen." } - } + }, + "subtitle": "Um Dir die einzelnen Funktionen zu erklären, haben wir einen kurzen Rundgang für Dich vorbereitet.
Du kannst ihn jederzeit abbrechen oder in Deinem Profil erneut starten." } } diff --git a/src/resources/i18n/en/common.json b/src/resources/i18n/en/common.json index f305c136b..0c8c8cfc9 100644 --- a/src/resources/i18n/en/common.json +++ b/src/resources/i18n/en/common.json @@ -1,8 +1,12 @@ { "absence": { + "checkbox": { + "label": "Inform advice seekers about my absence" + }, + "input": { + "infoText": "Advice seekers will see absence message, but will still be able to write to you." + }, "overlay": { - "headline": "Welcome back!", - "copy": "Your absence message is currently activated.
Do you want to deactivate it?", "button1": { "label": "Yes" }, @@ -10,27 +14,23 @@ "label": "No" }, "changeSuccess": { - "headline": "The status of your absence message has been successfully updated.", - "buttonLabel": "Close" - } - }, - "checkbox": { - "label": "Inform advice seekers about my absence" - }, - "input": { - "infoText": "Advice seekers will see absence message, but will still be able to write to you." + "buttonLabel": "Close", + "headline": "The status of your absence message has been successfully updated." + }, + "copy": "Your absence message is currently activated.
Do you want to deactivate it?", + "headline": "Welcome back!" } }, "aliases": { "lastMessage": { "e2ee_activated": "Information about your data security", "further_steps": "This is how it continues", + "master_key_lost": "", "reassign_consultant": { "CONFIRMED": "reassigned", "REJECTED": "Assignment rejected", "REQUESTED": "Assignment request" }, - "master_key_lost": "", "reassign_consultant_reset_last_message": "reassigned" } }, @@ -39,180 +39,180 @@ "activeLabel": "Active" }, "overlay": { + "chatWasFinished": { + "button": "Go to Caritas.de", + "copy": "You will no longer have access to your chat history.", + "headline": "Your consultant has ended the chat." + }, "finishChat": { - "headline": "Do you want to end this chat?", - "consultant": { - "copy": "The advice seeker will be informed about this and will not be able to access the chat history afterwards." - }, "asker": { "copy": "When you exit this chat, you will no longer have access to your chat history." }, "button1": "End chat", "button2": "Cancel", + "consultant": { + "copy": "The advice seeker will be informed about this and will not be able to access the chat history afterwards." + }, + "headline": "Do you want to end this chat?", "success": { - "headline": "The chat has ended successfully.", - "button": "Go to Caritas.de" + "button": "Go to Caritas.de", + "headline": "The chat has ended successfully." } - }, - "chatWasFinished": { - "headline": "Your consultant has ended the chat.", - "copy": "You will no longer have access to your chat history.", - "button": "Go to Caritas.de" } }, "session": { "finishChat": "End chat", - "systemMessage": { - "chatFinished": "The chat has been closed." - }, "infoMessage": { "chatFinished": "The messages are deleted 48h after the chat ends." + }, + "systemMessage": { + "chatFinished": "The chat has been closed." } }, "waitingroom": { - "title": { - "start": "Waiting room" + "closed": { + "description": "On our Website you can find the opening hours of the chat in the respective subject area.", + "headline": "Our live chat is currently unavailable", + "illustrationTitle": "chat closed" }, "dataProtection": { - "headline": "Welcome", - "subline": "Please confirm our privacy policy. After that, our consultants may start a chat with you.", + "button": "I agree", "description": "After that, our consultants may start a chat with you.", - "button": "I agree" + "headline": "Welcome", + "subline": "Please confirm our privacy policy. After that, our consultants may start a chat with you." }, "errorPage": { - "headline": "Oops!", + "button": "Reload", "description": "We are sorry something must have gone wrong.
Try again.", - "button": "Reload" - }, - "closed": { - "headline": "Our live chat is currently unavailable", - "description": "On our Website you can find the opening hours of the chat in the respective subject area.", - "illustrationTitle": "chat closed" + "headline": "Oops!" }, "headline": "Please be patient", - "subline": "Currently, all consultants are in discussion. We will be there for you as soon as possible.", - "username": { - "text": "Your username is:", - "loading": "Will be loaded..." - }, "info": { "accountDeletion": "To protect your anonymity, we delete your messages no later than 48 hours after the chat has ended." }, - "redirect": { - "title": "You do not need an answer immediately? And do not want to wait for a free chat?", - "subline": "Register and leave us a message. We will get back to you within 2 business days.

Go to registration" - }, "overlay": { "acceptance": { - "headline": "Welcome!", + "button": "Chat now", "copy": "Your consultant is waiting for you in the chat. Are you ready?", - "button": "Chat now" + "headline": "Welcome!" }, "rejection": { - "headline": "Chat time ended.", + "button": "To registration", "copy": "Sorry, we could not respond to your request within the chat time. Please register and leave us your message. We will get back to you within 2 business days.", - "button": "To registration" + "headline": "Chat time ended." } + }, + "redirect": { + "subline": "Register and leave us a message. We will get back to you within 2 business days.

Go to registration", + "title": "You do not need an answer immediately? And do not want to wait for a free chat?" + }, + "subline": "Currently, all consultants are in discussion. We will be there for you as soon as possible.", + "title": { + "start": "Waiting room" + }, + "username": { + "loading": "Will be loaded...", + "text": "Your username is:" } } }, "app": { - "title": "Consulting & Help", + "back": "back", "claim": "Online. Anonymous. Secure.", - "save": "Save", - "remove": "Remove", - "download": "Download", - "stage": { - "title": "Consulting & Help" - }, - "logout": "Log out", "close": "close", - "open": "open", "delete": "delete", - "scrollDown": "Scroll down", + "download": "Download", + "faulty": "Faulty", + "logout": "Log out", "menu": "More settings", - "back": "back", "next": "next", - "successful": "Successful", - "faulty": "Faulty", + "open": "open", + "remove": "Remove", + "save": "Save", + "scrollDown": "Scroll down", "selectLanguage": "Select language", + "stage": { + "title": "Consulting & Help" + }, + "successful": "Successful", + "title": "Consulting & Help", "wait": "Please wait" }, "appointments": { - "title": "Appointment overview", + "copy": { + "link": { + "notification": { + "text": "Invitation link to the video call copied to clipboard!", + "title": "Link copied" + }, + "text": "Copy link", + "title": "Copy invitation link to clipboard" + } + }, "newAppointment": "New video appointment", - "showMore": "Show more", - "showLess": "Show less", + "noAppointments": "Currently there are no dates", "notification": { "saved": { "title": "The appointment was saved successfully." } }, - "noAppointments": "Currently there are no dates", "onlineMeeting": { - "start": "Start video call", + "form": { + "date": "Date", + "description": "Description", + "time": "Start (hh:mm)", + "title": "Title" + }, "overlay": { "add": { - "headline": "New video call", + "button": { + "add": "Save", + "cancel": "Cancel" + }, + "headline": "New video call" + }, + "delete": { "button": { "cancel": "Cancel", - "add": "Save" - } + "delete": "Delete" + }, + "copy": "Do you really want to delete this video call?", + "headline": "Delete video call" }, "edit": { "headline": "Edit video call" }, "start": { - "headline": "Start video call", - "copy": "You are now starting the video call. Invited participants can join now with the invitation link.", "button": { "cancel": "Cancel", "start": "Start" - } - }, - "delete": { - "headline": "Delete video call", - "copy": "Do you really want to delete this video call?", - "button": { - "cancel": "Cancel", - "delete": "Delete" - } + }, + "copy": "You are now starting the video call. Invited participants can join now with the invitation link.", + "headline": "Start video call" } }, - "form": { - "title": "Title", - "description": "Description", - "date": "Date", - "time": "Start (hh:mm)" - } - }, - "copy": { - "link": { - "title": "Copy invitation link to clipboard", - "text": "Copy link", - "notification": { - "title": "Link copied", - "text": "Invitation link to the video call copied to clipboard!" - } - } + "start": "Start video call" }, "qrCode": { "headline": "Invitation link QR code", "text": "If you share your QR code with someone, that person can scan it with their phone camera to join the video call directly. Alternatively, you can download the code." - } + }, + "showLess": "Show less", + "showMore": "Show more", + "title": "Appointment overview" }, "archive": { "overlay": { "session": { "success": { - "copy": "You have successfully archived the advice seeker.", - "button": "Close" + "button": "Close", + "copy": "You have successfully archived the advice seeker." } }, "teamsession": { "success": { - "copy": "You have successfully archived the advice seeker for you and your team.", - "button": "Close" + "button": "Close", + "copy": "You have successfully archived the advice seeker for you and your team." } } }, @@ -222,22 +222,25 @@ } }, "attachments": { + "download": { + "label": "Download" + }, "error": { "format": { "headline": "Your file could not be sent.", "message": "our file could not be sent. Allowed are images (jpg and png), and documents (docx and pdf). Please try again." }, - "size": { - "headline": "Your selected file is too big.", - "message": "You can upload max. {{attachment_filesize}}MB." + "other": { + "headline": "There was an error uploading the file.", + "message": "Please try again." }, "quota": { "headline": "You have reached the limit for uploading.", "message": "Please try again tomorrow." }, - "other": { - "headline": "There was an error uploading the file.", - "message": "Please try again." + "size": { + "headline": "Your selected file is too big.", + "message": "You can upload max. {{attachment_filesize}}MB." } }, "list": { @@ -248,16 +251,13 @@ }, "type": { "label": { - "png": "PNG", + "docx": "DOCX", "jpeg": "JPG", + "mb": "MB", "pdf": "PDF", - "docx": "DOCX", - "xlsx": "XLSX", - "mb": "MB" + "png": "PNG", + "xlsx": "XLSX" } - }, - "download": { - "label": "Download" } }, "banner": { @@ -267,21 +267,21 @@ }, "banUser": { "ban": { - "trigger": "Banish", "info": { "1": "You have banned ", "2": " ." }, "overlay": { "close": " Close note" - } - }, - "is": { - "banned": " Banned" + }, + "trigger": "Banish" }, "banned": { "headline": "You have been banned.", "info": "We have asked you to respect the chat rules.

Because you have repeatedly failed to comply with the chat rules today, we have excluded you from todays chat.

Familiarize yourself with the chat rules!

If you are ready to follow the chat rules, you are welcome to chat again from tomorrow!" + }, + "is": { + "banned": " Banned" } }, "booking": { @@ -292,36 +292,22 @@ "calender": { "add": "Add calendar", "integration": { - "office365": "Office 365/ Outlook Calendar", + "apple": "Apple Calendar", "caldav": "CalDav Server Calendar", "google": "Google Calendar", - "apple": "Apple Calendar" + "office365": "Office 365/ Outlook Calendar" }, "synchronise": "Synchronize", "synchroniseCalender": { - "title": "Synchronize calendar", - "description": "Synchronize your calendar, which you use at your counseling center, with online counseling. Your availability will then be automatically adjusted and appointment conflicts prevented." + "description": "Synchronize your calendar, which you use at your counseling center, with online counseling. Your availability will then be automatically adjusted and appointment conflicts prevented.", + "title": "Synchronize calendar" }, "synchronised": { "calendars": "Synchronized calendars" } }, - "schedule": "Arrange appointment", - "mobile": { - "calendar": { - "label": "Create appointment" - } - }, "event": { - "your": { - "counselor": "Your consultant" - }, "asker": "Advice seeker", - "description": "Your message for the appointment", - "show": { - "more": "Show more", - "less": "Show less" - }, "booking": { "cancel": "Cancel appointment", "reschedule": "Move appointment" @@ -329,27 +315,41 @@ "copy": { "link": { "notification": { - "title": "copied link", - "text": "Entry link to video call copied to clipboard!" + "text": "Entry link to video call copied to clipboard!", + "title": "copied link" } } }, + "description": "Your message for the appointment", + "show": { + "less": "Show less", + "more": "Show more" + }, "tab": { "booked": "Booked appointments", "canceled": "Cancelled", "expired": "Passed", "settings": "Settings" + }, + "your": { + "counselor": "Your consultant" + } + }, + "info": { + "video": "Video consulting" + }, + "mobile": { + "calendar": { + "label": "Create appointment" } }, "my": { "booking": { - "title": "Currently there are no appointments planned.", - "schedule": "Make an appointment now with" + "schedule": "Make an appointment now with", + "title": "Currently there are no appointments planned." } }, - "info": { - "video": "Video consulting" - }, + "schedule": "Arrange appointment", "video": { "button": { "label": "Start video call" @@ -357,23 +357,23 @@ } }, "chatFlyout": { + "archive": "Archive", "askerProfil": "Advice seeker profile", "dataProtection": "Data protection", + "dearchive": "Dearchive", + "editGroupChat": "Chat settings", "feedback": "Feedback", "groupChatInfo": "Chat info", "imprint": "Imprint", - "editGroupChat": "Chat settings", "leaveGroupChat": "Leave chat", - "stopGroupChat": "End chat", - "archive": "Archive", - "dearchive": "Dearchive", - "remove": "Delete" + "remove": "Delete", + "stopGroupChat": "End chat" }, "consultant": { - "jobTitle": "Consultant", "absent": { "message": " is absent" - } + }, + "jobTitle": "Consultant" }, "date": { "day": { @@ -391,7 +391,7 @@ }, "3": { "long": "Wednesday", - "2": "Wed" + "short": "Wed" }, "4": { "long": "Thursday", @@ -462,11 +462,11 @@ "label": "Delete account" }, "confirmOverlay": { - "copy": "This process cannot be reversed.

Your account will be deleted within the next 48 hours. Your data will be deleted in accordance with the applicable data protection regulations.

Please enter your password to delete your account now.", "button": { "confirm": "yes", "deny": "no" }, + "copy": "This process cannot be reversed.

Your account will be deleted within the next 48 hours. Your data will be deleted in accordance with the applicable data protection regulations.

Please enter your password to delete your account now.", "headline": "Do you really want to delete your account?", "input": { "label": "Password", @@ -474,93 +474,112 @@ } }, "successOverlay": { - "headline": "You have successfully deleted your Caritas Consulting & Help account.", - "button": "close" + "button": "close", + "headline": "You have successfully deleted your Caritas Consulting & Help account." } }, "deleteSession": { "confirmOverlay": { - "headline": "Delete chat", - "copy": "Do you really want to delete the chat?", "button": { "confirm": "yes", "deny": "no" - } - }, - "successOverlay": { - "headline": "You have deleted the chat successfully.", - "button": "ok" + }, + "copy": "Do you really want to delete the chat?", + "headline": "Delete chat" }, "errorOverlay": { - "headline": "Oops! We could not delete the chat right now. Please try again.", - "button": "ok" + "button": "ok", + "headline": "Oops! We could not delete the chat right now. Please try again." + }, + "successOverlay": { + "button": "ok", + "headline": "You have deleted the chat successfully." } }, "e2ee": { "attachment": { - "encrypted": "Decrypt file for download", - "is_decrypting": "File is being decrypted", "decryption_error": "Error while decrypting", - "save": "Download file", + "encrypted": "Decrypt file for download", "error": { - "title": "Unfortunately, we could not decrypt and download the file.", - "text": "Ask the sender to resend the file. Then download the new file." - } + "text": "Ask the sender to resend the file. Then download the new file.", + "title": "Unfortunately, we could not decrypt and download the file." + }, + "is_decrypting": "File is being decrypted", + "save": "Download file" + }, + "hint": "Your messages are encrypted end-to-end. That means no one outside this chat can read the messages. Not even the online consulting platform.", + "inProgress": { + "confirm": "Please wait until the encryption is finished!", + "copy": "Your safety is important to us! We're encrypting your chat right now. This can take a moment.", + "headline": "One moment please." }, "message": { "encryption": { - "text": "Message encrypted", - "error": "Message encrypted - error during decryption" + "error": "Message encrypted - error during decryption", + "text": "Message encrypted" } }, - "inProgress": { - "headline": "One moment please.", - "copy": "Your safety is important to us! We're encrypting your chat right now. This can take a moment.", - "confirm": "Please wait until the encryption is finished!" + "roomNotFound": { + "notice": { + "line1": "Ohh!", + "line2": "We are sorry, something must have gone wrong.", + "line3": "Please reload the page and try again.", + "link": "Reload page" + } }, - "hint": "Your messages are encrypted end-to-end. That means no one outside this chat can read the messages. Not even the online consulting platform.", "subscriptionKeyLost": { "message": { + "more": "Show more", "primary": "A chat participant no longer has access to the message history.", - "secondary": "A chat participant had temporarily lost access to the message history. Now all chat participants can access the message history again.", - "more": "Show more" + "secondary": "A chat participant had temporarily lost access to the message history. Now all chat participants can access the message history again." }, "notice": { - "title": "Your security is important to us!", - "text": "Since you have reset your password, the messages are not readable for you at the moment. As soon as a chat participant opens the chat again, you can read the messages and write new ones.", "link": "Send notification", - "more": "Show more" + "more": "Show more", + "text": "Since you have reset your password, the messages are not readable for you at the moment. As soon as a chat participant opens the chat again, you can read the messages and write new ones.", + "title": "Your security is important to us!" }, "overlay": { - "headline": "End-to-end encryption", - "copy": "Your messages are encrypted end-to-end for security reasons. That means no one outside this chat can read the messages. Not even the online consulting platform.

If the password is reset, the messages are temporarily unreadable. As soon as another chat participant opens the chat again, the messages can be re-encrypted. This means that all chat participants can read and write messages again.", "button": { "close": "Close" - } + }, + "copy": "Your messages are encrypted end-to-end for security reasons. That means no one outside this chat can read the messages. Not even the online consulting platform.

If the password is reset, the messages are temporarily unreadable. As soon as another chat participant opens the chat again, the messages can be re-encrypted. This means that all chat participants can read and write messages again.", + "headline": "End-to-end encryption" } - }, - "roomNotFound": { - "notice": { - "line1": "Ohh!", - "line2": "We are sorry, something must have gone wrong.", - "line3": "Please reload the page and try again.", - "link": "Reload page" - } - } - }, - "enquiry": { - "acceptButton": { - "known": "Accept request", - "anonymous": "Start chat" + } + }, + "enquiry": { + "acceptButton": { + "anonymous": "Start chat", + "known": "Accept request" }, "anonymous": { "infoLabel": { - "start": "Now start the chat with ", - "end": "." + "end": ".", + "start": "Now start the chat with " + } + }, + "language": { + "selection": { + "headline": "Please select the language in which you would like to be advised." } }, "write": { + "infotext": { + "copy": { + "facts": "
  • What happened?
  • What is your current situation?
  • What is on your mind?
  • Do you have a specific question or do you perhaps not yet know exactly what could help you?
", + "title": "Perhaps the following points will help you with the formulation:" + }, + "headline": "Here is room for your concerns.", + "iconTitle": "Welcome" + }, "input": { + "attachement": "add attachement", + "button": { + "title": "Send message" + }, + "emojies": "add emoji", + "format": "format text", "placeholder": { "asker": "Write us what moves you.", "consultant": "Write a message to client", @@ -569,96 +588,56 @@ "peer": "Send a message to Teamleader" }, "groupChat": "Write message" - }, - "button": { - "title": "Send message" - }, - "attachement": "add attachement", - "emojies": "add emoji", - "format": "format text" - }, - "infotext": { - "headline": "Here is room for your concerns.", - "iconTitle": "Welcome", - "copy": { - "title": "Perhaps the following points will help you with the formulation:", - "facts": "
  • What happened?
  • What is your current situation?
  • What is on your mind?
  • Do you have a specific question or do you perhaps not yet know exactly what could help you?
" } }, "overlay": { - "headline": "Thank you for your message!", + "button": "Go to the message", "copy": "Within two business days you will receive a response from us.", - "button": "Go to the message" - } - }, - "language": { - "selection": { - "headline": "Please select the language in which you would like to be advised." + "headline": "Thank you for your message!" } } }, "error": { + "login": "Login", "statusCodes": { "400": { - "headline": "Ups!", - "description": "The URL you entered is invalid." + "description": "The URL you entered is invalid.", + "headline": "Ups!" }, "401": { - "headline": "Too bad!", - "description": "You are not authorized to view this page." + "description": "You are not authorized to view this page.", + "headline": "Too bad!" }, "404": { - "headline": "Ohh!", - "description": "We are sorry something must have gone wrong.
We could not find the page you requested." + "description": "We are sorry something must have gone wrong.
We could not find the page you requested.", + "headline": "Ohh!" }, "500": { - "headline": "Ups!", - "description": "It looks like we have a server problem at the moment.
Try again later." + "description": "It looks like we have a server problem at the moment.
Try again later.", + "headline": "Ups!" } - }, - "login": "Login" + } }, "furtherSteps": { + "arrowTitle": "Next", "consultant": { "info": "The person seeking advice was informed about the next steps as follows." }, - "headline": "This is how it continues:", - "arrowTitle": "Next", - "step1": { - "info": "We have received your message.", - "iconTitle": "Open envelope" - }, - "step2": { - "info": "Now we will find a suitable consultant for you.", - "iconTitle": "Consultant with glasses" - }, - "step3": { - "info": "Your advisor will respond within 2 business days.", - "iconTitle": "Speak bubbles" - }, - "emailNotification": { - "headline": "Receive e-mail notification & reset password", - "infoText": "If you provide your e-mail address (voluntary)
  • receive an email notification when your advisor has written to you
  • you can reset your password if you have forgotten it.
Your email address cannot be seen by the advisors.", - "button": "Enter e-mail address" - }, - "twoFactorAuth": { - "headline": "The protection of your data is important to us", - "infoText": "Secure your account from possible unauthorized access. Use a second factor (app or email) to log in to online counseling.", - "button": "Protect account" - }, "email": { "overlay": { - "headline": "Enter e-mail address", - "input": { - "label": "E-mail", - "valid": "Your e-mail address is valid.", - "invalid": "Your e-mail address is not valid.", - "unavailable": "This e-mail address is already registered." - }, "button1": { "label": "Save" }, - "button2": { "label": "Close" } + "button2": { + "label": "Close" + }, + "headline": "Enter e-mail address", + "input": { + "invalid": "Your e-mail address is not valid.", + "label": "E-mail", + "unavailable": "This e-mail address is already registered.", + "valid": "Your e-mail address is valid." + } }, "success": { "overlay": { @@ -666,37 +645,31 @@ } } }, - "voluntaryInfo": { - "headline": "We want to advise you in the best possible way", - "infoText": "It helps us if you provide additional voluntary information about yourself and your request.", - "button": "Add details", - "overlay": { - "button1": { - "label": "Save" - }, - "button2": { - "label": "Close" - }, - "headline": "Voluntary information", - "copy": "For the consultation, the following information would help us a lot.", - "success": { - "headline": "Thank you very much. Your voluntary data has been successfully saved." - } - } + "emailNotification": { + "button": "Enter e-mail address", + "headline": "Receive e-mail notification & reset password", + "infoText": "If you provide your e-mail address (voluntary)
  • receive an email notification when your advisor has written to you
  • you can reset your password if you have forgotten it.
Your email address cannot be seen by the advisors." + }, + "headline": "This is how it continues:", + "step1": { + "iconTitle": "Open envelope", + "info": "We have received your message." + }, + "step2": { + "iconTitle": "Consultant with glasses", + "info": "Now we will find a suitable consultant for you." + }, + "step3": { + "iconTitle": "Speak bubbles", + "info": "Your advisor will respond within 2 business days." + }, + "twoFactorAuth": { + "button": "Protect account", + "headline": "The protection of your data is important to us", + "infoText": "Secure your account from possible unauthorized access. Use a second factor (app or email) to log in to online counseling." } }, "groupChat": { - "qrCode": { - "headline": "Your group chat QR code", - "text": "If you share this QR code with someone, that person can scan it with their phone camera to join the group. You can also download the code.", - "download": { - "filename": "qr-code-{{filename}}" - }, - "overlay": { - "close": "Close", - "download": "Download QR code as .png" - } - }, "active": { "sessionInfo": { "subscriber": "Participants" @@ -707,22 +680,28 @@ "label": "Cancel" } }, + "copy": { + "link": { + "notification": { + "text": "Link copied to clipboard!", + "title": "Link copied" + }, + "text": "Copy invitation link" + } + }, "create": { - "title": "New chat", - "subtitle": "Chat topic", - "topicInput": { - "label": "Chat topic", - "warning": { - "short": "The theme is too short", - "long": "The topic is too long" - } - }, - "dateInput": { - "label": "Date" + "agencySelect": { + "label": "Agency" }, "beginDateInput": { "label": "Start (hh:mm)" }, + "button": { + "label": "Create chat" + }, + "dateInput": { + "label": "Date" + }, "durationSelect": { "label": "Duration", "option1": "30 minutes", @@ -732,67 +711,61 @@ "option5": "2,5 hour", "option6": "3 hour" }, - "agencySelect": { - "label": "Agency" - }, "hintMessage": { - "label": "Note field", - "explanation": "Note: This information is visible to all administrators of the group chat." + "explanation": "Note: This information is visible to all administrators of the group chat.", + "label": "Note field" + }, + "listItem": { + "label": "New chat" }, "repetitiveCheckbox": { "label": "Repeat weekly" }, - "button": { - "label": "Create chat" - }, - "listItem": { - "label": "New chat" - } - }, - "createSuccess": { - "overlay": { - "headline": "You have successfully created a chat.", - "buttonLabel": "Close" + "subtitle": "Chat topic", + "title": "New chat", + "topicInput": { + "label": "Chat topic", + "warning": { + "long": "The topic is too long", + "short": "The theme is too short" + } } }, "createError": { "overlay": { - "headline": "An error has occurred. Please try again.", - "buttonLabel": "Close" + "buttonLabel": "Close", + "headline": "An error has occurred. Please try again." } }, - "copy": { - "link": { - "text": "Copy invitation link", - "notification": { - "title": "Link copied", - "text": "Link copied to clipboard!" - } + "createSuccess": { + "overlay": { + "buttonLabel": "Close", + "headline": "You have successfully created a chat." } }, "edit.title": "Chat settings", "info": { "headline": "Chat-Info", - "subscribers": { - "headline": "Participants", - "empty": "no participants available" - }, "settings": { - "headline": "Chat settings", - "topic": "Chat topic", - "startDate": "Date", - "startTime": "Start", + "agency": "Agency", + "createDate": "Creation date", + "creator": "Creator", "duration": "Duration", + "edit": "Edit", + "headline": "Chat settings", + "hintMessage": "Hint", "repetition": { "label": "Repetitions", "single": "unique", "weekly": "weekly" }, - "edit": "Edit", - "agency": "Agency", - "hintMessage": "Hint", - "creator": "Creator", - "createDate": "Creation date" + "startDate": "Date", + "startTime": "Start", + "topic": "Chat topic" + }, + "subscribers": { + "empty": "no participants available", + "headline": "Participants" } }, "join": { @@ -802,6 +775,11 @@ "start": "Start chat" } }, + "chatClosedOverlay": { + "button1Label": "To the overview", + "button2Label": "Logout", + "headline": "The chat has already ended." + }, "content": { "headline": "Rules of the chat" }, @@ -810,90 +788,79 @@ "message": "Your moderator has not started the chat yet. As soon as your moderator has started the chat, you can chat with us. Please be patient a little longer." }, "message": "Your advisor/moderator has not started the chat yet. As soon as your consultant/moderator has started the chat, you can chat with us. Please be patient a little longer." - }, - "chatClosedOverlay": { - "headline": "The chat has already ended.", - "button1Label": "To the overview", - "button2Label": "Logout" } }, "joinError": { "overlay": { - "headline": "An error has occurred. Please try again.", - "buttonLabel": "Close" + "buttonLabel": "Close", + "headline": "An error has occurred. Please try again." } }, "leaveChat": { "securityOverlay": { - "headline": "Do you really want to leave the chat?", "button1Label": "Leave chat", - "button2Label": "Cancel" + "button2Label": "Cancel", + "headline": "Do you really want to leave the chat?" }, "successOverlay": { - "headline": "The chat has been successfully exited.", "button1Label": "To the overview", - "button2Label": "Logout" + "button2Label": "Logout", + "headline": "The chat has been successfully exited." } }, "listItem": { "activeLabel": "Active", "subjectEmpty": { - "self": "You have created the chat.", - "other": "The chat was created." + "other": "The chat was created.", + "self": "You have created the chat." } }, + "qrCode": { + "download": { + "filename": "qr-code-{{filename}}" + }, + "headline": "Your group chat QR code", + "overlay": { + "close": "Close", + "download": "Download QR code as .png" + }, + "text": "If you share this QR code with someone, that person can scan it with their phone camera to join the group. You can also download the code." + }, "save.button.label": "Save", "stopChat": { "securityOverlay": { - "headline": "Do you really want to end the chat?", + "button1Label": "End chat", + "button2Label": "Cancel", "copyRepeat": "The chat history will be deleted and all users will be removed.", "copySingle": "The chat will be deleted and all users will be removed.", - "button1Label": "End chat", - "button2Label": "Cancel" + "headline": "Do you really want to end the chat?" }, "successOverlay": { - "headline": "The chat has ended successfully.", "button1Label": "To the overview", - "button2Label": "Logout" + "button2Label": "Logout", + "headline": "The chat has ended successfully." } }, "stopped": { "overlay": { - "headline": "The chat has ended.", "button1Label": "To the overview", - "button2Label": "Logout" + "button2Label": "Logout", + "headline": "The chat has ended." } }, "updateSuccess": { "overlay": { - "headline": "Your changes have been saved successfully.", - "button1Label": "Close" + "button1Label": "Close", + "headline": "Your changes have been saved successfully." } } }, "help": { "googleChrome": "Google Chrome", "msEdge": "Microsoft Edge", - "safari": "Safari", "openInNewTab": "Open in new tab", + "safari": "Safari", "videoCall": { - "waitingRoom": { - "headline": "It's not you, it's your browser.", - "infoBox": { - "headline": "Your browser does not support video calls.", - "text": "To participate in video calls, please use Google Chrome, Microsoft Edge or Safari." - }, - "subline1": "Don't have Google Chrome, Microsoft Edge, or Safari yet?", - "text1": "Download one of the browsers.", - "subline2": "Already have Google Chrome, Microsoft Edge, or Safari?", - "text2": "Now open your link to the online consultation with one of the supported browsers.", - "copyLink": "Copy link", - "copiedLink": "Link copied!" - }, - "banner": { - "content": "Please use a different browser for video calls to work.", - "more": "Learn more" - }, "asker": { "headline": "Video Call", "intro": "To participate in video calls, you must log in using one of the supported browsers. The chat consultation still works with Firefox.", @@ -917,6 +884,10 @@ } } }, + "banner": { + "content": "Please use a different browser for video calls to work.", + "more": "Learn more" + }, "consultant": { "headline": "Video Call", "intro": "To perform a video call, you must log in using one of the supported browsers. The chat consultation still works with Firefox.", @@ -941,23 +912,35 @@ } }, "loginLink": { - "title": "Copy link to clipboard", - "text": "Copy link", "notification": { - "title": "Link copied", - "text": "Link copied to clipboard!" - } + "text": "Link copied to clipboard!", + "title": "Link copied" + }, + "text": "Copy link", + "title": "Copy link to clipboard" + }, + "waitingRoom": { + "copiedLink": "Link copied!", + "copyLink": "Copy link", + "headline": "It's not you, it's your browser.", + "infoBox": { + "headline": "Your browser does not support video calls.", + "text": "To participate in video calls, please use Google Chrome, Microsoft Edge or Safari." + }, + "subline1": "Don't have Google Chrome, Microsoft Edge, or Safari yet?", + "subline2": "Already have Google Chrome, Microsoft Edge, or Safari?", + "text1": "Download one of the browsers.", + "text2": "Now open your link to the online consultation with one of the supported browsers." } } }, "jitsi": { "btn": { - "default": "Copy video link", - "copied": "Video link has been copied to the clipboard" + "copied": "Video link has been copied to the clipboard", + "default": "Copy video link" } }, "languages": { - "de": "German", "aa": "Afar", "ab": "Abkhaz", "ae": "Avestic", @@ -990,6 +973,7 @@ "cv": "Chuvash", "cy": "Welsh", "da": "Danish", + "de": "German", "dv": "Dhivehi", "dz": "Dzongkha", "ee": "Ewe", @@ -1143,46 +1127,50 @@ "zu": "isiZulu" }, "login": { + "button": { + "label": "Login" + }, + "consultant": { + "overlay": { + "cancel": { + "button": "To the overview" + }, + "success": { + "button": "Next", + "headline": "Welcome" + } + } + }, "headline": "Login", - "user": { - "label": "Username/E-mail" + "legal": { + "infoText": { + "dataprotection": "Privacy policy", + "impressum": "Imprint" + } }, - "seperator": "or", "password": { - "label": "Password", "hide": "hide password", - "show": "show password", + "label": "Password", "reset": { "warn": { "overlay": { - "title": "Resetting the password may make it impossible to access your messages.", - "description": "Do you still want to reset the password?", "button": { "accept": "Yes, reset", "cancel": "Back to login" - } + }, + "description": "Do you still want to reset the password?", + "title": "Resetting the password may make it impossible to access your messages." } } - } + }, + "show": "show password" }, - "warning": { - "failed": { - "unauthorized": { - "text": "Username or password are not correct. Please try again.", - "otp": "Your access data is not correct. Please try again." - }, - "app": { - "otp": { - "missing": "Please enter the code from your app for two-factor authentication." - } - }, - "email": { - "otp": { - "missing": "Please enter the code from your email for two-factor authentication." - } - }, - "deletedAccount": "Your account was marked for deletion. Your data will be deleted within the next 24 hours." - } + "register": { + "infoText": { + "copy": "We will be happy to advise you on the following topics:", + "title": "Not registered yet?" + }, + "linkLabel": "To the consulting topics" }, "resend": { "otp": { @@ -1191,122 +1179,126 @@ } } }, - "button": { - "label": "Login" - }, "resetPasswort": { "label": "Forgot password?" }, - "register": { - "infoText": { - "title": "Not registered yet?", - "copy": "We will be happy to advise you on the following topics:" - }, - "linkLabel": "To the consulting topics" - }, - "legal": { - "infoText": { - "impressum": "Imprint", - "dataprotection": "Privacy policy" - } + "seperator": "or", + "user": { + "label": "Username/E-mail" }, - "consultant": { - "overlay": { - "success": { - "headline": "Welcome", - "button": "Next" + "warning": { + "failed": { + "app": { + "otp": { + "missing": "Please enter the code from your app for two-factor authentication." + } }, - "cancel": { - "button": "To the overview" + "deletedAccount": "Your account was marked for deletion. Your data will be deleted within the next 24 hours.", + "email": { + "otp": { + "missing": "Please enter the code from your email for two-factor authentication." + } + }, + "unauthorized": { + "otp": "Your access data is not correct. Please try again.", + "text": "Username or password are not correct. Please try again." } } } }, "message": { - "today": "Today", - "isMyMessage": { - "name": "Me" - }, - "yesterday": "Yesterday", - "tomorrow": "Tomorrow", - "dayBeforeYesterday": "Day before yesterday", - "forward": { - "label": "Forwarded message from {{username}}, {{date}} at {{time}}", - "title": "Forward text message to\nFeedback" - }, - "copy": { - "title": "Copy message to clipboard" - }, - "write": { - "peer": { - "checkbox": { - "label": "Request feedback" + "appointment": { + "component": { + "header": { + "cancellation": "Date cancellation", + "change": "Date change", + "confirmation": "Date confirmation" } } }, - "submit": { - "booking": { - "headline": "Or make an appointment now", - "buttonLabel": "Make an appointment for consultation" - } + "appointmentCancelled": { + "title": "Your appointment was canceled" + }, + "appointmentRescheduled": { + "title": "Your appointment was postponed" }, "appointmentSet": { - "title": "Your appointment was created", "addToCalendar": "Add to calendar", - "cancel": "Cancel date", - "between": "between", "and": "and", + "between": "between", + "cancel": "Cancel date", "info": { "video": "Video consulting" - } - }, - "appointmentCancelled": { - "title": "Your appointment was canceled" - }, - "appointmentRescheduled": { - "title": "Your appointment was postponed" + }, + "title": "Your appointment was created" }, - "appointment": { - "component": { - "header": { - "confirmation": "Date confirmation", - "cancellation": "Date cancellation", - "change": "Date change" - } - } + "copy": { + "title": "Copy message to clipboard" }, + "dayBeforeYesterday": "Day before yesterday", "delete": { "delete": "Delete", "deleted": { - "own": "You have deleted this message.", - "other": "This message was deleted." + "other": "This message was deleted.", + "own": "You have deleted this message." }, "overlay": { - "headline": "Delete message", - "copy": "Do you really want to delete the message?", "cancel": "Cancel", - "confirm": "Delete" + "confirm": "Delete", + "copy": "Do you really want to delete the message?", + "headline": "Delete message" } }, + "forward": { + "label": "Forwarded message from {{username}}, {{date}} at {{time}}", + "title": "Forward text message to\nFeedback" + }, + "groupChat": "Group chat", + "isMyMessage": { + "name": "Me" + }, + "liveChat": "Live chat", + "newEnquiry": "New enquiry", "note": { "title": "Note" }, - "unread": "unread", "read": "read", "sent": "sent", - "groupChat": "Group chat", - "liveChat": "Live chat", - "newEnquiry": "New enquiry" + "submit": { + "booking": { + "buttonLabel": "Make an appointment for consultation", + "headline": "Or make an appointment now" + } + }, + "today": "Today", + "tomorrow": "Tomorrow", + "unread": "unread", + "write": { + "peer": { + "checkbox": { + "label": "Request feedback" + } + } + }, + "yesterday": "Yesterday" }, "navigation": { + "appointments": "Video dates", "asker": { "sessions": { "large": "My consultations", "small": "Messages" } }, + "booking": { + "events": "My dates" + }, "consultant": { "enquiries": "Initial inquiries", + "peersessions": { + "large": "Peer consultations", + "small": "Peer Con." + }, "sessions": { "large": "My consultations", "small": "Messages" @@ -1314,35 +1306,27 @@ "teamsessions": { "large": "Team consultations", "small": "Team Con." - }, - "peersessions": { - "large": "Peer consultations", - "small": "Peer Con." } }, - "profile": "Profile", - "appointments": "Video dates", - "booking": { - "events": "My dates" - }, "language": "Language", "overview": "Overview", + "profile": "Profile", "tools": "My tools" }, "notifications": { - "message": { - "new": "Sie haben eine neue Nachricht!" - }, "enquiry": { "new": "You have a new live chat request!" }, + "error": "failed", + "info": "info", "initialRequest": { "new": "You have a new initial request!" }, - "warning": "warning", - "error": "failed", + "message": { + "new": "Sie haben eine neue Nachricht!" + }, "success": "successful", - "info": "info" + "warning": "warning" }, "overlay": { "step": { @@ -1351,277 +1335,227 @@ } }, "timeout": { - "headline": "One moment please.", - "confirm": "Are you sure you want to leave this page?" + "confirm": "Are you sure you want to leave this page?", + "headline": "One moment please." } }, "overview": { - "title": "Welcome back!", - "myMessagesTitle": "{{countStr}} unread messages", - "initialInquiriesTitle": "{{countStr}} enquiries", - "upcomingAppointments": "Your next {{countStr}} appointments", - "upcomingAppointment": "Your next appointment", - "emptyMessages": "You have everything in view, all messages are read!", - "emptyInitialMessage": "Very good, all initial requests are processed!", + "appointmentsEmpty": "There are no appointments today, make appointments with those seeking advice to change that", "emptyAppointments": "There are no appointments today, make appointments with those seeking advice to change that", "emptyAppointmentsMobile": "No appointments at the moment, make appointments with those seeking advice to change that", - "viewAll": "Show all", - "myMessagesEmpty": "You have everything in view, all messages are read!", + "emptyInitialMessage": "Very good, all initial requests are processed!", + "emptyMessages": "You have everything in view, all messages are read!", "initialInquiriesEmpty": "Very good, all initial requests are processed!", - "appointmentsEmpty": "There are no appointments today, make appointments with those seeking advice to change that", - "start": "Start" + "initialInquiriesTitle": "{{countStr}} enquiries", + "myMessagesEmpty": "You have everything in view, all messages are read!", + "myMessagesTitle": "{{countStr}} unread messages", + "start": "Start", + "title": "Welcome back!", + "upcomingAppointment": "Your next appointment", + "upcomingAppointments": "Your next {{countStr}} appointments", + "viewAll": "Show all" }, "preconditions": { "cookie": { + "button": "Back to previous page", "headline": "Please enable cookies to continue", "paragraph": { "1": "Please enable cookies in your browser to enable login.", "2": "After enabling cookies in your browser, simply click the button below to return to the previous page." - }, - "button": "Back to previous page" + } } }, "profile": { - "noContent": "Not specified", - "header": { - "title": "Profile" + "appLanguage": { + "info": "Set the language of the application here.", + "title": "Language" }, - "functions": { - "title": "Functions", - "absence": { - "title": "My absence", - "label": "Deposit an out of office message", - "activated": { - "label": "Deactivate your absence to leave a message or edit it." - } - }, - "security": { - "title": "Security", - "button": "Change password" + "browserNotifications": { + "denied": { + "message": "You have opted out of receiving notifications for this browser. To enable push notifications, you must first allow them in your browser settings." }, - "password": { - "reset": { - "title": "Password", - "subtitle": "If you wish, you can change your password here. First enter your current password to set a new one.", - "old": { - "label": "Current password", - "incorrect": "Your password is not correct." - }, - "new": { - "label": "New password" - }, - "confirm": { - "label": "Confirm new password" - }, - "secure": "Your password is safe.", - "insecure": "Your password is not secure.", - "same": "Your password is identical.", - "not": { - "same": "Your password is not identical." - }, - "instructions": "Your password must meet the following criteria to guarantee a protected consultation:
  • upper/lower case
  • min. one number
  • min. one special character (e.g.: ?, !, +, #, &, ...)
  • min. 9 characters
", - "overlay": { - "headline": "You have successfully changed your password. You will now be redirected to the login.", - "button": { - "label": "Login" - } - } - } + "description": "If you're online, we'll notify you in this browser when you've got a new message.", + "initialEnquiry": { + "title": "A new initial request has been received" }, - "spokenLanguages": { - "saveError": "A problem occurred while saving. Please try again." + "newMessage": { + "description": "One of the counselees assigned to you has answered you", + "title": "New chat message" }, - "masterKey": { - "saveError": "A problem occurred while changing the password. Please try again." - } + "title": "Browser Notifications", + "toggle": "Receive notifications in this browser" }, "data": { - "title": { - "asker": "About me", - "private": "Private data", - "information": "Contact data", - "agencies": "My consulting centers" - }, - "info": { - "private": "This data cannot be viewed by those seeking advice.", - "public": "With the display name you will appear to those seeking advice." + "agency": { + "label": "Beratungsstelle", + "registrationLink": { + "notification": { + "text": "Registration link to the counseling center copied to clipboard!", + "title": "Link copied" + }, + "text": "Copy link", + "title": "Copy registration link to counseling center to clipboard" + } }, + "displayName": "Display name", "edit": { "button": { "cancel": "Cancel", - "save": "Save", - "edit": "edit" + "edit": "edit", + "save": "Save" } }, - "profileIcon": "Profile icon", - "userName": "User name", - "displayName": "Display name", - "firstName": "First name", - "lastName": "Last name", "email": "E-mail address", "emailInfo": "Adding your Email address is optional, and only used to notify you when your counsellor answers in the chat. Your Email address is not visible to counsellors.", - "agency": { - "label": "Beratungsstelle", - "registrationLink": { - "title": "Copy registration link to counseling center to clipboard", - "text": "Copy link", - "notification": { - "title": "Link copied", - "text": "Registration link to the counseling center copied to clipboard!" - } - } + "firstName": "First name", + "info": { + "private": "This data cannot be viewed by those seeking advice.", + "public": "With the display name you will appear to those seeking advice." }, + "lastName": "Last name", "personal": { "registrationLink": { - "title": "Copy contact link to clipboard", - "text": "Copy contact link", "notification": { - "title": "Link copied", - "text": "The link was successfully copied to the clipboard!" + "text": "The link was successfully copied to the clipboard!", + "title": "Link copied" }, + "text": "Copy contact link", + "title": "Copy contact link to clipboard", "tooltip": "Share your personal contact link with someone so they can start an online consultation directly with you." } }, + "profileIcon": "Profile icon", "register": { - "headline": "Do you also need advice or help on other topics?
We will be happy to support you.", - "consultingTypeSelect": { - "label": "Topics" + "button": { + "label": "Register" }, "consultingModeInfo": { "groupChats": "In self-help, those affected exchange information with each other about a topic or concern. Those affected talk about their problems, feelings and hopes and learn how others have overcome problems. The groups are led by moderators.", "singleChats": "In these subject areas you will receive a personal consultation. Write us your request!" }, - "button": { - "label": "Register" + "consultingTypeSelect": { + "label": "Topics" + }, + "headline": "Do you also need advice or help on other topics?
We will be happy to support you." + }, + "registerError": { + "overlay": { + "button": { + "label": "Close" + }, + "headline": "An error has occurred. Please try again." } }, "registerSuccess": { "overlay": { - "headline": "You have successfully registered for a new topic.", "button1": { "label": "Write message" }, + "button2": { + "label": "Logout" + }, "groupChats": { "button": { "label": "To the overview" } }, - "button2": { - "label": "Logout" - } + "headline": "You have successfully registered for a new topic." } }, - "registerError": { - "overlay": { - "headline": "An error has occurred. Please try again.", - "button": { - "label": "Close" - } - } - } + "title": { + "agencies": "My consulting centers", + "asker": "About me", + "information": "Contact data", + "private": "Private data" + }, + "userName": "User name" + }, + "documentation": { + "description": "Do you have any questions? The user manual will provide you with detailed information on the main functionalities of the online counselling platform.", + "link": "Go to user manual", + "title": "User Manual" }, "externalRegistration": { - "headline": "Your chosen counseling center uses a different application for counseling", + "cancel": "Cancel", "copy": { - "start": "Would you like to apply for \"", - "end": "\" switch to the other application and register there?" + "end": "\" switch to the other application and register there?", + "start": "Would you like to apply for \"" }, - "submit": "Switch now", - "cancel": "Cancel" + "headline": "Your chosen counseling center uses a different application for counseling", + "submit": "Switch now" }, "footer": { - "imprint": "Imprint", - "dataprotection": "Data protection" + "dataprotection": "Data protection", + "imprint": "Imprint" }, - "routes": { - "general": { - "title": "General", - "public": "Public data", - "privat": "Private data" - }, - "activities": { - "title": "My activities", - "statistics": "My statistics", - "absence": "My absence", - "availability": "My availability" + "functions": { + "absence": { + "activated": { + "label": "Deactivate your absence to leave a message or edit it." + }, + "label": "Deposit an out of office message", + "title": "My absence" }, - "notifications": { - "title": "Notifications", - "email": "E-mail notification" + "masterKey": { + "saveError": "A problem occurred while changing the password. Please try again." }, - "settings": { - "title": "Settings", - "security": { - "title": "Security", - "changePassword": "Change password", - "2fa": "Two-factor authentication" + "password": { + "reset": { + "confirm": { + "label": "Confirm new password" + }, + "insecure": "Your password is not secure.", + "instructions": "Your password must meet the following criteria to guarantee a protected consultation:
  • upper/lower case
  • min. one number
  • min. one special character (e.g.: ?, !, +, #, &, ...)
  • min. 9 characters
", + "new": { + "label": "New password" + }, + "not": { + "same": "Your password is not identical." + }, + "old": { + "incorrect": "Your password is not correct.", + "label": "Current password" + }, + "overlay": { + "button": { + "label": "Login" + }, + "headline": "You have successfully changed your password. You will now be redirected to the login." + }, + "same": "Your password is identical.", + "secure": "Your password is safe.", + "subtitle": "If you wish, you can change your password here. First enter your current password to set a new one.", + "title": "Password" } }, - "help": { - "title": "Help", - "videoCall": "Video-Call" - }, - "display": "Display" - }, - "spokenLanguages": { - "title": "My languages", - "info": "Select the language(s) in which you can advise those seeking advice. German is preselected as the default language and cannot be removed." - }, - "statistics": { - "title": "My statistics", - "period": { - "prefix": "Your numbers of the", - "lastMonth": "last month", - "currentMonth": "current month", - "currentYear": "current year", - "lastYear": "past year", - "display": { - "default": "DD.MM.JJJJ - DD.MM.JJJJ", - "prefix": "In the period from ", - "suffix": " you have:" - } + "security": { + "button": "Change password", + "title": "Security" }, - "complete": { - "title": "You can download your statistics for your selected consulting period here:", - "filename": "Statistics online consulting", - "download": { - "label": "Download Excel file" - } + "spokenLanguages": { + "saveError": "A problem occurred while saving. Please try again." }, - "csvHeader": { - "numberOfAppointments": "Appointments booked", - "numberOfAssignedSessions": "Consultations accepted", - "numberOfSentMessages": "Messages written", - "numberOfSessionsWhereConsultantWasActive": "Active consulting", - "videoCallDuration": "Duration of video calls in minutes:seconds" - } + "title": "Functions" }, - "unsetEmail": { - "confirmOverlay": { - "headline": "Do you really want to delete your email address?", - "copy": "When you delete their email address:", - "benefit": { - "1": "you will not receive an email notification when your advisor has written to you", - "2": "you will not be able to reset your password in case you forget it." - }, - "button": { - "confirm": "Delete", - "deny": "Cancel" - } - }, - "errorOverlay": { - "headline": "Oops! We could not delete the email address just now. Please try again", - "button": "ok" - }, - "successOverlay": { - "headline": "You have successfully deleted your email address.", - "button": "ok" - } + "header": { + "title": "Profile" }, + "liveChat": { + "subtitle": "Activate your availability and see the waiting anoymous advice seekers in the initial requests under \"Live Chat Requests\".", + "title": "My live chat availability", + "toggleLabel": "available" + }, + "noContent": "Not specified", "notifications": { - "title": "E-mail notification", - "subtitle": "We will notify you when you:", + "appointmentNotificationEnabled": { + "description": "An appointment was scheduled, postponed or cancelled", + "title": "Appointments" + }, "description": "We will inform you by e-mail when you have received a new message.", + "error": { + "description": "Unfortunately, we cannot update your settings at the moment. Please try again later.", + "title": "Something went wrong." + }, "follow": { "up": { "email": { @@ -1629,228 +1563,291 @@ } } }, - "mainEmail": { - "title": "Allow email notifications" - }, "initialEnquiry": { "title": "Receive a new initial enquiry" }, - "newMessage": { - "title": "New chat message", - "description": "One of your assigned advice seekers has replied to you" - }, - "reassignmentConsultant": { - "title": "Re-assignment of an advice seeker", - "description": "A colleague has reassigned an advise seeker to you" - }, - "reassignmentAdviceSeeker": { - "title": "Change of counsellor", - "description": "Your counsellor has asked for permission to reassign you to a new counsellor" - }, - "appointmentNotificationEnabled": { - "title": "Appointments", - "description": "An appointment was scheduled, postponed or cancelled" - }, - "error": { - "title": "Something went wrong.", - "description": "Unfortunately, we cannot update your settings at the moment. Please try again later." + "mainEmail": { + "title": "Allow email notifications" }, - "toggleError": { - "title": "Something went wrong.", - "description": "Unfortunately, we cannot activate your notifications at this time. Please try again later." + "newMessage": { + "description": "One of your assigned advice seekers has replied to you", + "title": "New chat message" }, "noEmail": { - "info": "You have not yet added an email address.", "button": "Add email address", + "info": "You have not yet added an email address.", "modal": { - "title": "Add email address", - "description": "Your e-mail address is voluntary and will only be used to inform you about new chat messages from your counsellor. Your email address is not visible to your advisor.", "confirm": "Add", + "description": "Your e-mail address is voluntary and will only be used to inform you about new chat messages from your counsellor. Your email address is not visible to your advisor.", "emailInput": { - "label": "EMail", - "valid": "Your email address is valid.", "invalid": "Your email address is not valid.", - "unavailable": "This email address is already in use." + "label": "EMail", + "unavailable": "This email address is already in use.", + "valid": "Your email address is valid." }, + "errorMessage": "Unfortunately, we cannot save your e-mail address at the moment. Please try again later or contact our support.", "errorTitle": "Something went wrong.", - "errorMessage": "Unfortunately, we cannot save your e-mail address at the moment. Please try again later or contact our support." + "title": "Add email address" } + }, + "reassignmentAdviceSeeker": { + "description": "Your counsellor has asked for permission to reassign you to a new counsellor", + "title": "Change of counsellor" + }, + "reassignmentConsultant": { + "description": "A colleague has reassigned an advise seeker to you", + "title": "Re-assignment of an advice seeker" + }, + "subtitle": "We will notify you when you:", + "title": "E-mail notification", + "toggleError": { + "description": "Unfortunately, we cannot activate your notifications at this time. Please try again later.", + "title": "Something went wrong." } }, - "browserNotifications": { - "title": "Browser Notifications", - "description": "If you're online, we'll notify you in this browser when you've got a new message.", - "toggle": "Receive notifications in this browser", - "initialEnquiry": { - "title": "A new initial request has been received" + "routes": { + "activities": { + "absence": "My absence", + "availability": "My availability", + "statistics": "My statistics", + "title": "My activities" }, - "newMessage": { - "title": "New chat message", - "description": "One of the counselees assigned to you has answered you" + "display": "Display", + "general": { + "privat": "Private data", + "public": "Public data", + "title": "General" }, - "denied": { - "message": "You have opted out of receiving notifications for this browser. To enable push notifications, you must first allow them in your browser settings." + "help": { + "title": "Help", + "videoCall": "Video-Call" + }, + "notifications": { + "email": "E-mail notification", + "title": "Notifications" + }, + "settings": { + "security": { + "2fa": "Two-factor authentication", + "changePassword": "Change password", + "title": "Security" + }, + "title": "Settings" } }, - "documentation": { - "title": "User Manual", - "description": "Do you have any questions? The user manual will provide you with detailed information on the main functionalities of the online counselling platform.", - "link": "Go to user manual" + "spokenLanguages": { + "info": "Select the language(s) in which you can advise those seeking advice. German is preselected as the default language and cannot be removed.", + "title": "My languages" }, - "liveChat": { - "title": "My live chat availability", - "subtitle": "Activate your availability and see the waiting anoymous advice seekers in the initial requests under \"Live Chat Requests\".", - "toggleLabel": "available" + "statistics": { + "complete": { + "download": { + "label": "Download Excel file" + }, + "filename": "Statistics online consulting", + "title": "You can download your statistics for your selected consulting period here:" + }, + "csvHeader": { + "numberOfAppointments": "Appointments booked", + "numberOfAssignedSessions": "Consultations accepted", + "numberOfSentMessages": "Messages written", + "numberOfSessionsWhereConsultantWasActive": "Active consulting", + "videoCallDuration": "Duration of video calls in minutes:seconds" + }, + "period": { + "currentMonth": "current month", + "currentYear": "current year", + "display": { + "default": "DD.MM.JJJJ - DD.MM.JJJJ", + "prefix": "In the period from ", + "suffix": " you have:" + }, + "lastMonth": "last month", + "lastYear": "past year", + "prefix": "Your numbers of the" + }, + "title": "My statistics" }, - "appLanguage": { - "title": "Language", - "info": "Set the language of the application here." + "unsetEmail": { + "confirmOverlay": { + "benefit": { + "1": "you will not receive an email notification when your advisor has written to you", + "2": "you will not be able to reset your password in case you forget it." + }, + "button": { + "confirm": "Delete", + "deny": "Cancel" + }, + "copy": "When you delete their email address:", + "headline": "Do you really want to delete your email address?" + }, + "errorOverlay": { + "button": "ok", + "headline": "Oops! We could not delete the email address just now. Please try again" + }, + "successOverlay": { + "button": "ok", + "headline": "You have successfully deleted your email address." + } } }, "qrCode": { - "download": { - "filename": "qr-code-{{filename}}" - }, - "link": { - "text": "Show QR code" - }, - "personal": { - "overlay": { - "headline": "Your personal QR code", - "info": "If you share your QR code with someone, they can scan it with their phone camera to contact you directly. Alternatively, you can download the code." - } - }, "agency": { "overlay": { "headline": "Counseling centers QR code", "info": "If you share the QR code with someone, that person can scan it with their phone camera to register directly with the counseling center {{agency}}. Alternatively, you can download the code." } }, + "download": { + "filename": "qr-code-{{filename}}" + }, + "iconTitle": "QR code", + "link": { + "text": "Show QR code" + }, "overlay": { - "download": "Download QR code as .png", "close": "Close", + "download": "Download QR code as .png", "image": { "alt": "QR-Code" } }, - "iconTitle": "QR code" + "personal": { + "overlay": { + "headline": "Your personal QR code", + "info": "If you share your QR code with someone, they can scan it with their phone camera to contact you directly. Alternatively, you can download the code." + } + } }, "registration": { - "headline": "Registration", - "overline": "Welcome to online consulting", - "title": { - "start": "Registration" - }, - "form": { - "title": "Complete registration" + "accordion": { + "item": { + "continueButton": { + "label": "Next", + "title": "Continue to the next step" + } + } }, - "login": { - "helper": "Already registered?", - "label": "Login" + "age": { + "dropdown": "Select age*", + "headline": "Specify age" }, "agency": { + "headline": "Choose consulting center", "preselected": { - "prefix": "Your pre-selected counseling center: ", - "isTeam": "You will be advised by a team." - }, - "headline": "Choose consulting center" - }, - "consultingType": { - "preselected": { - "prefix": "Your pre-selected topic: " + "isTeam": "You will be advised by a team.", + "prefix": "Your pre-selected counseling center: " } }, - "error": { - "required_field_missing": { - "title": "Something went wrong.", - "text": "Please try again later." + "agencyPreselected": { + "headline": "Please enter your postal code", + "intro": { + "overline": "Why do we need your postal code?", + "point1": "then know the aids around your place of residence", + "point2": "know the laws of your state", + "subline": "Our experts:" } }, - "username": { - "headline": "Choose username" - }, - "user": { - "label": "Username", - "infoText": "To protect your anonymity, we advise you not to use your real name or initials.
Please choose a suitable username with min. 5 characters.", - "suitable": "Your username is suitable.", - "unsuitable": "Your username is too short.", - "unavailable": "The username is already taken." - }, "agencySelection": { "headline": "Choose consulting center", - "title": { - "start": "Consultation centers to the zip code", - "end": ":" - }, - "languages": { - "info": "This counseling center advises you on:", - "more": "Languages" - }, "intro": { "overline": "Why does a counseling center near you also help you online?", - "subline": "Because then the professional staff:", "point1": "knows the regional help structures,", "point2": "is familiar with the legal requirements,", - "point3": "can also advise you on site if necessary." + "point3": "can also advise you on site if necessary.", + "subline": "Because then the professional staff:" + }, + "languages": { + "info": "This counseling center advises you on:", + "more": "Languages" }, + "noAgencies": "Unfortunately, no counseling centers can be found at the moment.", "postcode": { "label": "Your zip code", + "search": "To the advice center search", "unavailable": { - "title": "No counseling center found nearby", - "text": "Unfortunately, we do not have an online counseling center near you at the moment. On our website you can find local counseling centers for your concern." - }, - "search": "To the advice center search" + "text": "Unfortunately, we do not have an online counseling center near you at the moment. On our website you can find local counseling centers for your concern.", + "title": "No counseling center found nearby" + } }, - "noAgencies": "Unfortunately, no counseling centers can be found at the moment." + "title": { + "end": ":", + "start": "Consultation centers to the zip code" + } }, - "agencyPreselected": { - "headline": "Please enter your postal code", - "intro": { - "overline": "Why do we need your postal code?", - "subline": "Our experts:", - "point1": "then know the aids around your place of residence", - "point2": "know the laws of your state" + "consultingType": { + "preselected": { + "prefix": "Your pre-selected topic: " } }, "consultingTypeAgencySelection": { + "agency": { + "headline": "Please select a counseling center", + "infoText": "Your consultant is active in several counseling centers. Please select your desired counseling center." + }, "consultingType": { "headline": "Please select a topic", "infoText": "Your consultant is active in several subject areas. Please select your desired subject area.", "select.label": "Topic" - }, - "agency": { - "headline": "Please select a counseling center", - "infoText": "Your consultant is active in several counseling centers. Please select your desired counseling center." } }, + "dataProtection": { + "label": { + "and": " and ", + "prefix": "I have the ", + "suffix": " noted. For authentication and navigation, this website uses cookies. I agree with this." + } + }, + "error": { + "required_field_missing": { + "text": "Please try again later.", + "title": "Something went wrong." + } + }, + "form": { + "title": "Complete registration" + }, + "headline": "Registration", + "login": { + "helper": "Already registered?", + "label": "Login" + }, + "mainTopic": { + "headline": "Which of these problem areas is currently most important to you?", + "noTopics": "Unfortunately, no topics can be selected at the moment. Continue the registration in the next step." + }, + "overlay": { + "success": { + "button": "Compose message", + "copy": "You have successfully registered.", + "headline": "Welcome
to the consulting & help of Caritas." + } + }, + "overline": "Welcome to online consulting", "password": { - "headline": "Please choose your password", - "input": { - "label": "Password" - }, "confirmation": { "label": "Repeat password" }, - "secure": "Your password is secure.", - "insecure": "Your password is not secure.", - "same": "Your password is identical.", - "notSame": "Your password is not identical.", - "intro": "To guarantee protected consultation, your password must meet the following criteria:", "criteria": { "fulfilled": "fulfilled", - "upperLowerCase": "Upper/lower case", + "length": "At least 9 characters", "number": "at least one number", "specialChar": "at least one special character", - "length": "At least 9 characters" - } - }, - "age": { - "headline": "Specify age", - "dropdown": "Select age*" + "upperLowerCase": "Upper/lower case" + }, + "headline": "Please choose your password", + "input": { + "label": "Password" + }, + "insecure": "Your password is not secure.", + "intro": "To guarantee protected consultation, your password must meet the following criteria:", + "notSame": "Your password is not identical.", + "same": "Your password is identical.", + "secure": "Your password is secure." }, "state": { - "headline": "Specify state", "dropdown": "Select state*", + "headline": "Specify state", "options": { "0": "outside Germany", "1": "Baden-Württemberg", @@ -1871,129 +1868,91 @@ "16": "Thuringia" } }, - "mainTopic": { - "headline": "Which of these problem areas is currently most important to you?", - "noTopics": "Unfortunately, no topics can be selected at the moment. Continue the registration in the next step." - }, - "dataProtection": { - "label": { - "prefix": "I have the ", - "and": " and ", - "suffix": " noted. For authentication and navigation, this website uses cookies. I agree with this." - } - }, "submitButton": { "label": "Register" }, - "overlay": { - "success": { - "headline": "Welcome
to the consulting & help of Caritas.", - "copy": "You have successfully registered.", - "button": "Compose message" - } + "teaser": { + "consultant": "Please register to get in touch with your consultant" }, - "accordion": { - "item": { - "continueButton": { - "label": "Next", - "title": "Continue to the next step" - } - } + "title": { + "start": "Registration" + }, + "user": { + "infoText": "To protect your anonymity, we advise you not to use your real name or initials.
Please choose a suitable username with min. 5 characters.", + "label": "Username", + "suitable": "Your username is suitable.", + "unavailable": "The username is already taken.", + "unsuitable": "Your username is too short." + }, + "username": { + "headline": "Choose username" }, "welcomeScreen": { - "subline": "How does Caritas Counseling & Assistance work?", "info1": { - "title": "Simple registration", - "text": "For individual and protected consultation" + "text": "For individual and protected consultation", + "title": "Simple registration" }, "info2": { - "title": "Compose message", - "text": "You send your message to a local counseling center" + "text": "You send your message to a local counseling center", + "title": "Compose message" }, "info3": { - "title": "Personal and professional advice", - "text": "Within 2 working days you will get an answer" + "text": "Within 2 working days you will get an answer", + "title": "Personal and professional advice" }, "info4": { - "title": "Anonymous and free of charge", - "text": "You remain anonymous and receive free advice and assistance" + "text": "You remain anonymous and receive free advice and assistance", + "title": "Anonymous and free of charge" }, "register": { - "helperText": "Not registered yet?", - "buttonLabel": "Register" - } - }, - "teaser": { - "consultant": "Please register to get in touch with your consultant" + "buttonLabel": "Register", + "helperText": "Not registered yet?" + }, + "subline": "How does Caritas Counseling & Assistance work?" } }, "releaseNote": { "content": { + "checkbox": "Do not show this message again.", "headline": "We have news!", - "intro": "Heres whats changed with online counseling:", - "checkbox": "Do not show this message again." + "intro": "Heres whats changed with online counseling:" }, "overlay": { "close": "Close" } }, - - "termsAndConditionOverlay": { - "title": { - "termsAndCondition": "Updating our terms of use", - "privacy": "Updating our privacy policy", - "termsAndConditionAndPrivacy": "Updating our terms of use and privacy policy" - }, - "labels": { - "termsAndCondition": "Terms of Use", - "privacy": "Privacy Policy", - "here": "here" - }, - "contentLine1": { - "termsAndCondition": "We have updated the terms of use of the online counseling. In order to be able to continue using the online counseling, we need your consent.", - "privacy": "We have updated the privacy policy of the online counseling. You can find the current version and get more information here.", - "termsAndConditionAndPrivacy": "We have updated the terms of use and privacy policy of the online counseling. In order to be able to continue using the online counseling, we need your consent." - }, - "contentLine2": { - "termsAndCondition": "I have read the Terms of Use.\n I agree to this.", - "termsAndConditionAndPrivacy": "I have read the Terms of Use and Privacy Policy.\n I agree to this." - }, - "buttons": { - "decline": "Decline", - "accept": "Agree", - "continue": "Continue" - } - }, - "session": { "acceptance": { - "overlay": { - "headline": "You have successfully accepted the initial request and can now find it under \"My consultations\"." - }, "button": { "label": "Answers" + }, + "overlay": { + "headline": "You have successfully accepted the initial request and can now find it under \"My consultations\"." } }, "alreadyAssigned": { "overlay": { - "headline": "You have already assigned this consultation.", "button": { "cancel": "Close", "redirect": "Answers" - } + }, + "headline": "You have already assigned this consultation." } }, "anonymous": { "takenByOtherConsultant": { - "overlay": { - "headline": "This initial request has already been accepted by another consultant." - }, "button": { "label": "Close" + }, + "overlay": { + "headline": "This initial request has already been accepted by another consultant." } } }, "assignOther": { + "button": { + "label": "Cancel" + }, "inProgress": "Counseling is being assigned.", "overlay": { "headline": { @@ -2003,31 +1962,28 @@ "subtitle": { "noTeam": "{{newConsultant}} is thus responsible for the advice seeker and can read the complete message history. They no longer have access to the messages.", "team": { - "self": "{{newConsultant}} is thus responsible for the advice seeker. If {{toAskerName}} agrees to the assignment, you will find the chat history in your messages and no longer under team consulting.", - "other": "{{newConsultant}} is thus responsible for the advice seeker. If {{toAskerName}} agrees to the assignment, you will find the chat history under Team Consulting and no longer in your messages." + "other": "{{newConsultant}} is thus responsible for the advice seeker. If {{toAskerName}} agrees to the assignment, you will find the chat history under Team Consulting and no longer in your messages.", + "self": "{{newConsultant}} is thus responsible for the advice seeker. If {{toAskerName}} agrees to the assignment, you will find the chat history in your messages and no longer under team consulting." } } - }, - "button": { - "label": "Cancel" } }, "assignSelf": { - "inProgress": "The consultation is being assigned to you.", - "overlay": { - "headline1": "You have successfully accepted the consultation. It has been moved to My consultations.", - "headline2": "Assign consultation", - "subtitle": "Do you really want to assign this consultation?", - "button": { - "cancel": "Cancel", - "assign": "Assign" - } - }, "button1": { "label": "Answers" }, "button2": { "label": "Close" + }, + "inProgress": "The consultation is being assigned to you.", + "overlay": { + "button": { + "assign": "Assign", + "cancel": "Cancel" + }, + "headline1": "You have successfully accepted the consultation. It has been moved to My consultations.", + "headline2": "Assign consultation", + "subtitle": "Do you really want to assign this consultation?" } }, "consultant": { @@ -2036,6 +1992,13 @@ "divider": { "lastRead": "Last read" }, + "dragAndDrop": { + "explanation": { + "insideDropArea": "Place the file here to upload it.", + "outsideDropArea": "Drag the file into the field to upload it." + }, + "restrictions": ".jpg, .png, .pdf, .docx, .xlsx up to a maximum of {{attachment_filesize}}MB" + }, "empty": "Please select a message", "feedback": { "label": "Feedback" @@ -2045,56 +2008,19 @@ "prefix": "Moderator - " } }, - "u25": { - "assignment": { - "placeholder": "Assign consultation" - } - }, - "unreadCount": { - "maxValue": "99+" - }, - "dragAndDrop": { - "explanation": { - "insideDropArea": "Place the file here to upload it.", - "outsideDropArea": "Drag the file into the field to upload it." - }, - "restrictions": ".jpg, .png, .pdf, .docx, .xlsx up to a maximum of {{attachment_filesize}}MB" - }, "reassign": { "system": { "message": { "reassign": { - "title": "{{oldConsultant}} would like to pass you to {{newConsultant}}.", - "description": { - "noTeam": "{{newConsultant}} can thus read the complete message history and is responsible for you. {{oldConsultant}} no longer has access to the messages.", - "team": "{{newConsultant}} can thus read the complete message history and is responsible for you." - }, - - "question": "Do you agree to the transfer?", "accept": "Accept", - "decline": "Decline", - "sent": { - "title": "Request for assignment sent", - "description": { - "noTeam": "Once {{client1}} agrees to the assignment, {{client2}} is passed to {{newConsultant}} with the complete message history.", - "team": { - "self": "Once {{client1}} agrees to the assignment, {{newConsultant}} will be responsible for {{client2}}. You will then find the chat history under Team Consulting and no longer here in your messages.", - "other": "Once {{client1}} agrees to the assignment, {{newConsultant}} will be responsible for {{client2}}. You will then find the chat history in your messages and no longer here under Team Consulting." - } - } - }, "accepted": { - "title": { - "self": "{{oldConsultant}} has passed {{client}} to you.", - "other": "{{oldConsultant}} has passed {{newConsultant}} to {{client}}." - }, - "description": { - "self": "You are now responsible for {{client}}.", - "other": "{{consultant}} is now responsible for {{client}}." - }, "consultant": { "title": "{{newConsultant}} kümmert sich nun um Sie und Ihre Anliegen." }, + "description": { + "other": "{{consultant}} is now responsible for {{client}}.", + "self": "You are now responsible for {{client}}." + }, "new": { "consultant": { "description": "We have notified {{newConsultant1}}. You can now send messages to {{newConsultant2}}." @@ -2104,87 +2030,116 @@ "consultant": { "description": "We have notified {{newConsultant}}. {{oldConsultant}} is no longer responsible for you" } + }, + "title": { + "other": "{{oldConsultant}} has passed {{newConsultant}} to {{client}}.", + "self": "{{oldConsultant}} has passed {{client}} to you." } }, + "decline": "Decline", "declined": { - "title": "{{client}} has rejected the assignment.", "description": { - "self": "You are still responsible for {{client}}.", - "other": "{{consultant}} is still responsible for {{client}}." + "other": "{{consultant}} is still responsible for {{client}}.", + "self": "You are still responsible for {{client}}." }, "old": { "consultant": { "title": "{{oldConsultant}} will continue to take care of you and your concerns." } - } - } + }, + "title": "{{client}} has rejected the assignment." + }, + "description": { + "noTeam": "{{newConsultant}} can thus read the complete message history and is responsible for you. {{oldConsultant}} no longer has access to the messages.", + "team": "{{newConsultant}} can thus read the complete message history and is responsible for you." + }, + "question": "Do you agree to the transfer?", + "sent": { + "description": { + "noTeam": "Once {{client1}} agrees to the assignment, {{client2}} is passed to {{newConsultant}} with the complete message history.", + "team": { + "other": "Once {{client1}} agrees to the assignment, {{newConsultant}} will be responsible for {{client2}}. You will then find the chat history in your messages and no longer here under Team Consulting.", + "self": "Once {{client1}} agrees to the assignment, {{newConsultant}} will be responsible for {{client2}}. You will then find the chat history under Team Consulting and no longer here in your messages." + } + }, + "title": "Request for assignment sent" + }, + "title": "{{oldConsultant}} would like to pass you to {{newConsultant}}." } } } + }, + "u25": { + "assignment": { + "placeholder": "Assign consultation" + } + }, + "unreadCount": { + "maxValue": "99+" } }, "sessionList": { - "teamsession": "Team consulting", + "asker": { + "welcome": "Welcome back!" + }, + "createChat": { + "buttonTitle": "Create chat" + }, "empty": { - "known": "There are no requests at the moment", "anonymous": "Currently, no anonymous advice seekers are waiting for a live chat", + "archived": "There are no consultations in the archive yet", + "known": "There are no requests at the moment", "mySessions": "You currently have no active consultations", - "teamSessions": "Your team has no active consultations", "peersessions": "You currently have no active peer counselling", - "archived": "There are no consultations in the archive yet" - }, - "unavailable": { - "description": "Activate your availability to receive initial inquiries from advice seekers", - "buttonLabel": "Activate availability" - }, - "preview": { - "headline": "Initial inquiries", - "registered": { - "tab": "Initial inquiries" - }, - "anonymous": { - "tab": "Live chat requests" - } - }, - "view": { - "headline": "My consultations", - "asker": { - "tab": "Advice seekers" - }, - "archive": { - "tab": "Archive" - } - }, - "user": { - "headline": "My consultations", - "consultantUnknown": "Search for consultants underway", - "writeEnquiry": "Write message now", - "peer": "Peer" - }, - "peersessions": { - "headline": "Peer consultations" - }, - "asker": { - "welcome": "Welcome back!" + "teamSessions": "Your team has no active consultations" }, "filter": { - "placeholder": "Filter", "option": { "all": "All consultations", "feedbackMain": "Feedback needed", "feedbackPeer": "Feedback available" + }, + "placeholder": "Filter" + }, + "peersessions": { + "headline": "Peer consultations" + }, + "preview": { + "anonymous": { + "tab": "Live chat requests" + }, + "headline": "Initial inquiries", + "registered": { + "tab": "Initial inquiries" } }, "reloadButton": { "label": "Reload" }, - "createChat": { - "buttonTitle": "Create chat" - }, + "teamsession": "Team consulting", "time": { "label": { "postfix": "Clock" } + }, + "unavailable": { + "buttonLabel": "Activate availability", + "description": "Activate your availability to receive initial inquiries from advice seekers" + }, + "user": { + "consultantUnknown": "Search for consultants underway", + "headline": "My consultations", + "peer": "Peer", + "writeEnquiry": "Write message now" + }, + "view": { + "archive": { + "tab": "Archive" + }, + "asker": { + "tab": "Advice seekers" + }, + "headline": "My consultations" } }, "statusOverlay": { @@ -2197,6 +2152,32 @@ "text": "Thank you for your inquiry. We will reply to you within 48 hours on weekdays. If you have provided your email address, you will receive a notification as soon as our response is received." } }, + "termsAndConditionOverlay": { + "buttons": { + "accept": "Agree", + "continue": "Continue", + "decline": "Decline" + }, + "contentLine1": { + "privacy": "We have updated the privacy policy of the online counseling. You can find the current version and get more information here.", + "termsAndCondition": "We have updated the terms of use of the online counseling. In order to be able to continue using the online counseling, we need your consent.", + "termsAndConditionAndPrivacy": "We have updated the terms of use and privacy policy of the online counseling. In order to be able to continue using the online counseling, we need your consent." + }, + "contentLine2": { + "termsAndCondition": "I have read the Terms of Use.\n I agree to this.", + "termsAndConditionAndPrivacy": "I have read the Terms of Use and Privacy Policy.\n I agree to this." + }, + "labels": { + "here": "here", + "privacy": "Privacy Policy", + "termsAndCondition": "Terms of Use" + }, + "title": { + "privacy": "Updating our privacy policy", + "termsAndCondition": "Updating our terms of use", + "termsAndConditionAndPrivacy": "Updating our terms of use and privacy policy" + } + }, "text": { "label": { "hint": "Hint" @@ -2206,135 +2187,58 @@ "button": { "label": "Open" }, - "shared": "Shared with the advisor", "calendar": { - "title": "My Calendar", - "description": "Enter your holidays or other appointments in the calendar so that those seeking advice cannot book any appointments with you during this time.
Log in with the same e-mail address and password that you use here for the online use advice.", "button": { "label": "Open" - } - } - }, - "twoFactorAuth": { - "title": "Two-factor authentication", - "edit": "edit", - "subtitle": "In addition to your password, use a second factor for logging in. This will provide additional security for your account.", - "switch": { - "active": { - "label": "Two-factor authentication enabled" - }, - "deactive": { - "label": "Two-factor authentication disabled" }, - "type": { - "label": "Your second factor", - "EMAIL": "E-Mail", - "APP": "App" - } + "description": "Enter your holidays or other appointments in the calendar so that those seeking advice cannot book any appointments with you during this time.
Log in with the same e-mail address and password that you use here for the online use advice.", + "title": "My Calendar" }, + "shared": "Shared with the advisor" + }, + "twoFactorAuth": { "activate": { - "step1": { - "email": "Per E-Mail", - "app": "With Authenticator Application", - "title": "Select second factor", - "copy": "Install a suitable Authenticator app on your smartphone or tablet. Alternatively, you can also use your e-mail address as a second factor.", - "visualisation": { - "label": "Selection" - }, - "disable": "Disable authentication" - }, - "radio": { - "label": { - "app": "App", - "email": "E-mail address" - }, - "tooltip": { - "app": "Install the app. The app will generate a code for you to enter when you log in.", - "email": "You will receive an email with a code when you register. You must then enter this code." - } - }, - "email": { - "input": { - "label": "Enter e-mail address", - "valid": "Enter e-mail address", - "invalid": "E-mail address invalid", - "duplicate": { - "label": "E-mail address is already in use", - "info": "This email address is already in use by someone else. Please enter a different email address. Or use the app as a second factor." - }, - "info": "You can only leave one email address with us. If you change the e-mail address here, you will also receive the notifications on this e-mail address in the future." - }, - "resend": { - "hint": "We have sent you a code to your email address. Please enter the code.", - "headline": "It did not work?", - "new": "Send new code", - "sent": "New code sent" - }, - "step2": { - "title": "Enter e-mail address", - "copy": "Please enter your e-mail address here.", - "visualisation": { - "label": "Specification" - } - }, - "step3": { - "title": "E-Mail-Adresse bestätigen", - "copy": { - "1": "We have just sent you an email to", - "2": "sent. Please enter the code from the email here." - }, - "visualisation": { - "label": "Link" - } - }, - "step4": { - "title": "E-mail authentication successfully set up.", - "visualisation": { - "label": "Confirmation" - } - } - }, "app": { "step2": { - "title": "Install the app", "copy": "Please install a suitable authenticator app on your smartphone or tablet, such as the FreeOTP or Google Authentificator app. Both apps are available in the Google Play or Apple App Store.", - "visualisation": { - "label": "Installation" + "download": { + "apple": "Download from Apple App Store", + "google": "Download from Google Play Store" }, + "title": "Install the app", "tool1": { - "2": "FreeOTP App:", + "title": "FreeOTP App:", "url": { - "google": "https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp", - "apple": "https://apps.apple.com/de/app/freeotp-authenticator/id872559395" + "apple": "https://apps.apple.com/de/app/freeotp-authenticator/id872559395", + "google": "https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp" } }, "tool2": { "title": "Google Authenticator App:", "url": { - "google": "https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2", - "apple": "https://apps.apple.com/de/app/google-authenticator/id388497605" + "apple": "https://apps.apple.com/de/app/google-authenticator/id388497605", + "google": "https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2" } }, - "download": { - "google": "Download from Google Play Store", - "apple": "Download from Apple App Store" + "visualisation": { + "label": "Installation" } }, "step3": { - "title": "Add the online consultation to the app", + "connect": { + "divider": "or", + "key": "Open the app and enter the following 32-digit key:", + "qrCode": "Open the app and scan the following QR code:" + }, "copy": "You have two options to add the online consultation to the app:", + "title": "Add the online consultation to the app", "visualisation": { "label": "Add" - }, - "connect": { - "qrCode": "Open the app and scan the following QR code:", - "divider": "or", - "key": "Open the app and enter the following 32-digit key:" } }, "step4": { - "title": "Enter one time code", "copy": "Enter the one-time code generated by the app and click \"Save\" to complete the setup.", + "title": "Enter one time code", "visualisation": { "label": "Link" } @@ -2346,31 +2250,81 @@ } } }, + "email": { + "input": { + "duplicate": { + "info": "This email address is already in use by someone else. Please enter a different email address. Or use the app as a second factor.", + "label": "E-mail address is already in use" + }, + "info": "You can only leave one email address with us. If you change the e-mail address here, you will also receive the notifications on this e-mail address in the future.", + "invalid": "E-mail address invalid", + "label": "Enter e-mail address", + "valid": "Enter e-mail address" + }, + "resend": { + "headline": "It did not work?", + "hint": "We have sent you a code to your email address. Please enter the code.", + "new": "Send new code", + "sent": "New code sent" + }, + "step2": { + "copy": "Please enter your e-mail address here.", + "title": "Enter e-mail address", + "visualisation": { + "label": "Specification" + } + }, + "step3": { + "copy": { + "1": "We have just sent you an email to", + "2": "sent. Please enter the code from the email here." + }, + "title": "E-Mail-Adresse bestätigen", + "visualisation": { + "label": "Link" + } + }, + "step4": { + "title": "E-mail authentication successfully set up.", + "visualisation": { + "label": "Confirmation" + } + } + }, "otp": { "input": { "label": { - "text": "Single-use code", + "error": "Authentication has failed. Please repeat the process.", "short": "The entered code is too short.", - "error": "Authentication has failed. Please repeat the process." + "text": "Single-use code" } } + }, + "radio": { + "label": { + "app": "App", + "email": "E-mail address" + }, + "tooltip": { + "app": "Install the app. The app will generate a code for you to enter when you log in.", + "email": "You will receive an email with a code when you register. You must then enter this code." + } + }, + "step1": { + "app": "With Authenticator Application", + "copy": "Install a suitable Authenticator app on your smartphone or tablet. Alternatively, you can also use your e-mail address as a second factor.", + "disable": "Disable authentication", + "email": "Per E-Mail", + "title": "Select second factor", + "visualisation": { + "label": "Selection" + } } }, - "overlayButton": { - "next": "Next", - "back": "Back", - "save": "Save", - "close": "Close", - "confirm": "Confirm" - }, + "edit": "edit", "email": { "change": { "confirmOverlay": { - "title": "E-Mail-Adresse bearbeiten", - "copy": { - "1": "They use this email address as a second factor for secure login.", - "2": "Disable two-factor authentication to edit the email address." - }, "binding": { "copy": { "1": "You cannot change your email address as long as you use it as a second factor for secure login.", @@ -2380,7 +2334,12 @@ "button": { "confirm": "Disable authentication", "deny": "Cancel" - } + }, + "copy": { + "1": "They use this email address as a second factor for secure login.", + "2": "Disable two-factor authentication to edit the email address." + }, + "title": "E-Mail-Adresse bearbeiten" } }, "delete": { @@ -2390,75 +2349,96 @@ } }, "nag": { - "title": "Protect your account", - "copy": "Secure your account from possible unauthorized access. Use a second factor (app or email) to log in to the online fry.", "button": { "later": "Later remember", "protect": "Protect now" }, + "copy": "Secure your account from possible unauthorized access. Use a second factor (app or email) to log in to the online fry.", "obligatory": { + "copy": "You now need to store a second factor for (App or E-mail) logging into the online consultation. This is for security and protects your account from possible unauthorized access.

This is for security and protects your account from possible unauthorized access.", "moment": { - "title": "Protect your account no later than {{date}}", - "copy": "You have to deposit up to {{date1}} a second factor (app or email) for logging into the online consultation. This is for security and protects your account from possible unauthorized access.

Attention: Without a second factor you are not allowed to consult online after {{date2}}." + "copy": "You have to deposit up to {{date1}} a second factor (app or email) for logging into the online consultation. This is for security and protects your account from possible unauthorized access.

Attention: Without a second factor you are not allowed to consult online after {{date2}}.", + "title": "Protect your account no later than {{date}}" }, - "title": "Protect your account now", - "copy": "You now need to store a second factor for (App or E-mail) logging into the online consultation. This is for security and protects your account from possible unauthorized access.

This is for security and protects your account from possible unauthorized access." + "title": "Protect your account now" + }, + "title": "Protect your account" + }, + "overlayButton": { + "back": "Back", + "close": "Close", + "confirm": "Confirm", + "next": "Next", + "save": "Save" + }, + "subtitle": "In addition to your password, use a second factor for logging in. This will provide additional security for your account.", + "switch": { + "active": { + "label": "Two-factor authentication enabled" + }, + "deactive": { + "label": "Two-factor authentication disabled" + }, + "type": { + "APP": "App", + "EMAIL": "E-Mail", + "label": "Your second factor" } - } + }, + "title": "Two-factor authentication" }, "typingIndicator": { + "multipleUsers": { + "typing": "Participants write" + }, "singleUser": { "typing": "writes" }, "twoUsers": { "connector": "and", "typing": "write" - }, - "multipleUsers": { - "typing": "Participants write" } }, "user": { "userAddiction": { - "relation": { - "headline": "Background", - "0": "Affected", - "1": "Affiliated", - "2": "Other" + "addictiveDrugs": { + "0": "Alcohol", + "1": "Drugs", + "2": "Legal highs", + "3": "Tobacco", + "4": "Medication", + "5": "Gambling", + "6": "Internet/Computer", + "7": "Eating disorders", + "8": "Other", + "headline": "Narcotics" }, "age": { - "headline": "Age", - "selectLabel": "Select age", "0": "0-17", "1": "18-20", "2": "21-30", "3": "31-40", "4": "41-59", "5": "60+", - "null": "no information" + "headline": "Age", + "null": "no information", + "selectLabel": "Select age" }, "gender": { - "headline": "Gender", "0": "Female", "1": "Male", - "2": "Divers" + "2": "Divers", + "headline": "Gender" }, - "addictiveDrugs": { - "headline": "Narcotics", - "0": "Alcohol", - "1": "Drugs", - "2": "Legal highs", - "3": "Tobacco", - "4": "Medication", - "5": "Gambling", - "6": "Internet/Computer", - "7": "Eating disorders", - "8": "Other" + "relation": { + "0": "Affected", + "1": "Affiliated", + "2": "Other", + "headline": "Background" } }, "userU25": { "age": { - "selectLabel": "Select age*", "0": "under 12", "1": "12", "2": "13", @@ -2481,10 +2461,22 @@ "53": "23", "54": "24", "55": "25", - "56": "26" + "56": "26", + "selectLabel": "Select age*" + }, + "gender": { + "0": "Female", + "1": "Male", + "2": "Divers", + "headline": "Gender" + }, + "relation": { + "0": "Affected", + "1": "Affiliated", + "2": "Other", + "headline": "Background" }, "state": { - "selectLabel": "Select state*", "0": "outside Germany", "1": "Baden-Württemberg", "2": "Bavaria", @@ -2501,73 +2493,57 @@ "13": "Saxony", "14": "Saxony-Anhalt", "15": "Schleswig-Holstein", - "16": "Thuringia" - }, - "gender": { - "headline": "Gender", - "0": "Female", - "1": "Male", - "2": "Divers" - }, - "relation": { - "headline": "Background", - "0": "Affected", - "1": "Affiliated", - "2": "Other" + "16": "Thuringia", + "selectLabel": "Select state*" } } }, "userProfile": { + "data": { + "addictiveDrugs": "Narcotics", + "age": "Age", + "gender": "Gender", + "postcode": "Postal code", + "relation": "Background", + "resort": "Department", + "state": "State", + "title": "Information of the person seeking advice" + }, + "reassign": { + "description": "You can assign the conversation to another team member. This person is then responsible for the person seeking advice.", + "title": "Allocation" + }, "tools": { "description": "Unlock tools for the person seeking advice. ", + "modal": { + "confirm": "Unlock", + "deny": "Cancel", + "description": "Select the tools you want to make available to the counselee.", + "title": "Tool for those seeking advice" + }, "openModal": "View tool descriptions", - "optionsPlaceholder": "Choose an option...", - "title": "Tools", "options": { "saveError": "A problem occurred during the tool change. Please try again." }, + "optionsPlaceholder": "Choose an option...", "share": { + "info": "Only assigned counselors can view the content of those seeking advice. If you access the content from the team consultation, the advice seekers are not preselected.", "sharedContent": "To the shared content", - "title": "See what content has been shared with you here.", - "info": "Only assigned counselors can view the content of those seeking advice. If you access the content from the team consultation, the advice seekers are not preselected." + "title": "See what content has been shared with you here." }, - "modal": { - "confirm": "Unlock", - "deny": "Cancel", - "description": "Select the tools you want to make available to the counselee.", - "title": "Tool for those seeking advice" - } - }, - "data": { - "title": "Information of the person seeking advice", - "resort": "Department", - "postcode": "Postal code", - "relation": "Background", - "addictiveDrugs": "Narcotics", - "age": "Age", - "gender": "Gender", - "state": "State" - }, - "reassign": { - "title": "Allocation", - "description": "You can assign the conversation to another team member. This person is then responsible for the person seeking advice." + "title": "Tools" } }, "videoCall": { "button": { + "answerCall": "Accept audio call", + "answerVideoCall": "Accept video call", "rejectCall": "Reject call", "startCall": "Start audio call", - "answerCall": "Accept audio call", - "startVideoCall": "Start video call", - "answerVideoCall": "Accept video call" + "startVideoCall": "Start video call" }, "incomingCall": { "description": "calls...", - "unsupported": { - "description": "{{username}} tries to call you", - "hint": "Your browser does not meet the necessary security requirements. Please use a different browser so that you can participate in video calls.", - "button": "Open help" - }, "ignored": "has been trying to reach you.", "rejected": { "prefix": "You have tried", @@ -2575,118 +2551,123 @@ "teamconsultant": { "prefix": "Has tried" } + }, + "unsupported": { + "button": "Open help", + "description": "{{username}} tries to call you", + "hint": "Your browser does not meet the necessary security requirements. Please use a different browser so that you can participate in video calls." } }, "info": "Call information", "overlay": { + "encryption": { + "e2e": "This video call is secured with end-to-end encryption.", + "transport": "This video call is secured with the transport encryption." + }, "unsupported": { - "headline": "The video call cannot be started", - "copy": "Your device does not meet all the necessary technical requirements for a video call. Please follow these instructions to be able to start a video call. You may need the support of your IT department.", "button": { "close": "Close", "manual": "To the instructions" - } - }, - "encryption": { - "e2e": "This video call is secured with end-to-end encryption.", - "transport": "This video call is secured with the transport encryption." + }, + "copy": "Your device does not meet all the necessary technical requirements for a video call. Please follow these instructions to be able to start a video call. You may need the support of your IT department.", + "headline": "The video call cannot be started" } }, "statusPage": { "closed": { - "title": "Your video call ended successfully.", - "action": "Please close this tab to return to Advice & Help." + "action": "Please close this tab to return to Advice & Help.", + "title": "Your video call ended successfully." }, "unauthorized": { - "title": "No entry!", + "action": "Please close this tab to return to Advice & Help.", "reason": "Unfortunately you are not authorized to view this page.", - "action": "Please close this tab to return to Advice & Help." + "title": "No entry!" } } }, "videoConference": { "waitingroom": { - "title": { - "start": "Waiting room" - }, "dataProtection": { - "headline": "A warm welcome", - "subline": "Please confirm our privacy policy.", + "button": "Confirm", "description": "After that, our consultants may start a video call with you.", + "headline": "A warm welcome", "label": { - "text": "I have taken note of the {{legal_links}}. This website uses cookies for authentication and navigation. I agree with this.", - "and": "and" + "and": "and", + "text": "I have taken note of the {{legal_links}}. This website uses cookies for authentication and navigation. I agree with this." }, - "button": "Confirm" + "subline": "Please confirm our privacy policy." }, - "waitingImageTitle": "Waiting person with coffee", - "welcomeImageTitle": "Welcome", "errorImageTitle": "Faile", - "headline": "Please be patient", - "subline": "The video call has not yet started. You will be forwarded as soon as your consultant starts the video call.", - "paused": { - "headline": "The video call was ended", - "subline": "The video call has ended. If your consultant is only absent, you will be forwarded to the video call as soon as your consultant resumes the video call." - }, "errorPage": { - "headline": "The video call was not found", - "description": "We cannot find a video call for your link because the video call has either been deleted or already terminated. If you still have problems, please ask your consultant.", + "button": "Reload", "consultant": { "description": "We cannot find a video call for your link because the video call has either been deleted or already terminated." }, + "description": "We cannot find a video call for your link because the video call has either been deleted or already terminated. If you still have problems, please ask your consultant.", + "headline": "The video call was not found", "rejected": { - "headline": "You were not admitted", - "description": "You have not been admitted. Unfortunately, you cannot participate in this video call because your advisor has not approved you." - }, - "button": "Reload" - } + "description": "You have not been admitted. Unfortunately, you cannot participate in this video call because your advisor has not approved you.", + "headline": "You were not admitted" + } + }, + "headline": "Please be patient", + "paused": { + "headline": "The video call was ended", + "subline": "The video call has ended. If your consultant is only absent, you will be forwarded to the video call as soon as your consultant resumes the video call." + }, + "subline": "The video call has not yet started. You will be forwarded as soon as your consultant starts the video call.", + "title": { + "start": "Waiting room" + }, + "waitingImageTitle": "Waiting person with coffee", + "welcomeImageTitle": "Welcome" } }, "walkthrough": { - "title": "Tour", - "subtitle": "To explain the individual functions, we have prepared a short tour for you
You can cancel it at any time or start it again in your profile.", - "switch": { - "active": { - "label": "Tour active" - }, - "deactive": { - "label": "Tour activated" - } - }, "step": { - "next": "Next", - "prev": "Back", - "done": "Ready", - "step": "Step", - "of": "from", "0": { - "title": "Tour", - "intro": "To explain the individual functions, we have prepared a short tour for you.

They can cancel it at any time or start it again in their profile." + "intro": "To explain the individual functions, we have prepared a short tour for you.

They can cancel it at any time or start it again in their profile.", + "title": "Tour" }, "1": { - "title": "Initial inquiries", - "intro": "Here you will find an overview of all open requests that are not yet assigned to a consultant. Your entire team has access to this overview.\n

The oldest requests are at the top, the newest at the bottom, to make it easier for you to find the ones you received first.\n

The moment you click on \"Accept request\", the request will be immediately moved to your \"My consultations\" section and the other consultants will not see it anymore." + "intro": "Here you will find an overview of all open requests that are not yet assigned to a consultant. Your entire team has access to this overview.\n

The oldest requests are at the top, the newest at the bottom, to make it easier for you to find the ones you received first.\n

The moment you click on \"Accept request\", the request will be immediately moved to your \"My consultations\" section and the other consultants will not see it anymore.", + "title": "Initial inquiries" }, "2": { - "title": "Live chat requests", - "intro": "From here you can start a chat with a person seeking advice who is currently in the waiting room.

Those seeking advice are identified by an anonymous name, such as \"Advice Seeker 11\".

If you want to start the chat, click on \"Start chat\" and you will be able to continue the conversation under the \"My consultations\" section." + "intro": "From here you can start a chat with a person seeking advice who is currently in the waiting room.

Those seeking advice are identified by an anonymous name, such as \"Advice Seeker 11\".

If you want to start the chat, click on \"Start chat\" and you will be able to continue the conversation under the \"My consultations\" section.", + "title": "Live chat requests" }, "3": { - "title": "My consultations", - "intro": "In this section you will find all the requests that you have accepted. \n

The message history that was last edited is at the top.\nIf the person seeking advice is currently online in the waiting room, you will see the label \"Active\" right next to the name." + "intro": "In this section you will find all the requests that you have accepted. \n

The message history that was last edited is at the top.\nIf the person seeking advice is currently online in the waiting room, you will see the label \"Active\" right next to the name.", + "title": "My consultations" }, "4": { - "title": "Archive", - "intro": "To avoid being distracted by conversations that are not active, you can archive some of the conversations.

They will then not be deleted, but only moved to the \"Archive\" tab.

Every time you or the advice seeker write something in an archived conversation, that message history is put back into the advice seeker list." + "intro": "To avoid being distracted by conversations that are not active, you can archive some of the conversations.

They will then not be deleted, but only moved to the \"Archive\" tab.

Every time you or the advice seeker write something in an archived conversation, that message history is put back into the advice seeker list.", + "title": "Archive" }, "5": { - "title": "Team consultations", - "intro": "In this section you can view and contribute to all active consultations that someone in your team is currently working on." + "intro": "In this section you can view and contribute to all active consultations that someone in your team is currently working on.", + "title": "Team consultations" }, "6": { - "title": "Profile", - "intro": "In the profile area you can manage personal and public information, enable out-of-office messaging during your vacation, change your password and use many other features (like setting up 2-factor authentication)." + "intro": "In the profile area you can manage personal and public information, enable out-of-office messaging during your vacation, change your password and use many other features (like setting up 2-factor authentication).", + "title": "Profile" + }, + "done": "Ready", + "next": "Next", + "of": "from", + "prev": "Back", + "step": "Step" + }, + "subtitle": "To explain the individual functions, we have prepared a short tour for you
You can cancel it at any time or start it again in your profile.", + "switch": { + "active": { + "label": "Tour active" + }, + "deactive": { + "label": "Tour activated" } - } + }, + "title": "Tour" } } diff --git a/src/resources/i18n/en/consultingTypes.json b/src/resources/i18n/en/consultingTypes.json index 3f1a454f0..288460edd 100644 --- a/src/resources/i18n/en/consultingTypes.json +++ b/src/resources/i18n/en/consultingTypes.json @@ -1,81 +1,61 @@ { "consultingType": { "0": { - "titles": { - "default": "Addiction consulting", - "short": "Addiction", - "long": "Addiction consulting", - "welcome": "Welcome to online consulting", - "registrationDropdown": "Addiction consulting" - }, "anonymous": { "title": "Anonymous and free of charge" }, - "welcomeScreen": { - "anonymous": { - "text": "You remain anonymous and receive free advice and help" - } + "titles": { + "default": "Addiction consulting", + "long": "Addiction consulting", + "registrationDropdown": "Addiction consulting", + "short": "Addiction", + "welcome": "Welcome to online consulting" }, "voluntaryComponents": { - "relation": { - "headline": "Background", - "affected": "Affected", - "relative": "Affiliated", - "otherType": "Other" - }, "addictiveDrugs": { - "headline": "Narcotics", "alcohol": "Alcohol", "drugs": "Drugs", - "legalHighs": "Legal Highs", - "tabacco": "Tobacco", - "medication": "Medication", + "eatingDisorder": "Eating disorders", "gambling": "Gambling", + "headline": "Narcotics", "internetUse": "Internet/Computer", - "eatingDisorder": "Eating disorders", - "otherDrug": "Other" + "legalHighs": "Legal Highs", + "medication": "Medication", + "otherDrug": "Other", + "tabacco": "Tobacco" }, "age": { - "headline": "Age", - "selectInputLabel": "Select age", "0": "0-17", "1": "18-20", "2": "21-30", "3": "31-40", "4": "41-59", - "5": "60+" + "5": "60+", + "headline": "Age", + "selectInputLabel": "Select age" }, "gender": { - "headline": "Gender", + "diverseGender": "Divers", "female": "Female", - "male": "Male", - "diverseGender": "Divers" + "headline": "Gender", + "male": "Male" + }, + "relation": { + "affected": "Affected", + "headline": "Background", + "otherType": "Other", + "relative": "Affiliated" } - } - }, - "1": { - "titles": { - "default": "[U25]", - "short": "[U25]", - "long": "Counseling for suicidal young people [U25].", - "welcome": "Welcome to online consulting", - "registrationDropdown": "Counseling for suicidal young people [U25]." - }, - "anonymous": { - "title": "Anonymous and free of charge" }, "welcomeScreen": { "anonymous": { "text": "You remain anonymous and receive free advice and help" } - }, - "voluntaryComponents": { - "gender": { - "headline": "Gender", - "female": "Female", - "male": "Male", - "diverseGender": "Divers" - } + } + }, + "1": { + "anonymous": { + "title": "Anonymous and free of charge" }, "requiredComponents": { "age": { @@ -96,18 +76,38 @@ "14": "25", "15": "over 25" } + }, + "titles": { + "default": "[U25]", + "long": "Counseling for suicidal young people [U25].", + "registrationDropdown": "Counseling for suicidal young people [U25].", + "short": "[U25]", + "welcome": "Welcome to online consulting" + }, + "voluntaryComponents": { + "gender": { + "diverseGender": "Divers", + "female": "Female", + "headline": "Gender", + "male": "Male" + } + }, + "welcomeScreen": { + "anonymous": { + "text": "You remain anonymous and receive free advice and help" + } } }, "2": { + "anonymous": { + "title": "Anonymous and free of charge" + }, "titles": { "default": "Pregnancy counseling", - "short": "Pregnancy", "long": "Pregnancy counseling", - "welcome": "Welcome to online consulting", - "registrationDropdown": "Pregnancy counseling" - }, - "anonymous": { - "title": "Anonymous and free of charge" + "registrationDropdown": "Pregnancy counseling", + "short": "Pregnancy", + "welcome": "Welcome to online consulting" }, "welcomeScreen": { "anonymous": { @@ -116,15 +116,15 @@ } }, "3": { + "anonymous": { + "title": "Anonymous and free of charge" + }, "titles": { "default": "Parents and families", - "short": "Parents Family", "long": "Consulting for parents and families", - "welcome": "Welcome to online consulting", - "registrationDropdown": "Parents and families" - }, - "anonymous": { - "title": "Anonymous and free of charge" + "registrationDropdown": "Parents and families", + "short": "Parents Family", + "welcome": "Welcome to online consulting" }, "welcomeScreen": { "anonymous": { @@ -133,15 +133,15 @@ } }, "4": { + "anonymous": { + "title": "Anonymous and free of charge" + }, "titles": { "default": "Cure Consultation", - "short": "Cure Consultation", "long": "Cure counseling for mothers and fathers", - "welcome": "Welcome to online consulting", - "registrationDropdown": "Cure Consultation" - }, - "anonymous": { - "title": "Anonymous and free of charge" + "registrationDropdown": "Cure Consultation", + "short": "Cure Consultation", + "welcome": "Welcome to online consulting" }, "welcomeScreen": { "anonymous": { @@ -150,15 +150,15 @@ } }, "5": { + "anonymous": { + "title": "Anonymous and free of charge" + }, "titles": { "default": "Debt consulting", - "short": "Debt", "long": "Debt consulting", - "welcome": "Welcome to online consulting", - "registrationDropdown": "Debt consulting" - }, - "anonymous": { - "title": "Anonymous and free of charge" + "registrationDropdown": "Debt consulting", + "short": "Debt", + "welcome": "Welcome to online consulting" }, "welcomeScreen": { "anonymous": { @@ -167,15 +167,15 @@ } }, "6": { + "anonymous": { + "title": "Anonymous and free of charge" + }, "titles": { "default": "Social consulting", - "short": "ASB", "long": "General social consulting", - "welcome": "Welcome to online consulting", - "registrationDropdown": "Social Counseling" - }, - "anonymous": { - "title": "Anonymous and free of charge" + "registrationDropdown": "Social Counseling", + "short": "ASB", + "welcome": "Welcome to online consulting" }, "welcomeScreen": { "anonymous": { @@ -184,15 +184,15 @@ } }, "7": { + "anonymous": { + "title": "Anonymous and free of charge" + }, "titles": { "default": "Life in old age", - "short": "old age", "long": "Life in old age", - "welcome": "Welcome to online consulting", - "registrationDropdown": "Life in old age" - }, - "anonymous": { - "title": "Anonymous and free of charge" + "registrationDropdown": "Life in old age", + "short": "old age", + "welcome": "Welcome to online consulting" }, "welcomeScreen": { "anonymous": { @@ -201,15 +201,15 @@ } }, "8": { + "anonymous": { + "title": "Anonymous and free of charge" + }, "titles": { "default": "impairment", - "short": "impairment", "long": "Living with disability and mental illness", - "welcome": "Welcome to online consulting", - "registrationDropdown": "Impairment" - }, - "anonymous": { - "title": "Anonymous and free of charge" + "registrationDropdown": "Impairment", + "short": "impairment", + "welcome": "Welcome to online consulting" }, "welcomeScreen": { "anonymous": { @@ -218,15 +218,15 @@ } }, "9": { + "anonymous": { + "title": "Anonymous and free of charge" + }, "titles": { "default": "Let's go - get started", - "short": "Let's go - Get started!", "long": "Let's go - Get started!", - "welcome": "Welcome to online consulting", - "registrationDropdown": "Let's go - Get started!" - }, - "anonymous": { - "title": "Anonymous and free of charge" + "registrationDropdown": "Let's go - Get started!", + "short": "Let's go - Get started!", + "welcome": "Welcome to online consulting" }, "welcomeScreen": { "anonymous": { @@ -235,15 +235,15 @@ } }, "10": { + "anonymous": { + "title": "Anonymous and free of charge" + }, "titles": { "default": "Legal care and precaution", - "short": "(legal) care", "long": "Legal care and precaution", - "welcome": "Welcome to online consulting", - "registrationDropdown": "Legal support and precaution" - }, - "anonymous": { - "title": "Anonymous and free of charge" + "registrationDropdown": "Legal support and precaution", + "short": "(legal) care", + "welcome": "Welcome to online consulting" }, "welcomeScreen": { "anonymous": { @@ -252,15 +252,15 @@ } }, "11": { + "anonymous": { + "title": "Anonymous and free of charge" + }, "titles": { "default": "Offender assistance", - "short": "Offender assistance", "long": "consulting for relatives of offenders", - "welcome": "Welcome to online consulting", - "registrationDropdown": "Offender assistance" - }, - "anonymous": { - "title": "Anonymous and free of charge" + "registrationDropdown": "Offender assistance", + "short": "Offender assistance", + "welcome": "Welcome to online consulting" }, "welcomeScreen": { "anonymous": { @@ -269,15 +269,15 @@ } }, "12": { + "anonymous": { + "title": "Anonymous and free of charge" + }, "titles": { "default": "HIV / AIDS", - "short": "HIV", "long": "HIV/AIDS consulting", - "welcome": "Welcome to online consulting", - "registrationDropdown": "HIV / AIDS" - }, - "anonymous": { - "title": "Anonymous and free of charge" + "registrationDropdown": "HIV / AIDS", + "short": "HIV", + "welcome": "Welcome to online consulting" }, "welcomeScreen": { "anonymous": { @@ -286,15 +286,15 @@ } }, "13": { + "anonymous": { + "title": "Anonymous and free of charge" + }, "titles": { "default": "Children's rehab", - "short": "Children's rehab", "long": "Child and adolescent rehab", - "welcome": "Welcome to online consulting", - "registrationDropdown": "Children's rehab" - }, - "anonymous": { - "title": "Anonymous and free of charge" + "registrationDropdown": "Children's rehab", + "short": "Children's rehab", + "welcome": "Welcome to online consulting" }, "welcomeScreen": { "anonymous": { @@ -303,15 +303,15 @@ } }, "14": { + "anonymous": { + "title": "Anonymous and free of charge" + }, "titles": { "default": "Children Adolescents", - "short": "Children Adolescents", "long": "Consulting for children and adolescents", - "welcome": "Welcome to online consulting", - "registrationDropdown": "Children Adolescents" - }, - "anonymous": { - "title": "Anonymous and free of charge" + "registrationDropdown": "Children Adolescents", + "short": "Children Adolescents", + "welcome": "Welcome to online consulting" }, "welcomeScreen": { "anonymous": { @@ -320,20 +320,20 @@ } }, "15": { - "titles": { - "default": "Addiction", - "short": "Addiction", - "long": "Addiction self-help - Kreuzbund chat", - "welcome": "Welcome to online consulting", - "registrationDropdown": "Sucht-Selbsthilfe - Kreuzbund" + "anonymous": { + "title": "Anonymous and free of charge" }, "groupChatRules": { "0": "In addiction self-help we are on first name terms, both in the groups on site and here in the chat. Anyone who has problems with this, let us know in the chat - we'll be happy to adjust!", "1": "People are different, so are their opinions. Paying attention to each other as well as appreciative chat contributions guarantee a helping togetherness.", "2": "Moderators have the task of ensuring that chat participants can exchange ideas. If necessary, they also offer addiction topics for discussion. Their requests are to be followed, for example if chat rules are not followed." }, - "anonymous": { - "title": "Anonymous and free of charge" + "titles": { + "default": "Addiction", + "long": "Addiction self-help - Kreuzbund chat", + "registrationDropdown": "Sucht-Selbsthilfe - Kreuzbund", + "short": "Addiction", + "welcome": "Welcome to online consulting" }, "welcomeScreen": { "anonymous": { @@ -342,15 +342,15 @@ } }, "16": { + "anonymous": { + "title": "Anonymous and free of charge" + }, "titles": { "default": "Migration consulting", - "short": "Migration consulting", "long": "migration consulting", - "welcome": "Welcome to online consulting", - "registrationDropdown": "Migration consulting" - }, - "anonymous": { - "title": "Anonymous and free of charge" + "registrationDropdown": "Migration consulting", + "short": "Migration consulting", + "welcome": "Welcome to online consulting" }, "welcomeScreen": { "anonymous": { @@ -359,15 +359,15 @@ } }, "17": { + "anonymous": { + "title": "Anonymous" + }, "titles": { "default": "Emigration", - "short": "Emigration", "long": "Emigration/Return & Onward Migration", - "welcome": "Welcome to online consulting", - "registrationDropdown": "Emigration" - }, - "anonymous": { - "title": "Anonymous" + "registrationDropdown": "Emigration", + "short": "Emigration", + "welcome": "Welcome to online consulting" }, "welcomeScreen": { "anonymous": { @@ -376,15 +376,15 @@ } }, "18": { + "anonymous": { + "title": "Anonymous and free of charge" + }, "titles": { "default": "Hospice-Palliative-Mourning", - "short": "Hospice-Palliative", "long": "Hospice, palliative and bereavement consulting", - "welcome": "Welcome to online consulting", - "registrationDropdown": "Hospice palliative grief" - }, - "anonymous": { - "title": "Anonymous and free of charge" + "registrationDropdown": "Hospice palliative grief", + "short": "Hospice-Palliative", + "welcome": "Welcome to online consulting" }, "welcomeScreen": { "anonymous": { @@ -393,15 +393,15 @@ } }, "19": { + "anonymous": { + "title": "Anonymous and free of charge" + }, "titles": { "default": "Regional offers", - "short": "Regional offerings", "long": "Regional offerings", - "welcome": "Welcome to online consulting", - "registrationDropdown": "Regional Offers" - }, - "anonymous": { - "title": "Anonymous and free of charge" + "registrationDropdown": "Regional Offers", + "short": "Regional offerings", + "welcome": "Welcome to online consulting" }, "welcomeScreen": { "anonymous": { @@ -410,15 +410,15 @@ } }, "20": { + "anonymous": { + "title": "Anonymous and free of charge" + }, "titles": { "default": "Boys and men", - "short": "Boys and men", "long": "Boys and men consulting", - "welcome": "Welcome to online consulting", - "registrationDropdown": "Boys and men" - }, - "anonymous": { - "title": "Anonymous and free of charge" + "registrationDropdown": "Boys and men", + "short": "Boys and men", + "welcome": "Welcome to online consulting" }, "welcomeScreen": { "anonymous": { @@ -427,49 +427,30 @@ } }, "21": { - "titles": { - "default": "Self-help Vechta", - "short": "Self-help", - "long": "Contact and advice center self-help", - "welcome": "Welcome to online consulting", - "registrationDropdown": "Selbsthilfe Vechta" - }, "anonymous": { "title": "Anonymous and free of charge" }, - "welcomeScreen": { - "anonymous": { - "text": "You remain anonymous and receive free advice and help" - } - }, "groupChatRules": { "0": "In self-help we are on a first name basis, both in the groups on site and here in the chat. Anyone who has problems with this, let us know in the chat - we'll be happy to adjust!", "1": "People are different, so are their opinions. Paying attention to each other as well as appreciative chat contributions guarantee a helping togetherness.", "2": "Moderators have the task of ensuring that chat users can exchange ideas. Their requests have to be followed, for example if chat rules are not followed." - } - }, - "22": { - "titles": { - "default": "#togethertogether", - "short": "#gse", - "long": "#togetherasone - online consulting for young people in special times", - "welcome": "Welcome to online consulting", - "registrationDropdown": "#gemeinsamstatteinsam" }, - "anonymous": { - "title": "Anonymous and free of charge" + "titles": { + "default": "Self-help Vechta", + "long": "Contact and advice center self-help", + "registrationDropdown": "Selbsthilfe Vechta", + "short": "Self-help", + "welcome": "Welcome to online consulting" }, "welcomeScreen": { "anonymous": { "text": "You remain anonymous and receive free advice and help" } - }, - "voluntaryComponents": { - "gender": { - "female": "Female", - "male": "Male", - "diverseGender": "Divers" - } + } + }, + "22": { + "anonymous": { + "title": "Anonymous and free of charge" }, "requiredComponents": { "age": { @@ -481,6 +462,25 @@ "55": "25", "56": "26" } + }, + "titles": { + "default": "#togethertogether", + "long": "#togetherasone - online consulting for young people in special times", + "registrationDropdown": "#gemeinsamstatteinsam", + "short": "#gse", + "welcome": "Welcome to online consulting" + }, + "voluntaryComponents": { + "gender": { + "diverseGender": "Divers", + "female": "Female", + "male": "Male" + } + }, + "welcomeScreen": { + "anonymous": { + "text": "You remain anonymous and receive free advice and help" + } } } } diff --git a/src/resources/scripts/config.ts b/src/resources/scripts/config.ts index 8b5362cbc..f74f17767 100644 --- a/src/resources/scripts/config.ts +++ b/src/resources/scripts/config.ts @@ -1,8 +1,6 @@ import deAgency from '../i18n/de/agency.json'; import deConsultingTypes from '../i18n/de/consultingTypes.json'; -import enLanguages from '../i18n/en/languages.json'; -import enCommon from '../i18n/en/common.json'; -import { AppConfigInterface } from '../../globalState/interfaces/AppConfig/AppConfigInterface'; +import { AppConfigInterface } from '../../globalState/interfaces'; import { OVERLAY_RELEASE_NOTE, OVERLAY_TWO_FACTOR_NAG @@ -302,12 +300,7 @@ export const config: AppConfigInterface = { 'zu' ], i18n: { - supportedLngs: ['en', 'de@informal', 'de'], preload: ['de', 'de@informal'], - fallbackLng: { - 'en': ['de'], - 'en@informal': ['en', 'de@informal', 'de'] - }, resources: { de: { consultingTypes: { @@ -315,20 +308,15 @@ export const config: AppConfigInterface = { }, agencies: { ...deAgency - }, - languages: { - en: '(EN) Englisch' - } - }, - en: { - common: { - ...enCommon - }, - languages: { - ...enLanguages } } } + }, + user: { + profile: { + visibleOnEnquiry: (sessionUserData) => + Object.entries(sessionUserData).length !== 0 + } } }; diff --git a/src/utils/appConfig.ts b/src/utils/appConfig.ts index 303bc90c6..2b4766442 100644 --- a/src/utils/appConfig.ts +++ b/src/utils/appConfig.ts @@ -1,4 +1,4 @@ -import { AppConfigInterface } from '../globalState'; +import { AppConfigInterface } from '../globalState/interfaces'; // Make app config available globally to be used on other files that are just js context export let appConfig: AppConfigInterface = null; diff --git a/src/utils/tenantSettingsHelper.ts b/src/utils/tenantSettingsHelper.ts index b46938572..89df8a3a4 100644 --- a/src/utils/tenantSettingsHelper.ts +++ b/src/utils/tenantSettingsHelper.ts @@ -1,4 +1,4 @@ -import { TenantDataSettingsInterface } from '../globalState/interfaces/TenantDataInterface'; +import { TenantDataSettingsInterface } from '../globalState/interfaces'; // Make tenant available globally to be used on other files that are just js context const tenantSettings: Partial = {}; diff --git a/src/utils/transformBookingData.ts b/src/utils/transformBookingData.ts index b921b7a47..f44ba33da 100644 --- a/src/utils/transformBookingData.ts +++ b/src/utils/transformBookingData.ts @@ -1,7 +1,7 @@ import { BookingEventUiInterface, BookingEventsInterface -} from '../globalState/interfaces/BookingsInterface'; +} from '../globalState/interfaces'; import { addMissingZero, convertUTCDateToLocalDate } from './dateHelpers'; export const transformBookingData = (bookings: BookingEventsInterface[]) => { diff --git a/src/utils/useTenantTheming.ts b/src/utils/useTenantTheming.ts index a9ba0d8b1..29abe887b 100644 --- a/src/utils/useTenantTheming.ts +++ b/src/utils/useTenantTheming.ts @@ -1,7 +1,7 @@ import { useCallback, useContext, useEffect, useState } from 'react'; import { apiGetTenantTheming } from '../api/apiGetTenantTheming'; import { TenantContext, useLocaleData } from '../globalState'; -import { TenantDataInterface } from '../globalState/interfaces/TenantDataInterface'; +import { TenantDataInterface } from '../globalState/interfaces'; import getLocationVariables from './getLocationVariables'; import decodeHTML from './decodeHTML'; import contrast from 'get-contrast'; diff --git a/src/utils/useTyping.ts b/src/utils/useTyping.ts index bd22f525e..5a73c45e5 100644 --- a/src/utils/useTyping.ts +++ b/src/utils/useTyping.ts @@ -13,7 +13,7 @@ import { METHOD_STREAM_NOTIFY_ROOM, SUB_STREAM_NOTIFY_ROOM } from '../components/app/RocketChat'; -import { RocketChatContext } from '../globalState/provider/RocketChatProvider'; +import { RocketChatContext } from '../globalState'; import useUpdatingRef from '../hooks/useUpdatingRef'; const TYPING_TIMEOUT_MS = 4000; diff --git a/src/utils/useUrlParamsLoader.tsx b/src/utils/useUrlParamsLoader.tsx index 1cb38401f..830420cdc 100644 --- a/src/utils/useUrlParamsLoader.tsx +++ b/src/utils/useUrlParamsLoader.tsx @@ -1,16 +1,16 @@ import { useState, useEffect, useContext } from 'react'; import { useParams } from 'react-router-dom'; import { getUrlParameter } from './getUrlParameter'; +import { LocaleContext } from '../globalState'; import { AgencyDataInterface, ConsultantDataInterface, ConsultingTypeInterface -} from '../globalState'; -import { LocaleContext } from '../globalState/context/LocaleContext'; +} from '../globalState/interfaces'; import { apiGetAgencyById, apiGetConsultingType } from '../api'; import { apiGetConsultant } from '../api/apiGetConsultant'; import { isNumber } from './isNumber'; -import { TopicsDataInterface } from '../globalState/interfaces/TopicsDataInterface'; +import { TopicsDataInterface } from '../globalState/interfaces'; import { apiGetTopicById } from '../api/apiGetTopicId'; import { useAppConfig } from '../hooks/useAppConfig'; import { isString } from 'lodash'; diff --git a/src/utils/videoCallHelpers.ts b/src/utils/videoCallHelpers.ts index da9896a80..5daa327d2 100644 --- a/src/utils/videoCallHelpers.ts +++ b/src/utils/videoCallHelpers.ts @@ -1,10 +1,9 @@ import { getValueFromCookie } from '../components/sessionCookie/accessSessionCookie'; +import { hasUserAuthority, AUTHORITIES } from '../globalState'; import { - hasUserAuthority, - AUTHORITIES, ConsultingTypeBasicInterface, UserDataInterface -} from '../globalState'; +} from '../globalState/interfaces'; import { appConfig } from './appConfig'; export const currentUserWasVideoCallInitiator = (initiatorRcUserId: string) =>