node_modules ignore

This commit is contained in:
2025-05-08 23:43:47 +02:00
parent e19d52f172
commit 4574544c9f
65041 changed files with 10593536 additions and 0 deletions

View File

@@ -0,0 +1,94 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
var React = require('react');
var strapiAdmin = require('@strapi/admin/strapi-admin');
var reactIntl = require('react-intl');
var reactRouterDom = require('react-router-dom');
var useConfig = require('../../hooks/useConfig.js');
require('byte-size');
require('date-fns');
var getTrad = require('../../utils/getTrad.js');
require('qs');
require('../../constants.js');
require('../../utils/urlYupSchema.js');
var MediaLibrary = require('./MediaLibrary/MediaLibrary.js');
function _interopNamespaceDefault(e) {
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
// TODO: find a better naming convention for the file that was an index file before
const ConfigureTheView = /*#__PURE__*/ React__namespace.lazy(async ()=>Promise.resolve().then(function () { return require('./ConfigureTheView/ConfigureTheView.js'); }).then((mod)=>({
default: mod.ConfigureTheView
})));
const Upload = ()=>{
const { config: { isLoading, isError, data: config } } = useConfig.useConfig();
const [{ rawQuery }, setQuery] = strapiAdmin.useQueryParams();
const { formatMessage } = reactIntl.useIntl();
const title = formatMessage({
id: getTrad.getTrad('plugin.name'),
defaultMessage: 'Media Library'
});
React__namespace.useEffect(()=>{
if (isLoading || isError || rawQuery) {
return;
}
setQuery({
sort: config.sort,
page: 1,
pageSize: config.pageSize
});
}, [
isLoading,
isError,
config,
rawQuery,
setQuery
]);
if (isLoading) {
return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
}
return /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Page.Main, {
children: [
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Title, {
children: title
}),
rawQuery ? /*#__PURE__*/ jsxRuntime.jsx(React__namespace.Suspense, {
fallback: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Loading, {}),
children: /*#__PURE__*/ jsxRuntime.jsxs(reactRouterDom.Routes, {
children: [
/*#__PURE__*/ jsxRuntime.jsx(reactRouterDom.Route, {
index: true,
element: /*#__PURE__*/ jsxRuntime.jsx(MediaLibrary.MediaLibrary, {})
}),
/*#__PURE__*/ jsxRuntime.jsx(reactRouterDom.Route, {
path: "configuration",
element: /*#__PURE__*/ jsxRuntime.jsx(ConfigureTheView, {
config: config
})
})
]
})
}) : null
]
});
};
exports.Upload = Upload;
//# sourceMappingURL=App.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"App.js","sources":["../../../../admin/src/pages/App/App.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { Page, useQueryParams } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { Route, Routes } from 'react-router-dom';\n\nimport { useConfig } from '../../hooks/useConfig';\nimport { getTrad } from '../../utils';\n\nimport { MediaLibrary } from './MediaLibrary/MediaLibrary';\n\nimport type { Configuration } from '../../../../shared/contracts/configuration';\n\nconst ConfigureTheView = React.lazy(async () =>\n import('./ConfigureTheView/ConfigureTheView').then((mod) => ({ default: mod.ConfigureTheView }))\n);\n\nexport const Upload = () => {\n const {\n config: { isLoading, isError, data: config },\n } = useConfig() as { config: { isLoading: boolean; isError: boolean; data: Configuration } };\n\n const [{ rawQuery }, setQuery] = useQueryParams();\n const { formatMessage } = useIntl();\n const title = formatMessage({ id: getTrad('plugin.name'), defaultMessage: 'Media Library' });\n\n React.useEffect(() => {\n if (isLoading || isError || rawQuery) {\n return;\n }\n setQuery({\n sort: config.sort,\n page: 1,\n pageSize: config.pageSize,\n });\n }, [isLoading, isError, config, rawQuery, setQuery]);\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main>\n <Page.Title>{title}</Page.Title>\n {rawQuery ? (\n <React.Suspense fallback={<Page.Loading />}>\n <Routes>\n <Route index element={<MediaLibrary />} />\n <Route\n path=\"configuration\"\n element={<ConfigureTheView config={config as Configuration} />}\n />\n </Routes>\n </React.Suspense>\n ) : null}\n </Page.Main>\n );\n};\n"],"names":["ConfigureTheView","React","lazy","then","mod","default","Upload","config","isLoading","isError","data","useConfig","rawQuery","setQuery","useQueryParams","formatMessage","useIntl","title","id","getTrad","defaultMessage","useEffect","sort","page","pageSize","_jsx","Page","Loading","_jsxs","Main","Title","Suspense","fallback","Routes","Route","index","element","MediaLibrary","path"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAcA,MAAMA,gBAAmBC,iBAAAA,gBAAAA,CAAMC,IAAI,CAAC,UAClC,oDAAO,wCAAA,KAAA,CAAuCC,IAAI,CAAC,CAACC,GAAAA,IAAS;AAAEC,YAAAA,OAAAA,EAASD,IAAIJ;SAAiB,CAAA,CAAA,CAAA;MAGlFM,MAAS,GAAA,IAAA;IACpB,MAAM,EACJC,MAAQ,EAAA,EAAEC,SAAS,EAAEC,OAAO,EAAEC,IAAMH,EAAAA,MAAM,EAAE,EAC7C,GAAGI,mBAAAA,EAAAA;AAEJ,IAAA,MAAM,CAAC,EAAEC,QAAQ,EAAE,EAAEC,SAAS,GAAGC,0BAAAA,EAAAA;IACjC,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,QAAQF,aAAc,CAAA;AAAEG,QAAAA,EAAAA,EAAIC,eAAQ,CAAA,aAAA,CAAA;QAAgBC,cAAgB,EAAA;AAAgB,KAAA,CAAA;AAE1FnB,IAAAA,gBAAAA,CAAMoB,SAAS,CAAC,IAAA;QACd,IAAIb,SAAAA,IAAaC,WAAWG,QAAU,EAAA;AACpC,YAAA;AACF;QACAC,QAAS,CAAA;AACPS,YAAAA,IAAAA,EAAMf,OAAOe,IAAI;YACjBC,IAAM,EAAA,CAAA;AACNC,YAAAA,QAAAA,EAAUjB,OAAOiB;AACnB,SAAA,CAAA;KACC,EAAA;AAAChB,QAAAA,SAAAA;AAAWC,QAAAA,OAAAA;AAASF,QAAAA,MAAAA;AAAQK,QAAAA,QAAAA;AAAUC,QAAAA;AAAS,KAAA,CAAA;AAEnD,IAAA,IAAIL,SAAW,EAAA;QACb,qBAAOiB,cAAA,CAACC,iBAAKC,OAAO,EAAA,EAAA,CAAA;AACtB;IAEA,qBACEC,eAAA,CAACF,iBAAKG,IAAI,EAAA;;AACR,0BAAAJ,cAAA,CAACC,iBAAKI,KAAK,EAAA;AAAEb,gBAAAA,QAAAA,EAAAA;;YACZL,QACC,iBAAAa,cAAA,CAACxB,iBAAM8B,QAAQ,EAAA;gBAACC,QAAU,gBAAAP,cAAA,CAACC,iBAAKC,OAAO,EAAA,EAAA,CAAA;AACrC,gBAAA,QAAA,gBAAAC,eAACK,CAAAA,qBAAAA,EAAAA;;sCACCR,cAACS,CAAAA,oBAAAA,EAAAA;4BAAMC,KAAK,EAAA,IAAA;AAACC,4BAAAA,OAAAA,gBAASX,cAACY,CAAAA,yBAAAA,EAAAA,EAAAA;;sCACvBZ,cAACS,CAAAA,oBAAAA,EAAAA;4BACCI,IAAK,EAAA,eAAA;AACLF,4BAAAA,OAAAA,gBAASX,cAACzB,CAAAA,gBAAAA,EAAAA;gCAAiBO,MAAQA,EAAAA;;;;;AAIvC,aAAA,CAAA,GAAA;;;AAGV;;;;"}

View File

@@ -0,0 +1,73 @@
import { jsx, jsxs } from 'react/jsx-runtime';
import * as React from 'react';
import { useQueryParams, Page } from '@strapi/admin/strapi-admin';
import { useIntl } from 'react-intl';
import { Routes, Route } from 'react-router-dom';
import { useConfig } from '../../hooks/useConfig.mjs';
import 'byte-size';
import 'date-fns';
import { getTrad } from '../../utils/getTrad.mjs';
import 'qs';
import '../../constants.mjs';
import '../../utils/urlYupSchema.mjs';
import { MediaLibrary } from './MediaLibrary/MediaLibrary.mjs';
// TODO: find a better naming convention for the file that was an index file before
const ConfigureTheView = /*#__PURE__*/ React.lazy(async ()=>import('./ConfigureTheView/ConfigureTheView.mjs').then((mod)=>({
default: mod.ConfigureTheView
})));
const Upload = ()=>{
const { config: { isLoading, isError, data: config } } = useConfig();
const [{ rawQuery }, setQuery] = useQueryParams();
const { formatMessage } = useIntl();
const title = formatMessage({
id: getTrad('plugin.name'),
defaultMessage: 'Media Library'
});
React.useEffect(()=>{
if (isLoading || isError || rawQuery) {
return;
}
setQuery({
sort: config.sort,
page: 1,
pageSize: config.pageSize
});
}, [
isLoading,
isError,
config,
rawQuery,
setQuery
]);
if (isLoading) {
return /*#__PURE__*/ jsx(Page.Loading, {});
}
return /*#__PURE__*/ jsxs(Page.Main, {
children: [
/*#__PURE__*/ jsx(Page.Title, {
children: title
}),
rawQuery ? /*#__PURE__*/ jsx(React.Suspense, {
fallback: /*#__PURE__*/ jsx(Page.Loading, {}),
children: /*#__PURE__*/ jsxs(Routes, {
children: [
/*#__PURE__*/ jsx(Route, {
index: true,
element: /*#__PURE__*/ jsx(MediaLibrary, {})
}),
/*#__PURE__*/ jsx(Route, {
path: "configuration",
element: /*#__PURE__*/ jsx(ConfigureTheView, {
config: config
})
})
]
})
}) : null
]
});
};
export { Upload };
//# sourceMappingURL=App.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"App.mjs","sources":["../../../../admin/src/pages/App/App.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { Page, useQueryParams } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { Route, Routes } from 'react-router-dom';\n\nimport { useConfig } from '../../hooks/useConfig';\nimport { getTrad } from '../../utils';\n\nimport { MediaLibrary } from './MediaLibrary/MediaLibrary';\n\nimport type { Configuration } from '../../../../shared/contracts/configuration';\n\nconst ConfigureTheView = React.lazy(async () =>\n import('./ConfigureTheView/ConfigureTheView').then((mod) => ({ default: mod.ConfigureTheView }))\n);\n\nexport const Upload = () => {\n const {\n config: { isLoading, isError, data: config },\n } = useConfig() as { config: { isLoading: boolean; isError: boolean; data: Configuration } };\n\n const [{ rawQuery }, setQuery] = useQueryParams();\n const { formatMessage } = useIntl();\n const title = formatMessage({ id: getTrad('plugin.name'), defaultMessage: 'Media Library' });\n\n React.useEffect(() => {\n if (isLoading || isError || rawQuery) {\n return;\n }\n setQuery({\n sort: config.sort,\n page: 1,\n pageSize: config.pageSize,\n });\n }, [isLoading, isError, config, rawQuery, setQuery]);\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main>\n <Page.Title>{title}</Page.Title>\n {rawQuery ? (\n <React.Suspense fallback={<Page.Loading />}>\n <Routes>\n <Route index element={<MediaLibrary />} />\n <Route\n path=\"configuration\"\n element={<ConfigureTheView config={config as Configuration} />}\n />\n </Routes>\n </React.Suspense>\n ) : null}\n </Page.Main>\n );\n};\n"],"names":["ConfigureTheView","React","lazy","then","mod","default","Upload","config","isLoading","isError","data","useConfig","rawQuery","setQuery","useQueryParams","formatMessage","useIntl","title","id","getTrad","defaultMessage","useEffect","sort","page","pageSize","_jsx","Page","Loading","_jsxs","Main","Title","Suspense","fallback","Routes","Route","index","element","MediaLibrary","path"],"mappings":";;;;;;;;;;;;;;AAAA;AAcA,MAAMA,gBAAmBC,iBAAAA,KAAAA,CAAMC,IAAI,CAAC,UAClC,OAAO,yCAAA,CAAA,CAAuCC,IAAI,CAAC,CAACC,GAAAA,IAAS;AAAEC,YAAAA,OAAAA,EAASD,IAAIJ;SAAiB,CAAA,CAAA,CAAA;MAGlFM,MAAS,GAAA,IAAA;IACpB,MAAM,EACJC,MAAQ,EAAA,EAAEC,SAAS,EAAEC,OAAO,EAAEC,IAAMH,EAAAA,MAAM,EAAE,EAC7C,GAAGI,SAAAA,EAAAA;AAEJ,IAAA,MAAM,CAAC,EAAEC,QAAQ,EAAE,EAAEC,SAAS,GAAGC,cAAAA,EAAAA;IACjC,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMC,QAAQF,aAAc,CAAA;AAAEG,QAAAA,EAAAA,EAAIC,OAAQ,CAAA,aAAA,CAAA;QAAgBC,cAAgB,EAAA;AAAgB,KAAA,CAAA;AAE1FnB,IAAAA,KAAAA,CAAMoB,SAAS,CAAC,IAAA;QACd,IAAIb,SAAAA,IAAaC,WAAWG,QAAU,EAAA;AACpC,YAAA;AACF;QACAC,QAAS,CAAA;AACPS,YAAAA,IAAAA,EAAMf,OAAOe,IAAI;YACjBC,IAAM,EAAA,CAAA;AACNC,YAAAA,QAAAA,EAAUjB,OAAOiB;AACnB,SAAA,CAAA;KACC,EAAA;AAAChB,QAAAA,SAAAA;AAAWC,QAAAA,OAAAA;AAASF,QAAAA,MAAAA;AAAQK,QAAAA,QAAAA;AAAUC,QAAAA;AAAS,KAAA,CAAA;AAEnD,IAAA,IAAIL,SAAW,EAAA;QACb,qBAAOiB,GAAA,CAACC,KAAKC,OAAO,EAAA,EAAA,CAAA;AACtB;IAEA,qBACEC,IAAA,CAACF,KAAKG,IAAI,EAAA;;AACR,0BAAAJ,GAAA,CAACC,KAAKI,KAAK,EAAA;AAAEb,gBAAAA,QAAAA,EAAAA;;YACZL,QACC,iBAAAa,GAAA,CAACxB,MAAM8B,QAAQ,EAAA;gBAACC,QAAU,gBAAAP,GAAA,CAACC,KAAKC,OAAO,EAAA,EAAA,CAAA;AACrC,gBAAA,QAAA,gBAAAC,IAACK,CAAAA,MAAAA,EAAAA;;sCACCR,GAACS,CAAAA,KAAAA,EAAAA;4BAAMC,KAAK,EAAA,IAAA;AAACC,4BAAAA,OAAAA,gBAASX,GAACY,CAAAA,YAAAA,EAAAA,EAAAA;;sCACvBZ,GAACS,CAAAA,KAAAA,EAAAA;4BACCI,IAAK,EAAA,eAAA;AACLF,4BAAAA,OAAAA,gBAASX,GAACzB,CAAAA,gBAAAA,EAAAA;gCAAiBO,MAAQA,EAAAA;;;;;AAIvC,aAAA,CAAA,GAAA;;;AAGV;;;;"}

View File

