nuxt-directus-sdk 2.1.2 → 2.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/module.mjs +3 -2
- package/dist/runtime/components/directus-visual-editor.vue +44 -0
- package/dist/runtime/composables/directus.js +1 -1
- package/dist/runtime/composables/preview.d.ts +1 -0
- package/dist/runtime/composables/preview.js +4 -0
- package/dist/runtime/plugin.js +19 -1
- package/dist/runtime/server/services/directus.d.ts +1 -0
- package/dist/runtime/server/services/directus.js +4 -1
- package/dist/runtime/server/services/index.d.ts +1 -1
- package/dist/runtime/server/services/index.js +1 -1
- package/dist/runtime/{utils.d.ts → utils/index.d.ts} +1 -0
- package/dist/runtime/{utils.js → utils/index.js} +1 -0
- package/dist/runtime/utils/slot.d.ts +7 -0
- package/dist/runtime/utils/slot.js +40 -0
- package/package.json +3 -2
package/dist/module.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { useLogger, defineNuxtModule, createResolver, installModule, addPlugin, addImportsDir, addComponentsDir, addImportsSources, addTypeTemplate } from '@nuxt/kit';
|
|
2
2
|
import { defu } from 'defu';
|
|
3
3
|
import { generateTypes } from '../dist/runtime/types/index.js';
|
|
4
|
-
import { useUrl } from '../dist/runtime/utils.js';
|
|
4
|
+
import { useUrl } from '../dist/runtime/utils/index.js';
|
|
5
5
|
|
|
6
6
|
const name = "nuxt-directus-sdk";
|
|
7
|
-
const version = "2.1.
|
|
7
|
+
const version = "2.1.3";
|
|
8
8
|
|
|
9
9
|
const configKey = "directus";
|
|
10
10
|
const logger = useLogger("nuxt-directus-sdk");
|
|
@@ -127,6 +127,7 @@ const module = defineNuxtModule({
|
|
|
127
127
|
from: resolver.resolve("./runtime/server/services"),
|
|
128
128
|
imports: [
|
|
129
129
|
"useDirectus",
|
|
130
|
+
"useUserDirectus",
|
|
130
131
|
"useAdminDirectus",
|
|
131
132
|
"useDirectusUrl",
|
|
132
133
|
"useDirectusAccessToken"
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<script setup lang="ts" generic="T extends keyof DirectusSchema">
|
|
2
|
+
import type { PrimaryKey } from '@directus/types'
|
|
3
|
+
import { setAttr } from '@directus/visual-editing'
|
|
4
|
+
import { isVisualEditorPage } from '../composables/preview'
|
|
5
|
+
import { Slot } from '../utils'
|
|
6
|
+
|
|
7
|
+
type SingleDirectusCollection = DirectusSchema[T][0]
|
|
8
|
+
type FieldKey = keyof SingleDirectusCollection
|
|
9
|
+
|
|
10
|
+
const props = defineProps<{
|
|
11
|
+
collection: T
|
|
12
|
+
item: PrimaryKey
|
|
13
|
+
fields?: FieldKey | FieldKey[]
|
|
14
|
+
mode?: 'drawer' | 'modal' | 'popover'
|
|
15
|
+
}>()
|
|
16
|
+
|
|
17
|
+
const directusAttr = computed(() => {
|
|
18
|
+
const data: Record<any, any> = {}
|
|
19
|
+
|
|
20
|
+
Object.entries(props).forEach(([key, value]) => {
|
|
21
|
+
if (value !== undefined) {
|
|
22
|
+
data[key] = value
|
|
23
|
+
}
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
return setAttr(data as any)
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
const attributes = computed(() => {
|
|
30
|
+
if (!isVisualEditorPage()) {
|
|
31
|
+
return null
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
'data-directus': directusAttr.value,
|
|
36
|
+
}
|
|
37
|
+
})
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<template>
|
|
41
|
+
<Slot v-bind="attributes">
|
|
42
|
+
<slot />
|
|
43
|
+
</Slot>
|
|
44
|
+
</template>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useRuntimeConfig } from "#app";
|
|
2
2
|
import { authentication, createDirectus, realtime, rest } from "@directus/sdk";
|
|
3
|
-
import { useUrl } from "../utils.js";
|
|
3
|
+
import { useUrl } from "../utils/index.js";
|
|
4
4
|
import { useDirectusTokens } from "./tokens.js";
|
|
5
5
|
export function useDirectusUrl(path = "") {
|
|
6
6
|
return useUrl(useRuntimeConfig().public.directus.url, path);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isVisualEditorPage(): any;
|
package/dist/runtime/plugin.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { addRouteMiddleware, defineNuxtPlugin, refreshNuxtData, useRoute, useRuntimeConfig } from "#app";
|
|
2
|
+
import { apply, remove } from "@directus/visual-editing";
|
|
2
3
|
import { useDirectusAuth } from "./composables/auth.js";
|
|
3
4
|
import { useDirectus } from "./composables/directus.js";
|
|
5
|
+
import { isVisualEditorPage } from "./composables/preview.js";
|
|
4
6
|
import auth from "./middleware/auth.js";
|
|
5
7
|
export default defineNuxtPlugin(async (nuxtApp) => {
|
|
6
8
|
const route = useRoute();
|
|
7
9
|
const config = useRuntimeConfig();
|
|
8
10
|
const preview = route.query.preview && route.query.preview === "true";
|
|
11
|
+
const livePreview = isVisualEditorPage();
|
|
9
12
|
const token = route.query.token;
|
|
10
13
|
if (preview && token) {
|
|
11
14
|
useDirectus().setToken(token);
|
|
@@ -13,14 +16,29 @@ export default defineNuxtPlugin(async (nuxtApp) => {
|
|
|
13
16
|
refreshNuxtData();
|
|
14
17
|
});
|
|
15
18
|
}
|
|
19
|
+
if (livePreview) {
|
|
20
|
+
nuxtApp.hook("page:start", async () => {
|
|
21
|
+
if (import.meta.client) {
|
|
22
|
+
remove();
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
nuxtApp.hook("page:finish", () => {
|
|
26
|
+
if (import.meta.client) {
|
|
27
|
+
apply({ directusUrl: config.public.directus.url });
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
16
31
|
async function fetchUser() {
|
|
17
32
|
if (config.public.directus.fetchUser)
|
|
18
33
|
await useDirectusAuth().readMe();
|
|
19
34
|
}
|
|
20
35
|
await fetchUser();
|
|
36
|
+
let loadedUser = false;
|
|
21
37
|
nuxtApp.hook("page:start", async () => {
|
|
22
|
-
if (import.meta.client)
|
|
38
|
+
if (import.meta.client && !loadedUser) {
|
|
23
39
|
await fetchUser();
|
|
40
|
+
loadedUser = true;
|
|
41
|
+
}
|
|
24
42
|
});
|
|
25
43
|
addRouteMiddleware("auth", auth);
|
|
26
44
|
});
|
|
@@ -2,4 +2,5 @@ import type { H3Event } from 'h3';
|
|
|
2
2
|
export declare function useDirectusAccessToken(event: H3Event): string | undefined;
|
|
3
3
|
export declare function useDirectusUrl(path?: string): string;
|
|
4
4
|
export declare function useDirectus(token?: string): import("@directus/sdk").DirectusClient<DirectusSchema> & import("@directus/sdk").AuthenticationClient<DirectusSchema> & import("@directus/sdk").RestClient<DirectusSchema>;
|
|
5
|
+
export declare function useUserDirectus(event: H3Event): import("@directus/sdk").DirectusClient<DirectusSchema> & import("@directus/sdk").AuthenticationClient<DirectusSchema> & import("@directus/sdk").RestClient<DirectusSchema>;
|
|
5
6
|
export declare function useAdminDirectus(): import("@directus/sdk").DirectusClient<DirectusSchema> & import("@directus/sdk").AuthenticationClient<DirectusSchema> & import("@directus/sdk").RestClient<DirectusSchema>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useRuntimeConfig } from "#imports";
|
|
2
2
|
import { authentication, createDirectus, rest } from "@directus/sdk";
|
|
3
3
|
import { getCookie } from "h3";
|
|
4
|
-
import { useUrl } from "../../utils.js";
|
|
4
|
+
import { useUrl } from "../../utils/index.js";
|
|
5
5
|
export function useDirectusAccessToken(event) {
|
|
6
6
|
return getCookie(event, useRuntimeConfig().public.directus.cookieNameAccessToken);
|
|
7
7
|
}
|
|
@@ -14,6 +14,9 @@ export function useDirectus(token) {
|
|
|
14
14
|
directus.setToken(token);
|
|
15
15
|
return directus;
|
|
16
16
|
}
|
|
17
|
+
export function useUserDirectus(event) {
|
|
18
|
+
return useDirectus(useDirectusAccessToken(event));
|
|
19
|
+
}
|
|
17
20
|
export function useAdminDirectus() {
|
|
18
21
|
const config = useRuntimeConfig().directus;
|
|
19
22
|
if (!config.adminToken)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { useAdminDirectus, useDirectus, useDirectusAccessToken, useDirectusUrl } from './directus.js';
|
|
1
|
+
export { useAdminDirectus, useDirectus, useDirectusAccessToken, useDirectusUrl, useUserDirectus } from './directus.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { useAdminDirectus, useDirectus, useDirectusAccessToken, useDirectusUrl } from "./directus.js";
|
|
1
|
+
export { useAdminDirectus, useDirectus, useDirectusAccessToken, useDirectusUrl, useUserDirectus } from "./directus.js";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { VNode } from 'vue';
|
|
2
|
+
export declare function renderSlotFragments(children?: VNode[]): VNode[];
|
|
3
|
+
export declare const Slot: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
4
|
+
[key: string]: any;
|
|
5
|
+
}> | VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
6
|
+
[key: string]: any;
|
|
7
|
+
}>[] | null, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { cloneVNode, Comment, defineComponent, Fragment, mergeProps } from "vue";
|
|
2
|
+
export function renderSlotFragments(children) {
|
|
3
|
+
if (!children)
|
|
4
|
+
return [];
|
|
5
|
+
return children.flatMap((child) => {
|
|
6
|
+
if (child.type === Fragment)
|
|
7
|
+
return renderSlotFragments(child.children);
|
|
8
|
+
return [child];
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
export const Slot = defineComponent({
|
|
12
|
+
name: "PrimitiveSlot",
|
|
13
|
+
inheritAttrs: false,
|
|
14
|
+
setup(_, { attrs, slots }) {
|
|
15
|
+
return () => {
|
|
16
|
+
if (!slots.default)
|
|
17
|
+
return null;
|
|
18
|
+
const childrens = renderSlotFragments(slots.default());
|
|
19
|
+
const firstNonCommentChildrenIndex = childrens.findIndex((child) => child.type !== Comment);
|
|
20
|
+
if (firstNonCommentChildrenIndex === -1)
|
|
21
|
+
return childrens;
|
|
22
|
+
const firstNonCommentChildren = childrens[firstNonCommentChildrenIndex];
|
|
23
|
+
delete firstNonCommentChildren.props?.ref;
|
|
24
|
+
const mergedProps = firstNonCommentChildren.props ? mergeProps(attrs, firstNonCommentChildren.props) : attrs;
|
|
25
|
+
if (attrs.class && firstNonCommentChildren.props?.class)
|
|
26
|
+
delete firstNonCommentChildren.props.class;
|
|
27
|
+
const cloned = cloneVNode(firstNonCommentChildren, mergedProps);
|
|
28
|
+
for (const prop in mergedProps) {
|
|
29
|
+
if (prop.startsWith("on")) {
|
|
30
|
+
cloned.props ||= {};
|
|
31
|
+
cloned.props[prop] = mergedProps[prop];
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (childrens.length === 1)
|
|
35
|
+
return cloned;
|
|
36
|
+
childrens[firstNonCommentChildrenIndex] = cloned;
|
|
37
|
+
return childrens;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
});
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nuxt-directus-sdk",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "2.1.
|
|
5
|
-
"description": "A nuxt module that uses the
|
|
4
|
+
"version": "2.1.3",
|
|
5
|
+
"description": "A Directus nuxt module that uses the Directus SDK",
|
|
6
6
|
"author": "Matthew Rollinson <matt@rolley.io>",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"exports": {
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@directus/sdk": "^19.0.1",
|
|
35
35
|
"@directus/types": "^13.0.0",
|
|
36
|
+
"@directus/visual-editing": "^1.0.1",
|
|
36
37
|
"@nuxt/image": "^1.9.0",
|
|
37
38
|
"@nuxt/kit": "^3.16.0",
|
|
38
39
|
"change-case": "^4.1.2",
|