{"version":3,"file":"components-paginated-list.3f290422f1dd3e50e07e.js","mappings":"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","sources":["webpack://silverstripe-base/./themes/app/src/scripts/common/ajax.js","webpack://silverstripe-base/./themes/app/src/scripts/components/paginated-list.js","webpack://silverstripe-base/./node_modules/wretch/dist/addons/queryString.js","webpack://silverstripe-base/./node_modules/wretch/dist/constants.js","webpack://silverstripe-base/./node_modules/wretch/dist/utils.js","webpack://silverstripe-base/./node_modules/wretch/dist/config.js","webpack://silverstripe-base/./node_modules/wretch/dist/resolver.js","webpack://silverstripe-base/./node_modules/wretch/dist/middleware.js","webpack://silverstripe-base/./node_modules/wretch/dist/core.js","webpack://silverstripe-base/./node_modules/wretch/dist/index.js"],"sourcesContent":["import wretch from 'wretch'\nimport QueryStringAddon from 'wretch/addons/queryString'\n\nwretch.options({\n headers: { 'X-Requested-With': 'XMLHttpRequest' },\n})\n\nexport default wretch().addon(QueryStringAddon)\n","import scrollTo from '@common/scroll-to'\nimport ajax from '@common/ajax'\nimport { on, fire } from 'delegated-events'\n\nconst selectors = {\n paginatedListControls: '[data-paginated-list-controls]',\n paginatedListTrigger: '[data-paginated-list-trigger]',\n paginatedListHide: 'data-paginated-list-hide',\n paginatedListRoot: '[data-paginated-list-root]',\n paginatedList: '[data-paginated-list]',\n}\n\nconst handleTrigger = async (e) => {\n const target = e.currentTarget\n const controls = target.closest(selectors.paginatedListControls)\n const list =\n target.closest(selectors.paginatedListRoot)?.querySelector(selectors.paginatedList) ??\n document.querySelector(selectors.paginatedList)\n\n e.preventDefault()\n\n controls.classList.add('pointer-events-none', 'opacity-60')\n\n const res = await ajax.get(target.href).json()\n\n const updatedControls = document.createRange().createContextualFragment(res.pagination)\n controls.replaceWith(updatedControls)\n\n const updatedList = document.createRange().createContextualFragment(res.list)\n\n if (target.hasAttribute(selectors.paginatedListHide)) {\n list.replaceChildren(updatedList)\n\n scrollTo(document.body)\n } else {\n list.append(updatedList)\n }\n\n fire(document.documentElement, 'paginatedlist:update')\n}\n\nexport default {\n init: () => {\n on('click', selectors.paginatedListTrigger, handleTrigger)\n },\n}\n","function stringify(value) {\n return typeof value !== \"undefined\" ? value : \"\";\n}\nconst appendQueryParams = (url, qp, replace, config) => {\n let queryString;\n if (typeof qp === \"string\") {\n queryString = qp;\n }\n else {\n const usp = config.polyfill(\"URLSearchParams\", true, true);\n for (const key in qp) {\n const value = qp[key];\n if (qp[key] instanceof Array) {\n for (const val of value)\n usp.append(key, stringify(val));\n }\n else {\n usp.append(key, stringify(value));\n }\n }\n queryString = usp.toString();\n }\n const split = url.split(\"?\");\n if (!queryString)\n return replace ? split[0] : url;\n if (replace || split.length < 2)\n return split[0] + \"?\" + queryString;\n return url + \"&\" + queryString;\n};\n/**\n * Adds the ability to append query parameters from a javascript object.\n *\n * ```js\n * import QueryAddon from \"wretch/addons/queryString\"\n *\n * wretch().addon(QueryAddon)\n * ```\n */\nconst queryString = {\n wretch: {\n query(qp, replace = false) {\n return { ...this, _url: appendQueryParams(this._url, qp, replace, this._config) };\n }\n }\n};\nexport default queryString;\n//# sourceMappingURL=queryString.js.map","export const JSON_MIME = \"application/json\";\nexport const CONTENT_TYPE_HEADER = \"Content-Type\";\nexport const FETCH_ERROR = Symbol();\nexport const CATCHER_FALLBACK = Symbol();\n//# sourceMappingURL=constants.js.map","import { CONTENT_TYPE_HEADER } from \"./constants.js\";\nexport function extractContentType(headers = {}) {\n var _a;\n return (_a = Object.entries(headers).find(([k]) => k.toLowerCase() === CONTENT_TYPE_HEADER.toLowerCase())) === null || _a === void 0 ? void 0 : _a[1];\n}\nexport function isLikelyJsonMime(value) {\n return /^application\\/.*json.*/.test(value);\n}\nexport const mix = function (one, two, mergeArrays = false) {\n return Object.entries(two).reduce((acc, [key, newValue]) => {\n const value = one[key];\n if (Array.isArray(value) && Array.isArray(newValue)) {\n acc[key] = mergeArrays ? [...value, ...newValue] : newValue;\n }\n else if (typeof value === \"object\" && typeof newValue === \"object\") {\n acc[key] = mix(value, newValue, mergeArrays);\n }\n else {\n acc[key] = newValue;\n }\n return acc;\n }, { ...one });\n};\n//# sourceMappingURL=utils.js.map","import { mix } from \"./utils.js\";\nconst config = {\n // Default options\n options: {},\n // Error type\n errorType: \"text\",\n // Polyfills\n polyfills: {\n // fetch: null,\n // FormData: null,\n // URLSearchParams: null,\n // performance: null,\n // PerformanceObserver: null,\n // AbortController: null\n },\n polyfill(p, doThrow = true, instance = false, ...args) {\n const res = this.polyfills[p] ||\n (typeof self !== \"undefined\" ? self[p] : null) ||\n (typeof global !== \"undefined\" ? global[p] : null);\n if (doThrow && !res)\n throw new Error(p + \" is not defined\");\n return instance && res ? new res(...args) : res;\n }\n};\n/**\n * Sets the default fetch options that will be stored internally when instantiating wretch objects.\n *\n * ```js\n * import wretch from \"wretch\"\n *\n * wretch.options({ headers: { \"Accept\": \"application/json\" } });\n *\n * // The fetch request is sent with both headers.\n * wretch(\"...\", { headers: { \"X-Custom\": \"Header\" } }).get().res();\n * ```\n *\n * @param options Default options\n * @param replace If true, completely replaces the existing options instead of mixing in\n */\nexport function setOptions(options, replace = false) {\n config.options = replace ? options : mix(config.options, options);\n}\n/**\n * Sets the default polyfills that will be stored internally when instantiating wretch objects.\n * Useful for browserless environments like `node.js`.\n *\n * Needed for libraries like [fetch-ponyfill](https://github.com/qubyte/fetch-ponyfill).\n *\n * ```js\n * import wretch from \"wretch\"\n *\n * wretch.polyfills({\n * fetch: require(\"node-fetch\"),\n * FormData: require(\"form-data\"),\n * URLSearchParams: require(\"url\").URLSearchParams,\n * });\n *\n * // Uses the above polyfills.\n * wretch(\"...\").get().res();\n * ```\n *\n * @param polyfills An object containing the polyfills\n * @param replace If true, replaces the current polyfills instead of mixing in\n */\nexport function setPolyfills(polyfills, replace = false) {\n config.polyfills = replace ? polyfills : mix(config.polyfills, polyfills);\n}\n/**\n * Sets the default method (text, json, …) used to parse the data contained in the response body in case of an HTTP error.\n * As with other static methods, it will affect wretch instances created after calling this function.\n *\n * _Note: if the response Content-Type header is set to \"application/json\", the body will be parsed as json regardless of the errorType._\n *\n * ```js\n * import wretch from \"wretch\"\n *\n * wretch.errorType(\"json\")\n *\n * wretch(\"http://server/which/returns/an/error/with/a/json/body\")\n * .get()\n * .res()\n * .catch(error => {\n * // error[errorType] (here, json) contains the parsed body\n * console.log(error.json)\n * })\n * ```\n *\n * If null, defaults to \"text\".\n */\nexport function setErrorType(errorType) {\n config.errorType = errorType;\n}\nexport default config;\n//# sourceMappingURL=config.js.map","import { middlewareHelper } from \"./middleware.js\";\nimport { mix } from \"./utils.js\";\nimport { FETCH_ERROR, CATCHER_FALLBACK } from \"./constants.js\";\n/**\n * This class inheriting from Error is thrown when the fetch response is not \"ok\".\n * It extends Error and adds status, text and body fields.\n */\nexport class WretchError extends Error {\n}\nexport const resolver = (wretch) => {\n const sharedState = Object.create(null);\n wretch = wretch._addons.reduce((w, addon) => addon.beforeRequest &&\n addon.beforeRequest(w, wretch._options, sharedState)\n || w, wretch);\n const { _url: url, _options: opts, _config: config, _catchers: _catchers, _resolvers: resolvers, _middlewares: middlewares, _addons: addons } = wretch;\n const catchers = new Map(_catchers);\n const finalOptions = mix(config.options, opts);\n // The generated fetch request\n let finalUrl = url;\n const _fetchReq = middlewareHelper(middlewares)((url, options) => {\n finalUrl = url;\n return config.polyfill(\"fetch\")(url, options);\n })(url, finalOptions);\n // Throws on an http error\n const referenceError = new Error();\n const throwingPromise = _fetchReq\n .catch(error => {\n throw { [FETCH_ERROR]: error };\n })\n .then(response => {\n if (!response.ok) {\n const err = new WretchError();\n // Enhance the error object\n err[\"cause\"] = referenceError;\n err.stack = err.stack + \"\\nCAUSE: \" + referenceError.stack;\n err.response = response;\n err.url = finalUrl;\n if (response.type === \"opaque\") {\n throw err;\n }\n return response.text().then((body) => {\n var _a;\n err.message = body;\n if (config.errorType === \"json\" || ((_a = response.headers.get(\"Content-Type\")) === null || _a === void 0 ? void 0 : _a.split(\";\")[0]) === \"application/json\") {\n try {\n err.json = JSON.parse(body);\n }\n catch (e) { /* ignore */ }\n }\n err.text = body;\n err[\"status\"] = response.status;\n throw err;\n });\n }\n return response;\n });\n // Wraps the Promise in order to dispatch the error to a matching catcher\n const catchersWrapper = (promise) => {\n return promise.catch(err => {\n const fetchErrorFlag = err.hasOwnProperty(FETCH_ERROR);\n const error = fetchErrorFlag ? err[FETCH_ERROR] : err;\n const catcher = ((error === null || error === void 0 ? void 0 : error.status) && catchers.get(error.status)) ||\n catchers.get(error === null || error === void 0 ? void 0 : error.name) || (fetchErrorFlag && catchers.has(FETCH_ERROR) && catchers.get(FETCH_ERROR));\n if (catcher)\n return catcher(error, wretch);\n const catcherFallback = catchers.get(CATCHER_FALLBACK);\n if (catcherFallback)\n return catcherFallback(error, wretch);\n throw error;\n });\n };\n const bodyParser = funName => cb => funName ?\n // If a callback is provided, then callback with the body result otherwise return the parsed body itself.\n catchersWrapper(throwingPromise.then(_ => _ && _[funName]()).then(_ => cb ? cb(_) : _)) :\n // No body parsing method - return the response\n catchersWrapper(throwingPromise.then(_ => cb ? cb(_) : _));\n const responseChain = {\n _wretchReq: wretch,\n _fetchReq,\n _sharedState: sharedState,\n res: bodyParser(null),\n json: bodyParser(\"json\"),\n blob: bodyParser(\"blob\"),\n formData: bodyParser(\"formData\"),\n arrayBuffer: bodyParser(\"arrayBuffer\"),\n text: bodyParser(\"text\"),\n error(errorId, cb) {\n catchers.set(errorId, cb);\n return this;\n },\n badRequest(cb) { return this.error(400, cb); },\n unauthorized(cb) { return this.error(401, cb); },\n forbidden(cb) { return this.error(403, cb); },\n notFound(cb) { return this.error(404, cb); },\n timeout(cb) { return this.error(408, cb); },\n internalError(cb) { return this.error(500, cb); },\n fetchError(cb) { return this.error(FETCH_ERROR, cb); },\n };\n const enhancedResponseChain = addons.reduce((chain, addon) => ({\n ...chain,\n ...addon.resolver\n }), responseChain);\n return resolvers.reduce((chain, r) => r(chain, wretch), enhancedResponseChain);\n};\n//# sourceMappingURL=resolver.js.map","/**\n * @private @internal\n */\nexport const middlewareHelper = (middlewares) => (fetchFunction) => {\n return middlewares.reduceRight((acc, curr) => curr(acc), fetchFunction) || fetchFunction;\n};\n//# sourceMappingURL=middleware.js.map","import { mix, extractContentType, isLikelyJsonMime } from \"./utils.js\";\nimport { JSON_MIME, CONTENT_TYPE_HEADER, CATCHER_FALLBACK } from \"./constants.js\";\nimport { resolver } from \"./resolver.js\";\nimport config from \"./config.js\";\nexport const core = {\n _url: \"\",\n _options: {},\n _config: config,\n _catchers: new Map(),\n _resolvers: [],\n _deferred: [],\n _middlewares: [],\n _addons: [],\n addon(addon) {\n return { ...this, _addons: [...this._addons, addon], ...addon.wretch };\n },\n errorType(errorType) {\n return {\n ...this,\n _config: {\n ...this._config,\n errorType\n }\n };\n },\n polyfills(polyfills, replace = false) {\n return {\n ...this,\n _config: {\n ...this._config,\n polyfills: replace ? polyfills : mix(this._config.polyfills, polyfills)\n }\n };\n },\n url(_url, replace = false) {\n if (replace)\n return { ...this, _url };\n const split = this._url.split(\"?\");\n return {\n ...this,\n _url: split.length > 1 ?\n split[0] + _url + \"?\" + split[1] :\n this._url + _url\n };\n },\n options(options, replace = false) {\n return { ...this, _options: replace ? options : mix(this._options, options) };\n },\n headers(headerValues) {\n return { ...this, _options: mix(this._options, { headers: headerValues || {} }) };\n },\n accept(headerValue) {\n return this.headers({ Accept: headerValue });\n },\n content(headerValue) {\n return this.headers({ [CONTENT_TYPE_HEADER]: headerValue });\n },\n auth(headerValue) {\n return this.headers({ Authorization: headerValue });\n },\n catcher(errorId, catcher) {\n const newMap = new Map(this._catchers);\n newMap.set(errorId, catcher);\n return { ...this, _catchers: newMap };\n },\n catcherFallback(catcher) {\n return this.catcher(CATCHER_FALLBACK, catcher);\n },\n resolve(resolver, clear = false) {\n return { ...this, _resolvers: clear ? [resolver] : [...this._resolvers, resolver] };\n },\n defer(callback, clear = false) {\n return {\n ...this,\n _deferred: clear ? [callback] : [...this._deferred, callback]\n };\n },\n middlewares(middlewares, clear = false) {\n return {\n ...this,\n _middlewares: clear ? middlewares : [...this._middlewares, ...middlewares]\n };\n },\n fetch(method = this._options.method, url = \"\", body = null) {\n let base = this.url(url).options({ method });\n // \"Jsonify\" the body if it is an object and if it is likely that the content type targets json.\n const contentType = extractContentType(base._options.headers);\n const jsonify = typeof body === \"object\" && (!base._options.headers || !contentType || isLikelyJsonMime(contentType));\n base =\n !body ? base :\n jsonify ? base.json(body, contentType) :\n base.body(body);\n return resolver(base\n ._deferred\n .reduce((acc, curr) => curr(acc, acc._url, acc._options), base));\n },\n get(url = \"\") {\n return this.fetch(\"GET\", url);\n },\n delete(url = \"\") {\n return this.fetch(\"DELETE\", url);\n },\n put(body, url = \"\") {\n return this.fetch(\"PUT\", url, body);\n },\n post(body, url = \"\") {\n return this.fetch(\"POST\", url, body);\n },\n patch(body, url = \"\") {\n return this.fetch(\"PATCH\", url, body);\n },\n head(url = \"\") {\n return this.fetch(\"HEAD\", url);\n },\n opts(url = \"\") {\n return this.fetch(\"OPTIONS\", url);\n },\n body(contents) {\n return { ...this, _options: { ...this._options, body: contents } };\n },\n json(jsObject, contentType) {\n const currentContentType = extractContentType(this._options.headers);\n return this.content(contentType ||\n isLikelyJsonMime(currentContentType) && currentContentType ||\n JSON_MIME).body(JSON.stringify(jsObject));\n }\n};\n//# sourceMappingURL=core.js.map","import { setOptions, setErrorType, setPolyfills } from \"./config.js\";\nimport { core } from \"./core.js\";\nimport { WretchError } from \"./resolver.js\";\n/**\n * Creates a new wretch instance with a base url and base\n * [fetch options](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch).\n *\n * ```ts\n * import wretch from \"wretch\"\n *\n * // Reusable instance\n * const w = wretch(\"https://domain.com\", { mode: \"cors\" })\n * ```\n *\n * @param _url The base url\n * @param _options The base fetch options\n * @returns A fresh wretch instance\n */\nfunction factory(_url = \"\", _options = {}) {\n return { ...core, _url, _options };\n}\nfactory[\"default\"] = factory;\n/** {@inheritDoc setOptions} */\nfactory.options = setOptions;\n/** {@inheritDoc setErrorType} */\nfactory.errorType = setErrorType;\n/** {@inheritDoc setPolyfills} */\nfactory.polyfills = setPolyfills;\nfactory.WretchError = WretchError;\nexport default factory;\n//# sourceMappingURL=index.js.map"],"names":["wretch","options","headers","addon","QueryStringAddon","selectors","handleTrigger","async","target","e","currentTarget","controls","closest","list","querySelector","document","preventDefault","classList","add","res","ajax","get","href","json","updatedControls","createRange","createContextualFragment","pagination","replaceWith","updatedList","hasAttribute","replaceChildren","scrollTo","body","append","fire","documentElement","init","on","stringify","value","appendQueryParams","url","qp","replace","config","queryString","usp","polyfill","key","Array","val","toString","split","length","query","this","_url","_config","CONTENT_TYPE_HEADER","FETCH_ERROR","Symbol","CATCHER_FALLBACK","extractContentType","_a","Object","entries","find","k","toLowerCase","isLikelyJsonMime","test","mix","one","two","mergeArrays","reduce","acc","newValue","isArray","errorType","polyfills","p","doThrow","instance","args","self","global","Error","WretchError","resolver","sharedState","create","_addons","w","beforeRequest","_options","opts","_catchers","_resolvers","resolvers","_middlewares","middlewares","addons","catchers","Map","finalOptions","finalUrl","_fetchReq","fetchFunction","reduceRight","curr","middlewareHelper","referenceError","throwingPromise","catch","error","then","response","ok","err","stack","type","text","message","JSON","parse","status","bodyParser","funName","cb","_","fetchErrorFlag","hasOwnProperty","catcher","name","has","catcherFallback","responseChain","_wretchReq","_sharedState","blob","formData","arrayBuffer","errorId","set","badRequest","unauthorized","forbidden","notFound","timeout","internalError","fetchError","enhancedResponseChain","chain","r","core","_deferred","headerValues","accept","headerValue","Accept","content","auth","Authorization","newMap","resolve","clear","defer","callback","fetch","method","base","contentType","jsonify","delete","put","post","patch","head","contents","jsObject","currentContentType","factory"],"sourceRoot":""}