@@ -0,0 +1,142 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
var React = require('react');
var strapiAdmin = require('@strapi/admin/strapi-admin');
var designSystem = require('@strapi/design-system');
var icons = require('@strapi/icons');
var isEqual = require('lodash/isEqual');
var reactIntl = require('react-intl');
var reactRouterDom = require('react-router-dom');
var useConfig = require('../../../hooks/useConfig.js');
var pluginId = require('../../../pluginId.js');
require('byte-size');
require('date-fns');
var getTrad = require('../../../utils/getTrad.js');
require('qs');
require('../../../constants.js');
require('../../../utils/urlYupSchema.js');
var Settings = require('./components/Settings.js');
var actions = require('./state/actions.js');
var init = require('./state/init.js');
var reducer = require('./state/reducer.js');
function _interopNamespaceDefault(e) {
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
// TODO: find a better naming convention for the file that was an index file before
const ConfigureTheView = ({ config })=>{
const { trackUsage } = strapiAdmin.useTracking();
const { formatMessage } = reactIntl.useIntl();
const { toggleNotification } = strapiAdmin.useNotification();
const { mutateConfig } = useConfig.useConfig();
const { isLoading: isSubmittingForm } = mutateConfig;
const [showWarningSubmit, setWarningSubmit] = React__namespace.useState(false);
const toggleWarningSubmit = ()=>setWarningSubmit((prevState)=>!prevState);
const [reducerState, dispatch] = React__namespace.useReducer(reducer.reducer, init.initialState, ()=>init.init(config));
const typedDispatch = dispatch;
const { initialData, modifiedData } = reducerState;
const handleSubmit = (e)=>{
e.preventDefault();
toggleWarningSubmit();
};
const handleConfirm = async ()=>{
trackUsage('willEditMediaLibraryConfig');
await mutateConfig.mutateAsync(modifiedData);
setWarningSubmit(false);
typedDispatch(actions.setLoaded());
toggleNotification({
type: 'success',
message: formatMessage({
id: 'notification.form.success.fields',
defaultMessage: 'Changes saved'
})
});
};
const handleChange = ({ target: { name, value } })=>{
typedDispatch(actions.onChange({
name,
value
}));
};
return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Layouts.Root, {
children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Main, {
"aria-busy": isSubmittingForm,
children: /*#__PURE__*/ jsxRuntime.jsxs("form", {
onSubmit: handleSubmit,
children: [
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Layouts.Header, {
navigationAction: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Link, {
tag: reactRouterDom.NavLink,
startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.ArrowLeft, {}),
to: `/plugins/${pluginId.pluginId}`,
id: "go-back",
children: formatMessage({
id: getTrad.getTrad('config.back'),
defaultMessage: 'Back'
})
}),
primaryAction: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
size: "S",
startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Check, {}),
disabled: isEqual(modifiedData, initialData),
type: "submit",
children: formatMessage({
id: 'global.save',
defaultMessage: 'Save'
})
}),
subtitle: formatMessage({
id: getTrad.getTrad('config.subtitle'),
defaultMessage: 'Define the view settings of the media library.'
}),
title: formatMessage({
id: getTrad.getTrad('config.title'),
defaultMessage: 'Configure the view - Media Library'
})
}),
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Layouts.Content, {
children: /*#__PURE__*/ jsxRuntime.jsx(Settings.Settings, {
"data-testid": "settings",
pageSize: modifiedData.pageSize || '',
sort: modifiedData.sort || '',
onChange: handleChange
})
}),
"x",
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Root, {
open: showWarningSubmit,
onOpenChange: toggleWarningSubmit,
children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.ConfirmDialog, {
onConfirm: handleConfirm,
variant: "default",
children: formatMessage({
id: getTrad.getTrad('config.popUpWarning.warning.updateAllSettings'),
defaultMessage: 'This will modify all your settings'
})
})
})
]
})
})
});
};
exports.ConfigureTheView = ConfigureTheView;
//# sourceMappingURL=ConfigureTheView.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,121 @@
import { jsx, jsxs } from 'react/jsx-runtime';
import * as React from 'react';
import { useTracking, useNotification, Layouts, Page, ConfirmDialog } from '@strapi/admin/strapi-admin';
import { Link, Button, Dialog } from '@strapi/design-system';
import { ArrowLeft, Check } from '@strapi/icons';
import isEqual from 'lodash/isEqual';
import { useIntl } from 'react-intl';
import { NavLink } from 'react-router-dom';
import { useConfig } from '../../../hooks/useConfig.mjs';
import { pluginId } from '../../../pluginId.mjs';
import 'byte-size';
import 'date-fns';
import { getTrad } from '../../../utils/getTrad.mjs';
import 'qs';
import '../../../constants.mjs';
import '../../../utils/urlYupSchema.mjs';
import { Settings } from './components/Settings.mjs';
import { setLoaded, onChange } from './state/actions.mjs';
import { initialState, init } from './state/init.mjs';
import { reducer } from './state/reducer.mjs';
// TODO: find a better naming convention for the file that was an index file before
const ConfigureTheView = ({ config })=>{
const { trackUsage } = useTracking();
const { formatMessage } = useIntl();
const { toggleNotification } = useNotification();
const { mutateConfig } = useConfig();
const { isLoading: isSubmittingForm } = mutateConfig;
const [showWarningSubmit, setWarningSubmit] = React.useState(false);
const toggleWarningSubmit = ()=>setWarningSubmit((prevState)=>!prevState);
const [reducerState, dispatch] = React.useReducer(reducer, initialState, ()=>init(config));
const typedDispatch = dispatch;
const { initialData, modifiedData } = reducerState;
const handleSubmit = (e)=>{
e.preventDefault();
toggleWarningSubmit();
};
const handleConfirm = async ()=>{
trackUsage('willEditMediaLibraryConfig');
await mutateConfig.mutateAsync(modifiedData);
setWarningSubmit(false);
typedDispatch(setLoaded());
toggleNotification({
type: 'success',
message: formatMessage({
id: 'notification.form.success.fields',
defaultMessage: 'Changes saved'
})
});
};
const handleChange = ({ target: { name, value } })=>{
typedDispatch(onChange({
name,
value
}));
};
return /*#__PURE__*/ jsx(Layouts.Root, {
children: /*#__PURE__*/ jsx(Page.Main, {
"aria-busy": isSubmittingForm,
children: /*#__PURE__*/ jsxs("form", {
onSubmit: handleSubmit,
children: [
/*#__PURE__*/ jsx(Layouts.Header, {
navigationAction: /*#__PURE__*/ jsx(Link, {
tag: NavLink,
startIcon: /*#__PURE__*/ jsx(ArrowLeft, {}),
to: `/plugins/${pluginId}`,
id: "go-back",
children: formatMessage({
id: getTrad('config.back'),
defaultMessage: 'Back'
})
}),
primaryAction: /*#__PURE__*/ jsx(Button, {
size: "S",
startIcon: /*#__PURE__*/ jsx(Check, {}),
disabled: isEqual(modifiedData, initialData),
type: "submit",
children: formatMessage({
id: 'global.save',
defaultMessage: 'Save'
})
}),
subtitle: formatMessage({
id: getTrad('config.subtitle'),
defaultMessage: 'Define the view settings of the media library.'
}),
title: formatMessage({
id: getTrad('config.title'),
defaultMessage: 'Configure the view - Media Library'
})
}),
/*#__PURE__*/ jsx(Layouts.Content, {
children: /*#__PURE__*/ jsx(Settings, {
"data-testid": "settings",
pageSize: modifiedData.pageSize || '',
sort: modifiedData.sort || '',
onChange: handleChange
})
}),
"x",
/*#__PURE__*/ jsx(Dialog.Root, {
open: showWarningSubmit,
onOpenChange: toggleWarningSubmit,
children: /*#__PURE__*/ jsx(ConfirmDialog, {
onConfirm: handleConfirm,
variant: "default",
children: formatMessage({
id: getTrad('config.popUpWarning.warning.updateAllSettings'),
defaultMessage: 'This will modify all your settings'
})
})
})
]
})
})
});
};
export { ConfigureTheView };
//# sourceMappingURL=ConfigureTheView.mjs.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,108 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
var designSystem = require('@strapi/design-system');
var reactIntl = require('react-intl');
var constants = require('../../../../constants.js');
require('byte-size');
require('date-fns');
var getTrad = require('../../../../utils/getTrad.js');
require('qs');
require('../../../../utils/urlYupSchema.js');
const Settings = ({ sort = '', pageSize = 10, onChange })=>{
const { formatMessage } = reactIntl.useIntl();
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
background: "neutral0",
hasRadius: true,
shadow: "tableShadow",
paddingTop: 6,
paddingBottom: 6,
paddingLeft: 7,
paddingRight: 7,
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Grid.Root, {
gap: 4,
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
s: 12,
col: 6,
direction: "column",
alignItems: "stretch",
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
hint: formatMessage({
id: getTrad.getTrad('config.entries.note'),
defaultMessage: 'Number of assets displayed by default in the Media Library'
}),
name: "pageSize",
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
children: formatMessage({
id: getTrad.getTrad('config.entries.title'),
defaultMessage: 'Entries per page'
})
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelect, {
onChange: (value)=>onChange({
target: {
name: 'pageSize',
value
}
}),
value: pageSize,
children: constants.pageSizes.map((pageSize)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelectOption, {
value: pageSize,
children: pageSize
}, pageSize))
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Hint, {})
]
})
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
s: 12,
col: 6,
direction: "column",
alignItems: "stretch",
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
hint: formatMessage({
id: getTrad.getTrad('config.note'),
defaultMessage: 'Note: You can override this value in the media library.'
}),
name: "sort",
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
children: formatMessage({
id: getTrad.getTrad('config.sort.title'),
defaultMessage: 'Default sort order'
})
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelect, {
onChange: (value)=>onChange({
target: {
name: 'sort',
value
}
}),
value: sort,
"test-sort": sort,
"data-testid": "sort-select",
children: constants.sortOptions.map((filter)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelectOption, {
"data-testid": `sort-option-${filter.value}`,
value: filter.value,
children: formatMessage({
id: getTrad.getTrad(filter.key),
defaultMessage: `${filter.value}`
})
}, filter.key))
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Hint, {})
]
})
})
]
})
});
};
exports.Settings = Settings;
//# sourceMappingURL=Settings.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,106 @@
import { jsx, jsxs } from 'react/jsx-runtime';
import { Box, Grid, Field, SingleSelect, SingleSelectOption } from '@strapi/design-system';
import { useIntl } from 'react-intl';
import { pageSizes, sortOptions } from '../../../../constants.mjs';
import 'byte-size';
import 'date-fns';
import { getTrad } from '../../../../utils/getTrad.mjs';
import 'qs';
import '../../../../utils/urlYupSchema.mjs';
const Settings = ({ sort = '', pageSize = 10, onChange })=>{
const { formatMessage } = useIntl();
return /*#__PURE__*/ jsx(Box, {
background: "neutral0",
hasRadius: true,
shadow: "tableShadow",
paddingTop: 6,
paddingBottom: 6,
paddingLeft: 7,
paddingRight: 7,
children: /*#__PURE__*/ jsxs(Grid.Root, {
gap: 4,
children: [
/*#__PURE__*/ jsx(Grid.Item, {
s: 12,
col: 6,
direction: "column",
alignItems: "stretch",
children: /*#__PURE__*/ jsxs(Field.Root, {
hint: formatMessage({
id: getTrad('config.entries.note'),
defaultMessage: 'Number of assets displayed by default in the Media Library'
}),
name: "pageSize",
children: [
/*#__PURE__*/ jsx(Field.Label, {
children: formatMessage({
id: getTrad('config.entries.title'),
defaultMessage: 'Entries per page'
})
}),
/*#__PURE__*/ jsx(SingleSelect, {
onChange: (value)=>onChange({
target: {
name: 'pageSize',
value
}
}),
value: pageSize,
children: pageSizes.map((pageSize)=>/*#__PURE__*/ jsx(SingleSelectOption, {
value: pageSize,
children: pageSize
}, pageSize))
}),
/*#__PURE__*/ jsx(Field.Hint, {})
]
})
}),
/*#__PURE__*/ jsx(Grid.Item, {
s: 12,
col: 6,
direction: "column",
alignItems: "stretch",
children: /*#__PURE__*/ jsxs(Field.Root, {
hint: formatMessage({
id: getTrad('config.note'),
defaultMessage: 'Note: You can override this value in the media library.'
}),
name: "sort",
children: [
/*#__PURE__*/ jsx(Field.Label, {
children: formatMessage({
id: getTrad('config.sort.title'),
defaultMessage: 'Default sort order'
})
}),
/*#__PURE__*/ jsx(SingleSelect, {
onChange: (value)=>onChange({
target: {
name: 'sort',
value
}
}),
value: sort,
"test-sort": sort,
"data-testid": "sort-select",
children: sortOptions.map((filter)=>/*#__PURE__*/ jsx(SingleSelectOption, {
"data-testid": `sort-option-${filter.value}`,
value: filter.value,
children: formatMessage({
id: getTrad(filter.key),
defaultMessage: `${filter.value}`
})
}, filter.key))
}),
/*#__PURE__*/ jsx(Field.Hint, {})
]
})
})
]
})
});
};
export { Settings };
//# sourceMappingURL=Settings.mjs.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,10 @@
'use strict';
var pluginId = require('../../../../pluginId.js');
const ON_CHANGE = `${pluginId.pluginId}/ON_CHANGE`;
const SET_LOADED = `${pluginId.pluginId}/SET_LOADED`;
exports.ON_CHANGE = ON_CHANGE;
exports.SET_LOADED = SET_LOADED;
//# sourceMappingURL=actionTypes.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"actionTypes.js","sources":["../../../../../../admin/src/pages/App/ConfigureTheView/state/actionTypes.ts"],"sourcesContent":["import { pluginId } from '../../../../pluginId';\n\nexport const ON_CHANGE = `${pluginId}/ON_CHANGE`;\nexport const SET_LOADED = `${pluginId}/SET_LOADED`;\n"],"names":["ON_CHANGE","pluginId","SET_LOADED"],"mappings":";;;;MAEaA,SAAY,GAAA,CAAC,EAAEC,iBAAS,CAAA,UAAU;MAClCC,UAAa,GAAA,CAAC,EAAED,iBAAS,CAAA,WAAW;;;;;"}

View File

@@ -0,0 +1,7 @@
import { pluginId } from '../../../../pluginId.mjs';
const ON_CHANGE = `${pluginId}/ON_CHANGE`;
const SET_LOADED = `${pluginId}/SET_LOADED`;
export { ON_CHANGE, SET_LOADED };
//# sourceMappingURL=actionTypes.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"actionTypes.mjs","sources":["../../../../../../admin/src/pages/App/ConfigureTheView/state/actionTypes.ts"],"sourcesContent":["import { pluginId } from '../../../../pluginId';\n\nexport const ON_CHANGE = `${pluginId}/ON_CHANGE`;\nexport const SET_LOADED = `${pluginId}/SET_LOADED`;\n"],"names":["ON_CHANGE","pluginId","SET_LOADED"],"mappings":";;MAEaA,SAAY,GAAA,CAAC,EAAEC,QAAS,CAAA,UAAU;MAClCC,UAAa,GAAA,CAAC,EAAED,QAAS,CAAA,WAAW;;;;"}

View File

@@ -0,0 +1,16 @@
'use strict';
var actionTypes = require('./actionTypes.js');
const onChange = ({ name, value })=>({
type: actionTypes.ON_CHANGE,
keys: name,
value
});
const setLoaded = ()=>({
type: actionTypes.SET_LOADED
});
exports.onChange = onChange;
exports.setLoaded = setLoaded;
//# sourceMappingURL=actions.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"actions.js","sources":["../../../../../../admin/src/pages/App/ConfigureTheView/state/actions.ts"],"sourcesContent":["import { ON_CHANGE, SET_LOADED } from './actionTypes';\n\nimport type { InitialState } from './init';\n\nexport const onChange = ({\n name,\n value,\n}: {\n name: keyof NonNullable<InitialState['initialData']>;\n value: number | string;\n}) => ({\n type: ON_CHANGE,\n keys: name,\n value,\n});\n\nexport const setLoaded = () => ({\n type: SET_LOADED,\n});\n"],"names":["onChange","name","value","type","ON_CHANGE","keys","setLoaded","SET_LOADED"],"mappings":";;;;AAIO,MAAMA,WAAW,CAAC,EACvBC,IAAI,EACJC,KAAK,EAIN,IAAM;QACLC,IAAMC,EAAAA,qBAAAA;QACNC,IAAMJ,EAAAA,IAAAA;AACNC,QAAAA;AACF,KAAA;AAEO,MAAMI,SAAY,GAAA,KAAO;QAC9BH,IAAMI,EAAAA;AACR,KAAA;;;;;"}

View File

@@ -0,0 +1,13 @@
import { ON_CHANGE, SET_LOADED } from './actionTypes.mjs';
const onChange = ({ name, value })=>({
type: ON_CHANGE,
keys: name,
value
});
const setLoaded = ()=>({
type: SET_LOADED
});
export { onChange, setLoaded };
//# sourceMappingURL=actions.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"actions.mjs","sources":["../../../../../../admin/src/pages/App/ConfigureTheView/state/actions.ts"],"sourcesContent":["import { ON_CHANGE, SET_LOADED } from './actionTypes';\n\nimport type { InitialState } from './init';\n\nexport const onChange = ({\n name,\n value,\n}: {\n name: keyof NonNullable<InitialState['initialData']>;\n value: number | string;\n}) => ({\n type: ON_CHANGE,\n keys: name,\n value,\n});\n\nexport const setLoaded = () => ({\n type: SET_LOADED,\n});\n"],"names":["onChange","name","value","type","ON_CHANGE","keys","setLoaded","SET_LOADED"],"mappings":";;AAIO,MAAMA,WAAW,CAAC,EACvBC,IAAI,EACJC,KAAK,EAIN,IAAM;QACLC,IAAMC,EAAAA,SAAAA;QACNC,IAAMJ,EAAAA,IAAAA;AACNC,QAAAA;AACF,KAAA;AAEO,MAAMI,SAAY,GAAA,KAAO;QAC9BH,IAAMI,EAAAA;AACR,KAAA;;;;"}

View File

@@ -0,0 +1,17 @@
'use strict';
const initialState = {
initialData: {},
modifiedData: {}
};
const init = (configData)=>{
return {
...initialState,
initialData: configData,
modifiedData: configData
};
};
exports.init = init;
exports.initialState = initialState;
//# sourceMappingURL=init.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"init.js","sources":["../../../../../../admin/src/pages/App/ConfigureTheView/state/init.ts"],"sourcesContent":["import type { Configuration } from '../../../../../../shared/contracts/configuration';\n\nexport type InitialState = {\n initialData: Partial<Configuration>;\n modifiedData: Partial<Configuration>;\n};\n\nconst initialState: InitialState = {\n initialData: {},\n modifiedData: {},\n};\n\nconst init = (configData: InitialState['initialData']): InitialState => {\n return {\n ...initialState,\n initialData: configData,\n modifiedData: configData,\n };\n};\nexport { init, initialState };\n"],"names":["initialState","initialData","modifiedData","init","configData"],"mappings":";;AAOA,MAAMA,YAA6B,GAAA;AACjCC,IAAAA,WAAAA,EAAa,EAAC;AACdC,IAAAA,YAAAA,EAAc;AAChB;AAEA,MAAMC,OAAO,CAACC,UAAAA,GAAAA;IACZ,OAAO;AACL,QAAA,GAAGJ,YAAY;QACfC,WAAaG,EAAAA,UAAAA;QACbF,YAAcE,EAAAA;AAChB,KAAA;AACF;;;;;"}

View File

