Skip to content

Commit

Permalink
Adjust resource icon size depending on the tile size
Browse files Browse the repository at this point in the history
  • Loading branch information
JammingBen committed Feb 21, 2023
1 parent b5bb3a7 commit e2bc1b8
Show file tree
Hide file tree
Showing 7 changed files with 53 additions and 7 deletions.
7 changes: 7 additions & 0 deletions packages/design-system/src/components/OcTile/OcTile.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,13 @@ describe('OcTile component', () => {
const wrapper = getWrapper({ resource: getSpaceMock(), isResourceSelected: true })
expect(wrapper.find('.oc-tile-card-selected').exists()).toBeTruthy()
})
it.each(['xlarge, xxlarge, xxxlarge'])(
'renders resource icon size correctly',
(resourceIconSize) => {
const wrapper = getWrapper({ resource: getSpaceMock(), resourceIconSize })
expect(wrapper.find('oc-resource-icon-stub').attributes().size).toEqual(resourceIconSize)
}
)

function getWrapper(props = {}) {
return shallowMount(OcTile, {
Expand Down
9 changes: 8 additions & 1 deletion packages/design-system/src/components/OcTile/OcTile.vue
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
<oc-resource-icon
v-else
:resource="resource"
size="xlarge"
:size="resourceIconSize"
class="tile-default-image oc-pt-xs"
/>
</slot>
Expand Down Expand Up @@ -103,6 +103,13 @@ export default defineComponent({
isExtensionDisplayed: {
type: Boolean,
default: true
},
resourceIconSize: {
type: String,
default: 'xlarge',
validator: (value: string) => {
return ['large', 'xlarge', 'xxlarge', 'xxxlarge'].includes(value)
}
}
},
emits: ['click', 'contextmenu']
Expand Down
23 changes: 21 additions & 2 deletions packages/web-app-files/src/components/FilesList/ResourceTiles.vue
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
:resource-route="getRoute(resource)"
:is-resource-selected="isResourceSelected(resource)"
:is-extension-displayed="areFileExtensionsShown"
:resource-icon-size="resourceIconSize"
@vue:mounted="
$emit('rowMounted', resource, tileRefs.tiles[resource.id], ImageDimension.Tile)
"
Expand Down Expand Up @@ -100,7 +101,7 @@ import ContextMenuQuickAction from 'web-pkg/src/components/ContextActions/Contex
// Alignment regarding naming would be an API-breaking change and can
// Be done at a later point in time?
import { useResourceRouteResolver } from '../../composables/filesList'
import { SortDir, SortField } from 'web-app-files/src/composables'
import { SortDir, SortField, ViewModeConstants } from 'web-app-files/src/composables'
export default defineComponent({
name: 'ResourceTiles',
Expand Down Expand Up @@ -149,6 +150,11 @@ export default defineComponent({
value === undefined || [SortDir.Asc.toString(), SortDir.Desc.toString()].includes(value)
)
}
},
viewSize: {
type: Number,
required: false,
default: ViewModeConstants.tilesSizeDefault
}
},
emits: ['fileClick', 'rowMounted', 'sort', 'update:selectedIds'],
Expand Down Expand Up @@ -265,6 +271,18 @@ export default defineComponent({
return unref(currentSortField) === field
}
const resourceIconSize = computed(() => {
const sizeMap = {
1: 'xlarge',
2: 'xlarge',
3: 'xxlarge',
4: 'xxlarge',
5: 'xxxlarge',
6: 'xxxlarge'
}
return sizeMap[props.viewSize] ?? 'xlarge'
})
onBeforeUpdate(() => {
tileRefs.value = {
tiles: [],
Expand All @@ -284,7 +302,8 @@ export default defineComponent({
getResourceCheckboxLabel,
selectSorting,
isSortFieldSelected,
currentSortField
currentSortField,
resourceIconSize
}
},
data() {
Expand Down
1 change: 1 addition & 0 deletions packages/web-app-files/src/views/spaces/GenericSpace.vue
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
:sort-fields="sortFields"
:sort-by="sortBy"
:sort-dir="sortDir"
:view-size="viewSize"
@row-mounted="rowMounted"
@file-click="$_fileActions_triggerDefaultAction"
@sort="handleSort"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,18 @@ describe('ResourceTiles component', () => {
})
})

it.each([
{ viewSize: 1, expected: 'xlarge' },
{ viewSize: 2, expected: 'xlarge' },
{ viewSize: 3, expected: 'xxlarge' },
{ viewSize: 4, expected: 'xxlarge' },
{ viewSize: 5, expected: 'xxxlarge' },
{ viewSize: 6, expected: 'xxxlarge' }
])('passes the "viewSize" to the OcTile component', (data) => {
const { wrapper } = getWrapper({ data: spacesResources, viewSize: data.viewSize })
expect(wrapper.find('oc-tile').attributes()['resource-icon-size']).toEqual(data.expected)
})

function getWrapper(props = {}, slots = {}) {
const storeOptions = defaultStoreMockOptions
const store = createStore(storeOptions)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ exports[`ResourceTiles component renders an array of spaces correctly 1`] = `
<!--v-if-->
<oc-list class="oc-tiles oc-flex">
<li class="oc-tiles-item">
<oc-tile is-resource-selected="false" resource="[object Object]" resource-route="[object Object]"></oc-tile>
<oc-tile is-resource-selected="false" resource="[object Object]" resource-icon-size="xlarge" resource-route="[object Object]"></oc-tile>
</li>
<li class="oc-tiles-item">
<oc-tile is-resource-selected="false" resource="[object Object]" resource-route="[object Object]"></oc-tile>
<oc-tile is-resource-selected="false" resource="[object Object]" resource-icon-size="xlarge" resource-route="[object Object]"></oc-tile>
</li>
</oc-list>
<div class="oc-tiles-footer"></div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@ exports[`Projects view different files view states lists all available project s
</div>
<ul class="oc-list oc-my-rm oc-mx-rm oc-tiles oc-flex">
<li class="oc-tiles-item">
<oc-tile-stub is-resource-selected="false" resource="[object Object]" resource-route="[object Object]"></oc-tile-stub>
<oc-tile-stub is-resource-selected="false" resource="[object Object]" resource-icon-size="xlarge" resource-route="[object Object]"></oc-tile-stub>
</li>
<li class="oc-tiles-item">
<oc-tile-stub is-resource-selected="false" resource="[object Object]" resource-route="[object Object]"></oc-tile-stub>
<oc-tile-stub is-resource-selected="false" resource="[object Object]" resource-icon-size="xlarge" resource-route="[object Object]"></oc-tile-stub>
</li>
</ul>
<div class="oc-tiles-footer"></div>
Expand Down

0 comments on commit e2bc1b8

Please sign in to comment.