diff --git a/client/src/components/dueDates/DateEmbedding.vue b/client/src/components/dueDates/DateEmbedding.vue new file mode 100644 index 00000000..e8d494ca --- /dev/null +++ b/client/src/components/dueDates/DateEmbedding.vue @@ -0,0 +1,15 @@ + + + diff --git a/client/src/components/dueDates/DueDateSingle.vue b/client/src/components/dueDates/DueDateSingle.vue new file mode 100644 index 00000000..272b3d49 --- /dev/null +++ b/client/src/components/dueDates/DueDateSingle.vue @@ -0,0 +1,26 @@ + + + diff --git a/client/src/components/dueDates/DueDatesList.vue b/client/src/components/dueDates/DueDatesList.vue new file mode 100644 index 00000000..35094f4f --- /dev/null +++ b/client/src/components/dueDates/DueDatesList.vue @@ -0,0 +1,39 @@ + + + diff --git a/client/src/components/dueDates/DueDatesShortList.vue b/client/src/components/dueDates/DueDatesShortList.vue new file mode 100644 index 00000000..752206e6 --- /dev/null +++ b/client/src/components/dueDates/DueDatesShortList.vue @@ -0,0 +1,22 @@ + + + diff --git a/client/src/components/dueDates/dueDatesTestData.ts b/client/src/components/dueDates/dueDatesTestData.ts new file mode 100644 index 00000000..fe14ff32 --- /dev/null +++ b/client/src/components/dueDates/dueDatesTestData.ts @@ -0,0 +1,60 @@ +import dayjs from "dayjs"; + +export const dueDatesTestData = () => { + return [ + { + id: 1, + start: dayjs("2023-06-14T15:00:00+02:00"), + end: dayjs("2023-06-14T18:00:00+02:00"), + title: "Präsenzkurs Kickoff", + url: "/course/überbetriebliche-kurse/learn/kickoff/präsenzkurs-kickoff", + course_session: 2, + page: 383, + }, + { + id: 2, + start: dayjs("2023-06-15T15:00:00+02:00"), + end: dayjs("2023-06-15T18:00:00+02:00"), + title: "Präsenzkurs Basis", + url: "/course/überbetriebliche-kurse/learn/basis/präsenzkurs-basis", + course_session: 2, + page: 397, + }, + { + id: 3, + start: dayjs("2023-06-16T15:00:00+02:00"), + end: dayjs("2023-06-16T18:00:00+02:00"), + title: "Präsenzkurs Fahrzeug", + url: "/course/überbetriebliche-kurse/learn/fahrzeug/präsenzkurs-fahrzeug", + course_session: 2, + page: 413, + }, + { + id: 4, + start: dayjs("2023-06-16T15:00:00+02:00"), + end: dayjs("2023-06-16T18:00:00+02:00"), + title: "Präsenzkurs Flugzeuge", + url: "/course/überbetriebliche-kurse/learn/fahrzeug/präsenzkurs-fahrzeug", + course_session: 2, + page: 413, + }, + { + id: 5, + start: dayjs("2023-07-16T11:00:00+02:00"), + end: dayjs("2023-07-16T18:00:00+02:00"), + title: "Präsenzkurs Motorräder", + url: "/course/überbetriebliche-kurse/learn/fahrzeug/präsenzkurs-fahrzeug", + course_session: 2, + page: 413, + }, + { + id: 6, + start: dayjs("2023-08-09T15:00:00+02:00"), + end: dayjs("2023-08-09T19:00:00+02:00"), + title: "Präsenzkurs Fahrräder", + url: "/course/überbetriebliche-kurse/learn/fahrzeug/präsenzkurs-fahrzeug", + course_session: 2, + page: 413, + }, + ]; +}; diff --git a/client/src/components/dueDates/dueDatesUtils.ts b/client/src/components/dueDates/dueDatesUtils.ts new file mode 100644 index 00000000..78734c49 --- /dev/null +++ b/client/src/components/dueDates/dueDatesUtils.ts @@ -0,0 +1,51 @@ +import type { Dayjs } from "dayjs"; + +export const formatDate = (start: Dayjs, end: Dayjs) => { + const startDateString = getDateString(start); + const endDateString = getDateString(end); + + // if start isundefined, dont show the day twice + + if (!start.isValid() && !end.isValid()) { + return "Termin nicht festgelegt"; + } + + if (!start || (!start.isValid() && end.isValid())) { + return `${endDateString} ${getTimeString(end)} ${end.format("[Uhr]")}`; + } + if (!end || (!end.isValid() && start.isValid())) { + return `${startDateString} ${getTimeString(start)} ${start.format("[Uhr]")}`; + } + + // if start and end are on the same day, dont show the day twice + if (startDateString === endDateString) { + return `${startDateString} ${getTimeString(start)} - ${getTimeString( + end + )} ${end.format("[Uhr]")}`; + } + + return `${startDateString} ${getTimeString(start)} - ${endDateString} ${getTimeString( + end + )}`; +}; + +export const getTimeString = (date?: Dayjs) => { + if (date) { + return `${date.format("H:mm")}`; + } + return ""; +}; + +export const getDateString = (date?: Dayjs) => { + if (date) { + return `${date.format("D. MMMM YYYY")}`; + } + return ""; +}; + +export const getWeekday = (date: Dayjs) => { + if (date) { + return `${date.format("dd")}`; + } + return ""; +}; diff --git a/client/src/gql/fragment-masking.ts b/client/src/gql/fragment-masking.ts index a94b5c77..c000279a 100644 --- a/client/src/gql/fragment-masking.ts +++ b/client/src/gql/fragment-masking.ts @@ -1,11 +1,13 @@ -import type { ResultOf, TypedDocumentNode as DocumentNode, } from '@graphql-typed-document-node/core'; +import type { ResultOf, DocumentTypeDecoration, TypedDocumentNode } from '@graphql-typed-document-node/core'; +import type { FragmentDefinitionNode } from 'graphql'; +import type { Incremental } from './graphql'; -export type FragmentType> = TDocumentType extends DocumentNode< +export type FragmentType> = TDocumentType extends DocumentTypeDecoration< infer TType, any > - ? TType extends { ' $fragmentName'?: infer TKey } + ? [TType] extends [{ ' $fragmentName'?: infer TKey }] ? TKey extends string ? { ' $fragmentRefs'?: { [key in TKey]: TType } } : never @@ -14,35 +16,51 @@ export type FragmentType> = TDocume // return non-nullable if `fragmentType` is non-nullable export function useFragment( - _documentNode: DocumentNode, - fragmentType: FragmentType> + _documentNode: DocumentTypeDecoration, + fragmentType: FragmentType> ): TType; // return nullable if `fragmentType` is nullable export function useFragment( - _documentNode: DocumentNode, - fragmentType: FragmentType> | null | undefined + _documentNode: DocumentTypeDecoration, + fragmentType: FragmentType> | null | undefined ): TType | null | undefined; // return array of non-nullable if `fragmentType` is array of non-nullable export function useFragment( - _documentNode: DocumentNode, - fragmentType: ReadonlyArray>> + _documentNode: DocumentTypeDecoration, + fragmentType: ReadonlyArray>> ): ReadonlyArray; // return array of nullable if `fragmentType` is array of nullable export function useFragment( - _documentNode: DocumentNode, - fragmentType: ReadonlyArray>> | null | undefined + _documentNode: DocumentTypeDecoration, + fragmentType: ReadonlyArray>> | null | undefined ): ReadonlyArray | null | undefined; export function useFragment( - _documentNode: DocumentNode, - fragmentType: FragmentType> | ReadonlyArray>> | null | undefined + _documentNode: DocumentTypeDecoration, + fragmentType: FragmentType> | ReadonlyArray>> | null | undefined ): TType | ReadonlyArray | null | undefined { return fragmentType as any; } export function makeFragmentData< - F extends DocumentNode, + F extends DocumentTypeDecoration, FT extends ResultOf >(data: FT, _fragment: F): FragmentType { return data as FragmentType; -} \ No newline at end of file +} +export function isFragmentReady( + queryNode: DocumentTypeDecoration, + fragmentNode: TypedDocumentNode, + data: FragmentType, any>> | null | undefined +): data is FragmentType { + const deferredFields = (queryNode as { __meta__?: { deferredFields: Record } }).__meta__ + ?.deferredFields; + + if (!deferredFields) return true; + + const fragDef = fragmentNode.definitions[0] as FragmentDefinitionNode | undefined; + const fragName = fragDef?.name?.value; + + const fields = (fragName && deferredFields[fragName]) || []; + return fields.length > 0 && fields.every(field => data && field in data); +} diff --git a/client/src/gql/gql.ts b/client/src/gql/gql.ts index f47da5f3..c0a9d025 100644 --- a/client/src/gql/gql.ts +++ b/client/src/gql/gql.ts @@ -10,7 +10,7 @@ import type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document- * 2. It is not minifiable, so the string of a GraphQL query will be multiple times inside the bundle. * 3. It does not support dead code elimination, so it will add unused operations. * - * Therefore it is highly recommended to use the babel-plugin for production. + * Therefore it is highly recommended to use the babel or swc plugin for production. */ const documents = { "\n mutation SendFeedbackMutation($input: SendFeedbackInput!) {\n send_feedback(input: $input) {\n feedback_response {\n id\n }\n errors {\n field\n messages\n }\n }\n }\n": types.SendFeedbackMutationDocument, @@ -25,7 +25,7 @@ const documents = { * * @example * ```ts - * const query = gql(`query GetUser($id: ID!) { user(id: $id) { name } }`); + * const query = graphql(`query GetUser($id: ID!) { user(id: $id) { name } }`); * ``` * * The query argument is unknown! diff --git a/client/src/gql/graphql.ts b/client/src/gql/graphql.ts index 6f9da652..158e17c7 100644 --- a/client/src/gql/graphql.ts +++ b/client/src/gql/graphql.ts @@ -5,33 +5,35 @@ export type InputMaybe = Maybe; export type Exact = { [K in keyof T]: T[K] }; export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; +export type MakeEmpty = { [_ in K]?: never }; +export type Incremental = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never }; /** All built-in and custom scalars, mapped to their actual values */ export type Scalars = { - ID: string; - String: string; - Boolean: boolean; - Int: number; - Float: number; + ID: { input: string; output: string; } + String: { input: string; output: string; } + Boolean: { input: boolean; output: boolean; } + Int: { input: number; output: number; } + Float: { input: number; output: number; } /** * The `DateTime` scalar type represents a DateTime * value as specified by * [iso8601](https://en.wikipedia.org/wiki/ISO_8601). */ - DateTime: any; + DateTime: { input: any; output: any; } /** * The `GenericScalar` scalar type represents a generic * GraphQL scalar value that could be: * String, Boolean, Int, Float, List or Object. */ - GenericScalar: any; - JSONStreamField: any; + GenericScalar: { input: any; output: any; } + JSONStreamField: { input: any; output: any; } /** * Allows use of a JSON String for input / output from the GraphQL schema. * * Use of this type is *not recommended* as you lose the benefits of having a defined, static * schema (one of the key benefits of GraphQL). */ - JSONString: any; + JSONString: { input: any; output: any; } }; /** An enumeration. */ @@ -61,19 +63,19 @@ export type AssignmentCompletionMutation = { export type AssignmentCompletionObjectType = { __typename?: 'AssignmentCompletionObjectType'; - additional_json_data: Scalars['JSONString']; + additional_json_data: Scalars['JSONString']['output']; assignment: AssignmentObjectType; assignment_user: UserType; - completion_data?: Maybe; + completion_data?: Maybe; completion_status: AssignmentAssignmentCompletionCompletionStatusChoices; - created_at: Scalars['DateTime']; - evaluation_grade?: Maybe; - evaluation_points?: Maybe; - evaluation_submitted_at?: Maybe; + created_at: Scalars['DateTime']['output']; + evaluation_grade?: Maybe; + evaluation_points?: Maybe; + evaluation_submitted_at?: Maybe; evaluation_user?: Maybe; - id: Scalars['ID']; - submitted_at?: Maybe; - updated_at: Scalars['DateTime']; + id: Scalars['ID']['output']; + submitted_at?: Maybe; + updated_at: Scalars['DateTime']['output']; }; /** An enumeration. */ @@ -86,24 +88,24 @@ export type AssignmentCompletionStatus = export type AssignmentObjectType = CoursePageInterface & { __typename?: 'AssignmentObjectType'; assignment_type: AssignmentAssignmentAssignmentTypeChoices; - content_type?: Maybe; + content_type?: Maybe; /** Zeitaufwand als Text */ - effort_required: Scalars['String']; + effort_required: Scalars['String']['output']; /** Beschreibung der Bewertung */ - evaluation_description: Scalars['String']; + evaluation_description: Scalars['String']['output']; /** URL zum Beurteilungsinstrument */ - evaluation_document_url: Scalars['String']; - evaluation_tasks?: Maybe; - frontend_url?: Maybe; - id?: Maybe; + evaluation_document_url: Scalars['String']['output']; + evaluation_tasks?: Maybe; + frontend_url?: Maybe; + id?: Maybe; /** Erläuterung der Ausgangslage */ - intro_text: Scalars['String']; - live?: Maybe; - performance_objectives?: Maybe; - slug?: Maybe; - tasks?: Maybe; - title?: Maybe; - translation_key?: Maybe; + intro_text: Scalars['String']['output']; + live?: Maybe; + performance_objectives?: Maybe; + slug?: Maybe; + tasks?: Maybe; + title?: Maybe; + translation_key?: Maybe; }; /** An enumeration. */ @@ -116,69 +118,69 @@ export type CoreUserLanguageChoices = | 'IT'; export type CoursePageInterface = { - content_type?: Maybe; - frontend_url?: Maybe; - id?: Maybe; - live?: Maybe; - slug?: Maybe; - title?: Maybe; - translation_key?: Maybe; + content_type?: Maybe; + frontend_url?: Maybe; + id?: Maybe; + live?: Maybe; + slug?: Maybe; + title?: Maybe; + translation_key?: Maybe; }; export type CourseType = { __typename?: 'CourseType'; - category_name: Scalars['String']; - id: Scalars['ID']; + category_name: Scalars['String']['output']; + id: Scalars['ID']['output']; learning_path?: Maybe; - slug: Scalars['String']; - title: Scalars['String']; + slug: Scalars['String']['output']; + title: Scalars['String']['output']; }; export type ErrorType = { __typename?: 'ErrorType'; - field: Scalars['String']; - messages: Array; + field: Scalars['String']['output']; + messages: Array; }; export type FeedbackResponse = Node & { __typename?: 'FeedbackResponse'; - created_at: Scalars['DateTime']; - data?: Maybe; + created_at: Scalars['DateTime']['output']; + data?: Maybe; /** The ID of the object */ - id: Scalars['ID']; + id: Scalars['ID']['output']; }; export type LearningPathType = CoursePageInterface & { __typename?: 'LearningPathType'; - content_type?: Maybe; - depth: Scalars['Int']; - draft_title: Scalars['String']; - expire_at?: Maybe; - expired: Scalars['Boolean']; - first_published_at?: Maybe; - frontend_url?: Maybe; - go_live_at?: Maybe; - has_unpublished_changes: Scalars['Boolean']; - id?: Maybe; - last_published_at?: Maybe; - latest_revision_created_at?: Maybe; - live?: Maybe; - locked: Scalars['Boolean']; - locked_at?: Maybe; + content_type?: Maybe; + depth: Scalars['Int']['output']; + draft_title: Scalars['String']['output']; + expire_at?: Maybe; + expired: Scalars['Boolean']['output']; + first_published_at?: Maybe; + frontend_url?: Maybe; + go_live_at?: Maybe; + has_unpublished_changes: Scalars['Boolean']['output']; + id?: Maybe; + last_published_at?: Maybe; + latest_revision_created_at?: Maybe; + live?: Maybe; + locked: Scalars['Boolean']['output']; + locked_at?: Maybe; locked_by?: Maybe; - numchild: Scalars['Int']; + numchild: Scalars['Int']['output']; owner?: Maybe; - path: Scalars['String']; + path: Scalars['String']['output']; /** Die informative Beschreibung, dargestellt in Suchmaschinen-Ergebnissen unter der Überschrift. */ - search_description: Scalars['String']; + search_description: Scalars['String']['output']; /** Der Titel der Seite, dargestellt in Suchmaschinen-Ergebnissen als die verlinkte Überschrift. */ - seo_title: Scalars['String']; + seo_title: Scalars['String']['output']; /** Ob ein Link zu dieser Seite in automatisch generierten Menüs auftaucht. */ - show_in_menus: Scalars['Boolean']; - slug?: Maybe; - title?: Maybe; - translation_key?: Maybe; - url_path: Scalars['String']; + show_in_menus: Scalars['Boolean']['output']; + slug?: Maybe; + title?: Maybe; + translation_key?: Maybe; + url_path: Scalars['String']['output']; }; export type Mutation = { @@ -194,19 +196,19 @@ export type MutationSendFeedbackArgs = { export type MutationUpsertAssignmentCompletionArgs = { - assignment_id: Scalars['ID']; - assignment_user_id?: InputMaybe; - completion_data_string?: InputMaybe; + assignment_id: Scalars['ID']['input']; + assignment_user_id?: InputMaybe; + completion_data_string?: InputMaybe; completion_status?: InputMaybe; - course_session_id: Scalars['ID']; - evaluation_grade?: InputMaybe; - evaluation_points?: InputMaybe; + course_session_id: Scalars['ID']['input']; + evaluation_grade?: InputMaybe; + evaluation_points?: InputMaybe; }; /** An object with an ID */ export type Node = { /** The ID of the object */ - id: Scalars['ID']; + id: Scalars['ID']['output']; }; export type Query = { @@ -218,32 +220,32 @@ export type Query = { export type QueryAssignmentArgs = { - id?: InputMaybe; - slug?: InputMaybe; + id?: InputMaybe; + slug?: InputMaybe; }; export type QueryAssignmentCompletionArgs = { - assignment_id: Scalars['ID']; - assignment_user_id?: InputMaybe; - course_session_id: Scalars['ID']; + assignment_id: Scalars['ID']['input']; + assignment_user_id?: InputMaybe; + course_session_id: Scalars['ID']['input']; }; export type QueryCourseArgs = { - id?: InputMaybe; + id?: InputMaybe; }; export type SendFeedbackInput = { - clientMutationId?: InputMaybe; - course_session: Scalars['Int']; - data?: InputMaybe; - page: Scalars['String']; + clientMutationId?: InputMaybe; + course_session: Scalars['Int']['input']; + data?: InputMaybe; + page: Scalars['String']['input']; }; export type SendFeedbackPayload = { __typename?: 'SendFeedbackPayload'; - clientMutationId?: Maybe; + clientMutationId?: Maybe; /** May contain more than one error for same field. */ errors?: Maybe>>; feedback_response?: Maybe; @@ -251,14 +253,14 @@ export type SendFeedbackPayload = { export type UserType = { __typename?: 'UserType'; - avatar_url: Scalars['String']; - email: Scalars['String']; - first_name: Scalars['String']; - id: Scalars['ID']; + avatar_url: Scalars['String']['output']; + email: Scalars['String']['output']; + first_name: Scalars['String']['output']; + id: Scalars['ID']['output']; language: CoreUserLanguageChoices; - last_name: Scalars['String']; + last_name: Scalars['String']['output']; /** Erforderlich. 150 Zeichen oder weniger. Nur Buchstaben, Ziffern und @/./+/-/_. */ - username: Scalars['String']; + username: Scalars['String']['output']; }; export type SendFeedbackMutationMutationVariables = Exact<{ @@ -269,29 +271,29 @@ export type SendFeedbackMutationMutationVariables = Exact<{ export type SendFeedbackMutationMutation = { __typename?: 'Mutation', send_feedback?: { __typename?: 'SendFeedbackPayload', feedback_response?: { __typename?: 'FeedbackResponse', id: string } | null, errors?: Array<{ __typename?: 'ErrorType', field: string, messages: Array } | null> | null } | null }; export type UpsertAssignmentCompletionMutationVariables = Exact<{ - assignmentId: Scalars['ID']; - courseSessionId: Scalars['ID']; - assignmentUserId?: InputMaybe; + assignmentId: Scalars['ID']['input']; + courseSessionId: Scalars['ID']['input']; + assignmentUserId?: InputMaybe; completionStatus: AssignmentCompletionStatus; - completionDataString: Scalars['String']; - evaluationGrade?: InputMaybe; - evaluationPoints?: InputMaybe; + completionDataString: Scalars['String']['input']; + evaluationGrade?: InputMaybe; + evaluationPoints?: InputMaybe; }>; export type UpsertAssignmentCompletionMutation = { __typename?: 'Mutation', upsert_assignment_completion?: { __typename?: 'AssignmentCompletionMutation', assignment_completion?: { __typename?: 'AssignmentCompletionObjectType', id: string, completion_status: AssignmentAssignmentCompletionCompletionStatusChoices, submitted_at?: any | null, evaluation_submitted_at?: any | null, evaluation_grade?: number | null, evaluation_points?: number | null, completion_data?: any | null } | null } | null }; export type AssignmentCompletionQueryQueryVariables = Exact<{ - assignmentId: Scalars['ID']; - courseSessionId: Scalars['ID']; - assignmentUserId?: InputMaybe; + assignmentId: Scalars['ID']['input']; + courseSessionId: Scalars['ID']['input']; + assignmentUserId?: InputMaybe; }>; export type AssignmentCompletionQueryQuery = { __typename?: 'Query', assignment?: { __typename?: 'AssignmentObjectType', assignment_type: AssignmentAssignmentAssignmentTypeChoices, content_type?: string | null, effort_required: string, evaluation_description: string, evaluation_document_url: string, evaluation_tasks?: any | null, id?: string | null, intro_text: string, performance_objectives?: any | null, slug?: string | null, tasks?: any | null, title?: string | null, translation_key?: string | null } | null, assignment_completion?: { __typename?: 'AssignmentCompletionObjectType', id: string, completion_status: AssignmentAssignmentCompletionCompletionStatusChoices, submitted_at?: any | null, evaluation_submitted_at?: any | null, evaluation_grade?: number | null, evaluation_points?: number | null, completion_data?: any | null, evaluation_user?: { __typename?: 'UserType', id: string } | null, assignment_user: { __typename?: 'UserType', id: string } } | null }; export type CourseQueryQueryVariables = Exact<{ - courseId: Scalars['Int']; + courseId: Scalars['Int']['input']; }>; diff --git a/client/src/locales/de/translation.json b/client/src/locales/de/translation.json index ad9eb840..e391e89d 100644 --- a/client/src/locales/de/translation.json +++ b/client/src/locales/de/translation.json @@ -11,9 +11,9 @@ "assignmentSubmitted": "Du hast deine Ergebnisse erfolgreich abgegeben.", "confirmSubmitPerson": "Hiermit bestätige ich, dass die folgende Person meine Ergebnisse bewerten soll.", "confirmSubmitResults": "Hiermit bestätige ich, dass ich die Zusammenfassung meiner Ergebnisse überprüft habe und so abgeben will.", - "dueDateIntroduction": "Reiche deine Ergebnisse pünktlich ein bis am {{date}} um {{time}} Uhr ein.", + "dueDateIntroduction": "Reiche deine Ergebnisse pünktlich ein bis am: ", "dueDateNotSet": "Keine Abgabedaten wurden erfasst für diese Durchführung", - "dueDateSubmission": "Einreichungstermin: {{date}}", + "dueDateSubmission": "Einreichungstermin:", "dueDateTitle": "Abgabetermin", "edit": "Bearbeiten", "effortTitle": "Zeitaufwand", @@ -85,11 +85,14 @@ }, "dashboard": { "courses": "Lehrgang", + "dueDatesTitle": "Termine", "nocourses": "Du wurdest noch keinem Lehrgang zugewiesen.", "welcome": "Willkommen, {{name}}" }, "dueDates": { - "nextDueDates": "Nächste Termine" + "nextDueDates": "Nächste Termine", + "noDueDatesAvailable": "Keine Termine vorhanden", + "showAllDueDates": "Alle Termine anzeigen" }, "feedback": { "answers": "Antworten", @@ -185,6 +188,7 @@ "learningPathPage": { "currentCircle": "Aktueller Circle", "listView": "Listenansicht", + "nextDueDates": "Nächste Termine", "nextStep": "Nächster Schritt", "pathView": "Pfadansicht", "progressText": "Du hast {{ inProgressCount }} von {{ allCount }} Circles bearbeitet", diff --git a/client/src/locales/fr/translation.json b/client/src/locales/fr/translation.json index df0983bf..ce39c427 100644 --- a/client/src/locales/fr/translation.json +++ b/client/src/locales/fr/translation.json @@ -11,9 +11,9 @@ "assignmentSubmitted": "Tes résultats ont bien été transmis.", "confirmSubmitPerson": "Par la présente, je confirme que la personne suivante doit évaluer mes résultats.", "confirmSubmitResults": "Par la présente, je confirme que j’ai vérifié la synthèse de mes résultats et que je souhaite la remettre telle quelle.", - "dueDateIntroduction": "Envoie tes résultats dans les délais avant le {{date}} à {{time}} heures.", + "dueDateIntroduction": "Envoie tes résultats dans les délais avant le:", "dueDateNotSet": "Aucune date de remise n’a été spécifiée pour cette opération.", - "dueDateSubmission": "Date de clôture : {{date}}", + "dueDateSubmission": "Date de clôture: ", "dueDateTitle": "Date de remise", "edit": "Traiter", "effortTitle": "Temps nécessaire", diff --git a/client/src/locales/it/translation.json b/client/src/locales/it/translation.json index b1dd568b..8948cffc 100644 --- a/client/src/locales/it/translation.json +++ b/client/src/locales/it/translation.json @@ -11,9 +11,9 @@ "assignmentSubmitted": "I tuoi risultati sono stati consegnati con successo.", "confirmSubmitPerson": "Confermo che i miei risultati dovranno essere valutati dalla seguente persona.", "confirmSubmitResults": "Confermo di aver controllato il riepilogo dei miei risultati e di volerli consegnare.", - "dueDateIntroduction": "Presenta i tuoi risultati entro il {{date}} alle {{time}}.", + "dueDateIntroduction": "Presenta i tuoi risultati entro il:", "dueDateNotSet": "Non sono stati registrati dati di consegna per questo svolgimento", - "dueDateSubmission": "Termine di presentazione: {{date}}", + "dueDateSubmission": "Termine di presentazione: ", "dueDateTitle": "Termine di consegna", "edit": "Modificare", "effortTitle": "Tempo richiesto", diff --git a/client/src/pages/DashboardPage.vue b/client/src/pages/DashboardPage.vue index 44c3c8b5..78893e11 100644 --- a/client/src/pages/DashboardPage.vue +++ b/client/src/pages/DashboardPage.vue @@ -1,4 +1,5 @@ @@ -37,12 +43,8 @@ const step = useRouteQuery("step");

{{ $t("assignment.dueDateTitle") }}

- {{ - $t("assignment.dueDateIntroduction", { - date: dueDate!.format("DD.MM.YYYY"), - time: dueDate!.format("HH:mm"), - }) - }} + {{ $t("assignment.dueDateIntroduction") }} +

{{ $t("assignment.dueDateNotSet") }} diff --git a/client/src/pages/learningPath/learningContentPage/assignment/AssignmentSubmissionView.vue b/client/src/pages/learningPath/learningContentPage/assignment/AssignmentSubmissionView.vue index 4479691b..8fc5178d 100644 --- a/client/src/pages/learningPath/learningContentPage/assignment/AssignmentSubmissionView.vue +++ b/client/src/pages/learningPath/learningContentPage/assignment/AssignmentSubmissionView.vue @@ -1,4 +1,5 @@ diff --git a/client/src/pages/learningPath/learningPathPage/LearningPathAppointmentsMock.vue b/client/src/pages/learningPath/learningPathPage/LearningPathAppointmentsMock.vue deleted file mode 100644 index b0816122..00000000 --- a/client/src/pages/learningPath/learningPathPage/LearningPathAppointmentsMock.vue +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/client/src/pages/learningPath/learningPathPage/LearningPathCircle.vue b/client/src/pages/learningPath/learningPathPage/LearningPathCircle.vue index e5e39c4d..12f31916 100644 --- a/client/src/pages/learningPath/learningPathPage/LearningPathCircle.vue +++ b/client/src/pages/learningPath/learningPathPage/LearningPathCircle.vue @@ -1,6 +1,5 @@