@@ -0,0 +1,14 @@
const initialState = {
initialData: {},
modifiedData: {}
};
const init = (configData)=>{
return {
...initialState,
initialData: configData,
modifiedData: configData
};
};
export { init, initialState };
//# sourceMappingURL=init.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"init.mjs","sources":["../../../../../../admin/src/pages/App/ConfigureTheView/state/init.ts"],"sourcesContent":["import type { Configuration } from '../../../../../../shared/contracts/configuration';\n\nexport type InitialState = {\n initialData: Partial<Configuration>;\n modifiedData: Partial<Configuration>;\n};\n\nconst initialState: InitialState = {\n initialData: {},\n modifiedData: {},\n};\n\nconst init = (configData: InitialState['initialData']): InitialState => {\n return {\n ...initialState,\n initialData: configData,\n modifiedData: configData,\n };\n};\nexport { init, initialState };\n"],"names":["initialState","initialData","modifiedData","init","configData"],"mappings":"AAOA,MAAMA,YAA6B,GAAA;AACjCC,IAAAA,WAAAA,EAAa,EAAC;AACdC,IAAAA,YAAAA,EAAc;AAChB;AAEA,MAAMC,OAAO,CAACC,UAAAA,GAAAA;IACZ,OAAO;AACL,QAAA,GAAGJ,YAAY;QACfC,WAAaG,EAAAA,UAAAA;QACbF,YAAcE,EAAAA;AAChB,KAAA;AACF;;;;"}

View File

@@ -0,0 +1,40 @@
'use strict';
var immer = require('immer');
var get = require('lodash/get');
var set = require('lodash/set');
var actionTypes = require('./actionTypes.js');
var init = require('./init.js');
const reducer = (state = init.initialState, action = {
type: ''
})=>// eslint-disable-next-line consistent-return
immer.produce(state, (draftState)=>{
switch(action.type){
case actionTypes.ON_CHANGE:
{
if ('keys' in action && 'value' in action && action.keys) {
set(draftState, [
'modifiedData',
...action.keys.split('.')
], action.value);
}
break;
}
case actionTypes.SET_LOADED:
{
// This action re-initialises the state using the current modifiedData.
const reInitialise = init.init(get(draftState, [
'modifiedData'
], {}));
draftState.initialData = reInitialise.initialData;
draftState.modifiedData = reInitialise.modifiedData;
break;
}
default:
return draftState;
}
});
exports.reducer = reducer;
//# sourceMappingURL=reducer.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"reducer.js","sources":["../../../../../../admin/src/pages/App/ConfigureTheView/state/reducer.ts"],"sourcesContent":["import { produce } from 'immer'; // current\nimport get from 'lodash/get';\nimport set from 'lodash/set';\n\nimport { ON_CHANGE, SET_LOADED } from './actionTypes';\nimport { init, initialState } from './init';\n\nimport type { InitialState } from './init';\n\nexport interface ActionOnChange {\n type: string;\n keys?: string;\n value: string | number;\n}\n\nexport interface ActionSetLoaded {\n type: string;\n}\n\ninterface ActionInitialValue {\n type: string;\n}\n\nexport type Action = ActionSetLoaded | ActionOnChange | ActionInitialValue;\n\nexport const reducer = (\n state: InitialState = initialState,\n action: Action = {\n type: '',\n }\n) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n switch (action.type) {\n case ON_CHANGE: {\n if ('keys' in action && 'value' in action && action.keys) {\n set(draftState, ['modifiedData', ...action.keys.split('.')], action.value);\n }\n break;\n }\n case SET_LOADED: {\n // This action re-initialises the state using the current modifiedData.\n const reInitialise = init(get(draftState, ['modifiedData'], {}));\n draftState.initialData = reInitialise.initialData;\n draftState.modifiedData = reInitialise.modifiedData;\n break;\n }\n default:\n return draftState;\n }\n });\n"],"names":["reducer","state","initialState","action","type","produce","draftState","ON_CHANGE","keys","set","split","value","SET_LOADED","reInitialise","init","get","initialData","modifiedData"],"mappings":";;;;;;;;MAyBaA,OAAU,GAAA,CACrBC,KAAsBC,GAAAA,iBAAY,EAClCC,MAAiB,GAAA;IACfC,IAAM,EAAA;AACR,CAAC;AAGDC,IAAAA,aAAAA,CAAQJ,OAAO,CAACK,UAAAA,GAAAA;AACd,QAAA,OAAQH,OAAOC,IAAI;YACjB,KAAKG,qBAAAA;AAAW,gBAAA;AACd,oBAAA,IAAI,UAAUJ,MAAU,IAAA,OAAA,IAAWA,MAAUA,IAAAA,MAAAA,CAAOK,IAAI,EAAE;AACxDC,wBAAAA,GAAAA,CAAIH,UAAY,EAAA;AAAC,4BAAA,cAAA;+BAAmBH,MAAOK,CAAAA,IAAI,CAACE,KAAK,CAAC,GAAA;AAAK,yBAAA,EAAEP,OAAOQ,KAAK,CAAA;AAC3E;AACA,oBAAA;AACF;YACA,KAAKC,sBAAAA;AAAY,gBAAA;;oBAEf,MAAMC,YAAAA,GAAeC,SAAKC,CAAAA,GAAAA,CAAIT,UAAY,EAAA;AAAC,wBAAA;AAAe,qBAAA,EAAE,EAAC,CAAA,CAAA;oBAC7DA,UAAWU,CAAAA,WAAW,GAAGH,YAAAA,CAAaG,WAAW;oBACjDV,UAAWW,CAAAA,YAAY,GAAGJ,YAAAA,CAAaI,YAAY;AACnD,oBAAA;AACF;AACA,YAAA;gBACE,OAAOX,UAAAA;AACX;KACC;;;;"}

View File

@@ -0,0 +1,38 @@
import { produce } from 'immer';
import get from 'lodash/get';
import set from 'lodash/set';
import { SET_LOADED, ON_CHANGE } from './actionTypes.mjs';
import { init, initialState } from './init.mjs';
const reducer = (state = initialState, action = {
type: ''
})=>// eslint-disable-next-line consistent-return
produce(state, (draftState)=>{
switch(action.type){
case ON_CHANGE:
{
if ('keys' in action && 'value' in action && action.keys) {
set(draftState, [
'modifiedData',
...action.keys.split('.')
], action.value);
}
break;
}
case SET_LOADED:
{
// This action re-initialises the state using the current modifiedData.
const reInitialise = init(get(draftState, [
'modifiedData'
], {}));
draftState.initialData = reInitialise.initialData;
draftState.modifiedData = reInitialise.modifiedData;
break;
}
default:
return draftState;
}
});
export { reducer };
//# sourceMappingURL=reducer.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"reducer.mjs","sources":["../../../../../../admin/src/pages/App/ConfigureTheView/state/reducer.ts"],"sourcesContent":["import { produce } from 'immer'; // current\nimport get from 'lodash/get';\nimport set from 'lodash/set';\n\nimport { ON_CHANGE, SET_LOADED } from './actionTypes';\nimport { init, initialState } from './init';\n\nimport type { InitialState } from './init';\n\nexport interface ActionOnChange {\n type: string;\n keys?: string;\n value: string | number;\n}\n\nexport interface ActionSetLoaded {\n type: string;\n}\n\ninterface ActionInitialValue {\n type: string;\n}\n\nexport type Action = ActionSetLoaded | ActionOnChange | ActionInitialValue;\n\nexport const reducer = (\n state: InitialState = initialState,\n action: Action = {\n type: '',\n }\n) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n switch (action.type) {\n case ON_CHANGE: {\n if ('keys' in action && 'value' in action && action.keys) {\n set(draftState, ['modifiedData', ...action.keys.split('.')], action.value);\n }\n break;\n }\n case SET_LOADED: {\n // This action re-initialises the state using the current modifiedData.\n const reInitialise = init(get(draftState, ['modifiedData'], {}));\n draftState.initialData = reInitialise.initialData;\n draftState.modifiedData = reInitialise.modifiedData;\n break;\n }\n default:\n return draftState;\n }\n });\n"],"names":["reducer","state","initialState","action","type","produce","draftState","ON_CHANGE","keys","set","split","value","SET_LOADED","reInitialise","init","get","initialData","modifiedData"],"mappings":";;;;;;MAyBaA,OAAU,GAAA,CACrBC,KAAsBC,GAAAA,YAAY,EAClCC,MAAiB,GAAA;IACfC,IAAM,EAAA;AACR,CAAC;AAGDC,IAAAA,OAAAA,CAAQJ,OAAO,CAACK,UAAAA,GAAAA;AACd,QAAA,OAAQH,OAAOC,IAAI;YACjB,KAAKG,SAAAA;AAAW,gBAAA;AACd,oBAAA,IAAI,UAAUJ,MAAU,IAAA,OAAA,IAAWA,MAAUA,IAAAA,MAAAA,CAAOK,IAAI,EAAE;AACxDC,wBAAAA,GAAAA,CAAIH,UAAY,EAAA;AAAC,4BAAA,cAAA;+BAAmBH,MAAOK,CAAAA,IAAI,CAACE,KAAK,CAAC,GAAA;AAAK,yBAAA,EAAEP,OAAOQ,KAAK,CAAA;AAC3E;AACA,oBAAA;AACF;YACA,KAAKC,UAAAA;AAAY,gBAAA;;oBAEf,MAAMC,YAAAA,GAAeC,IAAKC,CAAAA,GAAAA,CAAIT,UAAY,EAAA;AAAC,wBAAA;AAAe,qBAAA,EAAE,EAAC,CAAA,CAAA;oBAC7DA,UAAWU,CAAAA,WAAW,GAAGH,YAAAA,CAAaG,WAAW;oBACjDV,UAAWW,CAAAA,YAAY,GAAGJ,YAAAA,CAAaI,YAAY;AACnD,oBAAA;AACF;AACA,YAAA;gBACE,OAAOX,UAAAA;AACX;KACC;;;;"}

View File

