mirror of
https://github.com/directus/directus.git
synced 2026-02-04 11:05:14 -05:00
File library issue (#446)
* Fix default state for file library, dont allow sorting by fake fields * Fix duplicate collection presets * Force type field to be fetched in file library * Fix wrong assignment
This commit is contained in:
@@ -7,11 +7,15 @@ import { Filter } from './types';
|
||||
export function useCollectionPreset(collection: Ref<string>) {
|
||||
const collectionPresetsStore = useCollectionPresetStore();
|
||||
|
||||
const savePreset = debounce(collectionPresetsStore.savePreset, 450);
|
||||
const localPreset = ref({
|
||||
...collectionPresetsStore.getPresetForCollection(collection.value),
|
||||
});
|
||||
|
||||
const savePreset = debounce(async (preset) => {
|
||||
await collectionPresetsStore.savePreset(preset);
|
||||
localPreset.value = collectionPresetsStore.getPresetForCollection(collection.value);
|
||||
}, 450);
|
||||
|
||||
watch(collection, () => {
|
||||
localPreset.value = {
|
||||
...collectionPresetsStore.getPresetForCollection(collection.value),
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
</drawer-detail>
|
||||
</portal>
|
||||
|
||||
<cards-header :fields="fieldsInCollection" :selection.sync="_selection" :sort.sync="sort" />
|
||||
<cards-header :fields="availableFields" :selection.sync="_selection" :sort.sync="sort" />
|
||||
|
||||
<div class="grid">
|
||||
<template v-if="loading">
|
||||
@@ -186,7 +186,7 @@ export default defineComponent({
|
||||
const { primaryKeyField, fields: fieldsInCollection } = useCollection(collection);
|
||||
|
||||
const availableFields = computed(() =>
|
||||
fieldsInCollection.value.filter(({ hidden_browse }) => hidden_browse === false)
|
||||
fieldsInCollection.value.filter((field) => field.hidden_browse === false)
|
||||
);
|
||||
|
||||
const fileFields = computed(() => {
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
<v-list dense>
|
||||
<v-list-item
|
||||
v-for="field in fields"
|
||||
v-for="field in fieldsWithoutFake"
|
||||
:key="field.field"
|
||||
:active="field.field === sortKey"
|
||||
@click="_sort = field.field"
|
||||
@@ -69,7 +69,19 @@ export default defineComponent({
|
||||
return props.fields.find((field) => field.field === sortKey.value);
|
||||
});
|
||||
|
||||
return { descending, toggleDescending, sortField, _sort, _selection, sortKey };
|
||||
const fieldsWithoutFake = computed(() =>
|
||||
props.fields.filter((field) => field.field.startsWith('$') === false)
|
||||
);
|
||||
|
||||
return {
|
||||
descending,
|
||||
toggleDescending,
|
||||
sortField,
|
||||
_sort,
|
||||
_selection,
|
||||
sortKey,
|
||||
fieldsWithoutFake,
|
||||
};
|
||||
|
||||
function toggleDescending() {
|
||||
if (descending.value === true) {
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
:selection.sync="selection"
|
||||
:view-options.sync="viewOptions"
|
||||
:view-query.sync="viewQuery"
|
||||
:filters="filtersWithFolder"
|
||||
:filters="filtersWithFolderAndType"
|
||||
@update:filters="filters = $event"
|
||||
:detail-route="'/{{project}}/files/{{primaryKey}}'"
|
||||
/>
|
||||
@@ -106,7 +106,7 @@ export default defineComponent({
|
||||
|
||||
const currentFolder = ref(null);
|
||||
|
||||
const filtersWithFolder = computed(() => {
|
||||
const filtersWithFolderAndType = computed(() => {
|
||||
if (currentFolder.value !== null) {
|
||||
return [
|
||||
...filters.value,
|
||||
@@ -115,10 +115,40 @@ export default defineComponent({
|
||||
operator: 'eq',
|
||||
value: currentFolder.value,
|
||||
},
|
||||
{
|
||||
locked: 1,
|
||||
field: 'type',
|
||||
operator: 'nnull',
|
||||
value: 1,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
return [
|
||||
...filters.value,
|
||||
{
|
||||
locked: 1,
|
||||
field: 'type',
|
||||
operator: 'nnull',
|
||||
value: 1,
|
||||
},
|
||||
];
|
||||
});
|
||||
|
||||
if (viewType.value === null) {
|
||||
viewType.value = 'cards';
|
||||
}
|
||||
|
||||
if (viewOptions.value === null) {
|
||||
if (viewType.value === 'cards') {
|
||||
viewOptions.value = {
|
||||
icon: 'insert_drive_file',
|
||||
title: '{{title}}',
|
||||
subtitle: '{{type}} • {{filesize}}',
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
addNewLink,
|
||||
batchDelete,
|
||||
@@ -133,7 +163,7 @@ export default defineComponent({
|
||||
viewQuery,
|
||||
viewType,
|
||||
currentFolder,
|
||||
filtersWithFolder,
|
||||
filtersWithFolderAndType,
|
||||
};
|
||||
|
||||
function useBatchDelete() {
|
||||
|
||||
@@ -138,7 +138,7 @@ export default defineComponent({
|
||||
}
|
||||
|
||||
if (viewOptions.value === null) {
|
||||
if ((viewType.value = 'cards')) {
|
||||
if (viewType.value === 'cards') {
|
||||
viewOptions.value = {
|
||||
icon: 'person',
|
||||
title: '{{first_name}} {{last_name}}',
|
||||
|
||||
Reference in New Issue
Block a user