Browse Source

enhancement: sorting menu

pull/2687/head
Wing-Kam Wong 2 years ago
parent
commit
e276fd1e17
  1. 50
      packages/nc-gui/components/project/spreadsheet/components/SortListMenu.vue

50
packages/nc-gui/components/project/spreadsheet/components/SortListMenu.vue

@ -37,13 +37,11 @@
@change="saveOrUpdate(sort, i)"
/>
<v-select
v-if="sort && sort.fk_column_id"
:key="i + 'sel2'"
v-model="sort.direction"
class="flex-shrink-1 flex-grow-0 caption nc-sort-dir-select"
:items="[
{ text: 'A -> Z', value: 'asc' },
{ text: 'Z -> A', value: 'desc' },
]"
:items="renderSortDirection(sort)"
:label="$t('labels.operation')"
solo
flat
@ -101,6 +99,9 @@ export default {
validSortsExist() {
return this.sortList && this.sortList.filter(sort => sort.fk_column_id !== null).length > 0;
},
columnsById() {
return (this.columns || []).reduce((o, c) => ({ ...o, [c.id]: c }), {});
},
},
watch: {
value(v) {
@ -163,6 +164,45 @@ export default {
this.$emit('updated');
this.$e('a:sort:delete');
},
renderSortDirection(sort) {
console.log(this.sortList);
// TODO: handle single / multiple select when reordering is available
// [
// { text: 'First Last', value: 'asc' },
// { text: 'Last First', value: 'desc' },
// ]
switch (this.columnsById[sort.fk_column_id].uidt) {
case UITypes.Year:
case UITypes.Number:
case UITypes.Decimal:
case UITypes.Rating:
case UITypes.Count:
case UITypes.AutoNumber:
case UITypes.Time:
case UITypes.Currency:
case UITypes.Percent:
case UITypes.Duration:
case UITypes.PhoneNumber:
case UITypes.Date:
case UITypes.DateTime:
case UITypes.CreateTime:
case UITypes.LastModifiedTime:
return [
{ text: '1 → 9', value: 'asc' },
{ text: '9 → 1', value: 'desc' },
];
case UITypes.Checkbox:
return [
{ text: '▢ → ✓', value: 'asc' },
{ text: '✓ → ▢', value: 'desc' },
];
default:
return [
{ text: 'A → Z', value: 'asc' },
{ text: 'Z → A', value: 'desc' },
];
}
},
},
};
</script>
@ -170,7 +210,7 @@ export default {
<style scoped>
.sort-grid {
display: grid;
grid-template-columns: 22px auto 100px;
grid-template-columns: 22px auto 120px;
column-gap: 6px;
row-gap: 6px;
}

Loading…
Cancel
Save