diff --git a/app/src/interfaces/_system/scope/index.ts b/app/src/interfaces/_system/scope/index.ts
new file mode 100644
index 0000000000..0c367bde99
--- /dev/null
+++ b/app/src/interfaces/_system/scope/index.ts
@@ -0,0 +1,11 @@
+import { defineInterface } from '@/interfaces/define';
+import Scope from './scope.vue';
+
+export default defineInterface({
+ id: 'scope',
+ name: '$t:scope',
+ icon: 'arrow_drop_down_circle',
+ component: Scope,
+ types: ['string'],
+ options: [],
+});
diff --git a/app/src/interfaces/_system/scope/scope.vue b/app/src/interfaces/_system/scope/scope.vue
new file mode 100644
index 0000000000..b648ca5640
--- /dev/null
+++ b/app/src/interfaces/_system/scope/scope.vue
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/src/lang/translations/en-US.yaml b/app/src/lang/translations/en-US.yaml
index 22c0ede31e..433cf94896 100644
--- a/app/src/lang/translations/en-US.yaml
+++ b/app/src/lang/translations/en-US.yaml
@@ -603,10 +603,11 @@ settings_project: Project Settings
settings_webhooks: Webhooks
settings_presets: Presets & Bookmarks
scope: Scope
+select: Select...
layout: Layout
tree_view: Tree View
changes_are_permanent: Changes are permanent
-preset_name_placeholder: Name of bookmark...
+preset_name_placeholder: Serves as default when empty...
preset_search_placeholder: Search query...
editing_preset: Editing Preset
layout_preview: Layout Preview
diff --git a/app/src/modules/settings/routes/presets/item.vue b/app/src/modules/settings/routes/presets/item.vue
index e3c8c3dd70..591e5fcc15 100644
--- a/app/src/modules/settings/routes/presets/item.vue
+++ b/app/src/modules/settings/routes/presets/item.vue
@@ -160,9 +160,7 @@ export default defineComponent({
const isNew = computed(() => props.id === '+');
- const { loading: usersLoading, users } = useUsers();
- const { loading: rolesLoading, roles } = useRoles();
- const { loading: presetLoading, preset } = usePreset();
+ const { loading, preset } = usePreset();
const { fields } = useForm();
const {
edits,
@@ -177,8 +175,6 @@ export default defineComponent({
const { save, saving } = useSave();
const { deleting, deleteAndQuit, confirmDelete } = useDelete();
- const loading = computed(() => usersLoading.value || presetLoading.value || rolesLoading.value);
-
return {
backLink,
loading,
@@ -275,8 +271,9 @@ export default defineComponent({
const hasEdits = computed(() => Object.keys(edits.value).length > 0);
const initialValues = computed(() => {
- if (isNew.value === true) return {};
- if (preset.value === null) return {};
+ const defaultValues = { scope: 'all', layout: 'tabular' };
+ if (isNew.value === true) return defaultValues;
+ if (preset.value === null) return defaultValues;
let scope = 'all';
@@ -400,85 +397,7 @@ export default defineComponent({
return { backLink };
}
- function useUsers() {
- const loading = ref(false);
- const users = ref(null);
-
- fetchUsers();
-
- return { loading, users };
-
- async function fetchUsers() {
- loading.value = true;
-
- try {
- const response = await api.get(`/users`, {
- params: {
- fields: ['email', 'first_name', 'last_name', 'id'],
- },
- });
-
- users.value = response.data.data.map((user: any) => ({
- name: userName(user),
- id: user.id,
- }));
- } catch (err) {
- unexpectedError(err);
- } finally {
- loading.value = false;
- }
- }
- }
-
- function useRoles() {
- const loading = ref(false);
- const roles = ref(null);
-
- fetchRoles();
-
- return { loading, roles };
-
- async function fetchRoles() {
- loading.value = true;
-
- try {
- const response = await api.get(`/roles`, {
- params: {
- fields: ['name', 'id'],
- },
- });
-
- roles.value = response.data.data;
- } catch (err) {
- unexpectedError(err);
- } finally {
- loading.value = false;
- }
- }
- }
-
function useForm() {
- const scopeChoices = computed(() => {
- if (usersLoading.value || rolesLoading.value) return [];
-
- const options = [
- {
- text: i18n.t('global') + ': ' + i18n.t('all'),
- value: 'all',
- },
- ];
-
- roles.value?.forEach((role) => {
- options.push({ text: i18n.t('role') + ': ' + role.name, value: `role_${role.id}` });
- });
-
- users.value?.forEach((user) => {
- options.push({ text: i18n.t('user') + ': ' + user.name, value: `user_${user.id}` });
- });
-
- return options;
- });
-
const systemCollectionWhiteList = ['directus_users', 'directus_files', 'directus_activity'];
const fields = computed(() => [
@@ -508,10 +427,7 @@ export default defineComponent({
name: i18n.t('scope'),
type: 'string',
meta: {
- interface: 'dropdown',
- options: {
- choices: scopeChoices.value,
- },
+ interface: 'scope',
width: 'half',
},
},