@@ -0,0 +1,453 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
var React = require('react');
var strapiAdmin = require('@strapi/admin/strapi-admin');
var designSystem = require('@strapi/design-system');
var icons = require('@strapi/icons');
var qs = require('qs');
var reactIntl = require('react-intl');
var reactRouterDom = require('react-router-dom');
var styledComponents = require('styled-components');
var AssetGridList = require('../../../components/AssetGridList/AssetGridList.js');
var EditAssetContent = require('../../../components/EditAssetDialog/EditAssetContent.js');
var EditFolderDialog = require('../../../components/EditFolderDialog/EditFolderDialog.js');
var FolderCard = require('../../../components/FolderCard/FolderCard/FolderCard.js');
var FolderCardBody = require('../../../components/FolderCard/FolderCardBody/FolderCardBody.js');
var FolderCardBodyAction = require('../../../components/FolderCard/FolderCardBodyAction/FolderCardBodyAction.js');
var FolderCardCheckbox = require('../../../components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.js');
var FolderGridList = require('../../../components/FolderGridList/FolderGridList.js');
var SortPicker = require('../../../components/SortPicker/SortPicker.js');
var TableList = require('../../../components/TableList/TableList.js');
var UploadAssetDialog = require('../../../components/UploadAssetDialog/UploadAssetDialog.js');
var constants = require('../../../constants.js');
var useAssets = require('../../../hooks/useAssets.js');
var useFolder = require('../../../hooks/useFolder.js');
var useFolders = require('../../../hooks/useFolders.js');
var useMediaLibraryPermissions = require('../../../hooks/useMediaLibraryPermissions.js');
var usePersistentState = require('../../../hooks/usePersistentState.js');
var useSelectionState = require('../../../hooks/useSelectionState.js');
var containsAssetFilter = require('../../../utils/containsAssetFilter.js');
require('byte-size');
require('date-fns');
var getTrad = require('../../../utils/getTrad.js');
var getBreadcrumbDataML = require('../../../utils/getBreadcrumbDataML.js');
var getFolderURL = require('../../../utils/getFolderURL.js');
require('../../../utils/urlYupSchema.js');
var BulkActions = require('./components/BulkActions.js');
var EmptyOrNoPermissions = require('./components/EmptyOrNoPermissions.js');
var Filters = require('./components/Filters.js');
var Header = require('./components/Header.js');
function _interopNamespaceDefault(e) {
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
// TODO: find a better naming convention for the file that was an index file before
const BoxWithHeight = styledComponents.styled(designSystem.Box)`
height: 3.2rem;
display: flex;
align-items: center;
`;
const TypographyMaxWidth = styledComponents.styled(designSystem.Typography)`
max-width: 100%;
`;
const ActionContainer = styledComponents.styled(designSystem.Box)`
svg {
path {
fill: ${({ theme })=>theme.colors.neutral500};
}
}
`;
const MediaLibrary = ()=>{
const navigate = reactRouterDom.useNavigate();
const { canRead, canCreate, canUpdate, canCopyLink, canDownload, canConfigureView, isLoading: permissionsLoading } = useMediaLibraryPermissions.useMediaLibraryPermissions();
const currentFolderToEditRef = React__namespace.useRef();
const { formatMessage } = reactIntl.useIntl();
const { pathname } = reactRouterDom.useLocation();
const { trackUsage } = strapiAdmin.useTracking();
const [{ query }, setQuery] = strapiAdmin.useQueryParams();
const isFiltering = Boolean(query._q || query.filters);
const [view, setView] = usePersistentState.usePersistentState(constants.localStorageKeys.view, constants.viewOptions.GRID);
const isGridView = view === constants.viewOptions.GRID;
const { data: assetsData, isLoading: assetsLoading, error: assetsError } = useAssets.useAssets({
skipWhen: !canRead,
query
});
const { data: foldersData, isLoading: foldersLoading, error: foldersError } = useFolders.useFolders({
enabled: canRead && assetsData?.pagination?.page === 1 && !containsAssetFilter.containsAssetFilter(query),
query
});
const { data: currentFolder, isLoading: isCurrentFolderLoading, error: currentFolderError } = useFolder.useFolder(query?.folder, {
enabled: canRead && !!query?.folder
});
// Folder was not found: redirect to the media library root
if (currentFolderError?.name === 'NotFoundError') {
navigate(pathname);
}
const folders = foldersData?.map((folder)=>({
...folder,
type: 'folder',
folderURL: getFolderURL.getFolderURL(pathname, query, {
folder: folder.id.toString(),
folderPath: folder.path
}),
isSelectable: canUpdate
})) ?? [];
const folderCount = folders?.length || 0;
const assets = assetsData?.results?.map((asset)=>({
...asset,
type: 'asset',
isSelectable: canUpdate
})) || [];
const assetCount = assets?.length ?? 0;
const totalAssetCount = assetsData?.pagination?.total;
const isLoading = isCurrentFolderLoading || foldersLoading || permissionsLoading || assetsLoading;
const [showUploadAssetDialog, setShowUploadAssetDialog] = React__namespace.useState(false);
const [showEditFolderDialog, setShowEditFolderDialog] = React__namespace.useState(false);
const [assetToEdit, setAssetToEdit] = React__namespace.useState(undefined);
const [folderToEdit, setFolderToEdit] = React__namespace.useState(undefined);
const [selected, { selectOne, selectAll }] = useSelectionState.useSelectionState([
'type',
'id'
], []);
const indeterminateBulkSelect = selected?.length > 0 && selected?.length !== assetCount + folderCount;
const toggleUploadAssetDialog = ()=>setShowUploadAssetDialog((prev)=>!prev);
const toggleEditFolderDialog = ({ created = false } = {})=>{
// folders are only displayed on the first page, therefore
// we have to navigate the user to that page, in case a folder
// was created successfully in order for them to see it
if (created && query?.page !== '1') {
setQuery({
...query,
page: 1
});
}
setShowEditFolderDialog((prev)=>!prev);
};
const handleBulkSelect = (checked, elements)=>{
if (checked) {
trackUsage('didSelectAllMediaLibraryElements');
}
selectAll(elements);
};
const handleChangeSort = (value)=>{
trackUsage('didSortMediaLibraryElements', {
location: 'upload',
sort: value
});
setQuery({
sort: value
});
};
const handleEditFolder = (folder)=>{
setFolderToEdit(folder);
setShowEditFolderDialog(true);
};
const handleEditFolderClose = (payload)=>{
setFolderToEdit(null);
toggleEditFolderDialog(payload);
if (currentFolderToEditRef.current) {
currentFolderToEditRef.current.focus();
}
};
const handleAssetDeleted = (numberOfAssets)=>{
if (numberOfAssets === assetCount && assetsData?.pagination?.page === assetsData?.pagination?.pageCount && assetsData?.pagination?.page && assetsData.pagination.page > 1) {
setQuery({
...query,
page: assetsData.pagination.page - 1
});
}
};
const handleBulkActionSuccess = ()=>{
selectAll();
handleAssetDeleted(selected.length);
};
if (isLoading) {
return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
}
if (assetsError || foldersError) {
return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Error, {});
}
return /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Layouts.Root, {
children: [
/*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Page.Main, {
children: [
/*#__PURE__*/ jsxRuntime.jsx(Header.Header, {
breadcrumbs: !isCurrentFolderLoading ? getBreadcrumbDataML.getBreadcrumbDataML(currentFolder, {
pathname,
query
}) : null,
canCreate: canCreate,
onToggleEditFolderDialog: toggleEditFolderDialog,
onToggleUploadAssetDialog: toggleUploadAssetDialog,
folder: currentFolder
}),
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Layouts.Action, {
startActions: /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
children: [
canUpdate && isGridView && (assetCount > 0 || folderCount > 0) && /*#__PURE__*/ jsxRuntime.jsx(BoxWithHeight, {
paddingLeft: 2,
paddingRight: 2,
background: "neutral0",
hasRadius: true,
borderColor: "neutral200",
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Checkbox, {
"aria-label": formatMessage({
id: getTrad.getTrad('bulk.select.label'),
defaultMessage: 'Select all folders & assets'
}),
checked: indeterminateBulkSelect ? 'indeterminate' : (assetCount > 0 || folderCount > 0) && selected.length === assetCount + folderCount,
onCheckedChange: (e)=>handleBulkSelect(e, [
...assets,
...folders
])
})
}),
canRead && isGridView && /*#__PURE__*/ jsxRuntime.jsx(SortPicker.SortPicker, {
value: query?.sort,
onChangeSort: handleChangeSort
}),
canRead && /*#__PURE__*/ jsxRuntime.jsx(Filters.Filters, {})
]
}),
endActions: /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
children: [
canConfigureView ? /*#__PURE__*/ jsxRuntime.jsx(ActionContainer, {
paddingTop: 1,
paddingBottom: 1,
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
tag: reactRouterDom.Link,
to: {
pathname: `${pathname}/configuration`,
search: qs.stringify(query, {
encode: false
})
},
label: formatMessage({
id: 'app.links.configure-view',
defaultMessage: 'Configure the view'
}),
children: /*#__PURE__*/ jsxRuntime.jsx(icons.Cog, {})
})
}) : null,
/*#__PURE__*/ jsxRuntime.jsx(ActionContainer, {
paddingTop: 1,
paddingBottom: 1,
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
label: isGridView ? formatMessage({
id: getTrad.getTrad('view-switch.list'),
defaultMessage: 'List View'
}) : formatMessage({
id: getTrad.getTrad('view-switch.grid'),
defaultMessage: 'Grid View'
}),
onClick: ()=>setView(isGridView ? constants.viewOptions.LIST : constants.viewOptions.GRID),
children: isGridView ? /*#__PURE__*/ jsxRuntime.jsx(icons.List, {}) : /*#__PURE__*/ jsxRuntime.jsx(icons.GridFour, {})
})
}),
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.SearchInput, {
label: formatMessage({
id: getTrad.getTrad('search.label'),
defaultMessage: 'Search for an asset'
}),
trackedEvent: "didSearchMediaLibraryElements",
trackedEventDetails: {
location: 'upload'
}
})
]
})
}),
/*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Layouts.Content, {
children: [
selected.length > 0 && /*#__PURE__*/ jsxRuntime.jsx(BulkActions.BulkActions, {
currentFolder: currentFolder,
selected: selected,
onSuccess: handleBulkActionSuccess
}),
folderCount === 0 && assetCount === 0 && /*#__PURE__*/ jsxRuntime.jsx(EmptyOrNoPermissions.EmptyOrNoPermissions, {
canCreate: canCreate,
canRead: canRead,
isFiltering: isFiltering,
onActionClick: toggleUploadAssetDialog
}),
canRead && !isGridView && (assetCount > 0 || folderCount > 0) && /*#__PURE__*/ jsxRuntime.jsx(TableList.TableList, {
assetCount: assetCount,
folderCount: folderCount,
indeterminate: indeterminateBulkSelect,
onChangeSort: handleChangeSort,
onChangeFolder: (folderID, folderPath)=>navigate(getFolderURL.getFolderURL(pathname, query, {
folder: folderID.toString(),
folderPath
})),
onEditAsset: setAssetToEdit,
onEditFolder: handleEditFolder,
onSelectOne: selectOne,
onSelectAll: handleBulkSelect,
rows: [
...folders,
...assets
],
selected: selected,
shouldDisableBulkSelect: !canUpdate,
sortQuery: query?.sort ?? ''
}),
canRead && isGridView && /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
children: [
folderCount > 0 && /*#__PURE__*/ jsxRuntime.jsx(FolderGridList.FolderGridList, {
title: (isFiltering && assetCount > 0 || !isFiltering) && formatMessage({
id: getTrad.getTrad('list.folders.title'),
defaultMessage: 'Folders ({count})'
}, {
count: folderCount
}) || '',
children: folders.map((folder)=>{
const selectedFolders = selected.filter(({ type })=>type === 'folder');
const isSelected = !!selectedFolders.find((currentFolder)=>currentFolder.id === folder.id);
const url = getFolderURL.getFolderURL(pathname, query, {
folder: folder?.id.toString(),
folderPath: folder?.path
});
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
col: 3,
direction: "column",
alignItems: "stretch",
children: /*#__PURE__*/ jsxRuntime.jsx(FolderCard.FolderCard, {
ref: folderToEdit && folder.id === folderToEdit.id ? currentFolderToEditRef : undefined,
ariaLabel: folder.name,
id: `folder-${folder.id}`,
to: url,
startAction: folder.isSelectable ? /*#__PURE__*/ jsxRuntime.jsx(FolderCardCheckbox.FolderCardCheckbox, {
"data-testid": `folder-checkbox-${folder.id}`,
checked: isSelected,
onCheckedChange: ()=>selectOne(folder)
}) : null,
cardActions: /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
label: formatMessage({
id: getTrad.getTrad('list.folder.edit'),
defaultMessage: 'Edit folder'
}),
onClick: ()=>handleEditFolder(folder),
children: /*#__PURE__*/ jsxRuntime.jsx(icons.Pencil, {})
}),
children: /*#__PURE__*/ jsxRuntime.jsx(FolderCardBody.FolderCardBody, {
children: /*#__PURE__*/ jsxRuntime.jsx(FolderCardBodyAction.FolderCardBodyAction, {
to: url,
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
tag: "h2",
direction: "column",
alignItems: "start",
maxWidth: "100%",
children: [
/*#__PURE__*/ jsxRuntime.jsxs(TypographyMaxWidth, {
fontWeight: "semiBold",
textColor: "neutral800",
ellipsis: true,
children: [
folder.name,
/*#__PURE__*/ jsxRuntime.jsx(designSystem.VisuallyHidden, {
children: ":"
})
]
}),
/*#__PURE__*/ jsxRuntime.jsx(TypographyMaxWidth, {
tag: "span",
textColor: "neutral600",
variant: "pi",
ellipsis: true,
children: formatMessage({
id: getTrad.getTrad('list.folder.subtitle'),
defaultMessage: '{folderCount, plural, =0 {# folder} one {# folder} other {# folders}}, {filesCount, plural, =0 {# asset} one {# asset} other {# assets}}'
}, {
folderCount: folder.children?.count,
filesCount: folder.files?.count
})
})
]
})
})
})
})
}, `folder-${folder.id}`);
})
}),
assetCount > 0 && folderCount > 0 && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
paddingTop: 6,
paddingBottom: 4,
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Divider, {})
}),
assetCount > 0 && /*#__PURE__*/ jsxRuntime.jsx(AssetGridList.AssetGridList, {
assets: assets,
onEditAsset: setAssetToEdit,
onSelectAsset: selectOne,
selectedAssets: selected.filter(({ type })=>type === 'asset'),
title: (!isFiltering || isFiltering && folderCount > 0) && assetsData?.pagination?.page === 1 && formatMessage({
id: getTrad.getTrad('list.assets.title'),
defaultMessage: 'Assets ({count})'
}, {
count: totalAssetCount
}) || ''
})
]
}),
/*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Pagination.Root, {
...assetsData?.pagination,
children: [
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Pagination.PageSize, {}),
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Pagination.Links, {})
]
})
]
})
]
}),
showUploadAssetDialog && /*#__PURE__*/ jsxRuntime.jsx(UploadAssetDialog.UploadAssetDialog, {
open: showUploadAssetDialog,
onClose: toggleUploadAssetDialog,
trackedLocation: "upload",
folderId: query?.folder
}),
showEditFolderDialog && /*#__PURE__*/ jsxRuntime.jsx(EditFolderDialog.EditFolderDialog, {
open: showEditFolderDialog,
onClose: ()=>handleEditFolderClose(),
folder: folderToEdit,
parentFolderId: query?.folder,
location: "upload"
}),
assetToEdit && /*#__PURE__*/ jsxRuntime.jsx(EditAssetContent.EditAssetDialog, {
onClose: (editedAsset)=>{
// The asset has been deleted
if (editedAsset === null) {
handleAssetDeleted(1);
}
setAssetToEdit(undefined);
},
open: !!assetToEdit,
asset: assetToEdit,
canUpdate: canUpdate,
canCopyLink: canCopyLink,
canDownload: canDownload,
trackedLocation: "upload"
})
]
});
};
exports.MediaLibrary = MediaLibrary;
//# sourceMappingURL=MediaLibrary.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,432 @@
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
import * as React from 'react';
import { useTracking, useQueryParams, Page, Layouts, SearchInput, Pagination } from '@strapi/admin/strapi-admin';
import { Box, Typography, Checkbox, IconButton, Grid, Flex, VisuallyHidden, Divider } from '@strapi/design-system';
import { Cog, List, GridFour, Pencil } from '@strapi/icons';
import { stringify } from 'qs';
import { useIntl } from 'react-intl';
import { useNavigate, useLocation, Link } from 'react-router-dom';
import { styled } from 'styled-components';
import { AssetGridList } from '../../../components/AssetGridList/AssetGridList.mjs';
import { EditAssetDialog } from '../../../components/EditAssetDialog/EditAssetContent.mjs';
import { EditFolderDialog } from '../../../components/EditFolderDialog/EditFolderDialog.mjs';
import { FolderCard } from '../../../components/FolderCard/FolderCard/FolderCard.mjs';
import { FolderCardBody } from '../../../components/FolderCard/FolderCardBody/FolderCardBody.mjs';
import { FolderCardBodyAction } from '../../../components/FolderCard/FolderCardBodyAction/FolderCardBodyAction.mjs';
import { FolderCardCheckbox } from '../../../components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.mjs';
import { FolderGridList } from '../../../components/FolderGridList/FolderGridList.mjs';
import { SortPicker } from '../../../components/SortPicker/SortPicker.mjs';
import { TableList } from '../../../components/TableList/TableList.mjs';
import { UploadAssetDialog } from '../../../components/UploadAssetDialog/UploadAssetDialog.mjs';
import { viewOptions, localStorageKeys } from '../../../constants.mjs';
import { useAssets } from '../../../hooks/useAssets.mjs';
import { useFolder } from '../../../hooks/useFolder.mjs';
import { useFolders } from '../../../hooks/useFolders.mjs';
import { useMediaLibraryPermissions } from '../../../hooks/useMediaLibraryPermissions.mjs';
import { usePersistentState } from '../../../hooks/usePersistentState.mjs';
import { useSelectionState } from '../../../hooks/useSelectionState.mjs';
import { containsAssetFilter } from '../../../utils/containsAssetFilter.mjs';
import 'byte-size';
import 'date-fns';
import { getTrad } from '../../../utils/getTrad.mjs';
import { getBreadcrumbDataML } from '../../../utils/getBreadcrumbDataML.mjs';
import { getFolderURL } from '../../../utils/getFolderURL.mjs';
import '../../../utils/urlYupSchema.mjs';
import { BulkActions } from './components/BulkActions.mjs';
import { EmptyOrNoPermissions } from './components/EmptyOrNoPermissions.mjs';
import { Filters } from './components/Filters.mjs';
import { Header } from './components/Header.mjs';
// TODO: find a better naming convention for the file that was an index file before
const BoxWithHeight = styled(Box)`
height: 3.2rem;
display: flex;
align-items: center;
`;
const TypographyMaxWidth = styled(Typography)`
max-width: 100%;
`;
const ActionContainer = styled(Box)`
svg {
path {
fill: ${({ theme })=>theme.colors.neutral500};
}
}
`;
const MediaLibrary = ()=>{
const navigate = useNavigate();
const { canRead, canCreate, canUpdate, canCopyLink, canDownload, canConfigureView, isLoading: permissionsLoading } = useMediaLibraryPermissions();
const currentFolderToEditRef = React.useRef();
const { formatMessage } = useIntl();
const { pathname } = useLocation();
const { trackUsage } = useTracking();
const [{ query }, setQuery] = useQueryParams();
const isFiltering = Boolean(query._q || query.filters);
const [view, setView] = usePersistentState(localStorageKeys.view, viewOptions.GRID);
const isGridView = view === viewOptions.GRID;
const { data: assetsData, isLoading: assetsLoading, error: assetsError } = useAssets({
skipWhen: !canRead,
query
});
const { data: foldersData, isLoading: foldersLoading, error: foldersError } = useFolders({
enabled: canRead && assetsData?.pagination?.page === 1 && !containsAssetFilter(query),
query
});
const { data: currentFolder, isLoading: isCurrentFolderLoading, error: currentFolderError } = useFolder(query?.folder, {
enabled: canRead && !!query?.folder
});
// Folder was not found: redirect to the media library root
if (currentFolderError?.name === 'NotFoundError') {
navigate(pathname);
}
const folders = foldersData?.map((folder)=>({
...folder,
type: 'folder',
folderURL: getFolderURL(pathname, query, {
folder: folder.id.toString(),
folderPath: folder.path
}),
isSelectable: canUpdate
})) ?? [];
const folderCount = folders?.length || 0;
const assets = assetsData?.results?.map((asset)=>({
...asset,
type: 'asset',
isSelectable: canUpdate
})) || [];
const assetCount = assets?.length ?? 0;
const totalAssetCount = assetsData?.pagination?.total;
const isLoading = isCurrentFolderLoading || foldersLoading || permissionsLoading || assetsLoading;
const [showUploadAssetDialog, setShowUploadAssetDialog] = React.useState(false);
const [showEditFolderDialog, setShowEditFolderDialog] = React.useState(false);
const [assetToEdit, setAssetToEdit] = React.useState(undefined);
const [folderToEdit, setFolderToEdit] = React.useState(undefined);
const [selected, { selectOne, selectAll }] = useSelectionState([
'type',
'id'
], []);
const indeterminateBulkSelect = selected?.length > 0 && selected?.length !== assetCount + folderCount;
const toggleUploadAssetDialog = ()=>setShowUploadAssetDialog((prev)=>!prev);
const toggleEditFolderDialog = ({ created = false } = {})=>{
// folders are only displayed on the first page, therefore
// we have to navigate the user to that page, in case a folder
// was created successfully in order for them to see it
if (created && query?.page !== '1') {
setQuery({
...query,
page: 1
});
}
setShowEditFolderDialog((prev)=>!prev);
};
const handleBulkSelect = (checked, elements)=>{
if (checked) {
trackUsage('didSelectAllMediaLibraryElements');
}
selectAll(elements);
};
const handleChangeSort = (value)=>{
trackUsage('didSortMediaLibraryElements', {
location: 'upload',
sort: value
});
setQuery({
sort: value
});
};
const handleEditFolder = (folder)=>{
setFolderToEdit(folder);
setShowEditFolderDialog(true);
};
const handleEditFolderClose = (payload)=>{
setFolderToEdit(null);
toggleEditFolderDialog(payload);
if (currentFolderToEditRef.current) {
currentFolderToEditRef.current.focus();
}
};
const handleAssetDeleted = (numberOfAssets)=>{
if (numberOfAssets === assetCount && assetsData?.pagination?.page === assetsData?.pagination?.pageCount && assetsData?.pagination?.page && assetsData.pagination.page > 1) {
setQuery({
...query,
page: assetsData.pagination.page - 1
});
}
};
const handleBulkActionSuccess = ()=>{
selectAll();
handleAssetDeleted(selected.length);
};
if (isLoading) {
return /*#__PURE__*/ jsx(Page.Loading, {});
}
if (assetsError || foldersError) {
return /*#__PURE__*/ jsx(Page.Error, {});
}
return /*#__PURE__*/ jsxs(Layouts.Root, {
children: [
/*#__PURE__*/ jsxs(Page.Main, {
children: [
/*#__PURE__*/ jsx(Header, {
breadcrumbs: !isCurrentFolderLoading ? getBreadcrumbDataML(currentFolder, {
pathname,
query
}) : null,
canCreate: canCreate,
onToggleEditFolderDialog: toggleEditFolderDialog,
onToggleUploadAssetDialog: toggleUploadAssetDialog,
folder: currentFolder
}),
/*#__PURE__*/ jsx(Layouts.Action, {
startActions: /*#__PURE__*/ jsxs(Fragment, {
children: [
canUpdate && isGridView && (assetCount > 0 || folderCount > 0) && /*#__PURE__*/ jsx(BoxWithHeight, {
paddingLeft: 2,
paddingRight: 2,
background: "neutral0",
hasRadius: true,
borderColor: "neutral200",
children: /*#__PURE__*/ jsx(Checkbox, {
"aria-label": formatMessage({
id: getTrad('bulk.select.label'),
defaultMessage: 'Select all folders & assets'
}),
checked: indeterminateBulkSelect ? 'indeterminate' : (assetCount > 0 || folderCount > 0) && selected.length === assetCount + folderCount,
onCheckedChange: (e)=>handleBulkSelect(e, [
...assets,
...folders
])
})
}),
canRead && isGridView && /*#__PURE__*/ jsx(SortPicker, {
value: query?.sort,
onChangeSort: handleChangeSort
}),
canRead && /*#__PURE__*/ jsx(Filters, {})
]
}),
endActions: /*#__PURE__*/ jsxs(Fragment, {
children: [
canConfigureView ? /*#__PURE__*/ jsx(ActionContainer, {
paddingTop: 1,
paddingBottom: 1,
children: /*#__PURE__*/ jsx(IconButton, {
tag: Link,
to: {
pathname: `${pathname}/configuration`,
search: stringify(query, {
encode: false
})
},
label: formatMessage({
id: 'app.links.configure-view',
defaultMessage: 'Configure the view'
}),
children: /*#__PURE__*/ jsx(Cog, {})
})
}) : null,
/*#__PURE__*/ jsx(ActionContainer, {
paddingTop: 1,
paddingBottom: 1,
children: /*#__PURE__*/ jsx(IconButton, {
label: isGridView ? formatMessage({
id: getTrad('view-switch.list'),
defaultMessage: 'List View'
}) : formatMessage({
id: getTrad('view-switch.grid'),
defaultMessage: 'Grid View'
}),
onClick: ()=>setView(isGridView ? viewOptions.LIST : viewOptions.GRID),
children: isGridView ? /*#__PURE__*/ jsx(List, {}) : /*#__PURE__*/ jsx(GridFour, {})
})
}),
/*#__PURE__*/ jsx(SearchInput, {
label: formatMessage({
id: getTrad('search.label'),
defaultMessage: 'Search for an asset'
}),
trackedEvent: "didSearchMediaLibraryElements",
trackedEventDetails: {
location: 'upload'
}
})
]
})
}),
/*#__PURE__*/ jsxs(Layouts.Content, {
children: [
selected.length > 0 && /*#__PURE__*/ jsx(BulkActions, {
currentFolder: currentFolder,
selected: selected,
onSuccess: handleBulkActionSuccess
}),
folderCount === 0 && assetCount === 0 && /*#__PURE__*/ jsx(EmptyOrNoPermissions, {
canCreate: canCreate,
canRead: canRead,
isFiltering: isFiltering,
onActionClick: toggleUploadAssetDialog
}),
canRead && !isGridView && (assetCount > 0 || folderCount > 0) && /*#__PURE__*/ jsx(TableList, {
assetCount: assetCount,
folderCount: folderCount,
indeterminate: indeterminateBulkSelect,
onChangeSort: handleChangeSort,
onChangeFolder: (folderID, folderPath)=>navigate(getFolderURL(pathname, query, {
folder: folderID.toString(),
folderPath
})),
onEditAsset: setAssetToEdit,
onEditFolder: handleEditFolder,
onSelectOne: selectOne,
onSelectAll: handleBulkSelect,
rows: [
...folders,
...assets
],
selected: selected,
shouldDisableBulkSelect: !canUpdate,
sortQuery: query?.sort ?? ''
}),
canRead && isGridView && /*#__PURE__*/ jsxs(Fragment, {
children: [
folderCount > 0 && /*#__PURE__*/ jsx(FolderGridList, {
title: (isFiltering && assetCount > 0 || !isFiltering) && formatMessage({
id: getTrad('list.folders.title'),
defaultMessage: 'Folders ({count})'
}, {
count: folderCount
}) || '',
children: folders.map((folder)=>{
const selectedFolders = selected.filter(({ type })=>type === 'folder');
const isSelected = !!selectedFolders.find((currentFolder)=>currentFolder.id === folder.id);
const url = getFolderURL(pathname, query, {
folder: folder?.id.toString(),
folderPath: folder?.path
});
return /*#__PURE__*/ jsx(Grid.Item, {
col: 3,
direction: "column",
alignItems: "stretch",
children: /*#__PURE__*/ jsx(FolderCard, {
ref: folderToEdit && folder.id === folderToEdit.id ? currentFolderToEditRef : undefined,
ariaLabel: folder.name,
id: `folder-${folder.id}`,
to: url,
startAction: folder.isSelectable ? /*#__PURE__*/ jsx(FolderCardCheckbox, {
"data-testid": `folder-checkbox-${folder.id}`,
checked: isSelected,
onCheckedChange: ()=>selectOne(folder)
}) : null,
cardActions: /*#__PURE__*/ jsx(IconButton, {
label: formatMessage({
id: getTrad('list.folder.edit'),
defaultMessage: 'Edit folder'
}),
onClick: ()=>handleEditFolder(folder),
children: /*#__PURE__*/ jsx(Pencil, {})
}),
children: /*#__PURE__*/ jsx(FolderCardBody, {
children: /*#__PURE__*/ jsx(FolderCardBodyAction, {
to: url,
children: /*#__PURE__*/ jsxs(Flex, {
tag: "h2",
direction: "column",
alignItems: "start",
maxWidth: "100%",
children: [
/*#__PURE__*/ jsxs(TypographyMaxWidth, {
fontWeight: "semiBold",
textColor: "neutral800",
ellipsis: true,
children: [
folder.name,
/*#__PURE__*/ jsx(VisuallyHidden, {
children: ":"
})
]
}),
/*#__PURE__*/ jsx(TypographyMaxWidth, {
tag: "span",
textColor: "neutral600",
variant: "pi",
ellipsis: true,
children: formatMessage({
id: getTrad('list.folder.subtitle'),
defaultMessage: '{folderCount, plural, =0 {# folder} one {# folder} other {# folders}}, {filesCount, plural, =0 {# asset} one {# asset} other {# assets}}'
}, {
folderCount: folder.children?.count,
filesCount: folder.files?.count
})
})
]
})
})
})
})
}, `folder-${folder.id}`);
})
}),
assetCount > 0 && folderCount > 0 && /*#__PURE__*/ jsx(Box, {
paddingTop: 6,
paddingBottom: 4,
children: /*#__PURE__*/ jsx(Divider, {})
}),
assetCount > 0 && /*#__PURE__*/ jsx(AssetGridList, {
assets: assets,
onEditAsset: setAssetToEdit,
onSelectAsset: selectOne,
selectedAssets: selected.filter(({ type })=>type === 'asset'),
title: (!isFiltering || isFiltering && folderCount > 0) && assetsData?.pagination?.page === 1 && formatMessage({
id: getTrad('list.assets.title'),
defaultMessage: 'Assets ({count})'
}, {
count: totalAssetCount
}) || ''
})
]
}),
/*#__PURE__*/ jsxs(Pagination.Root, {
...assetsData?.pagination,
children: [
/*#__PURE__*/ jsx(Pagination.PageSize, {}),
/*#__PURE__*/ jsx(Pagination.Links, {})
]
})
]
})
]
}),
showUploadAssetDialog && /*#__PURE__*/ jsx(UploadAssetDialog, {
open: showUploadAssetDialog,
onClose: toggleUploadAssetDialog,
trackedLocation: "upload",
folderId: query?.folder
}),
showEditFolderDialog && /*#__PURE__*/ jsx(EditFolderDialog, {
open: showEditFolderDialog,
onClose: ()=>handleEditFolderClose(),
folder: folderToEdit,
parentFolderId: query?.folder,
location: "upload"
}),
assetToEdit && /*#__PURE__*/ jsx(EditAssetDialog, {
onClose: (editedAsset)=>{
// The asset has been deleted
if (editedAsset === null) {
handleAssetDeleted(1);
}
setAssetToEdit(undefined);
},
open: !!assetToEdit,
asset: assetToEdit,
canUpdate: canUpdate,
canCopyLink: canCopyLink,
canDownload: canDownload,
trackedLocation: "upload"
})
]
});
};
export { MediaLibrary };
//# sourceMappingURL=MediaLibrary.mjs.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,49 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
var designSystem = require('@strapi/design-system');
var reactIntl = require('react-intl');
require('byte-size');
require('date-fns');
var getTrad = require('../../../../utils/getTrad.js');
require('qs');
require('../../../../constants.js');
require('../../../../utils/urlYupSchema.js');
var BulkDeleteButton = require('./BulkDeleteButton.js');
var BulkMoveButton = require('./BulkMoveButton.js');
const BulkActions = ({ selected = [], onSuccess, currentFolder })=>{
const { formatMessage } = reactIntl.useIntl();
const numberAssets = selected?.reduce(function(_this, val) {
return val?.type === 'folder' && 'files' in val && val?.files && 'count' in val.files ? _this + val?.files?.count : _this + 1;
}, 0);
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
gap: 2,
paddingBottom: 5,
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
variant: "epsilon",
textColor: "neutral600",
children: formatMessage({
id: getTrad.getTrad('list.assets.selected'),
defaultMessage: '{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}} selected'
}, {
numberFolders: selected?.filter(({ type })=>type === 'folder').length,
numberAssets
})
}),
/*#__PURE__*/ jsxRuntime.jsx(BulkDeleteButton.BulkDeleteButton, {
selected: selected,
onSuccess: onSuccess
}),
/*#__PURE__*/ jsxRuntime.jsx(BulkMoveButton.BulkMoveButton, {
currentFolder: currentFolder,
selected: selected,
onSuccess: onSuccess
})
]
});
};
exports.BulkActions = BulkActions;
//# sourceMappingURL=BulkActions.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BulkActions.js","sources":["../../../../../../admin/src/pages/App/MediaLibrary/components/BulkActions.tsx"],"sourcesContent":["import { Flex, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../../utils';\n\nimport { BulkDeleteButton } from './BulkDeleteButton';\nimport { BulkMoveButton } from './BulkMoveButton';\n\nimport type { File } from '../../../../../../shared/contracts/files';\nimport type {\n FolderDefinition,\n Folder as FolderInitial,\n} from '../../../../../../shared/contracts/folders';\n\ninterface FolderWithType extends FolderInitial {\n type: string;\n}\n\nexport interface FileWithType extends File {\n type: string;\n}\n\nexport interface BulkActionsProps {\n selected: Array<FileWithType | FolderDefinition> | Array<FolderWithType | FileWithType>;\n onSuccess: () => void;\n currentFolder?: FolderWithType;\n}\n\nexport const BulkActions = ({ selected = [], onSuccess, currentFolder }: BulkActionsProps) => {\n const { formatMessage } = useIntl();\n const numberAssets = selected?.reduce(function (_this, val) {\n return val?.type === 'folder' && 'files' in val && val?.files && 'count' in val.files\n ? _this + val?.files?.count\n : _this + 1;\n }, 0);\n\n return (\n <Flex gap={2} paddingBottom={5}>\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: getTrad('list.assets.selected'),\n defaultMessage:\n '{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}} selected',\n },\n {\n numberFolders: selected?.filter(({ type }) => type === 'folder').length,\n numberAssets,\n }\n )}\n </Typography>\n\n <BulkDeleteButton\n selected={selected as Array<FileWithType | FolderDefinition>}\n onSuccess={onSuccess}\n />\n <BulkMoveButton\n currentFolder={currentFolder}\n selected={selected as Array<FolderWithType | FileWithType>}\n onSuccess={onSuccess}\n />\n </Flex>\n );\n};\n"],"names":["BulkActions","selected","onSuccess","currentFolder","formatMessage","useIntl","numberAssets","reduce","_this","val","type","files","count","_jsxs","Flex","gap","paddingBottom","_jsx","Typography","variant","textColor","id","getTrad","defaultMessage","numberFolders","filter","length","BulkDeleteButton","BulkMoveButton"],"mappings":";;;;;;;;;;;;;;AA4BO,MAAMA,WAAc,GAAA,CAAC,EAAEC,QAAAA,GAAW,EAAE,EAAEC,SAAS,EAAEC,aAAa,EAAoB,GAAA;IACvF,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,eAAeL,QAAUM,EAAAA,MAAAA,CAAO,SAAUC,KAAK,EAAEC,GAAG,EAAA;AACxD,QAAA,OAAOA,GAAKC,EAAAA,IAAAA,KAAS,QAAY,IAAA,OAAA,IAAWD,OAAOA,GAAKE,EAAAA,KAAAA,IAAS,OAAWF,IAAAA,GAAAA,CAAIE,KAAK,GACjFH,KAAAA,GAAQC,GAAKE,EAAAA,KAAAA,EAAOC,QACpBJ,KAAQ,GAAA,CAAA;KACX,EAAA,CAAA,CAAA;AAEH,IAAA,qBACEK,eAACC,CAAAA,iBAAAA,EAAAA;QAAKC,GAAK,EAAA,CAAA;QAAGC,aAAe,EAAA,CAAA;;0BAC3BC,cAACC,CAAAA,uBAAAA,EAAAA;gBAAWC,OAAQ,EAAA,SAAA;gBAAUC,SAAU,EAAA,YAAA;0BACrChB,aACC,CAAA;AACEiB,oBAAAA,EAAAA,EAAIC,eAAQ,CAAA,sBAAA,CAAA;oBACZC,cACE,EAAA;iBAEJ,EAAA;oBACEC,aAAevB,EAAAA,QAAAA,EAAUwB,OAAO,CAAC,EAAEf,IAAI,EAAE,GAAKA,SAAS,QAAUgB,CAAAA,CAAAA,MAAAA;AACjEpB,oBAAAA;AACF,iBAAA;;0BAIJW,cAACU,CAAAA,iCAAAA,EAAAA;gBACC1B,QAAUA,EAAAA,QAAAA;gBACVC,SAAWA,EAAAA;;0BAEbe,cAACW,CAAAA,6BAAAA,EAAAA;gBACCzB,aAAeA,EAAAA,aAAAA;gBACfF,QAAUA,EAAAA,QAAAA;gBACVC,SAAWA,EAAAA;;;;AAInB;;;;"}

