207 lines
4.9 KiB
TypeScript
Raw Normal View History

import { rest } from 'msw';
chore: migrate media-library pages to Typescript (#21896) * chore: migrate to TS AudoPreview component * chore: migrate to TS PaginationContext component * chore: migrate to TS Pagination component * chore: migrate to TS PaginationFolder components * chore: migrate to TS PaginationFooter index component * chore: migrate to TS isSelectable util * chore: migrate to TS PageSize component * chore: migrate to TS DialogFooter component * chore: migrate to TS Draggable component * chore: migrate to TS ContextInfo component * chore: migrate to TS ContextInfo test and index component * chore: migrate to TS PreviewBox components file * chore: migrate to TS DialogHeader component * chore: migrate to TS RemoveFolderDialog * chore: migrate to TS EmptyAssetGrid * chore: migrate to TS EmptyAssets index file * chore: migrate to TS AssetCardBase * chore: migrate to TS AudioAssetCard component * chore: migrate to TS DocAssetCard component * chore: migrate to TS ImageAssetCard component * chore: migrate to TS AssetCard unit tests * chore: migrate to TS SearchAsset component * chore: migrate to TS UploadProgress component * chore: migrate to TS FromComputerForm component * chore: migrate to TS FromUrlForm component * chore: migrate to TS AddAssetStep component * chore: migrate to TS VideoPreview component * chore: migrate to TS VideoAssetCard component * chore: migrate to TS UploadingAssetCard component * chore: migrate to TS PreviewCell component * chore: migrate to TS CellContent component * chore: migrate to TS TableRows component * chore: migrate to TS TableList component * chore: migrate to TS SortPicker component * chore: migrate to TS Option component with utils * chore: migrate to TS EmptyStateAsset and CarouselAsset * chore: migrate to TS CopyLinkButton component * chore: migrate to TS CarouselAssetActions component * chore: migrate to TS FolderGridList component * chore: migrate to TS FolderCardContext * chore: migrate to TS FolderCard component * chore: migrate to TS FolderCardBody component * chore: migrate to TS FolderCardBodyAction component * chore: migrate to TS FolderCardCheckbox component * chore: migrate to TS FolderCard unit test * chore: migrate to TS getFilterList * chore: migrate to TS FilterValueInput component * chore: migrate to TS FilterTag * chore: migrate to TS FilterList * chore: migrate to TS EditFolderModalHeader component * chore: migrate to TS AssetPreview component * chore: migrate to TS CroppingActions component * chore: migrate to TS RemoveAssetDialog component * chore: migrate to TS ReplaceMediaButton component * chore: migrate to TS AssetCard component * chore: migrate to TS AssetGridList * chore: migrate to TS PendingAssetStep component * chore: migrate to TS SelectedStep component * chore: migrate to TS PreviewBox component * chore: migrate to TS SelectTree * chore: migrate to TS SelectTree unit test * chore: migrate to TS BulkMoveDialog * chore: migrate to TS EditFolderContent component * chore: migrate to TS FilterValueInput * chore: migrato to TS CrumbSimpleMenuAsync * chore: migrate to TS Breadcrumbs * chore: migrate to TS Filters component * chore: migrate to TS EditAssetDialog * chore: migrate to TS CarouselAssets * chore: migrate to TS UploadAssetDialog and BrowseStep * chore: migrate to TS BrowseStep test * chore: migrate to TS AssetDialog component * chore: migrate to TS MediaLibraryDialog component * chore: migrate to TS MediaLibraryDialog component * chore: remove a useless type guard * chore: fix small stuff * chore: fix BulkMoveDialog unit test * chore: fix some types * chore: fix prettier problems * chore: migrate to TS EmptyOrNoPermissions component * chore: migrate to TS BulkDeleteButton component * chore: migrate to TS BulkMoveButton component * chore: fix prettier errors * chore: migrate to TS reducer settings page * chore: migrate to TS init in the settings page * chore: fix review's comments * chore: migrate to TS SettingsPage * chore: migrate to TS init ConfigureTheView * chore: migrate to TS the ConfigureTheView redux definition * chore: migrate to TS ConfigureTheView Settings page * chore: fix review comments * chore: migrate to TS ConfigureTheView page * chore: migrate to TS BulkDeleteButton and BulkMoveButton * chore: migrate to TS EmptyOrNoPermissions * chore: migrate to TS Header in MediaLibrary page * chore: migrate to TS Header * chore: migrate to TS BulkActions in App page * chore: migrate to TS BulkActions * chore: migrate to TS Filters component * chore: migrate to TS MediaLibrary page * chore: migrate to TS App page * chore: migrate to TS index entry point * chore: replace newConstants with constants and fix some configuration files * chore: fix lint errors * chore: fix build errors * chore: fix review comments * chore: remove tag from Header component * chore: fix remaining eslint error, add todo to the ex index files * chore: fix breadcrumbs error
2024-11-08 17:22:43 +01:00
import * as qs from 'qs';
// Define the expected structure of your query parameters
interface CustomQuery extends qs.ParsedQs {
filters?: {
$and?: Array<{ parent: { id: string } }>;
};
}
const handlers = [
rest.get('/upload/configuration', async (req, res, ctx) => {
return res(
ctx.json({
data: {
/**
* we send the pageSize slightly different to defaults because
* in tests we can track that the async functions have finished.
*/
pageSize: 20,
sort: 'updatedAt:DESC',
},
})
);
}),
rest.put('/upload/configuration', async (req, res, ctx) => {
return res(ctx.status(200));
}),
rest.get('/upload/folders/:id', async (req, res, ctx) => {
return res(
ctx.json({
data: {
id: 1,
name: 'test',
pathId: 1,
path: '/1',
createdAt: '2023-06-26T12:48:54.054Z',
updatedAt: '2023-06-26T12:48:54.054Z',
parent: null,
children: {
count: 2,
},
files: {
count: 0,
},
},
})
);
}),
rest.delete('/upload/:type/:id', async (req, res, ctx) => {
return res(
ctx.json({
id: 1,
})
);
}),
rest.get('/upload/folders', async (req, res, ctx) => {
const query: CustomQuery = qs.parse(req.url.search.slice(1));
if (query._q) {
return res(
ctx.json({
data: [
{
createdAt: '2023-06-26T12:48:54.054Z',
id: 1,
name: query._q,
pathId: 1,
path: '/1',
updatedAt: '2023-06-26T12:48:54.054Z',
children: {
count: 2,
},
files: {
count: 0,
},
},
],
})
);
}
if (Array.isArray(query.filters?.$and)) {
const [{ parent }] = query.filters.$and;
if (parent.id === '1') {
return res(
ctx.json({
data: [
{
createdAt: '2023-06-26T12:49:31.354Z',
id: 3,
name: '2022',
pathId: 3,
path: '/1/3',
updatedAt: '2023-06-26T12:49:31.354Z',
children: {
count: 0,
},
files: {
count: 3,
},
},
{
createdAt: '2023-06-26T12:49:08.466Z',
id: 2,
name: '2023',
pathId: 2,
path: '/1/2',
updatedAt: '2023-06-26T12:49:08.466Z',
children: {
count: 0,
},
files: {
count: 3,
},
},
],
})
);
}
}
return res(
ctx.json({
data: [
{
createdAt: '2023-06-26T12:48:54.054Z',
id: 1,
name: 'test',
pathId: 1,
path: '/1',
updatedAt: '2023-06-26T12:48:54.054Z',
children: {
count: 2,
},
files: {
count: 0,
},
},
],
})
);
}),
rest.get('*/some/file', async (req, res, ctx) => {
const file = new File([new Blob(['1'.repeat(1024 * 1024 + 1)])], 'image.png', {
type: 'image/png',
});
const buffer = await new Response(file).arrayBuffer();
return res(ctx.set('Content-Type', 'image/png'), ctx.body(buffer));
}),
rest.get('/upload/settings', async (req, res, ctx) => {
return res(
ctx.json({
data: {
sizeOptimization: true,
responsiveDimensions: true,
autoOrientation: true,
feat: ai generated image metadata (#24422) * feat: chat feat: apply changes feat: integrate with ctb feat: marker chore: remove comment feat: new chat feat: copy message feat: upload modal feat: upload file feat: errors and stop chat chore: refactor transforms chore: format relations chore: chat title chore: remove architect dependency feat: empt state chore: improve text area focus * feat: chat imports feat: resizable text area fix: re add chat chore: translations feat: env vars fix: minor chat issues feat: feedback fix: rebase feat: import folder feat: limits feat: attachments dropzone chore: file attachments cleanup chore: track chat id feat: figma import fix :token feat: figma token fix: attribute status when chat makes updates feat: image upload * feat: staging integration * chore: remove logs * feat: use tool call result instead of annotation * fix: invalid component uid * chore: chat input focus ring * fix: ui issues * fix: default draft and publish and do not modify singular name * fix: minor transforms * fix: linting * test(front): update snapshots * chore: fix misplaced getstarted project schema * chore: remove unused import * security: validate exact path of host * fix: define process better for playwright to work * fix: process env in vite config for playwright * chore: use production url * feat(ctb): Tracking events for AI Chat interaction (#23731) * feat(content-type-builder): WIP tracking events for chat interactions * fix: typescript build errors * fix: event name and build errors * chore: send ai key with analytics * chore: actually send licenseKey * chore: send ailicensekey with groupproperties * fix: didStartNewChat * chore: track new chats * feat: enhance attachment type management in AI chat components * fix: update chat status handling in ChatProvider component * feat: add optional aiLicenseKey to Strapi interface --------- Co-authored-by: Jamie Howard <jhoward1994@gmail.com> * refactor: remove didusersendmessage tracking event (#23777) * fix: merge conflict * fix: send projectId to AI server * feat: add a enabled config for AI features (#24060) * feat: add getAiToken endpoint (#24172) * feat: add getAiToken route * fix: change route name, remove project id * fix: type issue and fix schema * feat: retrieve ai token from frontend (#24226) --------- Co-authored-by: Jamie Howard <jhoward1994@gmail.com> * fix: use primary500 for links in ai chat * chore: migrate to AI SDK v5 (#24252) * fix: migrate code for v5 * t:wq * feat: push schemas to ctb * chore: remove old code * chore: remove ts-no-check * chore: fix comment * fix: ai server logs (#24318) * test(back): fix error log tests --------- Co-authored-by: Marc Roig <marc12info@gmail.com> * fix: configure ai ctb csp middleware without overriding user or default config * future(upload): generate image metadata on file upload (#24365) * chore: create aiMetadata service with isEnabled * chore: extract getAiToken to service * fix: unit test * future(upload): generate metadata with ai * fix: ts build * fix: only send images to ai server * test: add unit tests * fix: unit test --------- Co-authored-by: markkaylor <mark.kaylor@strapi.io> * AI media lib bulk update (#24414) * feat(packages): adding endpoint for bulk update * feat(packages): linting * feat(packages): adding tests * feat(packages): cleanup * feat: guided tour for ai ctb (#24411) * feat(upload): adding aiMetadata into settings (#24468) feat(upload): adding aiMetadata into settings * feat: add AI upload modal (#24407) * chore: create aiMetadata service with isEnabled * chore: extract getAiToken to service * fix: unit test * future(upload): generate metadata with ai * feat: add AI upload modal * feat: add edit and delete to upload modal * fix: remove sparkle icon on edit * fix: add error handling * chore: refactor ai upload modal reducer * fix: catch ai token generation error * chore: add useBulkEdit hook * feat: connect to bulk edit endpoint * fix: e2e test * fix: ci in both ce and ee --------- Co-authored-by: Rémi de Juvigny <remi.dejuvigny@strapi.io> Co-authored-by: Rémi de Juvigny <8087692+remidej@users.noreply.github.com> * feat(upload): applying ai enabled logic for media library (#24486) feat(upload): applying ai enabled logic for media library * fix: sparkle icon * fix: set ai server prod url * fix: default config to enabled * fix: cursor moving to the end when editing text * fix: upload in the right folder * fix: close modal when deleting last item * chore: use STRAPI_AI_URL everywhere * fix: bulk upload from frontend * fix: restore sparkle icon on inputs * fix: unit test ci * feat(upload): generating metadata from thumbnail (#24515) * feat(upload): generating metadata from thumbnail * feat(upload): fixing linting issue * feat(upload): fixing tests and addressiing feedback * feat(upload): fixing lint * fix: check for cms-ai entitlement * fix: tests * fix: race condition failing front unit tests --------- Co-authored-by: Marc-Roig <marc12info@gmail.com> Co-authored-by: Ben Irvin <ben@innerdvations.com> Co-authored-by: Bassel Kanso <bassel.kanso@strapi.io> Co-authored-by: Ben Irvin <ben.irvin@strapi.io> Co-authored-by: Jamie Howard <jhoward1994@gmail.com> Co-authored-by: Jamie Howard <48524071+jhoward1994@users.noreply.github.com> Co-authored-by: Bassel Kanso <basselkanso82@gmail.com> Co-authored-by: Ziyi <daydreamnation@live.com> Co-authored-by: markkaylor <mark.kaylor@strapi.io> Co-authored-by: Araksya Gevorgyan <31159659+araksyagevorgyan@users.noreply.github.com> Co-authored-by: Adrien L <thewebsdoor@gmail.com>
2025-10-07 12:14:34 +02:00
aiMetadata: true,
},
})
);
}),
rest.get('/upload/folder-structure', (req, res, ctx) => {
return res(
ctx.json({
data: [
{
id: 1,
name: 'test',
children: [
{
id: 3,
name: '2022',
children: [],
},
{
id: 2,
name: '2023',
children: [],
},
],
},
],
})
);
}),
rest.get('*/an-image.png', (req, res, ctx) =>
res(ctx.set('Content-Type', 'image/png'), ctx.body('Successful response'))
),
rest.get('*/a-pdf.pdf', (req, res, ctx) =>
res(ctx.set('Content-Type', 'application/pdf'), ctx.body('Successful response'))
),
rest.get('*/a-video.mp4', (req, res, ctx) =>
res(ctx.set('Content-Type', 'video/mp4'), ctx.body('Successful response'))
),
rest.get('*/not-working-like-cors.lutin', (req, res, ctx) => res(ctx.json({}))),
rest.get('*/some-where-not-existing.jpg', (req, res) => res.networkError('Failed to fetch')),
];
export { handlers };