Commit 67ae4d8a authored by Nicolò Maria Mezzopera's avatar Nicolò Maria Mezzopera Committed by Nicolò Maria Mezzopera

Packages list sort by Published and store pref

Changelog: changed
parent 3736bc11
...@@ -9,6 +9,8 @@ import { ...@@ -9,6 +9,8 @@ import {
FILTERED_SEARCH_TERM, FILTERED_SEARCH_TERM,
FILTERED_SEARCH_TYPE, FILTERED_SEARCH_TYPE,
} from '~/packages_and_registries/shared/constants'; } from '~/packages_and_registries/shared/constants';
import { LIST_KEY_CREATED_AT } from '~/packages_and_registries/package_registry/constants';
import LocalStorageSync from '~/vue_shared/components/local_storage_sync.vue';
import PackageTypeToken from './tokens/package_type_token.vue'; import PackageTypeToken from './tokens/package_type_token.vue';
export default { export default {
...@@ -22,13 +24,13 @@ export default { ...@@ -22,13 +24,13 @@ export default {
operators: OPERATOR_IS_ONLY, operators: OPERATOR_IS_ONLY,
}, },
], ],
components: { RegistrySearch, UrlSync }, components: { RegistrySearch, UrlSync, LocalStorageSync },
inject: ['isGroupPage'], inject: ['isGroupPage'],
data() { data() {
return { return {
filters: [], filters: [],
sorting: { sorting: {
orderBy: 'name', orderBy: LIST_KEY_CREATED_AT,
sort: 'desc', sort: 'desc',
}, },
mountRegistrySearch: false, mountRegistrySearch: false,
...@@ -94,19 +96,26 @@ export default { ...@@ -94,19 +96,26 @@ export default {
</script> </script>
<template> <template>
<url-sync> <local-storage-sync
<template #default="{ updateQuery }"> storage-key="package_registry_list_sorting"
<registry-search :value="sorting"
v-if="mountRegistrySearch" as-json
:filter="filters" @input="updateSorting"
:sorting="sorting" >
:tokens="$options.tokens" <url-sync>
:sortable-fields="sortableFields" <template #default="{ updateQuery }">
@sorting:changed="updateSortingAndEmitUpdate" <registry-search
@filter:changed="updateFilters" v-if="mountRegistrySearch"
@filter:submit="emitUpdate" :filter="filters"
@query:changed="updateQuery" :sorting="sorting"
/> :tokens="$options.tokens"
</template> :sortable-fields="sortableFields"
</url-sync> @sorting:changed="updateSortingAndEmitUpdate"
@filter:changed="updateFilters"
@filter:submit="emitUpdate"
@query:changed="updateQuery"
/>
</template>
</url-sync>
</local-storage-sync>
</template> </template>
...@@ -5,7 +5,10 @@ import component from '~/packages_and_registries/package_registry/components/lis ...@@ -5,7 +5,10 @@ import component from '~/packages_and_registries/package_registry/components/lis
import PackageTypeToken from '~/packages_and_registries/package_registry/components/list/tokens/package_type_token.vue'; import PackageTypeToken from '~/packages_and_registries/package_registry/components/list/tokens/package_type_token.vue';
import RegistrySearch from '~/vue_shared/components/registry/registry_search.vue'; import RegistrySearch from '~/vue_shared/components/registry/registry_search.vue';
import UrlSync from '~/vue_shared/components/url_sync.vue'; import UrlSync from '~/vue_shared/components/url_sync.vue';
import LocalStorageSync from '~/vue_shared/components/local_storage_sync.vue';
import { useMockLocationHelper } from 'helpers/mock_window_location_helper'; import { useMockLocationHelper } from 'helpers/mock_window_location_helper';
import { LIST_KEY_CREATED_AT } from '~/packages_and_registries/package_registry/constants';
import { getQueryParams, extractFilterAndSorting } from '~/packages_and_registries/shared/utils'; import { getQueryParams, extractFilterAndSorting } from '~/packages_and_registries/shared/utils';
jest.mock('~/packages_and_registries/shared/utils'); jest.mock('~/packages_and_registries/shared/utils');
...@@ -22,6 +25,7 @@ describe('Package Search', () => { ...@@ -22,6 +25,7 @@ describe('Package Search', () => {
const findRegistrySearch = () => wrapper.findComponent(RegistrySearch); const findRegistrySearch = () => wrapper.findComponent(RegistrySearch);
const findUrlSync = () => wrapper.findComponent(UrlSync); const findUrlSync = () => wrapper.findComponent(UrlSync);
const findLocalStorageSync = () => wrapper.findComponent(LocalStorageSync);
const mountComponent = (isGroupPage = false) => { const mountComponent = (isGroupPage = false) => {
wrapper = shallowMountExtended(component, { wrapper = shallowMountExtended(component, {
...@@ -32,6 +36,7 @@ describe('Package Search', () => { ...@@ -32,6 +36,7 @@ describe('Package Search', () => {
}, },
stubs: { stubs: {
UrlSync, UrlSync,
LocalStorageSync,
}, },
}); });
}; };
...@@ -64,6 +69,19 @@ describe('Package Search', () => { ...@@ -64,6 +69,19 @@ describe('Package Search', () => {
expect(findUrlSync().exists()).toBe(true); expect(findUrlSync().exists()).toBe(true);
}); });
it('has a LocalStorageSync component', () => {
mountComponent();
expect(findLocalStorageSync().props()).toMatchObject({
asJson: true,
storageKey: 'package_registry_list_sorting',
value: {
orderBy: LIST_KEY_CREATED_AT,
sort: 'desc',
},
});
});
it.each` it.each`
isGroupPage | page isGroupPage | page
${false} | ${'project'} ${false} | ${'project'}
...@@ -92,7 +110,7 @@ describe('Package Search', () => { ...@@ -92,7 +110,7 @@ describe('Package Search', () => {
await nextTick(); await nextTick();
expect(findRegistrySearch().props('sorting')).toEqual({ sort: 'foo', orderBy: 'name' }); expect(findRegistrySearch().props('sorting')).toEqual({ sort: 'foo', orderBy: 'created_at' });
// there is always a first call on mounted that emits up default values // there is always a first call on mounted that emits up default values
expect(wrapper.emitted('update')[1]).toEqual([ expect(wrapper.emitted('update')[1]).toEqual([
...@@ -101,7 +119,7 @@ describe('Package Search', () => { ...@@ -101,7 +119,7 @@ describe('Package Search', () => {
packageName: '', packageName: '',
packageType: undefined, packageType: undefined,
}, },
sort: 'NAME_FOO', sort: 'CREATED_FOO',
}, },
]); ]);
}); });
...@@ -133,7 +151,7 @@ describe('Package Search', () => { ...@@ -133,7 +151,7 @@ describe('Package Search', () => {
packageName: '', packageName: '',
packageType: undefined, packageType: undefined,
}, },
sort: 'NAME_DESC', sort: 'CREATED_DESC',
}, },
]); ]);
}); });
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment