mirror of
https://github.com/directus/directus.git
synced 2026-02-13 03:15:02 -05:00
Merge branch 'main' into file-replace
This commit is contained in:
@@ -49,7 +49,7 @@
|
||||
|
||||
<v-list-item to="/activity?action=comment" exact>
|
||||
<v-list-item-icon>
|
||||
<v-icon name="notes" />
|
||||
<v-icon name="chat_bubble_outline" />
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
{{ $t('comment') }}
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<!-- @TODO add final design -->
|
||||
<p class="type-label">User:</p>
|
||||
<user-popover v-if="item.user" :user="item.user.id">
|
||||
{{ item.user.first_name }} {{ item.user.last_name }}
|
||||
{{ userName(item.user) }}
|
||||
</user-popover>
|
||||
|
||||
<p class="type-label">Action:</p>
|
||||
@@ -51,6 +51,7 @@ import { defineComponent, computed, toRefs, ref, watch } from '@vue/composition-
|
||||
import { i18n } from '@/lang';
|
||||
import router from '@/router';
|
||||
import api from '@/api';
|
||||
import { userName } from '@/utils/user-name';
|
||||
|
||||
type Values = {
|
||||
[field: string]: any;
|
||||
@@ -58,6 +59,7 @@ type Values = {
|
||||
|
||||
type ActivityRecord = {
|
||||
user: {
|
||||
email: string;
|
||||
first_name: string;
|
||||
last_name: string;
|
||||
} | null;
|
||||
@@ -97,6 +99,7 @@ export default defineComponent({
|
||||
error,
|
||||
close,
|
||||
openItemLink,
|
||||
userName,
|
||||
};
|
||||
|
||||
async function loadActivity() {
|
||||
@@ -107,6 +110,7 @@ export default defineComponent({
|
||||
params: {
|
||||
fields: [
|
||||
'user.id',
|
||||
'user.email',
|
||||
'user.first_name',
|
||||
'user.last_name',
|
||||
'action',
|
||||
|
||||
@@ -123,6 +123,7 @@ import marked from 'marked';
|
||||
import localizedFormat from '@/utils/localized-format';
|
||||
import api from '@/api';
|
||||
import getRootPath from '@/utils/get-root-path';
|
||||
import { userName } from '@/utils/user-name';
|
||||
|
||||
export default defineComponent({
|
||||
inheritAttrs: false,
|
||||
@@ -213,31 +214,31 @@ export default defineComponent({
|
||||
try {
|
||||
const response = await api.get(`/users/${props.file.uploaded_by}`, {
|
||||
params: {
|
||||
fields: ['id', 'first_name', 'last_name', 'role'],
|
||||
fields: ['id', 'email', 'first_name', 'last_name', 'role'],
|
||||
},
|
||||
});
|
||||
|
||||
const { id, first_name, last_name, role } = response.data.data;
|
||||
const user = response.data.data;
|
||||
|
||||
userCreated.value = {
|
||||
id: props.file.uploaded_by,
|
||||
name: first_name + ' ' + last_name,
|
||||
link: `/users/${id}`,
|
||||
name: userName(user),
|
||||
link: `/users/${user.id}`,
|
||||
};
|
||||
|
||||
if (props.file.modified_by) {
|
||||
const response = await api.get(`/users/${props.file.modified_by}`, {
|
||||
params: {
|
||||
fields: ['id', 'first_name', 'last_name', 'role'],
|
||||
fields: ['id', 'email', 'first_name', 'last_name', 'role'],
|
||||
},
|
||||
});
|
||||
|
||||
const { id, first_name, last_name, role } = response.data.data;
|
||||
const user = response.data.data;
|
||||
|
||||
userModified.value = {
|
||||
id: props.file.modified_by,
|
||||
name: first_name + ' ' + last_name,
|
||||
link: `/users/${id}`,
|
||||
name: userName(user),
|
||||
link: `/users/${user.id}`,
|
||||
};
|
||||
}
|
||||
} finally {
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
</v-list-item>
|
||||
|
||||
<v-list-item to="/files/mine" exact>
|
||||
<v-list-item-icon><v-icon name="face" /></v-list-item-icon>
|
||||
<v-list-item-icon><v-icon name="folder_shared" /></v-list-item-icon>
|
||||
<v-list-item-content>{{ $t('my_files') }}</v-list-item-content>
|
||||
</v-list-item>
|
||||
|
||||
|
||||
@@ -393,7 +393,7 @@ export default defineComponent({
|
||||
}
|
||||
|
||||
function downloadFile() {
|
||||
const filePath = getRootPath() + `assets/${props.primaryKey}?download=true`;
|
||||
const filePath = getRootPath() + `assets/${props.primaryKey}?download`;
|
||||
window.open(filePath, '_blank');
|
||||
}
|
||||
|
||||
|
||||
@@ -49,7 +49,15 @@
|
||||
|
||||
<template #input>
|
||||
<div class="label">
|
||||
<span class="name" v-tooltip="field.name">{{ field.field }}</span>
|
||||
<span class="name" v-tooltip="field.name">
|
||||
{{ field.field }}
|
||||
<v-icon
|
||||
name="star"
|
||||
class="required"
|
||||
sup
|
||||
v-if="field.schema && field.schema.is_nullable === false"
|
||||
/>
|
||||
</span>
|
||||
<span v-if="field.meta" class="interface">{{ interfaceName }}</span>
|
||||
<span v-else class="interface">{{ $t('db_only_click_to_configure') }}</span>
|
||||
</div>
|
||||
@@ -522,4 +530,10 @@ export default defineComponent({
|
||||
--v-button-background-color: var(--danger);
|
||||
--v-button-background-color-hover: var(--danger-125);
|
||||
}
|
||||
|
||||
.required {
|
||||
position: relative;
|
||||
left: -8px;
|
||||
color: var(--primary);
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -373,7 +373,6 @@ export default defineComponent({
|
||||
special: ['user-created'],
|
||||
interface: 'user',
|
||||
options: {
|
||||
template: '{{first_name}} {{last_name}}',
|
||||
display: 'both',
|
||||
},
|
||||
readonly: true,
|
||||
@@ -407,7 +406,6 @@ export default defineComponent({
|
||||
special: ['user-updated'],
|
||||
interface: 'user',
|
||||
options: {
|
||||
template: '{{first_name}} {{last_name}}',
|
||||
display: 'both',
|
||||
},
|
||||
readonly: true,
|
||||
|
||||
@@ -103,11 +103,12 @@ import { TranslateResult } from 'vue-i18n';
|
||||
import router from '@/router';
|
||||
import ValueNull from '@/views/private/components/value-null';
|
||||
import PresetsInfoSidebarDetail from './components/presets-info-sidebar-detail.vue';
|
||||
import { userName } from '@/utils/user-name';
|
||||
|
||||
type PresetRaw = {
|
||||
id: number;
|
||||
bookmark: null | string;
|
||||
user: null | { first_name: string; last_name: string };
|
||||
user: null | { email: string; first_name: string; last_name: string };
|
||||
role: null | { name: string };
|
||||
collection: string;
|
||||
layout: string;
|
||||
@@ -173,7 +174,7 @@ export default defineComponent({
|
||||
}
|
||||
|
||||
if (preset.user) {
|
||||
scope = `${preset.user.first_name} ${preset.user.last_name}`;
|
||||
scope = userName(preset.user);
|
||||
}
|
||||
|
||||
const collection = collectionsStore.getCollection(preset.collection)?.name;
|
||||
@@ -200,6 +201,7 @@ export default defineComponent({
|
||||
fields: [
|
||||
'id',
|
||||
'bookmark',
|
||||
'user.email',
|
||||
'user.first_name',
|
||||
'user.last_name',
|
||||
'role.name',
|
||||
|
||||
@@ -102,6 +102,7 @@ import { useCollectionsStore, usePresetsStore } from '@/stores';
|
||||
import { getLayouts } from '@/layouts';
|
||||
import router from '@/router';
|
||||
import marked from 'marked';
|
||||
import { userName } from '@/utils/user-name';
|
||||
|
||||
type User = {
|
||||
id: number;
|
||||
@@ -365,12 +366,12 @@ export default defineComponent({
|
||||
try {
|
||||
const response = await api.get(`/users`, {
|
||||
params: {
|
||||
fields: ['first_name', 'last_name', 'id'],
|
||||
fields: ['email', 'first_name', 'last_name', 'id'],
|
||||
},
|
||||
});
|
||||
|
||||
users.value = response.data.data.map((user: any) => ({
|
||||
name: user.first_name + ' ' + user.last_name,
|
||||
name: userName(user),
|
||||
id: user.id,
|
||||
}));
|
||||
} catch (err) {
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
<div class="user-box" v-if="isNew === false">
|
||||
<div class="avatar">
|
||||
<v-skeleton-loader v-if="loading || previewLoading" />
|
||||
<img v-else-if="avatarSrc" :src="avatarSrc" :alt="item.first_name" />
|
||||
<img v-else-if="avatarSrc" :src="avatarSrc" :alt="item.email" />
|
||||
<v-icon v-else name="account_circle" outline x-large />
|
||||
</div>
|
||||
<div class="user-box-content">
|
||||
@@ -112,7 +112,7 @@
|
||||
<v-skeleton-loader type="text" />
|
||||
</template>
|
||||
<template v-else-if="isNew === false">
|
||||
<div class="name type-title">{{ item.first_name }} {{ item.last_name }}</div>
|
||||
<div class="name type-title">{{ userName(item) }}</div>
|
||||
<div class="email">{{ item.email }}</div>
|
||||
<v-chip :class="item.status" small>{{ roleName }}</v-chip>
|
||||
</template>
|
||||
@@ -179,6 +179,7 @@ import { getRootPath } from '@/utils/get-root-path';
|
||||
import useShortcut from '@/composables/use-shortcut';
|
||||
import { isAllowed } from '@/utils/is-allowed';
|
||||
import useCollection from '@/composables/use-collection';
|
||||
import { userName } from '@/utils/user-name';
|
||||
|
||||
type Values = {
|
||||
[field: string]: any;
|
||||
@@ -255,7 +256,7 @@ export default defineComponent({
|
||||
|
||||
if (isNew.value === false && item.value !== null) {
|
||||
const user = item.value as any;
|
||||
return `${user.first_name} ${user.last_name}`;
|
||||
return userName(user);
|
||||
}
|
||||
|
||||
return i18n.t('adding_user');
|
||||
@@ -334,6 +335,7 @@ export default defineComponent({
|
||||
archiving,
|
||||
archiveTooltip,
|
||||
form,
|
||||
userName,
|
||||
};
|
||||
|
||||
function useBreadcrumb() {
|
||||
|
||||
Reference in New Issue
Block a user