diff --git a/client/src/api/admin.ts b/client/src/api/admin.ts index ffab10f054..f27297cde5 100644 --- a/client/src/api/admin.ts +++ b/client/src/api/admin.ts @@ -68,6 +68,7 @@ export const getPageChildren: GetPageChildren = (id, options = {}) => { interface GetPageTranslationsOptions { fields?: string[]; onlyWithChildren?: boolean; + offset?: number; } type GetPageTranslations = (id: number, options: GetPageTranslationsOptions) => Promise; export const getPageTranslations: GetPageTranslations = (id, options = {}) => { @@ -83,5 +84,29 @@ export const getPageTranslations: GetPageTranslations = (id, options = {}) => { url += '&has_children=1'; } + if (options.offset) { + url += `&offset=${options.offset}`; + } + return get(url); }; + +interface GetAllPageTranslationsOptions { + fields?: string[]; + onlyWithChildren?: boolean; +} + +export const getAllPageTranslations = async (id: number, options: GetAllPageTranslationsOptions) => { + const items: WagtailPageAPI[] = []; + let iterLimit = 100; + + for (;;) { + const page = await getPageTranslations(id, { offset: items.length, ...options }); + + page.items.forEach(item => items.push(item)); + + if (items.length >= page.meta.total_count || iterLimit-- <= 0) { + return items; + } + } +}; diff --git a/client/src/components/Explorer/actions.ts b/client/src/components/Explorer/actions.ts index d7feec295a..ef4c694268 100644 --- a/client/src/components/Explorer/actions.ts +++ b/client/src/components/Explorer/actions.ts @@ -54,7 +54,7 @@ function getChildren(id: number, offset = 0): ThunkActionType { } const getTranslationsStart = createAction('GET_TRANSLATIONS_START', id => ({ id })); -const getTranslationsSuccess = createAction('GET_TRANSLATIONS_SUCCESS', (id, items, meta) => ({ id, items, meta })); +const getTranslationsSuccess = createAction('GET_TRANSLATIONS_SUCCESS', (id, items) => ({ id, items })); const getTranslationsFailure = createAction('GET_TRANSLATIONS_FAILURE', (id, error) => ({ id, error })); /** @@ -64,8 +64,8 @@ function getTranslations(id) { return (dispatch) => { dispatch(getTranslationsStart(id)); - return admin.getPageTranslations(id, { onlyWithChildren: true }).then(({ items, meta }) => { - dispatch(getTranslationsSuccess(id, items, meta)); + return admin.getAllPageTranslations(id, { onlyWithChildren: true }).then(items => { + dispatch(getTranslationsSuccess(id, items)); }, (error) => { dispatch(getTranslationsFailure(id, error)); });