View File

@@ -0,0 +1,47 @@
import { jsxs, jsx } from 'react/jsx-runtime';
import { Flex, Typography } from '@strapi/design-system';
import { useIntl } from 'react-intl';
import 'byte-size';
import 'date-fns';
import { getTrad } from '../../../../utils/getTrad.mjs';
import 'qs';
import '../../../../constants.mjs';
import '../../../../utils/urlYupSchema.mjs';
import { BulkDeleteButton } from './BulkDeleteButton.mjs';
import { BulkMoveButton } from './BulkMoveButton.mjs';
const BulkActions = ({ selected = [], onSuccess, currentFolder })=>{
const { formatMessage } = useIntl();
const numberAssets = selected?.reduce(function(_this, val) {
return val?.type === 'folder' && 'files' in val && val?.files && 'count' in val.files ? _this + val?.files?.count : _this + 1;
}, 0);
return /*#__PURE__*/ jsxs(Flex, {
gap: 2,
paddingBottom: 5,
children: [
/*#__PURE__*/ jsx(Typography, {
variant: "epsilon",
textColor: "neutral600",
children: formatMessage({
id: getTrad('list.assets.selected'),
defaultMessage: '{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}} selected'
}, {
numberFolders: selected?.filter(({ type })=>type === 'folder').length,
numberAssets
})
}),
/*#__PURE__*/ jsx(BulkDeleteButton, {
selected: selected,
onSuccess: onSuccess
}),
/*#__PURE__*/ jsx(BulkMoveButton, {
currentFolder: currentFolder,
selected: selected,
onSuccess: onSuccess
})
]
});
};
export { BulkActions };
//# sourceMappingURL=BulkActions.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BulkActions.mjs","sources":["../../../../../../admin/src/pages/App/MediaLibrary/components/BulkActions.tsx"],"sourcesContent":["import { Flex, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../../utils';\n\nimport { BulkDeleteButton } from './BulkDeleteButton';\nimport { BulkMoveButton } from './BulkMoveButton';\n\nimport type { File } from '../../../../../../shared/contracts/files';\nimport type {\n FolderDefinition,\n Folder as FolderInitial,\n} from '../../../../../../shared/contracts/folders';\n\ninterface FolderWithType extends FolderInitial {\n type: string;\n}\n\nexport interface FileWithType extends File {\n type: string;\n}\n\nexport interface BulkActionsProps {\n selected: Array<FileWithType | FolderDefinition> | Array<FolderWithType | FileWithType>;\n onSuccess: () => void;\n currentFolder?: FolderWithType;\n}\n\nexport const BulkActions = ({ selected = [], onSuccess, currentFolder }: BulkActionsProps) => {\n const { formatMessage } = useIntl();\n const numberAssets = selected?.reduce(function (_this, val) {\n return val?.type === 'folder' && 'files' in val && val?.files && 'count' in val.files\n ? _this + val?.files?.count\n : _this + 1;\n }, 0);\n\n return (\n <Flex gap={2} paddingBottom={5}>\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: getTrad('list.assets.selected'),\n defaultMessage:\n '{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}} selected',\n },\n {\n numberFolders: selected?.filter(({ type }) => type === 'folder').length,\n numberAssets,\n }\n )}\n </Typography>\n\n <BulkDeleteButton\n selected={selected as Array<FileWithType | FolderDefinition>}\n onSuccess={onSuccess}\n />\n <BulkMoveButton\n currentFolder={currentFolder}\n selected={selected as Array<FolderWithType | FileWithType>}\n onSuccess={onSuccess}\n />\n </Flex>\n );\n};\n"],"names":["BulkActions","selected","onSuccess","currentFolder","formatMessage","useIntl","numberAssets","reduce","_this","val","type","files","count","_jsxs","Flex","gap","paddingBottom","_jsx","Typography","variant","textColor","id","getTrad","defaultMessage","numberFolders","filter","length","BulkDeleteButton","BulkMoveButton"],"mappings":";;;;;;;;;;;;AA4BO,MAAMA,WAAc,GAAA,CAAC,EAAEC,QAAAA,GAAW,EAAE,EAAEC,SAAS,EAAEC,aAAa,EAAoB,GAAA;IACvF,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMC,eAAeL,QAAUM,EAAAA,MAAAA,CAAO,SAAUC,KAAK,EAAEC,GAAG,EAAA;AACxD,QAAA,OAAOA,GAAKC,EAAAA,IAAAA,KAAS,QAAY,IAAA,OAAA,IAAWD,OAAOA,GAAKE,EAAAA,KAAAA,IAAS,OAAWF,IAAAA,GAAAA,CAAIE,KAAK,GACjFH,KAAAA,GAAQC,GAAKE,EAAAA,KAAAA,EAAOC,QACpBJ,KAAQ,GAAA,CAAA;KACX,EAAA,CAAA,CAAA;AAEH,IAAA,qBACEK,IAACC,CAAAA,IAAAA,EAAAA;QAAKC,GAAK,EAAA,CAAA;QAAGC,aAAe,EAAA,CAAA;;0BAC3BC,GAACC,CAAAA,UAAAA,EAAAA;gBAAWC,OAAQ,EAAA,SAAA;gBAAUC,SAAU,EAAA,YAAA;0BACrChB,aACC,CAAA;AACEiB,oBAAAA,EAAAA,EAAIC,OAAQ,CAAA,sBAAA,CAAA;oBACZC,cACE,EAAA;iBAEJ,EAAA;oBACEC,aAAevB,EAAAA,QAAAA,EAAUwB,OAAO,CAAC,EAAEf,IAAI,EAAE,GAAKA,SAAS,QAAUgB,CAAAA,CAAAA,MAAAA;AACjEpB,oBAAAA;AACF,iBAAA;;0BAIJW,GAACU,CAAAA,gBAAAA,EAAAA;gBACC1B,QAAUA,EAAAA,QAAAA;gBACVC,SAAWA,EAAAA;;0BAEbe,GAACW,CAAAA,cAAAA,EAAAA;gBACCzB,aAAeA,EAAAA,aAAAA;gBACfF,QAAUA,EAAAA,QAAAA;gBACVC,SAAWA,EAAAA;;;;AAInB;;;;"}

