Skip to content

Commit

Permalink
use lang in created xml documents
Browse files Browse the repository at this point in the history
  • Loading branch information
b-eyselein committed Dec 6, 2023
1 parent 227bb6b commit d548a08
Show file tree
Hide file tree
Showing 7 changed files with 109 additions and 100 deletions.
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
},
Expand Down
15 changes: 9 additions & 6 deletions ui/src/graphql.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'];
Expand All @@ -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'];
Expand All @@ -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'];
Expand Down Expand Up @@ -659,6 +659,7 @@ export const TransliterationInputDataFragmentDoc = gql`
mainIdentifier {
identifierType
}
lang: defaultLanguage
provisionalTransliteration
creatorUsername
creationDate
Expand All @@ -671,6 +672,7 @@ export const TransliterationReviewDataFragmentDoc = gql`
}
initialInput: transliterationReviewData
author: creatorUsername
lang: defaultLanguage
creationDate
transliterationReleaseDate
}
Expand All @@ -681,6 +683,7 @@ export const XmlCreationDataFragmentDoc = gql`
mainIdentifierType: identifierType
}
author: creatorUsername
lang: defaultLanguage
creationDate
transliterationReleaseDate
}
Expand Down
63 changes: 32 additions & 31 deletions ui/src/manuscript/TransliterationInput.tsx
Original file line number Diff line number Diff line change
@@ -1,26 +1,27 @@
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,
useReleaseTransliterationMutation,
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 {
Expand All @@ -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<IState>({
const { t } = useTranslation('common');
const [{ input, isSaved, isReleased }, setTransliteration] = useState<IState>({
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 } }));
}
};

Expand All @@ -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 (
<>
<TransliterationTextArea xmlCreationValues={xmlCreationValues} initialInput={input} onChange={updateTransliteration} disabled={isReleased}/>
<TransliterationTextArea xmlCreationValues={xmlCreationValues} initialInput={input} onChange={updateTransliteration} disabled={isReleased} />

{uploadError && <ErrorMessage>{uploadError.message}</ErrorMessage>}
{releaseError && <ErrorMessage>{releaseError.message}</ErrorMessage>}
Expand All @@ -99,32 +100,32 @@ function TransliterationInput({mainIdentifier, manuscript, initialIsReleased}: I

<div className="my-4 p-4 text-center">
<button type="button" className={amberButtonClasses} onClick={onReleaseTransliteration}
disabled={uploadLoading || releaseLoading || !isSaved || isReleased}>
disabled={uploadLoading || releaseLoading || !isSaved || isReleased}>
{t('releaseTransliteration')}
</button>
</div>
</>
);
}

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 <Navigate to={homeUrl}/>;
return <Navigate to={homeUrl} />;
}

const {t} = useTranslation('common');
const { t } = useTranslation('common');

const query = useTransliterationInputQuery({variables: {mainIdentifier}});
const query = useTransliterationInputQuery({ variables: { mainIdentifier } });

return (
<div className="container mx-auto">
<h1 className="my-4 font-bold text-xl text-center">{decodeURIComponent(mainIdentifier)}: {t('createTransliteration')}</h1>

<WithQuery query={query}>
{({manuscript}) => {
{({ manuscript }) => {

if (!manuscript) {
return <div className="p-2 italic text-cyan-500 text-center w-full">{t('manuscriptNotFound')}</div>;
Expand All @@ -136,7 +137,7 @@ export function TransliterationInputContainer({currentUser}: { currentUser: User

const isReleased = manuscript.status !== ManuscriptStatus.Created;

return <TransliterationInput mainIdentifier={mainIdentifier} manuscript={manuscript} initialIsReleased={isReleased}/>;
return <TransliterationInput mainIdentifier={mainIdentifier} manuscript={manuscript} initialIsReleased={isReleased} lang={manuscript.lang} />;
}}
</WithQuery>
</div>
Expand Down
48 changes: 24 additions & 24 deletions ui/src/manuscript/TransliterationReview.tsx
Original file line number Diff line number Diff line change
@@ -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 (
<>
<TransliterationTextArea initialInput={input} xmlCreationValues={xmlCreationValues} onChange={setInput} disabled={reviewed}/>
<TransliterationTextArea initialInput={input} xmlCreationValues={xmlCreationValues} onChange={setInput} disabled={reviewed} />

{error && <div className="my-2 p-2 rounded bg-red-500 text-white text-center w-full">{error.message}</div>}

Expand All @@ -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 <Navigate to={homeUrl}/>;
return <Navigate to={homeUrl} />;
}

const reviewQuery = useReviewTransliterationQuery({variables: {mainIdentifier}});
const reviewQuery = useReviewTransliterationQuery({ variables: { mainIdentifier } });

return (
<div className="container mx-auto">
<h2 className="font-bold text-xl text-center">{t('reviewTransliteration')}</h2>

<WithQuery query={reviewQuery}>
{({manuscript}) =>
{({ manuscript }) =>
manuscript && manuscript.initialInput && manuscript.status === ManuscriptStatus.TransliterationReleased
? <Inner mainIdentifier={mainIdentifier} manuscript={manuscript}/>
: <Navigate to={homeUrl}/>
? <Inner mainIdentifier={mainIdentifier} manuscript={manuscript} />
: <Navigate to={homeUrl} />
}
</WithQuery>
</div>
Expand Down
Loading

0 comments on commit d548a08

Please sign in to comment.