mirror of
https://github.com/directus/directus.git
synced 2026-04-25 03:00:53 -04:00
Rename collection presets to presets
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { useCollectionPreset } from './use-collection-preset';
|
||||
import { usePreset } from './use-collection-preset';
|
||||
|
||||
export { useCollectionPreset };
|
||||
export default useCollectionPreset;
|
||||
export { usePreset };
|
||||
export default usePreset;
|
||||
|
||||
@@ -5,7 +5,7 @@ export type Filter = {
|
||||
value: string | number;
|
||||
};
|
||||
|
||||
export type CollectionPreset = {
|
||||
export type Preset = {
|
||||
id: number;
|
||||
collection: string;
|
||||
filters: null | Filter[];
|
||||
|
||||
@@ -1,25 +1,25 @@
|
||||
import useCollectionPresetStore from '@/stores/collection-presets';
|
||||
import usePresetStore from '@/stores/presets';
|
||||
import { ref, Ref, computed, watch } from '@vue/composition-api';
|
||||
import { debounce } from 'lodash';
|
||||
import useUserStore from '@/stores/user';
|
||||
|
||||
import { Filter, CollectionPreset } from '@/stores/collection-presets/types';
|
||||
import { Filter, Preset } from '@/stores/presets/types';
|
||||
|
||||
export function useCollectionPreset(collection: Ref<string>, bookmark: Ref<number | null> = ref(null)) {
|
||||
const collectionPresetsStore = useCollectionPresetStore();
|
||||
export function usePreset(collection: Ref<string>, bookmark: Ref<number | null> = ref(null)) {
|
||||
const presetsStore = usePresetStore();
|
||||
const userStore = useUserStore();
|
||||
|
||||
const bookmarkExists = computed(() => {
|
||||
if (!bookmark.value) return false;
|
||||
|
||||
return !!collectionPresetsStore.state.collectionPresets.find((preset) => preset.id === bookmark.value);
|
||||
return !!presetsStore.state.collectionPresets.find((preset) => preset.id === bookmark.value);
|
||||
});
|
||||
|
||||
const localPreset = ref<Partial<CollectionPreset>>({});
|
||||
const localPreset = ref<Partial<Preset>>({});
|
||||
initLocalPreset();
|
||||
|
||||
const savePreset = async (preset?: Partial<CollectionPreset>) => {
|
||||
const updatedValues = await collectionPresetsStore.savePreset(preset ? preset : localPreset.value);
|
||||
const savePreset = async (preset?: Partial<Preset>) => {
|
||||
const updatedValues = await presetsStore.savePreset(preset ? preset : localPreset.value);
|
||||
|
||||
localPreset.value.id = updatedValues.id;
|
||||
|
||||
@@ -147,13 +147,13 @@ export function useCollectionPreset(collection: Ref<string>, bookmark: Ref<numbe
|
||||
function initLocalPreset() {
|
||||
if (bookmark.value === null) {
|
||||
localPreset.value = {
|
||||
...collectionPresetsStore.getPresetForCollection(collection.value),
|
||||
...presetsStore.getPresetForCollection(collection.value),
|
||||
};
|
||||
} else {
|
||||
if (bookmarkExists.value === false) return;
|
||||
|
||||
localPreset.value = {
|
||||
...collectionPresetsStore.getBookmark(+bookmark.value),
|
||||
...presetsStore.getBookmark(+bookmark.value),
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -167,7 +167,7 @@ export function useCollectionPreset(collection: Ref<string>, bookmark: Ref<numbe
|
||||
*
|
||||
* @param overrides Individual overrides for the collection preset
|
||||
*/
|
||||
async function saveCurrentAsBookmark(overrides: Partial<CollectionPreset>) {
|
||||
async function saveCurrentAsBookmark(overrides: Partial<Preset>) {
|
||||
const data = {
|
||||
...localPreset.value,
|
||||
...overrides,
|
||||
|
||||
@@ -3,7 +3,7 @@ import api from '@/api';
|
||||
import useCollection from '@/composables/use-collection';
|
||||
import Vue from 'vue';
|
||||
import { isEqual } from 'lodash';
|
||||
import { Filter } from '@/stores/collection-presets/types';
|
||||
import { Filter } from '@/stores/presets/types';
|
||||
import filtersToQuery from '@/utils/filters-to-query';
|
||||
import { orderBy } from 'lodash';
|
||||
import moveInArray from '@/utils/move-in-array';
|
||||
@@ -141,12 +141,6 @@ export function useItems(collection: Ref<string>, query: Query) {
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure we always fetch the image data for the directus_files collection when opening
|
||||
// the file library
|
||||
if (collection.value === 'directus_files' && fieldsToFetch.includes('data') === false) {
|
||||
fieldsToFetch.push('data');
|
||||
}
|
||||
|
||||
// Filter out fake internal columns. This is (among other things) for a fake $file m2o field
|
||||
// on directus_files
|
||||
fieldsToFetch = fieldsToFetch.filter((field) => field.startsWith('$') === false);
|
||||
|
||||
@@ -3,7 +3,7 @@ import { useCollectionsStore } from '@/stores/collections/';
|
||||
import { useFieldsStore } from '@/stores/fields/';
|
||||
import { useUserStore } from '@/stores/user/';
|
||||
import { useRequestsStore } from '@/stores/requests/';
|
||||
import { useCollectionPresetsStore } from '@/stores/collection-presets/';
|
||||
import { usePresetsStore } from '@/stores/presets/';
|
||||
import { useSettingsStore } from '@/stores/settings/';
|
||||
//
|
||||
import { useLatencyStore } from '@/stores/latency';
|
||||
@@ -24,7 +24,7 @@ export function useStores(
|
||||
useFieldsStore,
|
||||
useUserStore,
|
||||
useRequestsStore,
|
||||
useCollectionPresetsStore,
|
||||
usePresetsStore,
|
||||
useSettingsStore,
|
||||
useLatencyStore,
|
||||
useRelationsStore,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Filter } from '@/stores/collection-presets/types';
|
||||
import { Filter } from '@/stores/presets/types';
|
||||
import { Relation } from '@/stores/relations/types';
|
||||
import { Field } from '@/stores/fields/types';
|
||||
import { Ref, ref, computed } from '@vue/composition-api';
|
||||
|
||||
@@ -69,7 +69,7 @@ import useCollectionsStore from '@/stores/collections';
|
||||
import useFieldsStore from '@/stores/fields';
|
||||
import ModalDetail from '@/views/private/components/modal-detail';
|
||||
import ModalBrowse from '@/views/private/components/modal-browse';
|
||||
import { Filter } from '@/stores/collection-presets/types';
|
||||
import { Filter } from '@/stores/presets/types';
|
||||
import { Header } from '@/components/v-table/types';
|
||||
|
||||
export default defineComponent({
|
||||
|
||||
@@ -130,13 +130,14 @@
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, PropType, toRefs, inject, computed, ref } from '@vue/composition-api';
|
||||
import { Filter } from '@/stores/collection-presets/types';
|
||||
import { Filter } from '@/stores/presets/types';
|
||||
import useSync from '@/composables/use-sync/';
|
||||
import useCollection from '@/composables/use-collection/';
|
||||
import useItems from '@/composables/use-items';
|
||||
import Card from './components/card.vue';
|
||||
import getFieldsFromTemplate from '@/utils/get-fields-from-template';
|
||||
import { render } from 'micromustache';
|
||||
import useRelationsStore from '@/stores/relations';
|
||||
|
||||
import CardsHeader from './components/header.vue';
|
||||
import i18n from '@/lang';
|
||||
@@ -206,6 +207,8 @@ export default defineComponent({
|
||||
},
|
||||
},
|
||||
setup(props, { emit }) {
|
||||
const relationsStore = useRelationsStore();
|
||||
|
||||
const layoutElement = ref<HTMLElement | null>(null);
|
||||
const mainElement = inject('main-element', ref<Element | null>(null));
|
||||
|
||||
@@ -223,7 +226,14 @@ export default defineComponent({
|
||||
);
|
||||
|
||||
const fileFields = computed(() => {
|
||||
return [...availableFields.value.filter((field) => field.system.special === 'file')];
|
||||
return availableFields.value.filter((field) => {
|
||||
if (field.field === '$file') return true;
|
||||
return !!relationsStore.state.relations.find((relation) => {
|
||||
return (
|
||||
relation.collection_many === props.collection && relation.collection_one === 'directus_files'
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
const { size, icon, imageSource, title, subtitle, imageFit } = useViewOptions();
|
||||
@@ -354,7 +364,9 @@ export default defineComponent({
|
||||
|
||||
if (imageSource.value) {
|
||||
fields.push(`${imageSource.value}.type`);
|
||||
fields.push(`${imageSource.value}.data`);
|
||||
fields.push(`${imageSource.value}.filename_disk`);
|
||||
fields.push(`${imageSource.value}.storage`);
|
||||
fields.push(`${imageSource.value}.links`);
|
||||
}
|
||||
|
||||
const sortField = sort.value.startsWith('-') ? sort.value.substring(1) : sort.value;
|
||||
|
||||
@@ -32,17 +32,12 @@
|
||||
<script lang="ts">
|
||||
import { defineComponent, PropType, computed } from '@vue/composition-api';
|
||||
import router from '@/router';
|
||||
import getRootPath from '@/utils/get-root-path';
|
||||
|
||||
type File = {
|
||||
[key: string]: any;
|
||||
id: string;
|
||||
type: string;
|
||||
data: {
|
||||
full_url: string;
|
||||
thumbnails: {
|
||||
key: string;
|
||||
url: string;
|
||||
}[];
|
||||
};
|
||||
};
|
||||
|
||||
export default defineComponent({
|
||||
@@ -100,17 +95,13 @@ export default defineComponent({
|
||||
if (props.file.type.startsWith('image') === false) return null;
|
||||
if (props.file.type.includes('svg')) return null;
|
||||
|
||||
let key = 'directus-medium-crop';
|
||||
let key = 'directus-medium-cover';
|
||||
|
||||
if (props.crop === false) {
|
||||
key = 'directus-medium-contain';
|
||||
}
|
||||
|
||||
const thumbnail = props.file.data.thumbnails.find((thumbnail) => thumbnail.key === key);
|
||||
|
||||
if (!thumbnail) return null;
|
||||
|
||||
return thumbnail.url;
|
||||
return getRootPath() + `assets/${props.file.id}?key=${key}`;
|
||||
});
|
||||
|
||||
const svgSource = computed(() => {
|
||||
@@ -118,7 +109,7 @@ export default defineComponent({
|
||||
if (props.file.type.startsWith('image') === false) return null;
|
||||
if (props.file.type.includes('svg') === false) return null;
|
||||
|
||||
return props.file.data.full_url;
|
||||
return getRootPath() + `assets/${props.file.id}`;
|
||||
});
|
||||
|
||||
const selectionIcon = computed(() => {
|
||||
|
||||
@@ -163,7 +163,7 @@ import Draggable from 'vuedraggable';
|
||||
import useCollection from '@/composables/use-collection';
|
||||
import useItems from '@/composables/use-items';
|
||||
import { render } from 'micromustache';
|
||||
import { Filter } from '@/stores/collection-presets/types';
|
||||
import { Filter } from '@/stores/presets/types';
|
||||
import i18n from '@/lang';
|
||||
import adjustFieldsForDisplays from '@/utils/adjust-fields-for-displays';
|
||||
import hideDragImage from '@/utils/hide-drag-image';
|
||||
|
||||
@@ -36,7 +36,7 @@ import { defineComponent, computed, ref } from '@vue/composition-api';
|
||||
import ActivityNavigation from '../../components/navigation/';
|
||||
import { i18n } from '@/lang';
|
||||
import { LayoutComponent } from '@/layouts/types';
|
||||
import useCollectionPreset from '@/composables/use-collection-preset';
|
||||
import usePreset from '@/composables/use-collection-preset';
|
||||
import marked from 'marked';
|
||||
|
||||
type Item = {
|
||||
@@ -50,7 +50,7 @@ export default defineComponent({
|
||||
setup() {
|
||||
const layout = ref<LayoutComponent | null>(null);
|
||||
|
||||
const { viewOptions, viewQuery } = useCollectionPreset(ref('directus_activity'));
|
||||
const { viewOptions, viewQuery } = usePreset(ref('directus_activity'));
|
||||
const { breadcrumb } = useBreadcrumb();
|
||||
|
||||
return {
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
<script lang="ts">
|
||||
import { defineComponent, computed } from '@vue/composition-api';
|
||||
import useNavigation from '../../composables/use-navigation';
|
||||
import useCollectionPresetsStore from '@/stores/collection-presets';
|
||||
import usePresetsStore from '@/stores/presets';
|
||||
|
||||
export default defineComponent({
|
||||
props: {
|
||||
@@ -40,11 +40,11 @@ export default defineComponent({
|
||||
},
|
||||
},
|
||||
setup() {
|
||||
const collectionPresetsStore = useCollectionPresetsStore();
|
||||
const presetsStore = usePresetsStore();
|
||||
const { customNavItems, navItems } = useNavigation();
|
||||
|
||||
const bookmarks = computed(() => {
|
||||
return collectionPresetsStore.state.collectionPresets
|
||||
return presetsStore.state.collectionPresets
|
||||
.filter((preset) => {
|
||||
return preset.title !== null && preset.collection.startsWith('directus_') === false;
|
||||
})
|
||||
|
||||
@@ -141,7 +141,7 @@ import api from '@/api';
|
||||
import { LayoutComponent } from '@/layouts/types';
|
||||
import CollectionsNotFound from '../not-found/';
|
||||
import useCollection from '@/composables/use-collection';
|
||||
import useCollectionPreset from '@/composables/use-collection-preset';
|
||||
import usePreset from '@/composables/use-collection-preset';
|
||||
import LayoutDrawerDetail from '@/views/private/components/layout-drawer-detail';
|
||||
import SearchInput from '@/views/private/components/search-input';
|
||||
import BookmarkAdd from '@/views/private/components/bookmark-add';
|
||||
@@ -222,7 +222,7 @@ export default defineComponent({
|
||||
bookmarkExists,
|
||||
saveCurrentAsBookmark,
|
||||
title: bookmarkName,
|
||||
} = useCollectionPreset(collection, bookmarkID);
|
||||
} = usePreset(collection, bookmarkID);
|
||||
const { confirmDelete, deleting, batchDelete } = useBatchDelete();
|
||||
|
||||
const {
|
||||
|
||||
@@ -107,7 +107,7 @@ import FilesNavigation from '../../components/navigation/';
|
||||
import { i18n } from '@/lang';
|
||||
import api from '@/api';
|
||||
import { LayoutComponent } from '@/layouts/types';
|
||||
import useCollectionPreset from '@/composables/use-collection-preset';
|
||||
import usePreset from '@/composables/use-collection-preset';
|
||||
import FilterDrawerDetail from '@/views/private/components/filter-drawer-detail';
|
||||
import LayoutDrawerDetail from '@/views/private/components/layout-drawer-detail';
|
||||
import AddFolder from '../../components/add-folder';
|
||||
@@ -127,7 +127,7 @@ export default defineComponent({
|
||||
const layout = ref<LayoutComponent | null>(null);
|
||||
const selection = ref<Item[]>([]);
|
||||
|
||||
const { viewType, viewOptions, viewQuery, filters, searchQuery } = useCollectionPreset(ref('directus_files'));
|
||||
const { viewType, viewOptions, viewQuery, filters, searchQuery } = usePreset(ref('directus_files'));
|
||||
const { addNewLink, batchLink } = useLinks();
|
||||
const { confirmDelete, deleting, batchDelete } = useBatchDelete();
|
||||
const { breadcrumb } = useBreadcrumb();
|
||||
|
||||
@@ -199,7 +199,7 @@ export default defineComponent({
|
||||
loading.value = true;
|
||||
|
||||
try {
|
||||
const response = await api.get(`/collection_presets`, {
|
||||
const response = await api.get(`/presets`, {
|
||||
params: {
|
||||
fields: [
|
||||
'id',
|
||||
@@ -280,7 +280,7 @@ export default defineComponent({
|
||||
|
||||
try {
|
||||
const IDs = selection.value.map((item) => item.id).join(',');
|
||||
await api.delete(`/collection_presets/${IDs}`);
|
||||
await api.delete(`/presets/${IDs}`);
|
||||
selection.value = [];
|
||||
await getPresets();
|
||||
confirmDelete.value = false;
|
||||
|
||||
@@ -32,7 +32,7 @@ export default defineComponent({
|
||||
loading.value = true;
|
||||
|
||||
try {
|
||||
const response = await api.get(`/collection_presets`, {
|
||||
const response = await api.get(`/presets`, {
|
||||
params: {
|
||||
[`filter[title][nnull]`]: 1,
|
||||
fields: ['id'],
|
||||
|
||||
@@ -81,13 +81,13 @@
|
||||
import { defineComponent, computed, ref } from '@vue/composition-api';
|
||||
|
||||
import SettingsNavigation from '../../../components/navigation';
|
||||
import { CollectionPreset, Filter } from '@/stores/collection-presets/types';
|
||||
import { Preset, Filter } from '@/stores/presets/types';
|
||||
import api from '@/api';
|
||||
import i18n from '@/lang';
|
||||
import useCollectionsStore from '@/stores/collections';
|
||||
import layouts from '@/layouts';
|
||||
import router from '@/router';
|
||||
import useCollectionPresetsStore from '@/stores/collection-presets';
|
||||
import usePresetsStore from '@/stores/presets';
|
||||
import marked from 'marked';
|
||||
|
||||
type User = {
|
||||
@@ -123,7 +123,7 @@ export default defineComponent({
|
||||
},
|
||||
setup(props) {
|
||||
const collectionsStore = useCollectionsStore();
|
||||
const collectionPresetsStore = useCollectionPresetsStore();
|
||||
const presetsStore = usePresetsStore();
|
||||
const { backLink } = useLinks();
|
||||
|
||||
const isNew = computed(() => props.id === '+');
|
||||
@@ -166,7 +166,7 @@ export default defineComponent({
|
||||
async function save() {
|
||||
saving.value = true;
|
||||
|
||||
const editsParsed: Partial<CollectionPreset> = {};
|
||||
const editsParsed: Partial<Preset> = {};
|
||||
|
||||
if (edits.value.name) editsParsed.title = edits.value.name;
|
||||
if (edits.value.name?.length === 0) editsParsed.title = null;
|
||||
@@ -186,12 +186,12 @@ export default defineComponent({
|
||||
|
||||
try {
|
||||
if (isNew.value === true) {
|
||||
await api.post(`/collection_presets`, editsParsed);
|
||||
await api.post(`/presets`, editsParsed);
|
||||
} else {
|
||||
await api.patch(`/collection_presets/${props.id}`, editsParsed);
|
||||
await api.patch(`/presets/${props.id}`, editsParsed);
|
||||
}
|
||||
|
||||
await collectionPresetsStore.hydrate();
|
||||
await presetsStore.hydrate();
|
||||
|
||||
edits.value = {};
|
||||
} catch (err) {
|
||||
@@ -213,7 +213,7 @@ export default defineComponent({
|
||||
deleting.value = true;
|
||||
|
||||
try {
|
||||
await api.delete(`/collection_presets/${props.id}`);
|
||||
await api.delete(`/presets/${props.id}`);
|
||||
router.push(`/settings/presets`);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
@@ -304,7 +304,7 @@ export default defineComponent({
|
||||
function usePreset() {
|
||||
const loading = ref(false);
|
||||
const error = ref(null);
|
||||
const preset = ref<CollectionPreset | null>(null);
|
||||
const preset = ref<Preset | null>(null);
|
||||
|
||||
fetchPreset();
|
||||
|
||||
@@ -314,7 +314,7 @@ export default defineComponent({
|
||||
loading.value = true;
|
||||
|
||||
try {
|
||||
const response = await api.get(`/collection_presets/${props.id}`);
|
||||
const response = await api.get(`/presets/${props.id}`);
|
||||
|
||||
preset.value = response.data.data;
|
||||
} catch (err) {
|
||||
|
||||
@@ -1,18 +1,7 @@
|
||||
<template>
|
||||
<drawer-detail icon="info_outline" :title="$t('information')" close>
|
||||
<dl v-if="project">
|
||||
<div>
|
||||
<dt>{{ $t('php_api') }}</dt>
|
||||
<dd>{{ project.server.general.php_api }}</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>{{ $t('php_version') }}</dt>
|
||||
<dd>{{ project.server.general.php_version.split('-')[0] }}</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>{{ $t('max_upload_size') }}</dt>
|
||||
<dd>{{ bytes(project.server.max_upload_size) }}</dd>
|
||||
</div>
|
||||
<!-- @todo -->
|
||||
</dl>
|
||||
</drawer-detail>
|
||||
</template>
|
||||
|
||||
@@ -73,7 +73,7 @@ import SettingsNavigation from '../../../components/navigation/';
|
||||
import { i18n } from '@/lang';
|
||||
import api from '@/api';
|
||||
import { LayoutComponent } from '@/layouts/types';
|
||||
import useCollectionPreset from '@/composables/use-collection-preset';
|
||||
import usePreset from '@/composables/use-collection-preset';
|
||||
import marked from 'marked';
|
||||
import LayoutDrawerDetail from '@/views/private/components/layout-drawer-detail';
|
||||
|
||||
@@ -90,7 +90,7 @@ export default defineComponent({
|
||||
|
||||
const selection = ref<Item[]>([]);
|
||||
|
||||
const { viewType, viewOptions, viewQuery } = useCollectionPreset(ref('directus_webhooks'));
|
||||
const { viewType, viewOptions, viewQuery } = usePreset(ref('directus_webhooks'));
|
||||
const { addNewLink, batchLink } = useLinks();
|
||||
const { confirmDelete, deleting, batchDelete } = useBatchDelete();
|
||||
const { breadcrumb } = useBreadcrumb();
|
||||
|
||||
@@ -81,7 +81,7 @@ import UsersNavigation from '../../components/navigation/';
|
||||
import { i18n } from '@/lang';
|
||||
import api from '@/api';
|
||||
import { LayoutComponent } from '@/layouts/types';
|
||||
import useCollectionPreset from '@/composables/use-collection-preset';
|
||||
import usePreset from '@/composables/use-collection-preset';
|
||||
import FilterDrawerDetail from '@/views/private/components/filter-drawer-detail';
|
||||
import LayoutDrawerDetail from '@/views/private/components/layout-drawer-detail';
|
||||
import SearchInput from '@/views/private/components/search-input';
|
||||
@@ -105,7 +105,7 @@ export default defineComponent({
|
||||
|
||||
const selection = ref<Item[]>([]);
|
||||
|
||||
const { viewType, viewOptions, viewQuery, filters, searchQuery } = useCollectionPreset(ref('directus_users'));
|
||||
const { viewType, viewOptions, viewQuery, filters, searchQuery } = usePreset(ref('directus_users'));
|
||||
const { addNewLink, batchLink } = useLinks();
|
||||
const { confirmDelete, deleting, batchDelete } = useBatchDelete();
|
||||
const { breadcrumb } = useBreadcrumb();
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
import { CollectionPreset } from './types';
|
||||
|
||||
const defaultCollectionPreset: Omit<CollectionPreset, 'collection'> = {
|
||||
title: null,
|
||||
role: null,
|
||||
user: null,
|
||||
search_query: null,
|
||||
filters: null,
|
||||
view_type: null,
|
||||
view_query: null,
|
||||
view_options: null,
|
||||
};
|
||||
|
||||
export default defaultCollectionPreset;
|
||||
@@ -1,4 +0,0 @@
|
||||
import { useCollectionPresetsStore } from './collection-presets';
|
||||
|
||||
export { useCollectionPresetsStore };
|
||||
export default useCollectionPresetsStore;
|
||||
14
src/stores/presets/default-preset.ts
Normal file
14
src/stores/presets/default-preset.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import { Preset } from './types';
|
||||
|
||||
const defaultPreset: Omit<Preset, 'collection'> = {
|
||||
title: null,
|
||||
role: null,
|
||||
user: null,
|
||||
search_query: null,
|
||||
filters: null,
|
||||
view_type: null,
|
||||
view_query: null,
|
||||
view_options: null,
|
||||
};
|
||||
|
||||
export default defaultPreset;
|
||||
4
src/stores/presets/index.ts
Normal file
4
src/stores/presets/index.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
import { usePresetsStore } from './presets';
|
||||
|
||||
export { usePresetsStore };
|
||||
export default usePresetsStore;
|
||||
@@ -1,14 +1,14 @@
|
||||
import { createStore } from 'pinia';
|
||||
import { CollectionPreset } from './types';
|
||||
import { Preset } from './types';
|
||||
import { useUserStore } from '@/stores/user/';
|
||||
import api from '@/api';
|
||||
|
||||
import defaultCollectionPreset from './default-collection-preset';
|
||||
import defaultPreset from './default-preset';
|
||||
|
||||
export const useCollectionPresetsStore = createStore({
|
||||
id: 'collectionPresetsStore',
|
||||
export const usePresetsStore = createStore({
|
||||
id: 'presetsStore',
|
||||
state: () => ({
|
||||
collectionPresets: [] as CollectionPreset[],
|
||||
collectionPresets: [] as Preset[],
|
||||
}),
|
||||
actions: {
|
||||
async hydrate() {
|
||||
@@ -18,20 +18,20 @@ export const useCollectionPresetsStore = createStore({
|
||||
|
||||
const values = await Promise.all([
|
||||
// All user saved bookmarks and presets
|
||||
api.get(`/collection_presets`, {
|
||||
api.get(`/presets`, {
|
||||
params: {
|
||||
'filter[user][eq]': id,
|
||||
},
|
||||
}),
|
||||
// All role saved bookmarks and presets
|
||||
api.get(`/collection_presets`, {
|
||||
api.get(`/presets`, {
|
||||
params: {
|
||||
'filter[role][eq]': role.id,
|
||||
'filter[user][null]': 1,
|
||||
},
|
||||
}),
|
||||
// All global saved bookmarks and presets
|
||||
api.get(`/collection_presets`, {
|
||||
api.get(`/presets`, {
|
||||
params: {
|
||||
'filter[role][null]': 1,
|
||||
'filter[user][null]': 1,
|
||||
@@ -44,15 +44,15 @@ export const useCollectionPresetsStore = createStore({
|
||||
async dehydrate() {
|
||||
this.reset();
|
||||
},
|
||||
async create(newPreset: Partial<CollectionPreset>) {
|
||||
const response = await api.post(`/collection_presets`, newPreset);
|
||||
async create(newPreset: Partial<Preset>) {
|
||||
const response = await api.post(`/presets`, newPreset);
|
||||
|
||||
this.state.collectionPresets.push(response.data.data);
|
||||
|
||||
return response.data.data;
|
||||
},
|
||||
async update(id: number, updates: Partial<CollectionPreset>) {
|
||||
const response = await api.patch(`/collection_presets/${id}`, updates);
|
||||
async update(id: number, updates: Partial<Preset>) {
|
||||
const response = await api.patch(`/presets/${id}`, updates);
|
||||
|
||||
this.state.collectionPresets = this.state.collectionPresets.map((preset) => {
|
||||
const updatedPreset = response.data.data;
|
||||
@@ -66,7 +66,7 @@ export const useCollectionPresetsStore = createStore({
|
||||
return response.data.data;
|
||||
},
|
||||
async delete(id: number) {
|
||||
await api.delete(`/collection_presets/${id}`);
|
||||
await api.delete(`/presets/${id}`);
|
||||
|
||||
this.state.collectionPresets = this.state.collectionPresets.filter((preset) => {
|
||||
return preset.id !== id;
|
||||
@@ -85,8 +85,8 @@ export const useCollectionPresetsStore = createStore({
|
||||
|
||||
const { id: userID, role: userRole } = userStore.state.currentUser;
|
||||
|
||||
const defaultPreset = {
|
||||
...defaultCollectionPreset,
|
||||
const defaultPresetWithCollection = {
|
||||
...defaultPreset,
|
||||
collection: collection,
|
||||
user: userID,
|
||||
};
|
||||
@@ -104,7 +104,7 @@ export const useCollectionPresetsStore = createStore({
|
||||
return false;
|
||||
});
|
||||
|
||||
if (availablePresets.length === 0) return defaultPreset;
|
||||
if (availablePresets.length === 0) return defaultPresetWithCollection;
|
||||
if (availablePresets.length === 1) return availablePresets[0];
|
||||
|
||||
// In order of specificity: user-role-collection
|
||||
@@ -130,7 +130,7 @@ export const useCollectionPresetsStore = createStore({
|
||||
* preset already exists, but doesn't have a user associated, it will create a preset for
|
||||
* the user. If the preset already exists and is for a user, we update the preset.
|
||||
*/
|
||||
async savePreset(preset: CollectionPreset) {
|
||||
async savePreset(preset: Preset) {
|
||||
const userStore = useUserStore();
|
||||
if (userStore.state.currentUser === null) return null;
|
||||
const { id: userID } = userStore.state.currentUser;
|
||||
@@ -28,7 +28,7 @@ export type Filter = {
|
||||
locked?: boolean;
|
||||
};
|
||||
|
||||
export type CollectionPreset = {
|
||||
export type Preset = {
|
||||
id?: number;
|
||||
title: string | null;
|
||||
user: number | null;
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Filter } from '@/stores/collection-presets/types';
|
||||
import { Filter } from '@/stores/presets/types';
|
||||
|
||||
export default function filtersToQuery(filters: readonly Filter[]) {
|
||||
const query: Record<string, any> = {};
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, PropType, computed } from '@vue/composition-api';
|
||||
import { Filter } from '@/stores/collection-presets/types';
|
||||
import { Filter } from '@/stores/presets/types';
|
||||
import useFieldsStore from '@/stores/fields';
|
||||
import getAvailableOperatorsForType from './get-available-operators-for-type';
|
||||
import FilterInput from './filter-input.vue';
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, PropType, computed, ref, watch } from '@vue/composition-api';
|
||||
import { Filter } from '@/stores/collection-presets/types';
|
||||
import { Filter } from '@/stores/presets/types';
|
||||
import { Field } from '@/stores/fields/types';
|
||||
import useFieldsStore from '@/stores/fields';
|
||||
import useRelationsStore from '@/stores/relations';
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, PropType, computed } from '@vue/composition-api';
|
||||
import { FilterOperator } from '@/stores/collection-presets/types';
|
||||
import { FilterOperator } from '@/stores/presets/types';
|
||||
|
||||
export default defineComponent({
|
||||
props: {
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, PropType, ref, computed, toRefs, onUnmounted } from '@vue/composition-api';
|
||||
import { Filter } from '@/stores/collection-presets/types';
|
||||
import useCollectionPreset from '@/composables/use-collection-preset';
|
||||
import { Filter } from '@/stores/presets/types';
|
||||
import usePreset from '@/composables/use-collection-preset';
|
||||
|
||||
export default defineComponent({
|
||||
props: {
|
||||
@@ -53,7 +53,7 @@ export default defineComponent({
|
||||
|
||||
const { collection } = toRefs(props);
|
||||
|
||||
const { viewType, viewOptions, viewQuery } = useCollectionPreset(collection);
|
||||
const { viewType, viewOptions, viewQuery } = usePreset(collection);
|
||||
|
||||
// This is a local copy of the viewtype. This means that we can sync it the layout without
|
||||
// having use-collection-preset auto-save the values
|
||||
|
||||
Reference in New Issue
Block a user