diff --git a/.vscode/settings.json b/.vscode/settings.json index 3a0685d..55dcddb 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,6 +10,9 @@ "[typescript]": { "editor.defaultFormatter": "vscode.typescript-language-features" }, + "[typescriptreact]": { + "editor.defaultFormatter": "vscode.typescript-language-features" + }, "[jsonc]": { "editor.defaultFormatter": "vscode.json-language-features" }, diff --git a/ui/src/graphql.ts b/ui/src/graphql.ts index 9da9496..264d42e 100644 --- a/ui/src/graphql.ts +++ b/ui/src/graphql.ts @@ -410,14 +410,14 @@ export type DeletePictureMutationVariables = Exact<{ export type DeletePictureMutation = { __typename?: 'Mutation', manuscript?: { __typename?: 'ManuscriptMutations', deletePicture: boolean } | null }; -export type TransliterationInputDataFragment = { __typename?: 'ManuscriptMetaData', provisionalTransliteration?: string | null, creatorUsername: string, creationDate: string, mainIdentifier: { __typename?: 'ManuscriptIdentifier', identifierType: ManuscriptIdentifierType } }; +export type TransliterationInputDataFragment = { __typename?: 'ManuscriptMetaData', provisionalTransliteration?: string | null, creatorUsername: string, creationDate: string, lang: ManuscriptLanguageAbbreviations, mainIdentifier: { __typename?: 'ManuscriptIdentifier', identifierType: ManuscriptIdentifierType } }; export type TransliterationInputQueryVariables = Exact<{ mainIdentifier: Scalars['String']['input']; }>; -export type TransliterationInputQuery = { __typename?: 'Query', manuscript?: { __typename?: 'ManuscriptMetaData', status: ManuscriptStatus, provisionalTransliteration?: string | null, creatorUsername: string, creationDate: string, mainIdentifier: { __typename?: 'ManuscriptIdentifier', identifierType: ManuscriptIdentifierType } } | null }; +export type TransliterationInputQuery = { __typename?: 'Query', manuscript?: { __typename?: 'ManuscriptMetaData', status: ManuscriptStatus, provisionalTransliteration?: string | null, creatorUsername: string, creationDate: string, lang: ManuscriptLanguageAbbreviations, mainIdentifier: { __typename?: 'ManuscriptIdentifier', identifierType: ManuscriptIdentifierType } } | null }; export type UploadTransliterationMutationVariables = Exact<{ mainIdentifier: Scalars['String']['input']; @@ -427,14 +427,14 @@ export type UploadTransliterationMutationVariables = Exact<{ export type UploadTransliterationMutation = { __typename?: 'Mutation', manuscript?: { __typename?: 'ManuscriptMutations', updateTransliteration: boolean } | null }; -export type TransliterationReviewDataFragment = { __typename?: 'ManuscriptMetaData', creationDate: string, transliterationReleaseDate?: string | null, initialInput?: string | null, author: string, mainIdentifier: { __typename?: 'ManuscriptIdentifier', mainIdentifierType: ManuscriptIdentifierType } }; +export type TransliterationReviewDataFragment = { __typename?: 'ManuscriptMetaData', creationDate: string, transliterationReleaseDate?: string | null, initialInput?: string | null, author: string, lang: ManuscriptLanguageAbbreviations, mainIdentifier: { __typename?: 'ManuscriptIdentifier', mainIdentifierType: ManuscriptIdentifierType } }; export type ReviewTransliterationQueryVariables = Exact<{ mainIdentifier: Scalars['String']['input']; }>; -export type ReviewTransliterationQuery = { __typename?: 'Query', manuscript?: { __typename?: 'ManuscriptMetaData', status: ManuscriptStatus, creationDate: string, transliterationReleaseDate?: string | null, initialInput?: string | null, author: string, mainIdentifier: { __typename?: 'ManuscriptIdentifier', mainIdentifierType: ManuscriptIdentifierType } } | null }; +export type ReviewTransliterationQuery = { __typename?: 'Query', manuscript?: { __typename?: 'ManuscriptMetaData', status: ManuscriptStatus, creationDate: string, transliterationReleaseDate?: string | null, initialInput?: string | null, author: string, lang: ManuscriptLanguageAbbreviations, mainIdentifier: { __typename?: 'ManuscriptIdentifier', mainIdentifierType: ManuscriptIdentifierType } } | null }; export type SubmitTransliterationReviewMutationVariables = Exact<{ mainIdentifier: Scalars['String']['input']; @@ -444,14 +444,14 @@ export type SubmitTransliterationReviewMutationVariables = Exact<{ export type SubmitTransliterationReviewMutation = { __typename?: 'Mutation', reviewerMutations?: { __typename?: 'ReviewerMutations', submitTransliterationReview: string } | null }; -export type XmlCreationDataFragment = { __typename?: 'ManuscriptMetaData', creationDate: string, transliterationReleaseDate?: string | null, author: string, mainIdentifier: { __typename?: 'ManuscriptIdentifier', mainIdentifierType: ManuscriptIdentifierType } }; +export type XmlCreationDataFragment = { __typename?: 'ManuscriptMetaData', creationDate: string, transliterationReleaseDate?: string | null, author: string, lang: ManuscriptLanguageAbbreviations, mainIdentifier: { __typename?: 'ManuscriptIdentifier', mainIdentifierType: ManuscriptIdentifierType } }; export type XmlConversionQueryVariables = Exact<{ mainIdentifier: Scalars['String']['input']; }>; -export type XmlConversionQuery = { __typename?: 'Query', manuscript?: { __typename?: 'ManuscriptMetaData', status: ManuscriptStatus, xmlConversionData?: string | null, creationDate: string, transliterationReleaseDate?: string | null, author: string, mainIdentifier: { __typename?: 'ManuscriptIdentifier', mainIdentifierType: ManuscriptIdentifierType } } | null }; +export type XmlConversionQuery = { __typename?: 'Query', manuscript?: { __typename?: 'ManuscriptMetaData', status: ManuscriptStatus, xmlConversionData?: string | null, creationDate: string, transliterationReleaseDate?: string | null, author: string, lang: ManuscriptLanguageAbbreviations, mainIdentifier: { __typename?: 'ManuscriptIdentifier', mainIdentifierType: ManuscriptIdentifierType } } | null }; export type SubmitXmlConversionMutationVariables = Exact<{ mainIdentifier: Scalars['String']['input']; @@ -659,6 +659,7 @@ export const TransliterationInputDataFragmentDoc = gql` mainIdentifier { identifierType } + lang: defaultLanguage provisionalTransliteration creatorUsername creationDate @@ -671,6 +672,7 @@ export const TransliterationReviewDataFragmentDoc = gql` } initialInput: transliterationReviewData author: creatorUsername + lang: defaultLanguage creationDate transliterationReleaseDate } @@ -681,6 +683,7 @@ export const XmlCreationDataFragmentDoc = gql` mainIdentifierType: identifierType } author: creatorUsername + lang: defaultLanguage creationDate transliterationReleaseDate } diff --git a/ui/src/manuscript/TransliterationInput.tsx b/ui/src/manuscript/TransliterationInput.tsx index ce4e59b..a8bd85e 100644 --- a/ui/src/manuscript/TransliterationInput.tsx +++ b/ui/src/manuscript/TransliterationInput.tsx @@ -1,7 +1,7 @@ -import {ReactElement, useState} from 'react'; -import {useTranslation} from 'react-i18next'; -import {User} from '../newStore'; -import {homeUrl} from '../urls'; +import { ReactElement, useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { User } from '../newStore'; +import { homeUrl } from '../urls'; import { ManuscriptStatus, TransliterationInputDataFragment, @@ -9,18 +9,19 @@ import { useTransliterationInputQuery, useUploadTransliterationMutation } from '../graphql'; -import {Link, Navigate, useParams} from 'react-router-dom'; +import { Link, Navigate, useParams } from 'react-router-dom'; import update from 'immutability-helper'; -import {TransliterationTextArea} from './TransliterationTextArea'; -import {WithQuery} from '../WithQuery'; -import {ErrorMessage, InfoMessage, SuccessMessage} from '../designElements/Messages'; -import {amberButtonClasses, blueButtonClasses} from '../defaultDesign'; -import {XmlCreationValues} from './xmlConversion/createCompleteDocument'; +import { TransliterationTextArea } from './TransliterationTextArea'; +import { WithQuery } from '../WithQuery'; +import { ErrorMessage, InfoMessage, SuccessMessage } from '../designElements/Messages'; +import { amberButtonClasses, blueButtonClasses } from '../defaultDesign'; +import { XmlCreationValues } from './xmlConversion/createCompleteDocument'; interface InnerProps { mainIdentifier: string; manuscript: TransliterationInputDataFragment; initialIsReleased: boolean; + lang: string; } interface IState { @@ -29,31 +30,31 @@ interface IState { isReleased: boolean; } -function TransliterationInput({mainIdentifier, manuscript, initialIsReleased}: InnerProps): ReactElement { +function TransliterationInput({ mainIdentifier, manuscript, initialIsReleased, lang }: InnerProps): ReactElement { const { - mainIdentifier: {identifierType: mainIdentifierType}, + mainIdentifier: { identifierType: mainIdentifierType }, creatorUsername: author, creationDate, provisionalTransliteration } = manuscript; - const {t} = useTranslation('common'); - const [{input, isSaved, isReleased}, setTransliteration] = useState({ + const { t } = useTranslation('common'); + const [{ input, isSaved, isReleased }, setTransliteration] = useState({ input: provisionalTransliteration || '', isSaved: true, isReleased: initialIsReleased }); - const [uploadTransliteration, {loading: uploadLoading, error: uploadError}] = useUploadTransliterationMutation(); - const [releaseTransliteration, {loading: releaseLoading, error: releaseError}] = useReleaseTransliterationMutation(); + const [uploadTransliteration, { loading: uploadLoading, error: uploadError }] = useUploadTransliterationMutation(); + const [releaseTransliteration, { loading: releaseLoading, error: releaseError }] = useReleaseTransliterationMutation(); - const updateTransliteration = (value: string): void => setTransliteration((state) => update(state, {input: {$set: value}, isSaved: {$set: false}})); + const updateTransliteration = (value: string): void => setTransliteration((state) => update(state, { input: { $set: value }, isSaved: { $set: false } })); const upload = async () => { - const res = await uploadTransliteration({variables: {mainIdentifier, input}}); + const res = await uploadTransliteration({ variables: { mainIdentifier, input } }); if (res.data?.manuscript?.updateTransliteration) { - setTransliteration((state) => update(state, {isSaved: {$set: true}})); + setTransliteration((state) => update(state, { isSaved: { $set: true } })); } }; @@ -62,18 +63,18 @@ function TransliterationInput({mainIdentifier, manuscript, initialIsReleased}: I return; } - const {data} = await releaseTransliteration({variables: {mainIdentifier}}); + const { data } = await releaseTransliteration({ variables: { mainIdentifier } }); if (data?.manuscript?.releaseTransliteration) { - setTransliteration((state) => update(state, {isReleased: {$set: true}})); + setTransliteration((state) => update(state, { isReleased: { $set: true } })); } }; - const xmlCreationValues: XmlCreationValues = {mainIdentifierType, mainIdentifier, author, creationDate, transliterationReleaseDate: undefined}; + const xmlCreationValues: XmlCreationValues = { mainIdentifierType, mainIdentifier, author, creationDate, lang, transliterationReleaseDate: undefined }; return ( <> - + {uploadError && {uploadError.message}} {releaseError && {releaseError.message}} @@ -99,7 +100,7 @@ function TransliterationInput({mainIdentifier, manuscript, initialIsReleased}: I
@@ -107,24 +108,24 @@ function TransliterationInput({mainIdentifier, manuscript, initialIsReleased}: I ); } -export function TransliterationInputContainer({currentUser}: { currentUser: User }): ReactElement { +export function TransliterationInputContainer({ currentUser }: { currentUser: User }): ReactElement { - const {mainIdentifier} = useParams<'mainIdentifier'>(); + const { mainIdentifier } = useParams<'mainIdentifier'>(); if (mainIdentifier === undefined) { - return ; + return ; } - const {t} = useTranslation('common'); + const { t } = useTranslation('common'); - const query = useTransliterationInputQuery({variables: {mainIdentifier}}); + const query = useTransliterationInputQuery({ variables: { mainIdentifier } }); return (

{decodeURIComponent(mainIdentifier)}: {t('createTransliteration')}

- {({manuscript}) => { + {({ manuscript }) => { if (!manuscript) { return
{t('manuscriptNotFound')}
; @@ -136,7 +137,7 @@ export function TransliterationInputContainer({currentUser}: { currentUser: User const isReleased = manuscript.status !== ManuscriptStatus.Created; - return ; + return ; }}
diff --git a/ui/src/manuscript/TransliterationReview.tsx b/ui/src/manuscript/TransliterationReview.tsx index 634bfc5..a336f2d 100644 --- a/ui/src/manuscript/TransliterationReview.tsx +++ b/ui/src/manuscript/TransliterationReview.tsx @@ -1,36 +1,36 @@ -import {WithQuery} from '../WithQuery'; -import {ManuscriptStatus, TransliterationReviewDataFragment, useReviewTransliterationQuery, useSubmitTransliterationReviewMutation} from '../graphql'; -import {Link, Navigate, useParams} from 'react-router-dom'; -import {homeUrl} from '../urls'; -import {TransliterationTextArea} from './TransliterationTextArea'; -import {useTranslation} from 'react-i18next'; -import {ReactElement, useState} from 'react'; -import {blueButtonClasses} from '../defaultDesign'; -import {SuccessMessage} from '../designElements/Messages'; -import {XmlCreationValues} from './xmlConversion/createCompleteDocument'; +import { WithQuery } from '../WithQuery'; +import { ManuscriptStatus, TransliterationReviewDataFragment, useReviewTransliterationQuery, useSubmitTransliterationReviewMutation } from '../graphql'; +import { Link, Navigate, useParams } from 'react-router-dom'; +import { homeUrl } from '../urls'; +import { TransliterationTextArea } from './TransliterationTextArea'; +import { useTranslation } from 'react-i18next'; +import { ReactElement, useState } from 'react'; +import { blueButtonClasses } from '../defaultDesign'; +import { SuccessMessage } from '../designElements/Messages'; +import { XmlCreationValues } from './xmlConversion/createCompleteDocument'; interface IProps { mainIdentifier: string; manuscript: TransliterationReviewDataFragment; } -function Inner({mainIdentifier, manuscript}: IProps): ReactElement { +function Inner({ mainIdentifier, manuscript }: IProps): ReactElement { - const {mainIdentifier: {mainIdentifierType}, initialInput, transliterationReleaseDate, creationDate, author} = manuscript; + const { mainIdentifier: { mainIdentifierType }, initialInput, transliterationReleaseDate, creationDate, author, lang } = manuscript; - const {t} = useTranslation('common'); + const { t } = useTranslation('common'); const [input, setInput] = useState(initialInput || ''); - const [submitReview, {data, loading, error}] = useSubmitTransliterationReviewMutation(); + const [submitReview, { data, loading, error }] = useSubmitTransliterationReviewMutation(); const reviewed = !!data?.reviewerMutations?.submitTransliterationReview; - const onSubmit = () => submitReview({variables: {mainIdentifier, review: input}}); + const onSubmit = () => submitReview({ variables: { mainIdentifier, review: input } }); - const xmlCreationValues: XmlCreationValues = {creationDate, author, transliterationReleaseDate, mainIdentifierType, mainIdentifier}; + const xmlCreationValues: XmlCreationValues = { creationDate, author, transliterationReleaseDate, mainIdentifierType, mainIdentifier, lang }; return ( <> - + {error &&
{error.message}
} @@ -54,24 +54,24 @@ function Inner({mainIdentifier, manuscript}: IProps): ReactElement { export function TransliterationReview(): ReactElement { - const {t} = useTranslation('common'); - const {mainIdentifier} = useParams<'mainIdentifier'>(); + const { t } = useTranslation('common'); + const { mainIdentifier } = useParams<'mainIdentifier'>(); if (mainIdentifier === undefined) { - return ; + return ; } - const reviewQuery = useReviewTransliterationQuery({variables: {mainIdentifier}}); + const reviewQuery = useReviewTransliterationQuery({ variables: { mainIdentifier } }); return (

{t('reviewTransliteration')}

- {({manuscript}) => + {({ manuscript }) => manuscript && manuscript.initialInput && manuscript.status === ManuscriptStatus.TransliterationReleased - ? - : + ? + : }
diff --git a/ui/src/manuscript/xmlConversion/XmlConversion.tsx b/ui/src/manuscript/xmlConversion/XmlConversion.tsx index 696b381..2580290 100644 --- a/ui/src/manuscript/xmlConversion/XmlConversion.tsx +++ b/ui/src/manuscript/xmlConversion/XmlConversion.tsx @@ -1,15 +1,15 @@ -import {ReactElement, useState} from 'react'; -import {Link, Navigate, useParams} from 'react-router-dom'; -import {homeUrl, tlhDocumentAnalyzerUrl} from '../../urls'; -import {ManuscriptStatus, useSubmitXmlConversionMutation, useXmlConversionQuery} from '../../graphql'; -import {WithQuery} from '../../WithQuery'; -import {useTranslation} from 'react-i18next'; -import {TransliterationCheck} from './TransliterationCheck'; -import {XmlCheck} from './XmlCheck'; -import {SuccessMessage} from '../../designElements/Messages'; -import {XmlCreationValues} from './createCompleteDocument'; -import {TLHParser} from 'simtex'; -import {exportXmlFromParser} from '../exportFromParser'; +import { ReactElement, useState } from 'react'; +import { Link, Navigate, useParams } from 'react-router-dom'; +import { homeUrl, tlhDocumentAnalyzerUrl } from '../../urls'; +import { ManuscriptStatus, useSubmitXmlConversionMutation, useXmlConversionQuery } from '../../graphql'; +import { WithQuery } from '../../WithQuery'; +import { useTranslation } from 'react-i18next'; +import { TransliterationCheck } from './TransliterationCheck'; +import { XmlCheck } from './XmlCheck'; +import { SuccessMessage } from '../../designElements/Messages'; +import { XmlCreationValues } from './createCompleteDocument'; +import { TLHParser } from 'simtex'; +import { exportXmlFromParser } from '../exportFromParser'; interface IProps extends XmlCreationValues { initialInput: string; @@ -20,33 +20,31 @@ type IState = { _type: 'TransliterationCheck'; } | { _type: 'XmlCheck'; content: string; } | { _type: 'AnnotatedXmlCheck'; content: string; }; -const headers: HeadersInit = {'Content-Type': 'application/xml*'}; +const headers: HeadersInit = { 'Content-Type': 'application/xml*' }; -function Inner({mainIdentifier, mainIdentifierType, author, creationDate, transliterationReleaseDate, initialInput, initialIsConverted}: IProps): ReactElement { +function Inner({ initialInput, initialIsConverted, ...xmlCreationValues }: IProps): ReactElement { - const {t} = useTranslation('common'); - const [state, setState] = useState({_type: 'TransliterationCheck'}); - const [submitXmlConversion, {data, loading, error}] = useSubmitXmlConversionMutation(); + const { t } = useTranslation('common'); + const [state, setState] = useState({ _type: 'TransliterationCheck' }); + const [submitXmlConversion, { data, loading, error }] = useSubmitXmlConversionMutation(); const converted = initialIsConverted || !!data?.reviewerMutations?.submitXmlConversion; const onSubmit = async (conversion: string): Promise => { try { if (state._type === 'XmlCheck') { - const response = await fetch(tlhDocumentAnalyzerUrl, {method: 'POST', body: conversion, headers}); + const response = await fetch(tlhDocumentAnalyzerUrl, { method: 'POST', body: conversion, headers }); const content = await response.text(); - setState({_type: 'AnnotatedXmlCheck', content}); + setState({ _type: 'AnnotatedXmlCheck', content }); } else if (state._type === 'AnnotatedXmlCheck') { - await submitXmlConversion({variables: {mainIdentifier, conversion}}); + await submitXmlConversion({ variables: { mainIdentifier: xmlCreationValues.mainIdentifier, conversion } }); } } catch (exception) { console.error(exception); } }; - const xmlCreationValues = {mainIdentifier, mainIdentifierType, author, creationDate, transliterationReleaseDate}; - - const onConvert = (input: string): void => setState({_type: 'XmlCheck', content: exportXmlFromParser(new TLHParser(input), xmlCreationValues)}); + const onConvert = (input: string): void => setState({ _type: 'XmlCheck', content: exportXmlFromParser(new TLHParser(input), xmlCreationValues) }); return converted ? ( @@ -57,8 +55,8 @@ function Inner({mainIdentifier, mainIdentifierType, author, creationDate, transl ) : ( <> {state._type === 'TransliterationCheck' - ? - : } + ? + : } {error &&
{error.message}
} ); @@ -70,31 +68,31 @@ const xmlConverted = (status: ManuscriptStatus) => status !== ManuscriptStatus.C export function XmlConversion(): ReactElement { - const {t} = useTranslation('common'); + const { t } = useTranslation('common'); const mainIdentifier = useParams<'mainIdentifier'>().mainIdentifier; if (mainIdentifier === undefined) { - return ; + return ; } - const xmlConversionQuery = useXmlConversionQuery({variables: {mainIdentifier}}); + const xmlConversionQuery = useXmlConversionQuery({ variables: { mainIdentifier } }); return (

{t('xmlConversion')}

- {({manuscript}) => { + {({ manuscript }) => { if (!manuscript || !manuscript.xmlConversionData || !manuscript.transliterationReleaseDate) { - return ; + return ; } - const {author, creationDate, xmlConversionData, status, transliterationReleaseDate} = manuscript; + const { author, creationDate, lang, xmlConversionData, status, transliterationReleaseDate } = manuscript; return ( + transliterationReleaseDate={transliterationReleaseDate} lang={lang} initialInput={xmlConversionData} initialIsConverted={xmlConverted(status)} /> ); }} diff --git a/ui/src/manuscript/xmlConversion/createCompleteDocument.ts b/ui/src/manuscript/xmlConversion/createCompleteDocument.ts index bfc179c..04463d2 100644 --- a/ui/src/manuscript/xmlConversion/createCompleteDocument.ts +++ b/ui/src/manuscript/xmlConversion/createCompleteDocument.ts @@ -1,5 +1,5 @@ -import {Attributes, xmlElementNode, XmlElementNode, XmlNode, xmlTextNode} from 'simple_xml'; -import {ManuscriptIdentifierType} from '../../graphql'; +import { Attributes, xmlElementNode, XmlElementNode, XmlNode, xmlTextNode } from 'simple_xml'; +import { ManuscriptIdentifierType } from '../../graphql'; const defaultAoXmlAttributes: Attributes = { 'xmlns:hpm': 'http://hethiter.net/ns/hpm/1.0', @@ -25,29 +25,30 @@ export interface XmlCreationValues { author: string; creationDate: string; transliterationReleaseDate: string | null | undefined; + lang: string; } export function createCompleteDocument(documentContent: XmlNode[], xmlCreationValues: XmlCreationValues): XmlElementNode { - const {mainIdentifier, mainIdentifierType, author, creationDate, transliterationReleaseDate} = xmlCreationValues; + const { mainIdentifier, mainIdentifierType, author, creationDate, transliterationReleaseDate, lang } = xmlCreationValues; const transliterationReleaseNode = transliterationReleaseDate - ? [xmlElementNode('creation-date', {date: transliterationReleaseDate})] + ? [xmlElementNode('creation-date', { date: transliterationReleaseDate })] : []; return xmlElementNode('AOxml', defaultAoXmlAttributes, [ xmlElementNode('AOHeader', {}, [ xmlElementNode('docID', {}, [xmlTextNode(mainIdentifier)]), xmlElementNode('meta', {}, [ - xmlElementNode('author', {author, date: creationDate}), + xmlElementNode('author', { author, date: creationDate }), ...transliterationReleaseNode ]) ]), xmlElementNode('body', {}, [ - xmlElementNode('div1', {type: 'transliteration'}, [ + xmlElementNode('div1', { type: 'transliteration' }, [ xmlElementNode('AO:Manuscripts', {}, [ xmlElementNode(manuscriptIdentifierTag(mainIdentifierType), {}, [xmlTextNode(mainIdentifier)]) ]), - xmlElementNode('text', {}, + xmlElementNode('text', { lang }, documentContent ) ]) diff --git a/ui/src/queries.graphql b/ui/src/queries.graphql index 1b4058c..23a3523 100644 --- a/ui/src/queries.graphql +++ b/ui/src/queries.graphql @@ -112,6 +112,7 @@ fragment TransliterationInputData on ManuscriptMetaData { mainIdentifier { identifierType } + lang: defaultLanguage provisionalTransliteration creatorUsername creationDate @@ -138,6 +139,7 @@ fragment TransliterationReviewData on ManuscriptMetaData { } initialInput: transliterationReviewData author: creatorUsername + lang: defaultLanguage creationDate transliterationReleaseDate } @@ -162,6 +164,7 @@ fragment XmlCreationData on ManuscriptMetaData { mainIdentifierType: identifierType } author: creatorUsername + lang: defaultLanguage creationDate transliterationReleaseDate }