includio-cms 0.7.2 → 0.13.1
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/CHANGELOG.md +128 -0
- package/ROADMAP.md +54 -2
- package/dist/admin/api/generate-styles.d.ts +2 -0
- package/dist/admin/api/generate-styles.js +32 -0
- package/dist/admin/api/handler.js +33 -0
- package/dist/admin/api/media-gc.js +10 -4
- package/dist/admin/api/rest/handler.js +17 -0
- package/dist/admin/api/rest/routes/collections.js +25 -13
- package/dist/admin/api/rest/routes/entries.d.ts +1 -1
- package/dist/admin/api/rest/routes/entries.js +10 -10
- package/dist/admin/api/rest/routes/media.d.ts +2 -0
- package/dist/admin/api/rest/routes/media.js +9 -0
- package/dist/admin/api/rest/routes/schema.d.ts +5 -0
- package/dist/admin/api/rest/routes/schema.js +152 -0
- package/dist/admin/api/rest/routes/singletons.d.ts +1 -1
- package/dist/admin/api/rest/routes/singletons.js +8 -7
- package/dist/admin/api/rest/routes/upload.d.ts +2 -0
- package/dist/admin/api/rest/routes/upload.js +28 -0
- package/dist/admin/api/upload.js +13 -0
- package/dist/admin/client/collection/collection-entries.svelte +35 -13
- package/dist/admin/client/entry/entry.svelte +21 -23
- package/dist/admin/client/entry/header/a11y-validator.js +2 -2
- package/dist/admin/client/entry/header/publish-panel.svelte +33 -85
- package/dist/admin/client/entry/header/status-badge.svelte +2 -2
- package/dist/admin/client/entry/header/version-history-sheet.svelte +9 -9
- package/dist/admin/client/entry/header/visibility.svelte +16 -10
- package/dist/admin/client/entry/utils.d.ts +3 -0
- package/dist/admin/client/entry/utils.js +22 -4
- package/dist/admin/client/form/form-submission/form-submission-page.svelte +4 -1
- package/dist/admin/client/form/form-submission/submission-field.svelte +10 -0
- package/dist/admin/client/index.d.ts +1 -0
- package/dist/admin/client/index.js +1 -0
- package/dist/admin/client/maintenance/maintenance-page.svelte +146 -2
- package/dist/admin/client/users/users-page.svelte +5 -6
- package/dist/admin/client/users/users-page.svelte.d.ts +1 -4
- package/dist/admin/components/fields/block-picker-modal.svelte +13 -4
- package/dist/admin/components/fields/blocks-field.svelte +40 -19
- package/dist/admin/components/fields/field-renderer.svelte +4 -8
- package/dist/admin/components/fields/object-field.svelte +7 -12
- package/dist/admin/components/fields/select-field.svelte +8 -2
- package/dist/admin/components/fields/seo-field.svelte +40 -93
- package/dist/admin/components/fields/simple-array-field.svelte +27 -16
- package/dist/admin/components/fields/text-field-wrapper.svelte +52 -197
- package/dist/admin/components/fields/text-field-wrapper.svelte.d.ts +2 -2
- package/dist/admin/components/fields/url-field-wrapper.svelte +15 -25
- package/dist/admin/components/fields/url-field.svelte +61 -72
- package/dist/admin/components/layout/layout-renderer.svelte +10 -4
- package/dist/admin/components/media/file-preview.svelte +10 -1
- package/dist/admin/components/media/file-upload.svelte +5 -1
- package/dist/admin/components/media/file-upload.svelte.d.ts +1 -0
- package/dist/admin/components/media/files-list.svelte +12 -3
- package/dist/admin/components/media/media-library.svelte +109 -37
- package/dist/admin/components/media/media-selector.svelte +90 -16
- package/dist/admin/components/media/tag-sidebar.svelte +10 -6
- package/dist/admin/components/media/tag-sidebar.svelte.d.ts +7 -2
- package/dist/admin/components/tiptap/FigureNodeView.svelte +15 -10
- package/dist/admin/components/tiptap/InlineBlockNodeView.svelte +53 -94
- package/dist/admin/components/tiptap/SlashCommandPopup.svelte +8 -3
- package/dist/admin/components/tiptap/editor-toolbar.svelte +28 -23
- package/dist/admin/components/tiptap/image-dialog.svelte +12 -7
- package/dist/admin/components/tiptap/inline-block-node.js +6 -5
- package/dist/admin/components/tiptap/lang.d.ts +77 -0
- package/dist/admin/components/tiptap/lang.js +170 -0
- package/dist/admin/components/tiptap/link-dialog.svelte +31 -28
- package/dist/admin/components/tiptap/slash-command.js +27 -23
- package/dist/admin/components/tiptap/table-dialog.svelte +9 -4
- package/dist/admin/components/tiptap/video-dialog.svelte +6 -1
- package/dist/admin/remote/email.remote.d.ts +1 -0
- package/dist/admin/remote/email.remote.js +5 -0
- package/dist/admin/remote/entry.remote.d.ts +2 -5
- package/dist/admin/remote/entry.remote.js +23 -28
- package/dist/admin/remote/index.d.ts +1 -0
- package/dist/admin/remote/index.js +1 -0
- package/dist/admin/remote/media.remote.d.ts +15 -0
- package/dist/admin/remote/media.remote.js +18 -2
- package/dist/admin/remote/preview.remote.js +3 -1
- package/dist/admin/utils/entryLabel.js +9 -6
- package/dist/admin/utils/translationStatus.js +1 -2
- package/dist/cli/scaffold/admin.js +34 -2
- package/dist/cms/runtime/api.d.ts +16 -12
- package/dist/cms/runtime/api.js +7 -6
- package/dist/cms/runtime/remote.js +2 -2
- package/dist/cms/runtime/schemas.d.ts +1 -1
- package/dist/cms/runtime/schemas.js +1 -1
- package/dist/cms/runtime/types.d.ts +118 -112
- package/dist/cms/runtime/types.js +0 -12
- package/dist/core/cms.d.ts +3 -1
- package/dist/core/cms.js +30 -0
- package/dist/core/fields/fieldSchemaToTs.js +9 -15
- package/dist/core/fields/formFieldSchemaToTs.js +7 -0
- package/dist/core/server/entries/operations/create.js +10 -4
- package/dist/core/server/entries/operations/get.d.ts +1 -0
- package/dist/core/server/entries/operations/get.js +186 -191
- package/dist/core/server/entries/operations/update.d.ts +6 -7
- package/dist/core/server/entries/operations/update.js +20 -38
- package/dist/core/server/fields/populateEntry.js +16 -52
- package/dist/core/server/fields/resolveImageFields.js +69 -120
- package/dist/core/server/fields/resolveRelationFields.js +30 -51
- package/dist/core/server/fields/resolveRichtextLinks.js +46 -100
- package/dist/core/server/fields/resolveTypographyOrphans.bench.d.ts +1 -0
- package/dist/core/server/fields/resolveTypographyOrphans.bench.js +87 -0
- package/dist/core/server/fields/resolveTypographyOrphans.d.ts +3 -0
- package/dist/core/server/fields/resolveTypographyOrphans.js +128 -0
- package/dist/core/server/fields/resolveUrlFields.js +47 -56
- package/dist/core/server/fields/utils/fixOrphans.d.ts +5 -0
- package/dist/core/server/fields/utils/fixOrphans.js +12 -0
- package/dist/core/server/fields/utils/imageStyles.d.ts +4 -2
- package/dist/core/server/fields/utils/imageStyles.js +41 -25
- package/dist/core/server/fields/utils/resolveMedia.js +1 -6
- package/dist/core/server/forms/submissions/operations/delete.js +26 -2
- package/dist/core/server/forms/submissions/utils/parseMultipart.d.ts +2 -0
- package/dist/core/server/forms/submissions/utils/parseMultipart.js +75 -0
- package/dist/core/server/generator/fields.d.ts +6 -0
- package/dist/core/server/generator/fields.js +43 -5
- package/dist/core/server/generator/formFieldSchemaToString.js +10 -0
- package/dist/core/server/generator/formFields.js +1 -0
- package/dist/core/server/generator/generator.js +98 -30
- package/dist/core/server/media/operations/getFiles.d.ts +5 -0
- package/dist/core/server/media/operations/getFiles.js +6 -0
- package/dist/core/server/media/operations/uploadPrivateFile.d.ts +4 -0
- package/dist/core/server/media/operations/uploadPrivateFile.js +8 -0
- package/dist/core/server/media/styles/operations/batchGenerateStyles.d.ts +16 -0
- package/dist/core/server/media/styles/operations/batchGenerateStyles.js +144 -0
- package/dist/db-postgres/index.js +303 -37
- package/dist/db-postgres/schema/entry.d.ts +0 -94
- package/dist/db-postgres/schema/entry.js +0 -6
- package/dist/db-postgres/schema/entryVersion.d.ts +17 -0
- package/dist/db-postgres/schema/entryVersion.js +1 -0
- package/dist/entity/index.d.ts +9 -4
- package/dist/entity/index.js +24 -24
- package/dist/files-local/index.js +43 -0
- package/dist/paraglide/messages/_index.d.ts +36 -3
- package/dist/paraglide/messages/_index.js +71 -3
- package/dist/paraglide/messages/en.d.ts +5 -0
- package/dist/paraglide/messages/en.js +14 -0
- package/dist/paraglide/messages/pl.d.ts +5 -0
- package/dist/paraglide/messages/pl.js +14 -0
- package/dist/sveltekit/components/preview.svelte +2 -326
- package/dist/sveltekit/components/preview.svelte.d.ts +5 -16
- package/dist/sveltekit/server/index.d.ts +2 -1
- package/dist/sveltekit/server/index.js +2 -1
- package/dist/sveltekit/server/preview.js +4 -7
- package/dist/types/adapters/db.d.ts +15 -1
- package/dist/types/adapters/files.d.ts +6 -0
- package/dist/types/cms.d.ts +5 -0
- package/dist/types/entries.d.ts +54 -18
- package/dist/types/fields.d.ts +14 -24
- package/dist/types/formFields.d.ts +7 -2
- package/dist/types/index.d.ts +2 -2
- package/dist/types/layout.d.ts +0 -1
- package/dist/types/structured-content.d.ts +5 -0
- package/dist/updates/0.10.0/index.d.ts +2 -0
- package/dist/updates/0.10.0/index.js +15 -0
- package/dist/updates/0.11.0/index.d.ts +2 -0
- package/dist/updates/0.11.0/index.js +12 -0
- package/dist/updates/0.12.0/index.d.ts +2 -0
- package/dist/updates/0.12.0/index.js +12 -0
- package/dist/updates/0.13.0/index.d.ts +2 -0
- package/dist/updates/0.13.0/index.js +10 -0
- package/dist/updates/0.13.1/index.d.ts +2 -0
- package/dist/updates/0.13.1/index.js +20 -0
- package/dist/updates/0.7.3/index.d.ts +2 -0
- package/dist/updates/0.7.3/index.js +10 -0
- package/dist/updates/0.8.0/index.d.ts +2 -0
- package/dist/updates/0.8.0/index.js +18 -0
- package/dist/updates/0.8.0/migrate.d.ts +2 -0
- package/dist/updates/0.8.0/migrate.js +101 -0
- package/dist/updates/0.9.0/index.d.ts +2 -0
- package/dist/updates/0.9.0/index.js +38 -0
- package/dist/updates/index.js +9 -1
- package/package.json +7 -6
- package/dist/admin/components/fields/image-field.svelte +0 -198
- package/dist/admin/components/fields/image-field.svelte.d.ts +0 -8
- package/dist/admin/components/fields/richtext-field.svelte +0 -13
- package/dist/admin/components/fields/richtext-field.svelte.d.ts +0 -8
- package/dist/admin/components/tiptap.svelte +0 -11
- package/dist/admin/components/tiptap.svelte.d.ts +0 -6
- package/dist/core/server/entries/utils/getEntryTranslation.d.ts +0 -1
- package/dist/core/server/entries/utils/getEntryTranslation.js +0 -18
- package/dist/paraglide/messages/hello_world.d.ts +0 -5
- package/dist/paraglide/messages/hello_world.js +0 -33
- package/dist/paraglide/messages/login_hello.d.ts +0 -16
- package/dist/paraglide/messages/login_hello.js +0 -34
- package/dist/paraglide/messages/login_please_login.d.ts +0 -16
- package/dist/paraglide/messages/login_please_login.js +0 -34
|
@@ -2,7 +2,7 @@ import { command, query } from '$app/server';
|
|
|
2
2
|
import { createEntry as createEntryOperation, createEntrySchema, createEntryVersion } from '../../core/server/entries/operations/create.js';
|
|
3
3
|
import { getRawEntries as getRawEntriesOperation, countRawEntries as countRawEntriesOperation, getRawEntry as getRawEntryOperation, getRawEntryOrThrow, getDbEntry, getDbEntryOrThrow, getEntries as getEntriesOperation, getEntry as getEntryOperation, getEntryVersion as getEntryVersionOperation, getEntryLabels as getEntryLabelsOperation } from '../../core/server/entries/operations/get.js';
|
|
4
4
|
import { getCMS } from '../../core/cms.js';
|
|
5
|
-
import { pruneOldDraftVersions,
|
|
5
|
+
import { pruneOldDraftVersions, unpublishEntryLang, upsertDraftVersion, updateEntry, updateEntrySchema, updateEntryVersionCommandTypes } from '../../core/server/entries/operations/update.js';
|
|
6
6
|
import z from 'zod';
|
|
7
7
|
import { requireAuth } from './middleware/auth.js';
|
|
8
8
|
import { entryStatuses } from '../../types/entries.js';
|
|
@@ -44,7 +44,7 @@ export const getEntries = query(z.object({
|
|
|
44
44
|
});
|
|
45
45
|
export const getEntryLabels = query(z.object({
|
|
46
46
|
slug: z.string(),
|
|
47
|
-
ids: z.array(z.string()).optional(),
|
|
47
|
+
ids: z.array(z.string().uuid()).optional(),
|
|
48
48
|
search: z.string().optional(),
|
|
49
49
|
limit: z.number().int().positive().optional(),
|
|
50
50
|
status: z.enum(['published', 'draft', 'all']).optional()
|
|
@@ -101,6 +101,7 @@ export const getEntryForEntryPage = query(z.string(), async (id) => {
|
|
|
101
101
|
});
|
|
102
102
|
const updateEntryVersionCommandSchema = z.object({
|
|
103
103
|
entryId: z.string().uuid(),
|
|
104
|
+
lang: z.string(),
|
|
104
105
|
data: z.record(z.string(), z.unknown()),
|
|
105
106
|
type: z.enum(updateEntryVersionCommandTypes),
|
|
106
107
|
scheduledAt: z.date().optional()
|
|
@@ -110,49 +111,39 @@ export const updateEntryVersionCommand = command(updateEntryVersionCommandSchema
|
|
|
110
111
|
let result;
|
|
111
112
|
switch (input.type) {
|
|
112
113
|
case 'draft':
|
|
113
|
-
result = await upsertDraftVersion(input.entryId, input.data, { skipValidation: true });
|
|
114
|
+
result = await upsertDraftVersion(input.entryId, input.data, input.lang, { skipValidation: true });
|
|
114
115
|
break;
|
|
115
116
|
case 'published-now': {
|
|
116
|
-
|
|
117
|
-
// Dual-write: still set version.publishedAt for backward compat
|
|
117
|
+
// Create a new published version for this language
|
|
118
118
|
result = await createEntryVersion({
|
|
119
|
-
|
|
119
|
+
entryId: input.entryId,
|
|
120
|
+
lang: input.lang,
|
|
121
|
+
data: input.data,
|
|
120
122
|
publishedAt: new Date(),
|
|
121
123
|
publishedBy: user.id
|
|
122
124
|
});
|
|
123
|
-
// Update entry-level publish state
|
|
124
|
-
await updateEntry(input.entryId, {
|
|
125
|
-
publishedVersionId: result.id,
|
|
126
|
-
publishedBy: user.id,
|
|
127
|
-
publishedAt: existingEntry.publishedAt ?? new Date()
|
|
128
|
-
});
|
|
129
125
|
break;
|
|
130
126
|
}
|
|
131
127
|
case 'published-scheduled': {
|
|
132
128
|
if (!input.scheduledAt) {
|
|
133
129
|
throw new Error('scheduledAt is required for scheduled publishing');
|
|
134
130
|
}
|
|
135
|
-
// Dual-write: still set version.publishedAt for backward compat
|
|
136
131
|
result = await createEntryVersion({
|
|
137
|
-
|
|
132
|
+
entryId: input.entryId,
|
|
133
|
+
lang: input.lang,
|
|
134
|
+
data: input.data,
|
|
138
135
|
publishedAt: input.scheduledAt,
|
|
139
136
|
publishedBy: user.id
|
|
140
137
|
});
|
|
141
|
-
// Update entry-level publish state
|
|
142
|
-
await updateEntry(input.entryId, {
|
|
143
|
-
publishedVersionId: result.id,
|
|
144
|
-
publishedBy: user.id,
|
|
145
|
-
publishedAt: input.scheduledAt
|
|
146
|
-
});
|
|
147
138
|
break;
|
|
148
139
|
}
|
|
149
140
|
case 'cancel-published':
|
|
150
|
-
|
|
141
|
+
await unpublishEntryLang(input.entryId, input.lang);
|
|
151
142
|
break;
|
|
152
143
|
}
|
|
153
144
|
// Prune old draft versions only after publish/schedule (drafts upsert in-place)
|
|
154
145
|
if (input.type !== 'draft') {
|
|
155
|
-
await pruneOldDraftVersions(input.entryId);
|
|
146
|
+
await pruneOldDraftVersions(input.entryId, input.lang);
|
|
156
147
|
// Refresh cached entry so UI reactively updates (status badge, version history)
|
|
157
148
|
await getEntryForEntryPage(input.entryId).refresh();
|
|
158
149
|
}
|
|
@@ -216,8 +207,9 @@ export const getRecentEntries = query(z.number().default(6), async (limit) => {
|
|
|
216
207
|
let label = null;
|
|
217
208
|
if (config && config.type === 'collection' && config.entryAdminTitle && latestVersion) {
|
|
218
209
|
const titleData = latestVersion.data[config.entryAdminTitle];
|
|
219
|
-
|
|
220
|
-
|
|
210
|
+
// Data is flat — titleData is the string directly
|
|
211
|
+
if (typeof titleData === 'string') {
|
|
212
|
+
label = titleData || '';
|
|
221
213
|
}
|
|
222
214
|
}
|
|
223
215
|
if (config && config.type === 'single' && config.label) {
|
|
@@ -237,9 +229,11 @@ export const getRecentEntries = query(z.number().default(6), async (limit) => {
|
|
|
237
229
|
collectionLabel = config.label;
|
|
238
230
|
}
|
|
239
231
|
}
|
|
240
|
-
const
|
|
232
|
+
const hasPublished = Object.values(entry.publishedVersions).some((v) => v != null);
|
|
233
|
+
const hasScheduled = Object.values(entry.scheduledVersions).some((v) => v != null);
|
|
234
|
+
const status = hasPublished
|
|
241
235
|
? 'published'
|
|
242
|
-
:
|
|
236
|
+
: hasScheduled
|
|
243
237
|
? 'scheduled'
|
|
244
238
|
: 'draft';
|
|
245
239
|
return {
|
|
@@ -262,8 +256,9 @@ export const getRecentActivity = query(z.number().default(10), async (limit) =>
|
|
|
262
256
|
let label = null;
|
|
263
257
|
if (config && config.type === 'collection' && config.entryAdminTitle) {
|
|
264
258
|
const titleData = latestVersion.data[config.entryAdminTitle];
|
|
265
|
-
|
|
266
|
-
|
|
259
|
+
// Data is flat — titleData is the string directly
|
|
260
|
+
if (typeof titleData === 'string') {
|
|
261
|
+
label = titleData || null;
|
|
267
262
|
}
|
|
268
263
|
}
|
|
269
264
|
if (config && config.type === 'single' && config.label) {
|
|
@@ -14,8 +14,23 @@ export declare const getMediaFiles: import("@sveltejs/kit").RemoteQueryFunction<
|
|
|
14
14
|
tagIds?: string[] | undefined;
|
|
15
15
|
mimeTypes?: string[] | undefined;
|
|
16
16
|
search?: string | undefined;
|
|
17
|
+
untagged?: boolean | undefined;
|
|
18
|
+
limit?: number | undefined;
|
|
19
|
+
offset?: number | undefined;
|
|
17
20
|
};
|
|
18
21
|
}, import("../../types/media.js").MediaFile[]>;
|
|
22
|
+
export declare const countMediaFiles: import("@sveltejs/kit").RemoteQueryFunction<{
|
|
23
|
+
data: {
|
|
24
|
+
tagIds?: string[] | undefined;
|
|
25
|
+
mimeTypes?: string[] | undefined;
|
|
26
|
+
search?: string | undefined;
|
|
27
|
+
untagged?: boolean | undefined;
|
|
28
|
+
};
|
|
29
|
+
}, number>;
|
|
30
|
+
export declare const getMediaTagsWithCounts: import("@sveltejs/kit").RemoteQueryFunction<void, {
|
|
31
|
+
tag: import("../../types/media.js").MediaTag;
|
|
32
|
+
count: number;
|
|
33
|
+
}[]>;
|
|
19
34
|
export declare const getFileById: import("@sveltejs/kit").RemoteQueryFunction<string, import("../../types/media.js").MediaFile | null>;
|
|
20
35
|
export declare const deleteMediaFile: import("@sveltejs/kit").RemoteCommand<string, Promise<void>>;
|
|
21
36
|
export declare const bulkDeleteMediaFiles: import("@sveltejs/kit").RemoteCommand<{
|
|
@@ -2,7 +2,7 @@ import { command, query } from '$app/server';
|
|
|
2
2
|
import { setAlt, renameMediaFile as renameMediaFileOperation, updateMediaAccessibility as updateMediaAccessibilityOp } from '../../core/server/media/operations/updateFile.js';
|
|
3
3
|
import z from 'zod';
|
|
4
4
|
import { deleteMediaFile as deleteMediaFileFn, bulkDeleteMediaFiles as bulkDeleteMediaFilesFn } from '../../core/server/media/operations/deleteMediaFile.js';
|
|
5
|
-
import { getFile, getFiles } from '../../core/server/media/operations/getFiles.js';
|
|
5
|
+
import { getFile, getFiles, countFiles, getMediaTagsWithCounts as getMediaTagsWithCountsFn } from '../../core/server/media/operations/getFiles.js';
|
|
6
6
|
import { getMediaTags as getMediaTagsFn, createMediaTag as createMediaTagFn, updateMediaTag as updateMediaTagFn, deleteMediaTag as deleteMediaTagFn, setMediaFileTags as setMediaFileTagsFn, bulkSetMediaFileTags as bulkSetMediaFileTagsFn } from '../../core/server/media/operations/tags.js';
|
|
7
7
|
import { requireAuth } from './middleware/auth.js';
|
|
8
8
|
const setMediaFileAltSchema = z.object({
|
|
@@ -34,11 +34,27 @@ export const getMediaFiles = query(z.object({
|
|
|
34
34
|
ids: z.array(z.string().uuid()).optional(),
|
|
35
35
|
tagIds: z.array(z.string().uuid()).optional(),
|
|
36
36
|
mimeTypes: z.array(z.string()).optional(),
|
|
37
|
-
search: z.string().optional()
|
|
37
|
+
search: z.string().optional(),
|
|
38
|
+
untagged: z.boolean().optional(),
|
|
39
|
+
limit: z.number().int().positive().optional(),
|
|
40
|
+
offset: z.number().int().nonnegative().optional()
|
|
38
41
|
})
|
|
39
42
|
}), async (data) => {
|
|
40
43
|
return getFiles(data);
|
|
41
44
|
});
|
|
45
|
+
export const countMediaFiles = query(z.object({
|
|
46
|
+
data: z.object({
|
|
47
|
+
tagIds: z.array(z.string().uuid()).optional(),
|
|
48
|
+
mimeTypes: z.array(z.string()).optional(),
|
|
49
|
+
search: z.string().optional(),
|
|
50
|
+
untagged: z.boolean().optional()
|
|
51
|
+
})
|
|
52
|
+
}), async (data) => {
|
|
53
|
+
return countFiles(data);
|
|
54
|
+
});
|
|
55
|
+
export const getMediaTagsWithCounts = query(async () => {
|
|
56
|
+
return getMediaTagsWithCountsFn();
|
|
57
|
+
});
|
|
42
58
|
export const getFileById = query(z.string().uuid(), async (id) => {
|
|
43
59
|
return getFile(id);
|
|
44
60
|
});
|
|
@@ -10,5 +10,7 @@ const schema = z.object({
|
|
|
10
10
|
});
|
|
11
11
|
export const populatePreviewData = command(schema, async ({ data, slug, language }) => {
|
|
12
12
|
const config = getCMS().getBySlug(slug);
|
|
13
|
-
|
|
13
|
+
const fields = getFieldsFromConfig(config);
|
|
14
|
+
const populated = await populateEntryData(data, fields, language);
|
|
15
|
+
return populated;
|
|
14
16
|
});
|
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import { getAtPath } from './objectPath.js';
|
|
2
2
|
export function getRawCollectionEntryLabel(entry, config, language) {
|
|
3
|
-
|
|
3
|
+
const publishedVersion = entry.publishedVersions[language];
|
|
4
|
+
if (publishedVersion) {
|
|
5
|
+
// Data is flat — entryAdminTitle value is directly a string
|
|
4
6
|
return config.entryAdminTitle
|
|
5
|
-
?
|
|
7
|
+
? String(publishedVersion.data[config.entryAdminTitle] || entry.id)
|
|
6
8
|
: entry.id;
|
|
7
9
|
}
|
|
8
|
-
|
|
10
|
+
const draftVersion = entry.draftVersions[language];
|
|
11
|
+
if (draftVersion) {
|
|
9
12
|
return config.entryAdminTitle
|
|
10
|
-
?
|
|
13
|
+
? String(draftVersion.data[config.entryAdminTitle] || entry.id)
|
|
11
14
|
: entry.id;
|
|
12
15
|
}
|
|
13
16
|
return entry.id;
|
|
14
17
|
}
|
|
15
18
|
export function getCollectionEntryLabel(entry, config) {
|
|
16
19
|
return config.entryAdminTitle
|
|
17
|
-
? getAtPath(entry
|
|
18
|
-
: entry.
|
|
20
|
+
? getAtPath(entry, config.entryAdminTitle) || entry._id
|
|
21
|
+
: entry._id;
|
|
19
22
|
}
|
|
@@ -13,7 +13,6 @@ function isFieldFilled(value, fieldType) {
|
|
|
13
13
|
return false;
|
|
14
14
|
switch (fieldType) {
|
|
15
15
|
case 'text':
|
|
16
|
-
case 'richtext':
|
|
17
16
|
return typeof value === 'string' && value.length > 0;
|
|
18
17
|
case 'content': {
|
|
19
18
|
if (typeof value !== 'object')
|
|
@@ -46,7 +45,7 @@ function collectLocalizedFields(fields) {
|
|
|
46
45
|
if (field.localized === false)
|
|
47
46
|
continue;
|
|
48
47
|
const label = extractLabel(field.label, field.slug);
|
|
49
|
-
if (field.type === 'text' || field.type === '
|
|
48
|
+
if (field.type === 'text' || field.type === 'content') {
|
|
50
49
|
result.push({ slug: field.slug, label, type: field.type, required: !!field.required });
|
|
51
50
|
}
|
|
52
51
|
}
|
|
@@ -50,6 +50,16 @@ export * from 'includio-cms/admin/remote';
|
|
|
50
50
|
</script>
|
|
51
51
|
|
|
52
52
|
<AcceptInvitePage />
|
|
53
|
+
`
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
path: 'admin/reset-password/+page.svelte',
|
|
57
|
+
content: `${GENERATED_COMMENT}
|
|
58
|
+
<script lang="ts">
|
|
59
|
+
import { ResetPasswordPage } from 'includio-cms/admin/client';
|
|
60
|
+
</script>
|
|
61
|
+
|
|
62
|
+
<ResetPasswordPage />
|
|
53
63
|
`
|
|
54
64
|
},
|
|
55
65
|
{
|
|
@@ -109,13 +119,25 @@ export * from 'includio-cms/admin/remote';
|
|
|
109
119
|
`
|
|
110
120
|
},
|
|
111
121
|
{
|
|
112
|
-
path: 'admin/(afterLogin)/form-submissions/[
|
|
122
|
+
path: 'admin/(afterLogin)/form-submissions/[id]/+page.server.ts',
|
|
123
|
+
content: `${GENERATED_COMMENT_TS}
|
|
124
|
+
export async function load({ params }) {
|
|
125
|
+
return {
|
|
126
|
+
submissionId: params.id
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
`
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
path: 'admin/(afterLogin)/form-submissions/[id]/+page.svelte',
|
|
113
133
|
content: `${GENERATED_COMMENT}
|
|
114
134
|
<script lang="ts">
|
|
115
135
|
import { FormSubmissionPage } from 'includio-cms/admin/client';
|
|
136
|
+
|
|
137
|
+
let { data } = $props();
|
|
116
138
|
</script>
|
|
117
139
|
|
|
118
|
-
<FormSubmissionPage />
|
|
140
|
+
<FormSubmissionPage {data} />
|
|
119
141
|
`
|
|
120
142
|
},
|
|
121
143
|
{
|
|
@@ -138,6 +160,16 @@ export * from 'includio-cms/admin/remote';
|
|
|
138
160
|
</script>
|
|
139
161
|
|
|
140
162
|
<AccountPage />
|
|
163
|
+
`
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
path: 'admin/(afterLogin)/maintenance/+page.svelte',
|
|
167
|
+
content: `${GENERATED_COMMENT}
|
|
168
|
+
<script lang="ts">
|
|
169
|
+
import { MaintenancePage } from 'includio-cms/admin/client';
|
|
170
|
+
</script>
|
|
171
|
+
|
|
172
|
+
<MaintenancePage />
|
|
141
173
|
`
|
|
142
174
|
},
|
|
143
175
|
{
|
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
import type { SingleEntryMap, SingleSlug, CollectionEntryMap, CollectionSlug, FormEntryMap, SiteLanguage } from './types';
|
|
2
|
-
interface
|
|
3
|
-
data: Record<string, unknown>;
|
|
4
|
-
}> {
|
|
2
|
+
interface GetEntryOptions {
|
|
5
3
|
id?: string;
|
|
6
4
|
status?: 'draft' | 'published' | 'scheduled' | 'archived';
|
|
7
|
-
dataValues?:
|
|
8
|
-
}
|
|
9
|
-
interface GetEntryOptions {
|
|
10
|
-
/**
|
|
11
|
-
* Language code to fetch the entry in. Defaults to the first language in the CMS config.
|
|
12
|
-
*/
|
|
5
|
+
dataValues?: Record<string, unknown>;
|
|
13
6
|
language?: SiteLanguage;
|
|
14
7
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
8
|
+
interface GetEntriesOptions extends GetEntryOptions {
|
|
9
|
+
ids?: string[];
|
|
10
|
+
dataLike?: Record<string, unknown>;
|
|
11
|
+
orderBy?: {
|
|
12
|
+
column: 'createdAt' | 'updatedAt' | 'sortOrder';
|
|
13
|
+
direction: 'asc' | 'desc';
|
|
14
|
+
};
|
|
15
|
+
limit?: number;
|
|
16
|
+
offset?: number;
|
|
17
|
+
}
|
|
18
|
+
export declare function getSingleEntry<K extends SingleSlug>(slug: K, options?: GetEntryOptions): Promise<SingleEntryMap[K] | null>;
|
|
19
|
+
export declare function getCollectionEntry<K extends CollectionSlug>(slug: K, options?: GetEntryOptions): Promise<CollectionEntryMap[K] | null>;
|
|
20
|
+
export declare function getCollectionEntries<K extends CollectionSlug>(slug: K, options?: GetEntriesOptions): Promise<CollectionEntryMap[K][]>;
|
|
21
|
+
export declare function countCollectionEntries<K extends CollectionSlug>(slug: K, options?: Omit<GetEntriesOptions, 'limit' | 'offset' | 'orderBy'>): Promise<number>;
|
|
18
22
|
export interface SubmitFormOptions {
|
|
19
23
|
ip?: string;
|
|
20
24
|
userAgent?: string;
|
package/dist/cms/runtime/api.js
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
// This file is auto-generated. Do not edit directly.
|
|
2
|
-
import { getEntry, getEntries, createFormSubmission } from 'includio-cms/sveltekit/server';
|
|
3
|
-
export async function getSingleEntry(slug,
|
|
2
|
+
import { getEntry, getEntries, countEntries, createFormSubmission } from 'includio-cms/sveltekit/server';
|
|
3
|
+
export async function getSingleEntry(slug, options = {}) {
|
|
4
4
|
return (await getEntry({
|
|
5
|
-
...data,
|
|
6
5
|
slug,
|
|
7
6
|
...options
|
|
8
7
|
}));
|
|
9
8
|
}
|
|
10
|
-
export async function getCollectionEntry(slug,
|
|
9
|
+
export async function getCollectionEntry(slug, options = {}) {
|
|
11
10
|
return (await getEntry({
|
|
12
|
-
...data,
|
|
13
11
|
slug,
|
|
14
12
|
...options
|
|
15
13
|
}));
|
|
16
14
|
}
|
|
17
|
-
export async function getCollectionEntries(slug, options) {
|
|
15
|
+
export async function getCollectionEntries(slug, options = {}) {
|
|
18
16
|
return (await getEntries({ slug, ...options }));
|
|
19
17
|
}
|
|
18
|
+
export async function countCollectionEntries(slug, options = {}) {
|
|
19
|
+
return countEntries({ slug, ...options });
|
|
20
|
+
}
|
|
20
21
|
export async function submitForm(slug, data, options) {
|
|
21
22
|
return createFormSubmission({ slug, data, ...options });
|
|
22
23
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// This file is auto-generated. Do not edit directly.
|
|
2
2
|
import { command } from '$app/server';
|
|
3
3
|
import { submitForm } from './api';
|
|
4
|
-
import {
|
|
5
|
-
export const submitContactCommand = command(
|
|
4
|
+
import { ContactFormSchema } from './schemas';
|
|
5
|
+
export const submitContactCommand = command(ContactFormSchema, async (data) => {
|
|
6
6
|
await submitForm('contact', data);
|
|
7
7
|
});
|