View File

@@ -0,0 +1,38 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
var strapiAdmin = require('@strapi/admin/strapi-admin');
var designSystem = require('@strapi/design-system');
var icons = require('@strapi/icons');
var reactIntl = require('react-intl');
var useBulkRemove = require('../../../../hooks/useBulkRemove.js');
const BulkDeleteButton = ({ selected, onSuccess })=>{
const { formatMessage } = reactIntl.useIntl();
const { remove } = useBulkRemove.useBulkRemove();
const handleConfirmRemove = async ()=>{
await remove(selected);
onSuccess();
};
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Dialog.Root, {
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Trigger, {
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
variant: "danger-light",
size: "S",
startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Trash, {}),
children: formatMessage({
id: 'global.delete',
defaultMessage: 'Delete'
})
})
}),
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.ConfirmDialog, {
onConfirm: handleConfirmRemove
})
]
});
};
exports.BulkDeleteButton = BulkDeleteButton;
//# sourceMappingURL=BulkDeleteButton.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BulkDeleteButton.js","sources":["../../../../../../admin/src/pages/App/MediaLibrary/components/BulkDeleteButton.tsx"],"sourcesContent":["import { ConfirmDialog } from '@strapi/admin/strapi-admin';\nimport { Button, Dialog } from '@strapi/design-system';\nimport { Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useBulkRemove } from '../../../../hooks/useBulkRemove';\n\nimport type { FolderDefinition } from '../../../../../../shared/contracts/folders';\nimport type { FileWithType } from '../../../../hooks/useBulkRemove';\n\nexport interface BulkDeleteButtonProps {\n selected: Array<FileWithType | FolderDefinition>;\n onSuccess: () => void;\n}\n\nexport const BulkDeleteButton = ({ selected, onSuccess }: BulkDeleteButtonProps) => {\n const { formatMessage } = useIntl();\n const { remove } = useBulkRemove();\n\n const handleConfirmRemove = async () => {\n await remove(selected);\n onSuccess();\n };\n\n return (\n <Dialog.Root>\n <Dialog.Trigger>\n <Button variant=\"danger-light\" size=\"S\" startIcon={<Trash />}>\n {formatMessage({ id: 'global.delete', defaultMessage: 'Delete' })}\n </Button>\n </Dialog.Trigger>\n <ConfirmDialog onConfirm={handleConfirmRemove} />\n </Dialog.Root>\n );\n};\n"],"names":["BulkDeleteButton","selected","onSuccess","formatMessage","useIntl","remove","useBulkRemove","handleConfirmRemove","_jsxs","Dialog","Root","_jsx","Trigger","Button","variant","size","startIcon","Trash","id","defaultMessage","ConfirmDialog","onConfirm"],"mappings":";;;;;;;;;MAeaA,gBAAmB,GAAA,CAAC,EAAEC,QAAQ,EAAEC,SAAS,EAAyB,GAAA;IAC7E,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,MAAM,EAAE,GAAGC,2BAAAA,EAAAA;AAEnB,IAAA,MAAMC,mBAAsB,GAAA,UAAA;AAC1B,QAAA,MAAMF,MAAOJ,CAAAA,QAAAA,CAAAA;AACbC,QAAAA,SAAAA,EAAAA;AACF,KAAA;IAEA,qBACEM,eAAA,CAACC,oBAAOC,IAAI,EAAA;;AACV,0BAAAC,cAAA,CAACF,oBAAOG,OAAO,EAAA;AACb,gBAAA,QAAA,gBAAAD,cAACE,CAAAA,mBAAAA,EAAAA;oBAAOC,OAAQ,EAAA,cAAA;oBAAeC,IAAK,EAAA,GAAA;AAAIC,oBAAAA,SAAAA,gBAAWL,cAACM,CAAAA,WAAAA,EAAAA,EAAAA,CAAAA;8BACjDd,aAAc,CAAA;wBAAEe,EAAI,EAAA,eAAA;wBAAiBC,cAAgB,EAAA;AAAS,qBAAA;;;0BAGnER,cAACS,CAAAA,yBAAAA,EAAAA;gBAAcC,SAAWd,EAAAA;;;;AAGhC;;;;"}

View File

@@ -0,0 +1,36 @@
import { jsxs, jsx } from 'react/jsx-runtime';
import { ConfirmDialog } from '@strapi/admin/strapi-admin';
import { Dialog, Button } from '@strapi/design-system';
import { Trash } from '@strapi/icons';
import { useIntl } from 'react-intl';
import { useBulkRemove } from '../../../../hooks/useBulkRemove.mjs';
const BulkDeleteButton = ({ selected, onSuccess })=>{
const { formatMessage } = useIntl();
const { remove } = useBulkRemove();
const handleConfirmRemove = async ()=>{
await remove(selected);
onSuccess();
};
return /*#__PURE__*/ jsxs(Dialog.Root, {
children: [
/*#__PURE__*/ jsx(Dialog.Trigger, {
children: /*#__PURE__*/ jsx(Button, {
variant: "danger-light",
size: "S",
startIcon: /*#__PURE__*/ jsx(Trash, {}),
children: formatMessage({
id: 'global.delete',
defaultMessage: 'Delete'
})
})
}),
/*#__PURE__*/ jsx(ConfirmDialog, {
onConfirm: handleConfirmRemove
})
]
});
};
export { BulkDeleteButton };
//# sourceMappingURL=BulkDeleteButton.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BulkDeleteButton.mjs","sources":["../../../../../../admin/src/pages/App/MediaLibrary/components/BulkDeleteButton.tsx"],"sourcesContent":["import { ConfirmDialog } from '@strapi/admin/strapi-admin';\nimport { Button, Dialog } from '@strapi/design-system';\nimport { Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useBulkRemove } from '../../../../hooks/useBulkRemove';\n\nimport type { FolderDefinition } from '../../../../../../shared/contracts/folders';\nimport type { FileWithType } from '../../../../hooks/useBulkRemove';\n\nexport interface BulkDeleteButtonProps {\n selected: Array<FileWithType | FolderDefinition>;\n onSuccess: () => void;\n}\n\nexport const BulkDeleteButton = ({ selected, onSuccess }: BulkDeleteButtonProps) => {\n const { formatMessage } = useIntl();\n const { remove } = useBulkRemove();\n\n const handleConfirmRemove = async () => {\n await remove(selected);\n onSuccess();\n };\n\n return (\n <Dialog.Root>\n <Dialog.Trigger>\n <Button variant=\"danger-light\" size=\"S\" startIcon={<Trash />}>\n {formatMessage({ id: 'global.delete', defaultMessage: 'Delete' })}\n </Button>\n </Dialog.Trigger>\n <ConfirmDialog onConfirm={handleConfirmRemove} />\n </Dialog.Root>\n );\n};\n"],"names":["BulkDeleteButton","selected","onSuccess","formatMessage","useIntl","remove","useBulkRemove","handleConfirmRemove","_jsxs","Dialog","Root","_jsx","Trigger","Button","variant","size","startIcon","Trash","id","defaultMessage","ConfirmDialog","onConfirm"],"mappings":";;;;;;;MAeaA,gBAAmB,GAAA,CAAC,EAAEC,QAAQ,EAAEC,SAAS,EAAyB,GAAA;IAC7E,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,MAAM,EAAE,GAAGC,aAAAA,EAAAA;AAEnB,IAAA,MAAMC,mBAAsB,GAAA,UAAA;AAC1B,QAAA,MAAMF,MAAOJ,CAAAA,QAAAA,CAAAA;AACbC,QAAAA,SAAAA,EAAAA;AACF,KAAA;IAEA,qBACEM,IAAA,CAACC,OAAOC,IAAI,EAAA;;AACV,0BAAAC,GAAA,CAACF,OAAOG,OAAO,EAAA;AACb,gBAAA,QAAA,gBAAAD,GAACE,CAAAA,MAAAA,EAAAA;oBAAOC,OAAQ,EAAA,cAAA;oBAAeC,IAAK,EAAA,GAAA;AAAIC,oBAAAA,SAAAA,gBAAWL,GAACM,CAAAA,KAAAA,EAAAA,EAAAA,CAAAA;8BACjDd,aAAc,CAAA;wBAAEe,EAAI,EAAA,eAAA;wBAAiBC,cAAgB,EAAA;AAAS,qBAAA;;;0BAGnER,GAACS,CAAAA,aAAAA,EAAAA;gBAAcC,SAAWd,EAAAA;;;;AAGhC;;;;"}

View File

@@ -0,0 +1,61 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
var React = require('react');
var designSystem = require('@strapi/design-system');
var icons = require('@strapi/icons');
var reactIntl = require('react-intl');
var BulkMoveDialog = require('../../../../components/BulkMoveDialog/BulkMoveDialog.js');
function _interopNamespaceDefault(e) {
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
const BulkMoveButton = ({ selected = [], onSuccess, currentFolder })=>{
const { formatMessage } = reactIntl.useIntl();
const [showConfirmDialog, setShowConfirmDialog] = React__namespace.useState(false);
const handleConfirmMove = ()=>{
setShowConfirmDialog(false);
onSuccess();
};
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Root, {
open: showConfirmDialog,
onOpenChange: setShowConfirmDialog,
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Trigger, {
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
variant: "secondary",
size: "S",
startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Folder, {}),
children: formatMessage({
id: 'global.move',
defaultMessage: 'Move'
})
})
}),
/*#__PURE__*/ jsxRuntime.jsx(BulkMoveDialog.BulkMoveDialog, {
currentFolder: currentFolder,
onClose: handleConfirmMove,
selected: selected
})
]
});
};
exports.BulkMoveButton = BulkMoveButton;
//# sourceMappingURL=BulkMoveButton.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BulkMoveButton.js","sources":["../../../../../../admin/src/pages/App/MediaLibrary/components/BulkMoveButton.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Modal } from '@strapi/design-system';\nimport { Folder } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { BulkMoveDialog } from '../../../../components/BulkMoveDialog/BulkMoveDialog';\n\nimport type { File } from '../../../../../../shared/contracts/files';\nimport type { Folder as FolderDefinition } from '../../../../../../shared/contracts/folders';\n\ninterface FolderWithType extends FolderDefinition {\n type: string;\n}\n\ninterface FileWithType extends File {\n type: string;\n}\n\nexport interface BulkMoveButtonProps {\n onSuccess: () => void;\n currentFolder?: FolderWithType;\n selected?: Array<FolderWithType | FileWithType>;\n}\n\nexport const BulkMoveButton = ({\n selected = [],\n onSuccess,\n currentFolder,\n}: BulkMoveButtonProps) => {\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n\n const handleConfirmMove = () => {\n setShowConfirmDialog(false);\n onSuccess();\n };\n\n return (\n <Modal.Root open={showConfirmDialog} onOpenChange={setShowConfirmDialog}>\n <Modal.Trigger>\n <Button variant=\"secondary\" size=\"S\" startIcon={<Folder />}>\n {formatMessage({ id: 'global.move', defaultMessage: 'Move' })}\n </Button>\n </Modal.Trigger>\n <BulkMoveDialog\n currentFolder={currentFolder}\n onClose={handleConfirmMove}\n selected={selected}\n />\n </Modal.Root>\n );\n};\n"],"names":["BulkMoveButton","selected","onSuccess","currentFolder","formatMessage","useIntl","showConfirmDialog","setShowConfirmDialog","React","useState","handleConfirmMove","_jsxs","Modal","Root","open","onOpenChange","_jsx","Trigger","Button","variant","size","startIcon","Folder","id","defaultMessage","BulkMoveDialog","onClose"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBO,MAAMA,cAAiB,GAAA,CAAC,EAC7BC,QAAAA,GAAW,EAAE,EACbC,SAAS,EACTC,aAAa,EACO,GAAA;IACpB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,CAACC,iBAAmBC,EAAAA,oBAAAA,CAAqB,GAAGC,gBAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;AAEjE,IAAA,MAAMC,iBAAoB,GAAA,IAAA;QACxBH,oBAAqB,CAAA,KAAA,CAAA;AACrBL,QAAAA,SAAAA,EAAAA;AACF,KAAA;IAEA,qBACES,eAAA,CAACC,mBAAMC,IAAI,EAAA;QAACC,IAAMR,EAAAA,iBAAAA;QAAmBS,YAAcR,EAAAA,oBAAAA;;AACjD,0BAAAS,cAAA,CAACJ,mBAAMK,OAAO,EAAA;AACZ,gBAAA,QAAA,gBAAAD,cAACE,CAAAA,mBAAAA,EAAAA;oBAAOC,OAAQ,EAAA,WAAA;oBAAYC,IAAK,EAAA,GAAA;AAAIC,oBAAAA,SAAAA,gBAAWL,cAACM,CAAAA,YAAAA,EAAAA,EAAAA,CAAAA;8BAC9ClB,aAAc,CAAA;wBAAEmB,EAAI,EAAA,aAAA;wBAAeC,cAAgB,EAAA;AAAO,qBAAA;;;0BAG/DR,cAACS,CAAAA,6BAAAA,EAAAA;gBACCtB,aAAeA,EAAAA,aAAAA;gBACfuB,OAAShB,EAAAA,iBAAAA;gBACTT,QAAUA,EAAAA;;;;AAIlB;;;;"}

View File

@@ -0,0 +1,40 @@
import { jsxs, jsx } from 'react/jsx-runtime';
import * as React from 'react';
import { Modal, Button } from '@strapi/design-system';
import { Folder } from '@strapi/icons';
import { useIntl } from 'react-intl';
import { BulkMoveDialog } from '../../../../components/BulkMoveDialog/BulkMoveDialog.mjs';
const BulkMoveButton = ({ selected = [], onSuccess, currentFolder })=>{
const { formatMessage } = useIntl();
const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);
const handleConfirmMove = ()=>{
setShowConfirmDialog(false);
onSuccess();
};
return /*#__PURE__*/ jsxs(Modal.Root, {
open: showConfirmDialog,
onOpenChange: setShowConfirmDialog,
children: [
/*#__PURE__*/ jsx(Modal.Trigger, {
children: /*#__PURE__*/ jsx(Button, {
variant: "secondary",
size: "S",
startIcon: /*#__PURE__*/ jsx(Folder, {}),
children: formatMessage({
id: 'global.move',
defaultMessage: 'Move'
})
})
}),
/*#__PURE__*/ jsx(BulkMoveDialog, {
currentFolder: currentFolder,
onClose: handleConfirmMove,
selected: selected
})
]
});
};
export { BulkMoveButton };
//# sourceMappingURL=BulkMoveButton.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"BulkMoveButton.mjs","sources":["../../../../../../admin/src/pages/App/MediaLibrary/components/BulkMoveButton.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Modal } from '@strapi/design-system';\nimport { Folder } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { BulkMoveDialog } from '../../../../components/BulkMoveDialog/BulkMoveDialog';\n\nimport type { File } from '../../../../../../shared/contracts/files';\nimport type { Folder as FolderDefinition } from '../../../../../../shared/contracts/folders';\n\ninterface FolderWithType extends FolderDefinition {\n type: string;\n}\n\ninterface FileWithType extends File {\n type: string;\n}\n\nexport interface BulkMoveButtonProps {\n onSuccess: () => void;\n currentFolder?: FolderWithType;\n selected?: Array<FolderWithType | FileWithType>;\n}\n\nexport const BulkMoveButton = ({\n selected = [],\n onSuccess,\n currentFolder,\n}: BulkMoveButtonProps) => {\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n\n const handleConfirmMove = () => {\n setShowConfirmDialog(false);\n onSuccess();\n };\n\n return (\n <Modal.Root open={showConfirmDialog} onOpenChange={setShowConfirmDialog}>\n <Modal.Trigger>\n <Button variant=\"secondary\" size=\"S\" startIcon={<Folder />}>\n {formatMessage({ id: 'global.move', defaultMessage: 'Move' })}\n </Button>\n </Modal.Trigger>\n <BulkMoveDialog\n currentFolder={currentFolder}\n onClose={handleConfirmMove}\n selected={selected}\n />\n </Modal.Root>\n );\n};\n"],"names":["BulkMoveButton","selected","onSuccess","currentFolder","formatMessage","useIntl","showConfirmDialog","setShowConfirmDialog","React","useState","handleConfirmMove","_jsxs","Modal","Root","open","onOpenChange","_jsx","Trigger","Button","variant","size","startIcon","Folder","id","defaultMessage","BulkMoveDialog","onClose"],"mappings":";;;;;;;AAyBO,MAAMA,cAAiB,GAAA,CAAC,EAC7BC,QAAAA,GAAW,EAAE,EACbC,SAAS,EACTC,aAAa,EACO,GAAA;IACpB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,CAACC,iBAAmBC,EAAAA,oBAAAA,CAAqB,GAAGC,KAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;AAEjE,IAAA,MAAMC,iBAAoB,GAAA,IAAA;QACxBH,oBAAqB,CAAA,KAAA,CAAA;AACrBL,QAAAA,SAAAA,EAAAA;AACF,KAAA;IAEA,qBACES,IAAA,CAACC,MAAMC,IAAI,EAAA;QAACC,IAAMR,EAAAA,iBAAAA;QAAmBS,YAAcR,EAAAA,oBAAAA;;AACjD,0BAAAS,GAAA,CAACJ,MAAMK,OAAO,EAAA;AACZ,gBAAA,QAAA,gBAAAD,GAACE,CAAAA,MAAAA,EAAAA;oBAAOC,OAAQ,EAAA,WAAA;oBAAYC,IAAK,EAAA,GAAA;AAAIC,oBAAAA,SAAAA,gBAAWL,GAACM,CAAAA,MAAAA,EAAAA,EAAAA,CAAAA;8BAC9ClB,aAAc,CAAA;wBAAEmB,EAAI,EAAA,aAAA;wBAAeC,cAAgB,EAAA;AAAO,qBAAA;;;0BAG/DR,GAACS,CAAAA,cAAAA,EAAAA;gBACCtB,aAAeA,EAAAA,aAAAA;gBACfuB,OAAShB,EAAAA,iBAAAA;gBACTT,QAAUA,EAAAA;;;;AAIlB;;;;"}

