diff --git a/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/details_page/tags_list.vue b/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/details_page/tags_list.vue index 400acba2f2fb558f9624efc49274661948d68c1d..8d6f78b18981311bb1277c403b79c88579369eda 100644 --- a/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/details_page/tags_list.vue +++ b/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/details_page/tags_list.vue @@ -11,6 +11,11 @@ import PersistedSearch from '~/packages_and_registries/shared/components/persist import TagsLoader from '~/packages_and_registries/shared/components/tags_loader.vue'; import { FILTERED_SEARCH_TERM } from '~/vue_shared/components/filtered_search_bar/constants'; import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; +import { + getPageParams, + getNextPageParams, + getPreviousPageParams, +} from '~/packages_and_registries/shared/utils'; import { ALERT_SUCCESS_TAG, ALERT_DANGER_TAG, @@ -31,7 +36,6 @@ import { import getContainerRepositoryTagsQuery from '../../graphql/queries/get_container_repository_tags.query.graphql'; import deleteContainerRepositoryTagsMutation from '../../graphql/mutations/delete_container_repository_tags.mutation.graphql'; import DeleteModal from '../delete_modal.vue'; -import { getPageParams, getNextPageParams, getPreviousPageParams } from '../../utils'; import TagsListRow from './tags_list_row.vue'; export default { diff --git a/app/assets/javascripts/packages_and_registries/container_registry/explorer/pages/list.vue b/app/assets/javascripts/packages_and_registries/container_registry/explorer/pages/list.vue index fb639bddc79d0f6f6407655e735bca48a4a9d015..066c6bf35f272dfaeb9b319531e083f2db158ba2 100644 --- a/app/assets/javascripts/packages_and_registries/container_registry/explorer/pages/list.vue +++ b/app/assets/javascripts/packages_and_registries/container_registry/explorer/pages/list.vue @@ -18,6 +18,11 @@ import PersistedPagination from '~/packages_and_registries/shared/components/per import PersistedSearch from '~/packages_and_registries/shared/components/persisted_search.vue'; import MetadataDatabaseAlert from '~/packages_and_registries/shared/components/container_registry_metadata_database_alert.vue'; import { FILTERED_SEARCH_TERM } from '~/vue_shared/components/filtered_search_bar/constants'; +import { + getPageParams, + getNextPageParams, + getPreviousPageParams, +} from '~/packages_and_registries/shared/utils'; import { helpPagePath } from '~/helpers/help_page_helper'; import DeleteImage from '../components/delete_image.vue'; import RegistryHeader from '../components/list_page/registry_header.vue'; @@ -36,7 +41,6 @@ import { SETTINGS_TEXT, } from '../constants/index'; import getContainerRepositoriesDetails from '../graphql/queries/get_container_repositories_details.query.graphql'; -import { getPageParams, getNextPageParams, getPreviousPageParams } from '../utils'; export default { name: 'RegistryListPage', diff --git a/app/assets/javascripts/packages_and_registries/container_registry/explorer/utils.js b/app/assets/javascripts/packages_and_registries/container_registry/explorer/utils.js index 87c28e6e9b259c5e9dac6d478b830cd4f340da7f..751ab5180a118985955c96fc51bd05242330848c 100644 --- a/app/assets/javascripts/packages_and_registries/container_registry/explorer/utils.js +++ b/app/assets/javascripts/packages_and_registries/container_registry/explorer/utils.js @@ -1,5 +1,4 @@ import { approximateDuration, calculateRemainingMilliseconds } from '~/lib/utils/datetime_utility'; -import { GRAPHQL_PAGE_SIZE } from './constants/index'; export const getImageName = (image = {}) => { return image.name || image.project?.path; @@ -11,26 +10,3 @@ export const timeTilRun = (time) => { const difference = calculateRemainingMilliseconds(time); return approximateDuration(difference / 1000); }; - -export const getNextPageParams = (cursor, pageSize = GRAPHQL_PAGE_SIZE) => ({ - after: cursor, - first: pageSize, -}); - -export const getPreviousPageParams = (cursor, pageSize = GRAPHQL_PAGE_SIZE) => ({ - first: null, - before: cursor, - last: pageSize, -}); - -export const getPageParams = (pageInfo = {}, pageSize = GRAPHQL_PAGE_SIZE) => { - if (pageInfo.before) { - return getPreviousPageParams(pageInfo.before, pageSize); - } - - if (pageInfo.after) { - return getNextPageParams(pageInfo.after, pageSize); - } - - return {}; -}; diff --git a/app/assets/javascripts/packages_and_registries/dependency_proxy/app.vue b/app/assets/javascripts/packages_and_registries/dependency_proxy/app.vue index 481c2d7ab598d0ae582376807b9032715073baeb..617db4b24d7e69183f15913b4165fccfe09150f4 100644 --- a/app/assets/javascripts/packages_and_registries/dependency_proxy/app.vue +++ b/app/assets/javascripts/packages_and_registries/dependency_proxy/app.vue @@ -18,7 +18,7 @@ import ClipboardButton from '~/vue_shared/components/clipboard_button.vue'; import TitleArea from '~/vue_shared/components/registry/title_area.vue'; import ManifestsList from '~/packages_and_registries/dependency_proxy/components/manifests_list.vue'; import { GRAPHQL_PAGE_SIZE } from '~/packages_and_registries/dependency_proxy/constants'; -import { getPageParams } from '~/packages_and_registries/dependency_proxy/utils'; +import { getPageParams } from '~/packages_and_registries/shared/utils'; import getDependencyProxyDetailsQuery from '~/packages_and_registries/dependency_proxy/graphql/queries/get_dependency_proxy_details.query.graphql'; @@ -87,7 +87,7 @@ export default { }, pageParams() { const { before, after } = this.$route.query; - return getPageParams({ before, after }); + return getPageParams({ before, after }, GRAPHQL_PAGE_SIZE); }, manifests() { return this.group.dependencyProxyManifests?.nodes ?? []; diff --git a/app/assets/javascripts/packages_and_registries/dependency_proxy/utils.js b/app/assets/javascripts/packages_and_registries/dependency_proxy/utils.js deleted file mode 100644 index e6b97fac89697273c0af048466a6f2bb7b14a792..0000000000000000000000000000000000000000 --- a/app/assets/javascripts/packages_and_registries/dependency_proxy/utils.js +++ /dev/null @@ -1,24 +0,0 @@ -import { GRAPHQL_PAGE_SIZE } from './constants'; - -const getNextPageParams = (cursor) => ({ - after: cursor, - first: GRAPHQL_PAGE_SIZE, -}); - -const getPreviousPageParams = (cursor) => ({ - first: null, - before: cursor, - last: GRAPHQL_PAGE_SIZE, -}); - -export const getPageParams = (pageInfo = {}) => { - if (pageInfo.before) { - return getPreviousPageParams(pageInfo.before); - } - - if (pageInfo.after) { - return getNextPageParams(pageInfo.after); - } - - return {}; -}; diff --git a/app/assets/javascripts/packages_and_registries/package_registry/pages/list.vue b/app/assets/javascripts/packages_and_registries/package_registry/pages/list.vue index 4025a28342689236562db83b5e21372233482d20..dec7d6f78498098ccb24aa48c01a1d1452b1503a 100644 --- a/app/assets/javascripts/packages_and_registries/package_registry/pages/list.vue +++ b/app/assets/javascripts/packages_and_registries/package_registry/pages/list.vue @@ -27,7 +27,7 @@ import { getPageParams, getNextPageParams, getPreviousPageParams, -} from '~/packages_and_registries/package_registry/utils'; +} from '~/packages_and_registries/shared/utils'; export default { components: { @@ -174,15 +174,15 @@ export default { } }, handleSearchUpdate({ sort, filters, pageInfo }) { - this.pageParams = getPageParams(pageInfo); + this.pageParams = getPageParams(pageInfo, GRAPHQL_PAGE_SIZE); this.sort = sort; this.filters = { ...filters }; }, fetchNextPage() { - this.pageParams = getNextPageParams(this.pageInfo.endCursor); + this.pageParams = getNextPageParams(this.pageInfo.endCursor, GRAPHQL_PAGE_SIZE); }, fetchPreviousPage() { - this.pageParams = getPreviousPageParams(this.pageInfo.startCursor); + this.pageParams = getPreviousPageParams(this.pageInfo.startCursor, GRAPHQL_PAGE_SIZE); }, }, i18n: { diff --git a/app/assets/javascripts/packages_and_registries/package_registry/utils.js b/app/assets/javascripts/packages_and_registries/package_registry/utils.js index 39c3900d4b84f5353a014be55d8ae769cf7be337..8af5a29afa921a8aab47dd3fa5eff4ad51c96764 100644 --- a/app/assets/javascripts/packages_and_registries/package_registry/utils.js +++ b/app/assets/javascripts/packages_and_registries/package_registry/utils.js @@ -1,7 +1,6 @@ import { capitalize } from 'lodash'; import { s__ } from '~/locale'; import { - GRAPHQL_PAGE_SIZE, PACKAGE_TYPE_CONAN, PACKAGE_TYPE_MAVEN, PACKAGE_TYPE_NPM, @@ -50,26 +49,3 @@ export const packageTypeToTrackCategory = (type) => `UI::${capitalize(type)}Pack export const sortableFields = (isGroupPage) => SORT_FIELDS.filter((f) => f.orderBy !== LIST_KEY_PROJECT || isGroupPage); - -export const getNextPageParams = (cursor) => ({ - after: cursor, - first: GRAPHQL_PAGE_SIZE, -}); - -export const getPreviousPageParams = (cursor) => ({ - first: null, - before: cursor, - last: GRAPHQL_PAGE_SIZE, -}); - -export const getPageParams = (pageInfo = {}) => { - if (pageInfo.before) { - return getPreviousPageParams(pageInfo.before); - } - - if (pageInfo.after) { - return getNextPageParams(pageInfo.after); - } - - return {}; -}; diff --git a/app/assets/javascripts/packages_and_registries/shared/utils.js b/app/assets/javascripts/packages_and_registries/shared/utils.js index 22aaa716720569a5fc80cd677b8d5d009a9ef6ec..8d80af177d8b5f3f5f99b0f8b494865fb64da99e 100644 --- a/app/assets/javascripts/packages_and_registries/shared/utils.js +++ b/app/assets/javascripts/packages_and_registries/shared/utils.js @@ -43,6 +43,32 @@ export const extractPageInfo = (queryObject) => { }; }; +export const getNextPageParams = (cursor, first) => ({ + after: cursor, + before: undefined, + first, + last: undefined, +}); + +export const getPreviousPageParams = (cursor, last) => ({ + after: undefined, + before: cursor, + first: undefined, + last, +}); + +export const getPageParams = (pageInfo = {}, pageSize) => { + if (pageInfo.before) { + return getPreviousPageParams(pageInfo.before, pageSize); + } + + if (pageInfo.after) { + return getNextPageParams(pageInfo.after, pageSize); + } + + return {}; +}; + export const beautifyPath = (path) => (path ? path.split('/').join(' / ') : ''); export const getCommitLink = ({ project_path: projectPath, pipeline = {} }, isGroup = false) => { diff --git a/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/tags_list_spec.js b/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/tags_list_spec.js index 60554e442151e9374d1e8def21520c574ca9a050..b851f3a5e4692dbed45553df8cae0b9455c26a9e 100644 --- a/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/tags_list_spec.js +++ b/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/tags_list_spec.js @@ -139,7 +139,7 @@ describe('Tags List', () => { expect(resolver).toHaveBeenCalledTimes(2); expect(resolver).toHaveBeenCalledWith({ ...queryData, - first: null, + first: undefined, before: tagsPageInfo.startCursor, last: GRAPHQL_PAGE_SIZE, }); @@ -251,7 +251,7 @@ describe('Tags List', () => { expect(resolver).toHaveBeenCalledWith({ ...queryData, - first: null, + first: undefined, last: GRAPHQL_PAGE_SIZE_METADATA_ENABLED, before: tagsPageInfo.startCursor, }); @@ -268,7 +268,7 @@ describe('Tags List', () => { expect(resolver).toHaveBeenLastCalledWith({ ...queryData, - first: null, + first: undefined, before: tagsPageInfo.startCursor, last: GRAPHQL_PAGE_SIZE_METADATA_ENABLED, }); @@ -338,7 +338,7 @@ describe('Tags List', () => { expect(resolver).toHaveBeenCalledTimes(2); expect(resolver).toHaveBeenLastCalledWith({ ...queryData, - first: null, + first: undefined, before: tagsPageInfo.startCursor, last: GRAPHQL_PAGE_SIZE, }); diff --git a/spec/frontend/packages_and_registries/container_registry/explorer/pages/list_spec.js b/spec/frontend/packages_and_registries/container_registry/explorer/pages/list_spec.js index d4b8f408e284f502fe034e334f0d3f51215c876d..1c58bb4776f94d48804eb15b88f20637b9cadd99 100644 --- a/spec/frontend/packages_and_registries/container_registry/explorer/pages/list_spec.js +++ b/spec/frontend/packages_and_registries/container_registry/explorer/pages/list_spec.js @@ -569,14 +569,12 @@ describe('List Page', () => { expect(resolver).toHaveBeenCalledWith( expect.objectContaining({ before: pageInfo.startCursor, - first: null, last: GRAPHQL_PAGE_SIZE, }), ); expect(detailsResolver).toHaveBeenCalledWith( expect.objectContaining({ before: pageInfo.startCursor, - first: null, last: GRAPHQL_PAGE_SIZE, }), ); @@ -600,7 +598,6 @@ describe('List Page', () => { expect.objectContaining({ sort: 'UPDATED_DESC', before: pageInfo.startCursor, - first: null, last: GRAPHQL_PAGE_SIZE, }), ); @@ -608,7 +605,6 @@ describe('List Page', () => { expect.objectContaining({ sort: 'UPDATED_DESC', before: pageInfo.startCursor, - first: null, last: GRAPHQL_PAGE_SIZE, }), ); @@ -672,7 +668,7 @@ describe('List Page', () => { describe('with metadata database enabled', () => { it.each` event | expected - ${'prev'} | ${{ before: pageInfo.startCursor, first: null, last: GRAPHQL_PAGE_SIZE_METADATA_ENABLED }} + ${'prev'} | ${{ before: pageInfo.startCursor, last: GRAPHQL_PAGE_SIZE_METADATA_ENABLED }} ${'next'} | ${{ after: pageInfo.endCursor, first: GRAPHQL_PAGE_SIZE_METADATA_ENABLED }} `('$event event triggers correct page request', async ({ event, expected }) => { const resolver = jest.fn().mockResolvedValue(graphQLImageListMock); @@ -696,7 +692,7 @@ describe('List Page', () => { it.each` cursor | expected - ${{ before: pageInfo.startCursor }} | ${{ sort: 'UPDATED_DESC', before: pageInfo.startCursor, first: null, last: GRAPHQL_PAGE_SIZE_METADATA_ENABLED }} + ${{ before: pageInfo.startCursor }} | ${{ sort: 'UPDATED_DESC', before: pageInfo.startCursor, last: GRAPHQL_PAGE_SIZE_METADATA_ENABLED }} ${{ after: pageInfo.endCursor }} | ${{ sort: 'UPDATED_DESC', after: pageInfo.endCursor, first: GRAPHQL_PAGE_SIZE_METADATA_ENABLED }} `( 'calls resolver correctly when persisted search returns $cursor', diff --git a/spec/frontend/packages_and_registries/container_registry/explorer/utils_spec.js b/spec/frontend/packages_and_registries/container_registry/explorer/utils_spec.js index 92cb6a3c9bc9ffca0cd0cb441a24942a0f724cd3..d7a9c200c7b4a9199df8a96632c87bb544752ec9 100644 --- a/spec/frontend/packages_and_registries/container_registry/explorer/utils_spec.js +++ b/spec/frontend/packages_and_registries/container_registry/explorer/utils_spec.js @@ -1,9 +1,6 @@ import { getImageName, timeTilRun, - getNextPageParams, - getPreviousPageParams, - getPageParams, } from '~/packages_and_registries/container_registry/explorer/utils'; describe('Container registry utilities', () => { @@ -38,49 +35,4 @@ describe('Container registry utilities', () => { expect(result).toBe(''); }); }); - - describe('getNextPageParams', () => { - it('should return the next page params with the provided cursor', () => { - const cursor = 'abc123'; - expect(getNextPageParams(cursor)).toEqual({ - after: cursor, - first: 10, - }); - }); - }); - - describe('getPreviousPageParams', () => { - it('should return the previous page params with the provided cursor', () => { - const cursor = 'abc123'; - expect(getPreviousPageParams(cursor)).toEqual({ - first: null, - before: cursor, - last: 10, - }); - }); - }); - - describe('getPageParams', () => { - it('should return the previous page params if before cursor is available', () => { - const pageInfo = { before: 'abc123' }; - expect(getPageParams(pageInfo)).toEqual({ - first: null, - before: pageInfo.before, - last: 10, - }); - }); - - it('should return the next page params if after cursor is available', () => { - const pageInfo = { after: 'abc123' }; - expect(getPageParams(pageInfo)).toEqual({ - after: pageInfo.after, - first: 10, - }); - }); - - it('should return an empty object if both before and after cursors are not available', () => { - const pageInfo = {}; - expect(getPageParams(pageInfo)).toEqual({}); - }); - }); }); diff --git a/spec/frontend/packages_and_registries/dependency_proxy/app_spec.js b/spec/frontend/packages_and_registries/dependency_proxy/app_spec.js index f4f6d8d10aa1b82ea08c5bb6c26d56c264f1b0ec..05ffd026f890e2f44468309999897574223956f4 100644 --- a/spec/frontend/packages_and_registries/dependency_proxy/app_spec.js +++ b/spec/frontend/packages_and_registries/dependency_proxy/app_spec.js @@ -230,7 +230,6 @@ describe('DependencyProxyApp', () => { expect(resolver).toHaveBeenCalledWith({ before: pagination().startCursor, - first: null, fullPath: provideDefaults.groupPath, last: GRAPHQL_PAGE_SIZE, }); @@ -345,7 +344,6 @@ describe('DependencyProxyApp', () => { await waitForPromises(); expect(resolver).toHaveBeenCalledWith({ - first: null, last: GRAPHQL_PAGE_SIZE, before: '1234', fullPath: provideDefaults.groupPath, diff --git a/spec/frontend/packages_and_registries/dependency_proxy/utils_spec.js b/spec/frontend/packages_and_registries/dependency_proxy/utils_spec.js deleted file mode 100644 index 72072c08537215252bafb3d9299c9818b7b69a54..0000000000000000000000000000000000000000 --- a/spec/frontend/packages_and_registries/dependency_proxy/utils_spec.js +++ /dev/null @@ -1,25 +0,0 @@ -import { getPageParams } from '~/packages_and_registries/dependency_proxy/utils'; - -describe('getPageParams', () => { - it('should return the previous page params if before cursor is available', () => { - const pageInfo = { before: 'abc123' }; - expect(getPageParams(pageInfo)).toEqual({ - first: null, - before: pageInfo.before, - last: 20, - }); - }); - - it('should return the next page params if after cursor is available', () => { - const pageInfo = { after: 'abc123' }; - expect(getPageParams(pageInfo)).toEqual({ - after: pageInfo.after, - first: 20, - }); - }); - - it('should return an empty object if both before and after cursors are not available', () => { - const pageInfo = {}; - expect(getPageParams(pageInfo)).toEqual({}); - }); -}); diff --git a/spec/frontend/packages_and_registries/package_registry/pages/list_spec.js b/spec/frontend/packages_and_registries/package_registry/pages/list_spec.js index a73f796245cbc3f2084d4c5066692f78e358169e..9952b9880eb29be1443390d832f155a76cac2be0 100644 --- a/spec/frontend/packages_and_registries/package_registry/pages/list_spec.js +++ b/spec/frontend/packages_and_registries/package_registry/pages/list_spec.js @@ -266,7 +266,6 @@ describe('PackagesListApp', () => { expect(resolver).toHaveBeenCalledWith( expect.objectContaining({ - first: null, before: pagination().startCursor, last: GRAPHQL_PAGE_SIZE, }), diff --git a/spec/frontend/packages_and_registries/package_registry/utils_spec.js b/spec/frontend/packages_and_registries/package_registry/utils_spec.js index a7aa5a3c533e5d82e4ff2903303040d547349201..bcf83eff3e0d9951a815660331027f3a88aad9c3 100644 --- a/spec/frontend/packages_and_registries/package_registry/utils_spec.js +++ b/spec/frontend/packages_and_registries/package_registry/utils_spec.js @@ -1,9 +1,4 @@ -import { - getPackageTypeLabel, - getNextPageParams, - getPreviousPageParams, - getPageParams, -} from '~/packages_and_registries/package_registry/utils'; +import { getPackageTypeLabel } from '~/packages_and_registries/package_registry/utils'; describe('Packages shared utils', () => { describe('getPackageTypeLabel', () => { @@ -27,48 +22,3 @@ describe('Packages shared utils', () => { }); }); }); - -describe('getNextPageParams', () => { - it('should return the next page params with the provided cursor', () => { - const cursor = 'abc123'; - expect(getNextPageParams(cursor)).toEqual({ - after: cursor, - first: 20, - }); - }); -}); - -describe('getPreviousPageParams', () => { - it('should return the previous page params with the provided cursor', () => { - const cursor = 'abc123'; - expect(getPreviousPageParams(cursor)).toEqual({ - first: null, - before: cursor, - last: 20, - }); - }); -}); - -describe('getPageParams', () => { - it('should return the previous page params if before cursor is available', () => { - const pageInfo = { before: 'abc123' }; - expect(getPageParams(pageInfo)).toEqual({ - first: null, - before: pageInfo.before, - last: 20, - }); - }); - - it('should return the next page params if after cursor is available', () => { - const pageInfo = { after: 'abc123' }; - expect(getPageParams(pageInfo)).toEqual({ - after: pageInfo.after, - first: 20, - }); - }); - - it('should return an empty object if both before and after cursors are not available', () => { - const pageInfo = {}; - expect(getPageParams(pageInfo)).toEqual({}); - }); -}); diff --git a/spec/frontend/packages_and_registries/shared/utils_spec.js b/spec/frontend/packages_and_registries/shared/utils_spec.js index e08ab4004e6761421058e6110b56aa394d8ae446..1838ebe79e64e7946ee4cb8fd4e812af005fb27a 100644 --- a/spec/frontend/packages_and_registries/shared/utils_spec.js +++ b/spec/frontend/packages_and_registries/shared/utils_spec.js @@ -6,6 +6,9 @@ import { extractPageInfo, beautifyPath, getCommitLink, + getNextPageParams, + getPreviousPageParams, + getPageParams, } from '~/packages_and_registries/shared/utils'; import { FILTERED_SEARCH_TERM } from '~/vue_shared/components/filtered_search_bar/constants'; @@ -79,6 +82,49 @@ describe('Packages And Registries shared utils', () => { }); }); + describe('getNextPageParams', () => { + it('should return the next page params with the provided cursor', () => { + const cursor = 'abc123'; + expect(getNextPageParams(cursor, 20)).toEqual({ + after: cursor, + first: 20, + }); + }); + }); + + describe('getPreviousPageParams', () => { + it('should return the previous page params with the provided cursor', () => { + const cursor = 'abc123'; + expect(getPreviousPageParams(cursor, 20)).toEqual({ + before: cursor, + last: 20, + }); + }); + }); + + describe('getPageParams', () => { + it('should return the previous page params if before cursor is available', () => { + const pageInfo = { before: 'abc123' }; + expect(getPageParams(pageInfo, 20)).toEqual({ + before: pageInfo.before, + last: 20, + }); + }); + + it('should return the next page params if after cursor is available', () => { + const pageInfo = { after: 'abc123' }; + expect(getPageParams(pageInfo, 20)).toEqual({ + after: pageInfo.after, + first: 20, + }); + }); + + it('should return an empty object if both before and after cursors are not available', () => { + const pageInfo = {}; + expect(getPageParams(pageInfo, 20)).toEqual({}); + }); + }); + describe('beautifyPath', () => { it('returns a string with spaces around /', () => { expect(beautifyPath('foo/bar')).toBe('foo / bar');