From 1e592385107d4c1abb57c03ef9a091c52dc5bcfe Mon Sep 17 00:00:00 2001 From: Alex Eng Date: Mon, 3 Sep 2018 15:49:14 +1000 Subject: [PATCH] hook selectedDocId and selectedLocaleId into MTMerge container --- .../service/MachineTranslationResource.java | 4 +- .../src/app/actions/version-actions.js | 9 +- .../app/components/MTMerge/MTMerge.story.tsx | 2 +- .../app/components/MTMerge/MTMergeModal.tsx | 24 ++++- .../app/components/MTMerge/MTMergeOptions.tsx | 92 ++++++++++++------- .../ProjectVersion/MTMergeContainer.ts | 12 ++- server/zanata-frontend/src/app/jsf/index.js | 3 +- .../zanata-frontend/src/app/reducers/state.ts | 4 +- .../src/app/reducers/version-reducer.js | 24 ++++- .../src/app/reducers/version-reducer.test.js | 10 +- .../layout/version/languages-tab.xhtml | 2 +- .../src/main/webapp/iteration/view.xhtml | 2 +- 12 files changed, 126 insertions(+), 62 deletions(-) diff --git a/server/services/src/main/java/org/zanata/rest/service/MachineTranslationResource.java b/server/services/src/main/java/org/zanata/rest/service/MachineTranslationResource.java index f7da3a5e95..ae5bfae860 100644 --- a/server/services/src/main/java/org/zanata/rest/service/MachineTranslationResource.java +++ b/server/services/src/main/java/org/zanata/rest/service/MachineTranslationResource.java @@ -169,11 +169,11 @@ public Response prefillProjectVersionByMachineTranslation( @CheckRole("mt-bulk") @POST - @Path("project/{projectSlug}/version/{versionSlug}/document/{docId}") + @Path("project/{projectSlug}/version/{versionSlug}/document") public Response prefillDocumentByMachineTranslation( @PathParam("projectSlug") String projectSlug, @PathParam("versionSlug") String versionSlug, - @PathParam("docId") String docId, + @QueryParam("docId") String docId, MachineTranslationPrefill prefillRequest) { if (mtServiceURL == null) { return Response.status(Response.Status.SERVICE_UNAVAILABLE).build(); diff --git a/server/zanata-frontend/src/app/actions/version-actions.js b/server/zanata-frontend/src/app/actions/version-actions.js index 1dac5f2742..5f6817ca58 100644 --- a/server/zanata-frontend/src/app/actions/version-actions.js +++ b/server/zanata-frontend/src/app/actions/version-actions.js @@ -60,7 +60,7 @@ import { */ export const toggleMTMergeModal = - createAction(TOGGLE_MT_MERGE_MODAL) + createAction(TOGGLE_MT_MERGE_MODAL, toggle => toggle, (args) => ({ args })) /** Open or close the TM Merge modal */ export const toggleTMMergeModal = createAction(TOGGLE_TM_MERGE_MODAL) @@ -141,7 +141,10 @@ const toProjectVersionString = (projectVersion) => { * @returns {APIAction} redux api action object FIXME */ export function mergeVersionFromMT (projectSlug, versionSlug, mergeOptions) { - const endpoint = `${apiUrl}/mt/project/${projectSlug}/version/${versionSlug}` + const api = `${apiUrl}/mt/project/${projectSlug}/version/${versionSlug}` + + (mergeOptions.selectedDocId + ? `/document?docId=${mergeOptions.selectedDocId}` : '') + /** @type {APITypes} */ const types = [VERSION_MT_MERGE_REQUEST, { @@ -167,7 +170,7 @@ export function mergeVersionFromMT (projectSlug, versionSlug, mergeOptions) { overwriteFuzzy: true, // mergeOptions.overwriteFuzzy } const apiRequest = buildAPIRequest( - endpoint, 'POST', getJsonHeaders(), types, JSON.stringify(serverOptions) + api, 'POST', getJsonHeaders(), types, JSON.stringify(serverOptions) ) return { [CALL_API]: apiRequest diff --git a/server/zanata-frontend/src/app/components/MTMerge/MTMerge.story.tsx b/server/zanata-frontend/src/app/components/MTMerge/MTMerge.story.tsx index 78eccf7510..8fa7ac2a02 100644 --- a/server/zanata-frontend/src/app/components/MTMerge/MTMerge.story.tsx +++ b/server/zanata-frontend/src/app/components/MTMerge/MTMerge.story.tsx @@ -96,7 +96,7 @@ storiesOf('MTMergeModal', module) // Redux dispatch, ie connect's TDispatchProps @@ -78,15 +81,20 @@ export class MTMergeModal extends Component { public render() { const { - showMTMerge, + show, projectSlug, versionSlug, availableLocales, processStatus, onCancelMTMerge, queryMTMergeProgress, + docId, + localeId } = this.props - const enableSubmit = this.state.checkedLocales.length > 0 && !processStatus + + const isSingleDocument = docId && localeId + const enableSubmit = isSingleDocument ? true + : (this.state.checkedLocales.length > 0 && !processStatus) const queryProgress = () => { queryMTMergeProgress(processStatus ? processStatus.url : '') } @@ -101,7 +109,7 @@ export class MTMergeModal extends Component { return ( {

: ( { } private handleOk = (_: React.MouseEvent) => { + const isSingleDoc = this.props.docId && this.props.localeId + const locales = isSingleDoc && this.props.localeId ? + [this.props.localeId] : this.state.checkedLocales const opts: MTMergeAPIOptions = { - selectedLocales: this.state.checkedLocales, + selectedDocId: isSingleDoc ? this.props.docId : undefined, + selectedLocales: locales, saveAs: this.state.saveAs, overwriteFuzzy: this.state.overwriteFuzzy } diff --git a/server/zanata-frontend/src/app/components/MTMerge/MTMergeOptions.tsx b/server/zanata-frontend/src/app/components/MTMerge/MTMergeOptions.tsx index 71e618e29a..d34a445338 100644 --- a/server/zanata-frontend/src/app/components/MTMerge/MTMergeOptions.tsx +++ b/server/zanata-frontend/src/app/components/MTMerge/MTMergeOptions.tsx @@ -26,6 +26,8 @@ export type MTMergeOptionsParams = Readonly<{ allowMultiple: boolean projectSlug: string versionSlug: string + docId?: string + localeId?: LocaleId availableLocales: Locale[] checkedLocales: LocaleId[] saveAs: MTTranslationStatus @@ -46,9 +48,13 @@ export class MTMergeOptions extends Component { public render() { // are all the boxes checked? - const allChecked = this.props.availableLocales.length === this.props.checkedLocales.length + const { + availableLocales, checkedLocales, allowMultiple, docId, localeId + } = this.props + const allChecked = availableLocales.length === checkedLocales.length // are some of the boxes checked? (not zero, not all) - const someChecked = ![0, this.props.availableLocales.length].includes(this.props.checkedLocales.length) + const someChecked = ![0, availableLocales.length].includes(checkedLocales.length) + const isSingleDocument = docId && localeId return ( @@ -57,38 +63,56 @@ export class MTMergeOptions extends Component {
- {/* Select Languages */} -

- - {this.props.allowMultiple ? "Languages" : "Language"} -

- {this.props.allowMultiple - ?
- {/*this is the "check all" checkbox*/} -
- - All languages - -
-
- - {this.props.availableLocales.map(loc => - - {loc.displayName} - )} - -
- : + + {isSingleDocument && + +

+ + Document +

+ {docId} + +

+ + Language +

+ {localeId} +
+ } + + {!isSingleDocument && + +

+ + {allowMultiple ? "Languages" : "Language"} +

+ {allowMultiple + ?
+ {/*this is the "check all" checkbox*/} +
+ + All languages + +
+
+ + {availableLocales.map(loc => + + {loc.displayName} + )} + +
+ : + } +
} {/* Other options */} diff --git a/server/zanata-frontend/src/app/containers/ProjectVersion/MTMergeContainer.ts b/server/zanata-frontend/src/app/containers/ProjectVersion/MTMergeContainer.ts index d4ed92e155..1a51b33f10 100644 --- a/server/zanata-frontend/src/app/containers/ProjectVersion/MTMergeContainer.ts +++ b/server/zanata-frontend/src/app/containers/ProjectVersion/MTMergeContainer.ts @@ -19,16 +19,20 @@ const mapReduxStateToProps = (state: RootState): MTMergeModalStateProps => { projectVersion: { locales, MTMerge: { - showMTMerge, + show, processStatus, + docId, + localeId // queryStatus } } } = state return { - showMTMerge, + show, availableLocales: locales as Locale[], processStatus, + docId, + localeId // queryStatus } } @@ -45,7 +49,9 @@ const mapDispatchToProps = (dispatch: any): MTMergeModalDispatchProps => { dispatch(currentMTMergeProcessFinished()) }, onCancel: () => { - dispatch(toggleMTMergeModal()) + dispatch(toggleMTMergeModal({MTMerge: + {show: false, docId: undefined, localeId: undefined} + })) }, onSubmit: (projectSlug, versionSlug, mtMergeOptions) => { dispatch(mergeVersionFromMT(projectSlug, versionSlug, mtMergeOptions)) diff --git a/server/zanata-frontend/src/app/jsf/index.js b/server/zanata-frontend/src/app/jsf/index.js index a773e81d53..8d71fe3ddd 100644 --- a/server/zanata-frontend/src/app/jsf/index.js +++ b/server/zanata-frontend/src/app/jsf/index.js @@ -56,7 +56,8 @@ const enhancedHistory = syncHistoryWithStore(history, store) export default function mountReactToJsf () { // Attaching to window object so modals can be triggered from the JSF page - window.toggleMTMergeModal = () => store.dispatch(toggleMTMergeModal()) + window.toggleMTMergeModal = (show, docId, localeId) => + store.dispatch(toggleMTMergeModal({MTMerge: {show, docId, localeId}})) window.toggleTMMergeModal = () => store.dispatch(toggleTMMergeModal()) window.toggleTMXExportModal = (show) => store.dispatch(showExportTMXModal(show)) diff --git a/server/zanata-frontend/src/app/reducers/state.ts b/server/zanata-frontend/src/app/reducers/state.ts index 8103b43189..98914fa890 100644 --- a/server/zanata-frontend/src/app/reducers/state.ts +++ b/server/zanata-frontend/src/app/reducers/state.ts @@ -23,10 +23,12 @@ export type RootState = DeepReadonly<{ // TODO verify types export type ProjectVersionState = { MTMerge: { - showMTMerge: boolean + show: boolean triggered: boolean processStatus?: ProcessStatus queryStatus?: string + localeId?: LocaleId + docId?: string } TMMerge: { show: boolean diff --git a/server/zanata-frontend/src/app/reducers/version-reducer.js b/server/zanata-frontend/src/app/reducers/version-reducer.js index f25b6acc57..35e06e35d9 100644 --- a/server/zanata-frontend/src/app/reducers/version-reducer.js +++ b/server/zanata-frontend/src/app/reducers/version-reducer.js @@ -32,10 +32,12 @@ import { SEVERITY, statusToSeverity } from '../actions/common-actions' export const defaultState = { // See mapReduxStateToProps in MTMergeContainer.ts MTMerge: { - showMTMerge: false, + show: false, triggered: false, processStatus: undefined, queryStatus: undefined, + localeId: undefined, + docId: undefined }, TMMerge: { show: false, @@ -56,10 +58,18 @@ export const defaultState = { // Should be fixed by Redux 4: https://github.com/reactjs/redux/pull/2773 /** @type {import('redux').Reducer} */ const version = handleActions({ - [TOGGLE_MT_MERGE_MODAL]: (state, _action) => { - return update(state, { - MTMerge: { showMTMerge: { $set: !state.MTMerge.showMTMerge } } - }) + [TOGGLE_MT_MERGE_MODAL]: (state, action) => { + const {show, docId, localeId} = action.payload ? action.payload.MTMerge + : state.MTMerge + return { + ...state, + MTMerge: { + ...state.MTMerge, + show, + docId, + localeId + } + } }, [TOGGLE_TM_MERGE_MODAL]: (state, _action) => { return update(state, { @@ -223,6 +233,10 @@ const version = handleActions({ [MT_MERGE_PROCESS_FINISHED]: (state, _action) => { return update(state, { // MTMerge: { processStatus: { $set: undefined } }, + MTMerge: { + docId: { $set: undefined }, + localeId: { $set: undefined } + }, notification: { $set: { severity: `${state.MTMerge.processStatus diff --git a/server/zanata-frontend/src/app/reducers/version-reducer.test.js b/server/zanata-frontend/src/app/reducers/version-reducer.test.js index 8bb694adcc..38981a1d8b 100644 --- a/server/zanata-frontend/src/app/reducers/version-reducer.test.js +++ b/server/zanata-frontend/src/app/reducers/version-reducer.test.js @@ -30,11 +30,11 @@ describe('version-reducer test', () => { const initial = versionReducer(undefState, dummyAction) const shown = versionReducer(initial, { type: TOGGLE_TM_MERGE_MODAL, - payload: { show: true } + payload: { TMMerge: {show: true}} }) const hidden = versionReducer(shown, { type: TOGGLE_TM_MERGE_MODAL, - payload: { show: false } + payload: { TMMerge: {show: false}} }) expect(initial.TMMerge).toEqual({ processStatus: undefined, @@ -290,7 +290,7 @@ describe('version-reducer test', () => { MTMerge: { processStatus: undefined, queryStatus: undefined, - showMTMerge: false, + show: false, triggered: false }, TMMerge: { @@ -339,7 +339,7 @@ describe('version-reducer test', () => { MTMerge: { processStatus: undefined, queryStatus: undefined, - showMTMerge: false, + show: false, triggered: false }, TMMerge: { @@ -370,7 +370,7 @@ describe('version-reducer test', () => { MTMerge: { processStatus: undefined, queryStatus: undefined, - showMTMerge: false, + show: false, triggered: false }, TMMerge: { diff --git a/server/zanata-war/src/main/webapp/WEB-INF/layout/version/languages-tab.xhtml b/server/zanata-war/src/main/webapp/WEB-INF/layout/version/languages-tab.xhtml index fd15c1ddb7..672869e541 100644 --- a/server/zanata-war/src/main/webapp/WEB-INF/layout/version/languages-tab.xhtml +++ b/server/zanata-war/src/main/webapp/WEB-INF/layout/version/languages-tab.xhtml @@ -418,7 +418,7 @@
  • - + #{msgs['jsf.iteration.MTMerge']} diff --git a/server/zanata-war/src/main/webapp/iteration/view.xhtml b/server/zanata-war/src/main/webapp/iteration/view.xhtml index bbc66d7213..cccbf1b94e 100644 --- a/server/zanata-war/src/main/webapp/iteration/view.xhtml +++ b/server/zanata-war/src/main/webapp/iteration/view.xhtml @@ -425,7 +425,7 @@
  • - + #{msgs['jsf.iteration.MTMerge']}