View File

@@ -0,0 +1,66 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
var designSystem = require('@strapi/design-system');
var icons = require('@strapi/icons');
var symbols = require('@strapi/icons/symbols');
var reactIntl = require('react-intl');
var EmptyAssets = require('../../../../components/EmptyAssets/EmptyAssets.js');
require('byte-size');
require('date-fns');
var getTrad = require('../../../../utils/getTrad.js');
require('qs');
require('../../../../constants.js');
require('../../../../utils/urlYupSchema.js');
const getContentIntlMessage = ({ isFiltering, canCreate, canRead })=>{
if (isFiltering) {
return {
id: 'list.assets-empty.title-withSearch',
defaultMessage: 'There are no elements with the applied filters'
};
}
if (canRead) {
if (canCreate) {
return {
id: 'list.assets.empty-upload',
defaultMessage: 'Upload your first assets...'
};
}
return {
id: 'list.assets.empty',
defaultMessage: 'Media Library is empty'
};
}
return {
id: 'header.actions.no-permissions',
defaultMessage: 'No permissions to view'
};
};
const EmptyOrNoPermissions = ({ canCreate, isFiltering, canRead, onActionClick })=>{
const { formatMessage } = reactIntl.useIntl();
const content = getContentIntlMessage({
isFiltering,
canCreate,
canRead
});
return /*#__PURE__*/ jsxRuntime.jsx(EmptyAssets.EmptyAssets, {
icon: !canRead ? symbols.EmptyPermissions : undefined,
action: canCreate && !isFiltering && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
variant: "secondary",
startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Plus, {}),
onClick: onActionClick,
children: formatMessage({
id: getTrad.getTrad('header.actions.add-assets'),
defaultMessage: 'Add new assets'
})
}),
content: formatMessage({
...content,
id: getTrad.getTrad(content.id)
})
});
};
exports.EmptyOrNoPermissions = EmptyOrNoPermissions;
//# sourceMappingURL=EmptyOrNoPermissions.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"EmptyOrNoPermissions.js","sources":["../../../../../../admin/src/pages/App/MediaLibrary/components/EmptyOrNoPermissions.tsx"],"sourcesContent":["import { Button } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyPermissions } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\n\nimport { EmptyAssets } from '../../../../components/EmptyAssets/EmptyAssets';\nimport { getTrad } from '../../../../utils';\n\nexport interface EmptyOrNoPermissionsProps {\n canCreate: boolean;\n canRead: boolean;\n isFiltering: boolean;\n onActionClick: () => void;\n}\n\nconst getContentIntlMessage = ({\n isFiltering,\n canCreate,\n canRead,\n}: Omit<EmptyOrNoPermissionsProps, 'onActionClick'>) => {\n if (isFiltering) {\n return {\n id: 'list.assets-empty.title-withSearch',\n defaultMessage: 'There are no elements with the applied filters',\n };\n }\n\n if (canRead) {\n if (canCreate) {\n return {\n id: 'list.assets.empty-upload',\n defaultMessage: 'Upload your first assets...',\n };\n }\n\n return {\n id: 'list.assets.empty',\n defaultMessage: 'Media Library is empty',\n };\n }\n\n return {\n id: 'header.actions.no-permissions',\n defaultMessage: 'No permissions to view',\n };\n};\n\nexport const EmptyOrNoPermissions = ({\n canCreate,\n isFiltering,\n canRead,\n onActionClick,\n}: EmptyOrNoPermissionsProps) => {\n const { formatMessage } = useIntl();\n const content = getContentIntlMessage({ isFiltering, canCreate, canRead });\n\n return (\n <EmptyAssets\n icon={!canRead ? EmptyPermissions : undefined}\n action={\n canCreate &&\n !isFiltering && (\n <Button variant=\"secondary\" startIcon={<Plus />} onClick={onActionClick}>\n {formatMessage({\n id: getTrad('header.actions.add-assets'),\n defaultMessage: 'Add new assets',\n })}\n </Button>\n )\n }\n content={formatMessage({\n ...content,\n id: getTrad(content.id),\n })}\n />\n );\n};\n"],"names":["getContentIntlMessage","isFiltering","canCreate","canRead","id","defaultMessage","EmptyOrNoPermissions","onActionClick","formatMessage","useIntl","content","_jsx","EmptyAssets","icon","EmptyPermissions","undefined","action","Button","variant","startIcon","Plus","onClick","getTrad"],"mappings":";;;;;;;;;;;;;;;AAeA,MAAMA,qBAAAA,GAAwB,CAAC,EAC7BC,WAAW,EACXC,SAAS,EACTC,OAAO,EAC0C,GAAA;AACjD,IAAA,IAAIF,WAAa,EAAA;QACf,OAAO;YACLG,EAAI,EAAA,oCAAA;YACJC,cAAgB,EAAA;AAClB,SAAA;AACF;AAEA,IAAA,IAAIF,OAAS,EAAA;AACX,QAAA,IAAID,SAAW,EAAA;YACb,OAAO;gBACLE,EAAI,EAAA,0BAAA;gBACJC,cAAgB,EAAA;AAClB,aAAA;AACF;QAEA,OAAO;YACLD,EAAI,EAAA,mBAAA;YACJC,cAAgB,EAAA;AAClB,SAAA;AACF;IAEA,OAAO;QACLD,EAAI,EAAA,+BAAA;QACJC,cAAgB,EAAA;AAClB,KAAA;AACF,CAAA;AAEO,MAAMC,oBAAuB,GAAA,CAAC,EACnCJ,SAAS,EACTD,WAAW,EACXE,OAAO,EACPI,aAAa,EACa,GAAA;IAC1B,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,UAAUV,qBAAsB,CAAA;AAAEC,QAAAA,WAAAA;AAAaC,QAAAA,SAAAA;AAAWC,QAAAA;AAAQ,KAAA,CAAA;AAExE,IAAA,qBACEQ,cAACC,CAAAA,uBAAAA,EAAAA;QACCC,IAAM,EAAA,CAACV,UAAUW,wBAAmBC,GAAAA,SAAAA;QACpCC,MACEd,EAAAA,SAAAA,IACA,CAACD,WAAAA,kBACCU,cAACM,CAAAA,mBAAAA,EAAAA;YAAOC,OAAQ,EAAA,WAAA;AAAYC,YAAAA,SAAAA,gBAAWR,cAACS,CAAAA,UAAAA,EAAAA,EAAAA,CAAAA;YAASC,OAASd,EAAAA,aAAAA;sBACvDC,aAAc,CAAA;AACbJ,gBAAAA,EAAAA,EAAIkB,eAAQ,CAAA,2BAAA,CAAA;gBACZjB,cAAgB,EAAA;AAClB,aAAA;;AAINK,QAAAA,OAAAA,EAASF,aAAc,CAAA;AACrB,YAAA,GAAGE,OAAO;YACVN,EAAIkB,EAAAA,eAAAA,CAAQZ,QAAQN,EAAE;AACxB,SAAA;;AAGN;;;;"}

View File

@@ -0,0 +1,64 @@
import { jsx } from 'react/jsx-runtime';
import { Button } from '@strapi/design-system';
import { Plus } from '@strapi/icons';
import { EmptyPermissions } from '@strapi/icons/symbols';
import { useIntl } from 'react-intl';
import { EmptyAssets } from '../../../../components/EmptyAssets/EmptyAssets.mjs';
import 'byte-size';
import 'date-fns';
import { getTrad } from '../../../../utils/getTrad.mjs';
import 'qs';
import '../../../../constants.mjs';
import '../../../../utils/urlYupSchema.mjs';
const getContentIntlMessage = ({ isFiltering, canCreate, canRead })=>{
if (isFiltering) {
return {
id: 'list.assets-empty.title-withSearch',
defaultMessage: 'There are no elements with the applied filters'
};
}
if (canRead) {
if (canCreate) {
return {
id: 'list.assets.empty-upload',
defaultMessage: 'Upload your first assets...'
};
}
return {
id: 'list.assets.empty',
defaultMessage: 'Media Library is empty'
};
}
return {
id: 'header.actions.no-permissions',
defaultMessage: 'No permissions to view'
};
};
const EmptyOrNoPermissions = ({ canCreate, isFiltering, canRead, onActionClick })=>{
const { formatMessage } = useIntl();
const content = getContentIntlMessage({
isFiltering,
canCreate,
canRead
});
return /*#__PURE__*/ jsx(EmptyAssets, {
icon: !canRead ? EmptyPermissions : undefined,
action: canCreate && !isFiltering && /*#__PURE__*/ jsx(Button, {
variant: "secondary",
startIcon: /*#__PURE__*/ jsx(Plus, {}),
onClick: onActionClick,
children: formatMessage({
id: getTrad('header.actions.add-assets'),
defaultMessage: 'Add new assets'
})
}),
content: formatMessage({
...content,
id: getTrad(content.id)
})
});
};
export { EmptyOrNoPermissions };
//# sourceMappingURL=EmptyOrNoPermissions.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"EmptyOrNoPermissions.mjs","sources":["../../../../../../admin/src/pages/App/MediaLibrary/components/EmptyOrNoPermissions.tsx"],"sourcesContent":["import { Button } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyPermissions } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\n\nimport { EmptyAssets } from '../../../../components/EmptyAssets/EmptyAssets';\nimport { getTrad } from '../../../../utils';\n\nexport interface EmptyOrNoPermissionsProps {\n canCreate: boolean;\n canRead: boolean;\n isFiltering: boolean;\n onActionClick: () => void;\n}\n\nconst getContentIntlMessage = ({\n isFiltering,\n canCreate,\n canRead,\n}: Omit<EmptyOrNoPermissionsProps, 'onActionClick'>) => {\n if (isFiltering) {\n return {\n id: 'list.assets-empty.title-withSearch',\n defaultMessage: 'There are no elements with the applied filters',\n };\n }\n\n if (canRead) {\n if (canCreate) {\n return {\n id: 'list.assets.empty-upload',\n defaultMessage: 'Upload your first assets...',\n };\n }\n\n return {\n id: 'list.assets.empty',\n defaultMessage: 'Media Library is empty',\n };\n }\n\n return {\n id: 'header.actions.no-permissions',\n defaultMessage: 'No permissions to view',\n };\n};\n\nexport const EmptyOrNoPermissions = ({\n canCreate,\n isFiltering,\n canRead,\n onActionClick,\n}: EmptyOrNoPermissionsProps) => {\n const { formatMessage } = useIntl();\n const content = getContentIntlMessage({ isFiltering, canCreate, canRead });\n\n return (\n <EmptyAssets\n icon={!canRead ? EmptyPermissions : undefined}\n action={\n canCreate &&\n !isFiltering && (\n <Button variant=\"secondary\" startIcon={<Plus />} onClick={onActionClick}>\n {formatMessage({\n id: getTrad('header.actions.add-assets'),\n defaultMessage: 'Add new assets',\n })}\n </Button>\n )\n }\n content={formatMessage({\n ...content,\n id: getTrad(content.id),\n })}\n />\n );\n};\n"],"names":["getContentIntlMessage","isFiltering","canCreate","canRead","id","defaultMessage","EmptyOrNoPermissions","onActionClick","formatMessage","useIntl","content","_jsx","EmptyAssets","icon","EmptyPermissions","undefined","action","Button","variant","startIcon","Plus","onClick","getTrad"],"mappings":";;;;;;;;;;;;;AAeA,MAAMA,qBAAAA,GAAwB,CAAC,EAC7BC,WAAW,EACXC,SAAS,EACTC,OAAO,EAC0C,GAAA;AACjD,IAAA,IAAIF,WAAa,EAAA;QACf,OAAO;YACLG,EAAI,EAAA,oCAAA;YACJC,cAAgB,EAAA;AAClB,SAAA;AACF;AAEA,IAAA,IAAIF,OAAS,EAAA;AACX,QAAA,IAAID,SAAW,EAAA;YACb,OAAO;gBACLE,EAAI,EAAA,0BAAA;gBACJC,cAAgB,EAAA;AAClB,aAAA;AACF;QAEA,OAAO;YACLD,EAAI,EAAA,mBAAA;YACJC,cAAgB,EAAA;AAClB,SAAA;AACF;IAEA,OAAO;QACLD,EAAI,EAAA,+BAAA;QACJC,cAAgB,EAAA;AAClB,KAAA;AACF,CAAA;AAEO,MAAMC,oBAAuB,GAAA,CAAC,EACnCJ,SAAS,EACTD,WAAW,EACXE,OAAO,EACPI,aAAa,EACa,GAAA;IAC1B,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMC,UAAUV,qBAAsB,CAAA;AAAEC,QAAAA,WAAAA;AAAaC,QAAAA,SAAAA;AAAWC,QAAAA;AAAQ,KAAA,CAAA;AAExE,IAAA,qBACEQ,GAACC,CAAAA,WAAAA,EAAAA;QACCC,IAAM,EAAA,CAACV,UAAUW,gBAAmBC,GAAAA,SAAAA;QACpCC,MACEd,EAAAA,SAAAA,IACA,CAACD,WAAAA,kBACCU,GAACM,CAAAA,MAAAA,EAAAA;YAAOC,OAAQ,EAAA,WAAA;AAAYC,YAAAA,SAAAA,gBAAWR,GAACS,CAAAA,IAAAA,EAAAA,EAAAA,CAAAA;YAASC,OAASd,EAAAA,aAAAA;sBACvDC,aAAc,CAAA;AACbJ,gBAAAA,EAAAA,EAAIkB,OAAQ,CAAA,2BAAA,CAAA;gBACZjB,cAAgB,EAAA;AAClB,aAAA;;AAINK,QAAAA,OAAAA,EAASF,aAAc,CAAA;AACrB,YAAA,GAAGE,OAAO;YACVN,EAAIkB,EAAAA,OAAAA,CAAQZ,QAAQN,EAAE;AACxB,SAAA;;AAGN;;;;"}

View File

