|
1 | 1 | <template> |
2 | | -<v-dialog :model-value="fileHandler !== null" @update:model-value="unsetFileHandler" @esc="unsetFileHandler"> |
| 2 | +<v-dialog v-if="haveFilesAccess" :model-value="fileHandler !== null" @update:model-value="unsetFileHandler" @esc="unsetFileHandler"> |
3 | 3 | <v-card> |
4 | 4 | <v-card-title> |
5 | 5 | <i18n-t keypath="upload_from_device" /> |
6 | 6 | </v-card-title> |
7 | 7 | <v-card-text> |
8 | 8 | <v-upload |
9 | 9 | :ref="uploaderComponentElement" |
10 | | -@input="handleFile" |
11 | 10 | :multiple="false" |
12 | 11 | :folder="folder" |
13 | 12 | from-library |
14 | 13 | from-url |
| 14 | +@input="handleFile" |
15 | 15 | /> |
16 | 16 | </v-card-text> |
17 | 17 | <v-card-actions> |
|
21 | 21 | </v-card-actions> |
22 | 22 | </v-card> |
23 | 23 | </v-dialog> |
24 | | -<div :class="className" ref="editorElement"></div> |
| 24 | +<div ref="editorElement" :class="className"></div> |
25 | 25 | </template> |
26 | 26 |
|
27 | | -<script> |
| 27 | +<script language="js"> |
28 | 28 | import { defineComponent, ref, onMounted, onUnmounted, watch, inject } from 'vue'; |
29 | 29 | import debounce from 'debounce'; |
30 | 30 | import EditorJS from '@editorjs/editorjs'; |
@@ -53,7 +53,6 @@ import AttachesTool from './custom-plugins/plugin-attaches-patch'; |
53 | 53 | import PersonalityTool from './custom-plugins/plugin-personality-patch'; |
54 | 54 |
|
55 | 55 | export default defineComponent({ |
56 | | -emits: ['input', 'error'], |
57 | 56 | props: { |
58 | 57 | value: { |
59 | 58 | type: Object, |
@@ -84,36 +83,19 @@ export default defineComponent({ |
84 | 83 | default: undefined, |
85 | 84 | }, |
86 | 85 | }, |
87 | | -
|
| 86 | +emits: ['input', 'error'], |
88 | 87 | setup(props, { emit, attrs }) { |
89 | 88 | const api = inject('api'); |
90 | | -
|
91 | | -function addQueryToPath(path, query) { |
92 | | -const queryParams = []; |
93 | | -
|
94 | | -for (const [key, value] of Object.entries(query)) { |
95 | | -queryParams.push(`${key}=${value}`); |
96 | | -} |
97 | | -
|
98 | | -return path.includes('?') ? `${path}&${queryParams.join('&')}` : `${path}?${queryParams.join('&')}`; |
99 | | -} |
100 | | -
|
101 | | -function getToken() { |
102 | | -return api.defaults.headers?.['Authorization']?.split(' ')[1] || null; |
103 | | -} |
104 | | -
|
105 | | -function addTokenToURL(url, token) { |
106 | | -const accessToken = token || getToken(); |
107 | | -if (!accessToken) return url; |
108 | | -return addQueryToPath(url, { access_token: accessToken }); |
109 | | -} |
| 89 | +const { useCollectionsStore } = inject('stores'); |
| 90 | +const collectionStore = useCollectionsStore(); |
110 | 91 |
|
111 | 92 | const editorjsInstance = ref(null); |
112 | 93 | const uploaderComponentElement = ref(null); |
113 | 94 | const editorElement = ref(null); |
114 | 95 | const fileHandler = ref(null); |
| 96 | +const haveFilesAccess = Boolean(collectionStore.getCollection('directus_files')); |
115 | 97 |
|
116 | | -const editorValueEmitter = debounce(function saver(context) { |
| 98 | +const editorValueEmitter = debounce((context) => { |
117 | 99 | if (props.disabled || !context) return; |
118 | 100 |
|
119 | 101 | context.saver |
@@ -186,6 +168,7 @@ export default defineComponent({ |
186 | 168 | [props.font]: true, |
187 | 169 | bordered: props.bordered, |
188 | 170 | }, |
| 171 | +haveFilesAccess, |
189 | 172 |
|
190 | 173 | // Methods |
191 | 174 | editorValueEmitter, |
@@ -336,16 +319,39 @@ export default defineComponent({ |
336 | 319 |
|
337 | 320 | // Build current tools config. |
338 | 321 | const tools = {}; |
339 | | -
|
| 322 | +const fileRequiresTools = ['attaches', 'personality', 'image']; |
340 | 323 | for (const toolName of props.tools) { |
| 324 | +if (!haveFilesAccess && fileRequiresTools.includes(toolName)) continue; |
341 | 325 | // @ts-ignore |
342 | | -if (defaults.hasOwnProperty(toolName)) { |
| 326 | +if (toolName in defaults) { |
343 | 327 | tools[toolName.toString()] = defaults[toolName]; |
344 | 328 | } |
345 | 329 | } |
346 | 330 |
|
347 | 331 | return tools; |
348 | 332 | } |
| 333 | +
|
| 334 | +function addQueryToPath(path, query) { |
| 335 | +const queryParams = []; |
| 336 | +
|
| 337 | +for (const [key, value] of Object.entries(query)) { |
| 338 | +queryParams.push(`${key}=${value}`); |
| 339 | +} |
| 340 | +
|
| 341 | +return path.includes('?') ? `${path}&${queryParams.join('&')}` : `${path}?${queryParams.join('&')}`; |
| 342 | +} |
| 343 | +
|
| 344 | +function getToken() { |
| 345 | +return api.defaults.headers?.['Authorization']?.split(' ')[1] || null; |
| 346 | +} |
| 347 | +
|
| 348 | +function addTokenToURL(url, token) { |
| 349 | +const accessToken = token || getToken(); |
| 350 | +if (!accessToken) return url; |
| 351 | +return addQueryToPath(url, { |
| 352 | +access_token: accessToken, |
| 353 | +}); |
| 354 | +} |
349 | 355 | }, |
350 | 356 | }); |
351 | 357 | </script> |
|
0 commit comments