diff --git a/changelog/unreleased/bugfix-turned-off-file-extensions-had-no-effect b/changelog/unreleased/bugfix-turned-off-file-extensions-had-no-effect new file mode 100644 index 00000000000..2f41477397c --- /dev/null +++ b/changelog/unreleased/bugfix-turned-off-file-extensions-had-no-effect @@ -0,0 +1,6 @@ +Bugfix: Turned off file extensions not always respected + +We've fixed a bug where file extensions were shown in different places, +like Search and Top bar file info even if the user turned them off via setting. + +https://github.com/owncloud/web/pull/10176 diff --git a/packages/web-pkg/src/components/AppTopBar.vue b/packages/web-pkg/src/components/AppTopBar.vue index 4da6f8e5872..80ceed5831e 100644 --- a/packages/web-pkg/src/components/AppTopBar.vue +++ b/packages/web-pkg/src/components/AppTopBar.vue @@ -7,6 +7,7 @@ v-if="resource" id="app-top-bar-resource" :is-thumbnail-displayed="false" + :is-extension-displayed="areFileExtensionsShown" :path-prefix="pathPrefix" :resource="resource" :parent-folder-name="parentFolderName" @@ -81,7 +82,7 @@ import { computed, defineComponent, PropType, unref } from 'vue' import ContextActionMenu from './ContextActions/ContextActionMenu.vue' import { useGettext } from 'vue3-gettext' -import { Action, useEventBus, useFolderLink, useGetMatchingSpace } from '../composables' +import { Action, useFolderLink, useGetMatchingSpace, useStore } from '../composables' import { Resource, isPublicSpaceResource, @@ -110,9 +111,10 @@ export default defineComponent({ emits: ['close'], setup(props) { const { $gettext } = useGettext() - const eventBus = useEventBus() const { getMatchingSpace } = useGetMatchingSpace() + const store = useStore() + const areFileExtensionsShown = computed(() => unref(store.state.Files.areFileExtensionsShown)) const contextMenuLabel = computed(() => $gettext('Show context menu')) const closeButtonLabel = computed(() => $gettext('Close')) @@ -144,7 +146,8 @@ export default defineComponent({ contextMenuLabel, closeButtonLabel, parentFolderName, - parentFolderLinkIconAdditionalAttributes + parentFolderLinkIconAdditionalAttributes, + areFileExtensionsShown } } }) diff --git a/packages/web-pkg/src/components/Search/ResourcePreview.vue b/packages/web-pkg/src/components/Search/ResourcePreview.vue index 53313ca3eeb..3f0cadb1ff6 100644 --- a/packages/web-pkg/src/components/Search/ResourcePreview.vue +++ b/packages/web-pkg/src/components/Search/ResourcePreview.vue @@ -4,6 +4,7 @@ :path-prefix="pathPrefix" :is-path-displayed="true" :folder-link="folderLink" + :is-extension-displayed="areFileExtensionsShown" :parent-folder-link-icon-additional-attributes="parentFolderLinkIconAdditionalAttributes" :parent-folder-name="parentFolderName" :is-thumbnail-displayed="displayThumbnails" @@ -17,7 +18,7 @@ import { VisibilityObserver } from '../../observer' import { debounce } from 'lodash-es' import { computed, defineComponent, PropType, ref, unref } from 'vue' import { mapGetters } from 'vuex' -import { useGetMatchingSpace, useFileActions, useFolderLink } from '../../composables' +import { useGetMatchingSpace, useFileActions, useFolderLink, useStore } from '../../composables' import { Resource } from '@ownclouders/web-client/src/helpers' import { isResourceTxtFileAlmostEmpty } from '../../helpers' import { SearchResultValue } from './types' @@ -47,8 +48,11 @@ export default defineComponent({ getParentFolderLinkIconAdditionalAttributes, getFolderLink } = useFolderLink() + const store = useStore() const previewData = ref() + const areFileExtensionsShown = computed(() => unref(store.state.Files.areFileExtensionsShown)) + const resource = computed((): Resource => { return { ...(props.searchResult.data as Resource), @@ -98,7 +102,8 @@ export default defineComponent({ parentFolderLinkIconAdditionalAttributes: getParentFolderLinkIconAdditionalAttributes( unref(resource) ), - additionalAttrs + additionalAttrs, + areFileExtensionsShown } }, computed: { diff --git a/packages/web-pkg/tests/unit/components/AppTopBar.spec.ts b/packages/web-pkg/tests/unit/components/AppTopBar.spec.ts index 60a977cf421..23b53ffc933 100644 --- a/packages/web-pkg/tests/unit/components/AppTopBar.spec.ts +++ b/packages/web-pkg/tests/unit/components/AppTopBar.spec.ts @@ -61,20 +61,33 @@ describe('AppTopBar', () => { ) expect(wrapper.html()).toMatchSnapshot() }) + it('renders a resource without file extension if areFileExtensionsShown is set to false', () => { + const { wrapper } = getWrapper( + mock({ path: '/test.txt', shareRoot: '/test' }), + [mock()], + [mock()], + false + ) + + expect(wrapper.html()).toMatchSnapshot() + }) }) }) function getWrapper( resource: Resource = null, dropDownActions: Action[] = [], - mainActions: Action[] = [] + mainActions: Action[] = [], + areFileExtensionsShown = true ) { const storeOptions = { ...defaultStoreMockOptions } + storeOptions.modules.Files.state.areFileExtensionsShown = areFileExtensionsShown const store = createStore(storeOptions) const mocks = defaultComponentMocks({ currentRoute: mock({ name: 'admin-settings-general' }) }) return { + storeOptions, wrapper: shallowMount(AppTopBar, { props: { dropDownActions, diff --git a/packages/web-pkg/tests/unit/components/Search/ResourcePreview.spec.ts b/packages/web-pkg/tests/unit/components/Search/ResourcePreview.spec.ts index 02fe65b3cf5..f3b47dabbc4 100644 --- a/packages/web-pkg/tests/unit/components/Search/ResourcePreview.spec.ts +++ b/packages/web-pkg/tests/unit/components/Search/ResourcePreview.spec.ts @@ -15,6 +15,10 @@ jest.mock('../../../../src/composables/spaces/useGetMatchingSpace', () => ({ useGetMatchingSpace: jest.fn() })) +const selectors = { + ocResourceStub: 'oc-resource-stub' +} + describe('Preview component', () => { const driveAliasAndItem = '1' jest.mocked(useGetMatchingSpace).mockImplementation(() => useGetMatchingSpaceMock()) @@ -29,6 +33,20 @@ describe('Preview component', () => { }) expect(wrapper.html()).toMatchSnapshot() }) + it('should render resource component without file extension when areFileExtensionsShown is set to false', () => { + const { wrapper } = getWrapper({ + areFileExtensionsShown: false, + space: mock({ + id: '1', + driveType: 'project', + name: 'New space', + getDriveAliasAndItem: () => driveAliasAndItem + }) + }) + expect( + wrapper.findComponent(selectors.ocResourceStub).attributes().isextensiondisplayed + ).toBe('false') + }) }) function getWrapper({ @@ -47,13 +65,15 @@ function getWrapper({ shareRoot: '' } }, - user = { id: 'test' } + user = { id: 'test' }, + areFileExtensionsShown = true }: { route?: any hasShareJail?: boolean space?: SpaceResource searchResult?: any user?: any + areFileExtensionsShown?: boolean } = {}) { jest.mocked(useGetMatchingSpace).mockImplementation(() => useGetMatchingSpaceMock({ @@ -65,9 +85,15 @@ function getWrapper({ } }) ) - const storeOptions = { ...defaultStoreMockOptions, + modules: { + Files: { + state: { + areFileExtensionsShown + } + } + }, getters: { ...defaultStoreMockOptions.getters, configuration: () => ({ diff --git a/packages/web-pkg/tests/unit/components/__snapshots__/AppTopBar.spec.ts.snap b/packages/web-pkg/tests/unit/components/__snapshots__/AppTopBar.spec.ts.snap index e1f85b08fd4..674a31cb211 100644 --- a/packages/web-pkg/tests/unit/components/__snapshots__/AppTopBar.spec.ts.snap +++ b/packages/web-pkg/tests/unit/components/__snapshots__/AppTopBar.spec.ts.snap @@ -70,6 +70,24 @@ exports[`AppTopBar if a resource is present renders a resource and no actions (i `; +exports[`AppTopBar if a resource is present renders a resource without file extension if areFileExtensionsShown is set to false 1`] = ` + +
+ +
+ +
+
+ + + + +
+
+
+
+`; + exports[`AppTopBar if no resource is present renders only a close button 1`] = `