@@ -0,0 +1,94 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
var React = require('react');
var strapiAdmin = require('@strapi/admin/strapi-admin');
var designSystem = require('@strapi/design-system');
var icons = require('@strapi/icons');
var reactIntl = require('react-intl');
var FilterList = require('../../../../components/FilterList/FilterList.js');
var FilterPopover = require('../../../../components/FilterPopover/FilterPopover.js');
var displayedFilters = require('../../../../utils/displayedFilters.js');
require('byte-size');
require('date-fns');
require('qs');
require('../../../../constants.js');
require('../../../../utils/urlYupSchema.js');
function _interopNamespaceDefault(e) {
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
const Filters = ()=>{
const [open, setOpen] = React__namespace.useState(false);
const { formatMessage } = reactIntl.useIntl();
const { trackUsage } = strapiAdmin.useTracking();
const [{ query }, setQuery] = strapiAdmin.useQueryParams();
const filters = query?.filters?.$and || [];
const handleRemoveFilter = (nextFilters)=>{
setQuery({
filters: {
$and: nextFilters
},
page: 1
});
};
const handleSubmit = (filters)=>{
trackUsage('didFilterMediaLibraryElements', {
location: 'content-manager',
filter: Object.keys(filters[filters.length - 1])[0]
});
setQuery({
filters: {
$and: filters
},
page: 1
});
};
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Popover.Root, {
open: open,
onOpenChange: setOpen,
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Popover.Trigger, {
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
variant: "tertiary",
startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Filter, {}),
size: "S",
children: formatMessage({
id: 'app.utils.filters',
defaultMessage: 'Filters'
})
})
}),
/*#__PURE__*/ jsxRuntime.jsx(FilterPopover.FilterPopover, {
displayedFilters: displayedFilters.displayedFilters,
filters: filters,
onSubmit: handleSubmit,
onToggle: setOpen
}),
/*#__PURE__*/ jsxRuntime.jsx(FilterList.FilterList, {
appliedFilters: filters,
filtersSchema: displayedFilters.displayedFilters,
onRemoveFilter: handleRemoveFilter
})
]
});
};
exports.Filters = Filters;
//# sourceMappingURL=Filters.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"Filters.js","sources":["../../../../../../admin/src/pages/App/MediaLibrary/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTracking, useQueryParams } from '@strapi/admin/strapi-admin';\nimport { Button, Popover } from '@strapi/design-system';\nimport { Filter } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { FilterList } from '../../../../components/FilterList/FilterList';\nimport { FilterPopover } from '../../../../components/FilterPopover/FilterPopover';\nimport { displayedFilters } from '../../../../utils';\n\nimport type { Query } from '../../../../../../shared/contracts/files';\nimport type { FilterListProps } from '../../../../components/FilterList/FilterList';\nimport type { FilterPopoverProps } from '../../../../components/FilterPopover/FilterPopover';\n\nexport const Filters = () => {\n const [open, setOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const [{ query }, setQuery] = useQueryParams<Query>();\n const filters = query?.filters?.$and || [];\n\n const handleRemoveFilter: FilterListProps['onRemoveFilter'] = (nextFilters) => {\n setQuery({ filters: { $and: nextFilters }, page: 1 } as Query);\n };\n\n const handleSubmit: FilterPopoverProps['onSubmit'] = (filters) => {\n trackUsage('didFilterMediaLibraryElements', {\n location: 'content-manager',\n filter: Object.keys(filters[filters.length - 1])[0],\n });\n setQuery({ filters: { $and: filters }, page: 1 } as Query);\n };\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger>\n <Button variant=\"tertiary\" startIcon={<Filter />} size=\"S\">\n {formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n </Popover.Trigger>\n <FilterPopover\n displayedFilters={displayedFilters}\n filters={filters}\n onSubmit={handleSubmit}\n onToggle={setOpen as FilterPopoverProps['onToggle']}\n />\n <FilterList\n appliedFilters={filters as FilterListProps['appliedFilters']}\n filtersSchema={displayedFilters}\n onRemoveFilter={handleRemoveFilter}\n />\n </Popover.Root>\n );\n};\n"],"names":["Filters","open","setOpen","React","useState","formatMessage","useIntl","trackUsage","useTracking","query","setQuery","useQueryParams","filters","$and","handleRemoveFilter","nextFilters","page","handleSubmit","location","filter","Object","keys","length","_jsxs","Popover","Root","onOpenChange","_jsx","Trigger","Button","variant","startIcon","Filter","size","id","defaultMessage","FilterPopover","displayedFilters","onSubmit","onToggle","FilterList","appliedFilters","filtersSchema","onRemoveFilter"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAeaA,OAAU,GAAA,IAAA;AACrB,IAAA,MAAM,CAACC,IAAMC,EAAAA,OAAAA,CAAQ,GAAGC,gBAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;IACvC,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,UAAU,EAAE,GAAGC,uBAAAA,EAAAA;AACvB,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,EAAEC,SAAS,GAAGC,0BAAAA,EAAAA;AAC9B,IAAA,MAAMC,OAAUH,GAAAA,KAAAA,EAAOG,OAASC,EAAAA,IAAAA,IAAQ,EAAE;AAE1C,IAAA,MAAMC,qBAAwD,CAACC,WAAAA,GAAAA;QAC7DL,QAAS,CAAA;YAAEE,OAAS,EAAA;gBAAEC,IAAME,EAAAA;AAAY,aAAA;YAAGC,IAAM,EAAA;AAAE,SAAA,CAAA;AACrD,KAAA;AAEA,IAAA,MAAMC,eAA+C,CAACL,OAAAA,GAAAA;AACpDL,QAAAA,UAAAA,CAAW,+BAAiC,EAAA;YAC1CW,QAAU,EAAA,iBAAA;YACVC,MAAQC,EAAAA,MAAAA,CAAOC,IAAI,CAACT,OAAO,CAACA,OAAQU,CAAAA,MAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAE;AACrD,SAAA,CAAA;QACAZ,QAAS,CAAA;YAAEE,OAAS,EAAA;gBAAEC,IAAMD,EAAAA;AAAQ,aAAA;YAAGI,IAAM,EAAA;AAAE,SAAA,CAAA;AACjD,KAAA;IAEA,qBACEO,eAAA,CAACC,qBAAQC,IAAI,EAAA;QAACxB,IAAMA,EAAAA,IAAAA;QAAMyB,YAAcxB,EAAAA,OAAAA;;AACtC,0BAAAyB,cAAA,CAACH,qBAAQI,OAAO,EAAA;AACd,gBAAA,QAAA,gBAAAD,cAACE,CAAAA,mBAAAA,EAAAA;oBAAOC,OAAQ,EAAA,UAAA;AAAWC,oBAAAA,SAAAA,gBAAWJ,cAACK,CAAAA,YAAAA,EAAAA,EAAAA,CAAAA;oBAAWC,IAAK,EAAA,GAAA;8BACpD5B,aAAc,CAAA;wBAAE6B,EAAI,EAAA,mBAAA;wBAAqBC,cAAgB,EAAA;AAAU,qBAAA;;;0BAGxER,cAACS,CAAAA,2BAAAA,EAAAA;gBACCC,gBAAkBA,EAAAA,iCAAAA;gBAClBzB,OAASA,EAAAA,OAAAA;gBACT0B,QAAUrB,EAAAA,YAAAA;gBACVsB,QAAUrC,EAAAA;;0BAEZyB,cAACa,CAAAA,qBAAAA,EAAAA;gBACCC,cAAgB7B,EAAAA,OAAAA;gBAChB8B,aAAeL,EAAAA,iCAAAA;gBACfM,cAAgB7B,EAAAA;;;;AAIxB;;;;"}

View File

@@ -0,0 +1,73 @@
import { jsxs, jsx } from 'react/jsx-runtime';
import * as React from 'react';
import { useTracking, useQueryParams } from '@strapi/admin/strapi-admin';
import { Popover, Button } from '@strapi/design-system';
import { Filter } from '@strapi/icons';
import { useIntl } from 'react-intl';
import { FilterList } from '../../../../components/FilterList/FilterList.mjs';
import { FilterPopover } from '../../../../components/FilterPopover/FilterPopover.mjs';
import { displayedFilters } from '../../../../utils/displayedFilters.mjs';
import 'byte-size';
import 'date-fns';
import 'qs';
import '../../../../constants.mjs';
import '../../../../utils/urlYupSchema.mjs';
const Filters = ()=>{
const [open, setOpen] = React.useState(false);
const { formatMessage } = useIntl();
const { trackUsage } = useTracking();
const [{ query }, setQuery] = useQueryParams();
const filters = query?.filters?.$and || [];
const handleRemoveFilter = (nextFilters)=>{
setQuery({
filters: {
$and: nextFilters
},
page: 1
});
};
const handleSubmit = (filters)=>{
trackUsage('didFilterMediaLibraryElements', {
location: 'content-manager',
filter: Object.keys(filters[filters.length - 1])[0]
});
setQuery({
filters: {
$and: filters
},
page: 1
});
};
return /*#__PURE__*/ jsxs(Popover.Root, {
open: open,
onOpenChange: setOpen,
children: [
/*#__PURE__*/ jsx(Popover.Trigger, {
children: /*#__PURE__*/ jsx(Button, {
variant: "tertiary",
startIcon: /*#__PURE__*/ jsx(Filter, {}),
size: "S",
children: formatMessage({
id: 'app.utils.filters',
defaultMessage: 'Filters'
})
})
}),
/*#__PURE__*/ jsx(FilterPopover, {
displayedFilters: displayedFilters,
filters: filters,
onSubmit: handleSubmit,
onToggle: setOpen
}),
/*#__PURE__*/ jsx(FilterList, {
appliedFilters: filters,
filtersSchema: displayedFilters,
onRemoveFilter: handleRemoveFilter
})
]
});
};
export { Filters };
//# sourceMappingURL=Filters.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"Filters.mjs","sources":["../../../../../../admin/src/pages/App/MediaLibrary/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTracking, useQueryParams } from '@strapi/admin/strapi-admin';\nimport { Button, Popover } from '@strapi/design-system';\nimport { Filter } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { FilterList } from '../../../../components/FilterList/FilterList';\nimport { FilterPopover } from '../../../../components/FilterPopover/FilterPopover';\nimport { displayedFilters } from '../../../../utils';\n\nimport type { Query } from '../../../../../../shared/contracts/files';\nimport type { FilterListProps } from '../../../../components/FilterList/FilterList';\nimport type { FilterPopoverProps } from '../../../../components/FilterPopover/FilterPopover';\n\nexport const Filters = () => {\n const [open, setOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const [{ query }, setQuery] = useQueryParams<Query>();\n const filters = query?.filters?.$and || [];\n\n const handleRemoveFilter: FilterListProps['onRemoveFilter'] = (nextFilters) => {\n setQuery({ filters: { $and: nextFilters }, page: 1 } as Query);\n };\n\n const handleSubmit: FilterPopoverProps['onSubmit'] = (filters) => {\n trackUsage('didFilterMediaLibraryElements', {\n location: 'content-manager',\n filter: Object.keys(filters[filters.length - 1])[0],\n });\n setQuery({ filters: { $and: filters }, page: 1 } as Query);\n };\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger>\n <Button variant=\"tertiary\" startIcon={<Filter />} size=\"S\">\n {formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n </Popover.Trigger>\n <FilterPopover\n displayedFilters={displayedFilters}\n filters={filters}\n onSubmit={handleSubmit}\n onToggle={setOpen as FilterPopoverProps['onToggle']}\n />\n <FilterList\n appliedFilters={filters as FilterListProps['appliedFilters']}\n filtersSchema={displayedFilters}\n onRemoveFilter={handleRemoveFilter}\n />\n </Popover.Root>\n );\n};\n"],"names":["Filters","open","setOpen","React","useState","formatMessage","useIntl","trackUsage","useTracking","query","setQuery","useQueryParams","filters","$and","handleRemoveFilter","nextFilters","page","handleSubmit","location","filter","Object","keys","length","_jsxs","Popover","Root","onOpenChange","_jsx","Trigger","Button","variant","startIcon","Filter","size","id","defaultMessage","FilterPopover","displayedFilters","onSubmit","onToggle","FilterList","appliedFilters","filtersSchema","onRemoveFilter"],"mappings":";;;;;;;;;;;;;;;MAeaA,OAAU,GAAA,IAAA;AACrB,IAAA,MAAM,CAACC,IAAMC,EAAAA,OAAAA,CAAQ,GAAGC,KAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;IACvC,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;AACvB,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,EAAEC,SAAS,GAAGC,cAAAA,EAAAA;AAC9B,IAAA,MAAMC,OAAUH,GAAAA,KAAAA,EAAOG,OAASC,EAAAA,IAAAA,IAAQ,EAAE;AAE1C,IAAA,MAAMC,qBAAwD,CAACC,WAAAA,GAAAA;QAC7DL,QAAS,CAAA;YAAEE,OAAS,EAAA;gBAAEC,IAAME,EAAAA;AAAY,aAAA;YAAGC,IAAM,EAAA;AAAE,SAAA,CAAA;AACrD,KAAA;AAEA,IAAA,MAAMC,eAA+C,CAACL,OAAAA,GAAAA;AACpDL,QAAAA,UAAAA,CAAW,+BAAiC,EAAA;YAC1CW,QAAU,EAAA,iBAAA;YACVC,MAAQC,EAAAA,MAAAA,CAAOC,IAAI,CAACT,OAAO,CAACA,OAAQU,CAAAA,MAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAE;AACrD,SAAA,CAAA;QACAZ,QAAS,CAAA;YAAEE,OAAS,EAAA;gBAAEC,IAAMD,EAAAA;AAAQ,aAAA;YAAGI,IAAM,EAAA;AAAE,SAAA,CAAA;AACjD,KAAA;IAEA,qBACEO,IAAA,CAACC,QAAQC,IAAI,EAAA;QAACxB,IAAMA,EAAAA,IAAAA;QAAMyB,YAAcxB,EAAAA,OAAAA;;AACtC,0BAAAyB,GAAA,CAACH,QAAQI,OAAO,EAAA;AACd,gBAAA,QAAA,gBAAAD,GAACE,CAAAA,MAAAA,EAAAA;oBAAOC,OAAQ,EAAA,UAAA;AAAWC,oBAAAA,SAAAA,gBAAWJ,GAACK,CAAAA,MAAAA,EAAAA,EAAAA,CAAAA;oBAAWC,IAAK,EAAA,GAAA;8BACpD5B,aAAc,CAAA;wBAAE6B,EAAI,EAAA,mBAAA;wBAAqBC,cAAgB,EAAA;AAAU,qBAAA;;;0BAGxER,GAACS,CAAAA,aAAAA,EAAAA;gBACCC,gBAAkBA,EAAAA,gBAAAA;gBAClBzB,OAASA,EAAAA,OAAAA;gBACT0B,QAAUrB,EAAAA,YAAAA;gBACVsB,QAAUrC,EAAAA;;0BAEZyB,GAACa,CAAAA,UAAAA,EAAAA;gBACCC,cAAgB7B,EAAAA,OAAAA;gBAChB8B,aAAeL,EAAAA,gBAAAA;gBACfM,cAAgB7B,EAAAA;;;;AAIxB;;;;"}

View File

@@ -0,0 +1,76 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
var strapiAdmin = require('@strapi/admin/strapi-admin');
var designSystem = require('@strapi/design-system');
var icons = require('@strapi/icons');
var qs = require('qs');
var reactIntl = require('react-intl');
var reactRouterDom = require('react-router-dom');
var Breadcrumbs = require('../../../../components/Breadcrumbs/Breadcrumbs.js');
require('byte-size');
require('date-fns');
var getTrad = require('../../../../utils/getTrad.js');
require('../../../../constants.js');
require('../../../../utils/urlYupSchema.js');
const Header = ({ breadcrumbs = null, canCreate, folder = null, onToggleEditFolderDialog, onToggleUploadAssetDialog })=>{
const { formatMessage } = reactIntl.useIntl();
const { pathname } = reactRouterDom.useLocation();
const [{ query }] = strapiAdmin.useQueryParams();
const backQuery = {
...query,
folder: folder?.parent && typeof folder.parent !== 'number' && folder.parent.id ? folder.parent.id : undefined,
folderPath: folder?.parent && typeof folder.parent !== 'number' && folder.parent.path ? folder.parent.path : undefined
};
return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Layouts.Header, {
title: formatMessage({
id: getTrad.getTrad('plugin.name'),
defaultMessage: `Media Library`
}),
subtitle: breadcrumbs && typeof breadcrumbs !== 'boolean' && folder && /*#__PURE__*/ jsxRuntime.jsx(Breadcrumbs.Breadcrumbs, {
label: formatMessage({
id: getTrad.getTrad('header.breadcrumbs.nav.label'),
defaultMessage: 'Folders navigation'
}),
breadcrumbs: breadcrumbs,
currentFolderId: folder?.id
}),
navigationAction: folder && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Link, {
tag: reactRouterDom.NavLink,
startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.ArrowLeft, {}),
to: `${pathname}?${qs.stringify(backQuery, {
encode: false
})}`,
children: formatMessage({
id: getTrad.getTrad('header.actions.folder-level-up'),
defaultMessage: 'Back'
})
}),
primaryAction: canCreate && /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
gap: 2,
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Plus, {}),
variant: "secondary",
onClick: onToggleEditFolderDialog,
children: formatMessage({
id: getTrad.getTrad('header.actions.add-folder'),
defaultMessage: 'Add new folder'
})
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Plus, {}),
onClick: onToggleUploadAssetDialog,
children: formatMessage({
id: getTrad.getTrad('header.actions.add-assets'),
defaultMessage: 'Add new assets'
})
})
]
})
});
};
exports.Header = Header;
//# sourceMappingURL=Header.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,74 @@
import { jsx, jsxs } from 'react/jsx-runtime';
import { useQueryParams, Layouts } from '@strapi/admin/strapi-admin';
import { Link, Flex, Button } from '@strapi/design-system';
import { ArrowLeft, Plus } from '@strapi/icons';
import { stringify } from 'qs';
import { useIntl } from 'react-intl';
import { useLocation, NavLink } from 'react-router-dom';
import { Breadcrumbs } from '../../../../components/Breadcrumbs/Breadcrumbs.mjs';
import 'byte-size';
import 'date-fns';
import { getTrad } from '../../../../utils/getTrad.mjs';
import '../../../../constants.mjs';
import '../../../../utils/urlYupSchema.mjs';
const Header = ({ breadcrumbs = null, canCreate, folder = null, onToggleEditFolderDialog, onToggleUploadAssetDialog })=>{
const { formatMessage } = useIntl();
const { pathname } = useLocation();
const [{ query }] = useQueryParams();
const backQuery = {
...query,
folder: folder?.parent && typeof folder.parent !== 'number' && folder.parent.id ? folder.parent.id : undefined,
folderPath: folder?.parent && typeof folder.parent !== 'number' && folder.parent.path ? folder.parent.path : undefined
};
return /*#__PURE__*/ jsx(Layouts.Header, {
title: formatMessage({
id: getTrad('plugin.name'),
defaultMessage: `Media Library`
}),
subtitle: breadcrumbs && typeof breadcrumbs !== 'boolean' && folder && /*#__PURE__*/ jsx(Breadcrumbs, {
label: formatMessage({
id: getTrad('header.breadcrumbs.nav.label'),
defaultMessage: 'Folders navigation'
}),
breadcrumbs: breadcrumbs,
currentFolderId: folder?.id
}),
navigationAction: folder && /*#__PURE__*/ jsx(Link, {
tag: NavLink,
startIcon: /*#__PURE__*/ jsx(ArrowLeft, {}),
to: `${pathname}?${stringify(backQuery, {
encode: false
})}`,
children: formatMessage({
id: getTrad('header.actions.folder-level-up'),
defaultMessage: 'Back'
})
}),
primaryAction: canCreate && /*#__PURE__*/ jsxs(Flex, {
gap: 2,
children: [
/*#__PURE__*/ jsx(Button, {
startIcon: /*#__PURE__*/ jsx(Plus, {}),
variant: "secondary",
onClick: onToggleEditFolderDialog,
children: formatMessage({
id: getTrad('header.actions.add-folder'),
defaultMessage: 'Add new folder'
})
}),
/*#__PURE__*/ jsx(Button, {
startIcon: /*#__PURE__*/ jsx(Plus, {}),
onClick: onToggleUploadAssetDialog,
children: formatMessage({
id: getTrad('header.actions.add-assets'),
defaultMessage: 'Add new assets'
})
})
]
})
});
};
export { Header };
//# sourceMappingURL=Header.mjs.map

File diff suppressed because one or more lines are too long