{"version":3,"file":"index-CQxT-me6.js","sources":["../../../app/javascript/src/explore/services/api/ApiError/index.ts","../../../node_modules/strict-uri-encode/index.js","../../../node_modules/decode-uri-component/index.js","../../../node_modules/split-on-first/index.js","../../../node_modules/query-string/index.js","../../../app/javascript/src/explore/hooks/useApiObject/index.ts"],"sourcesContent":["export const DEFAULT_ERROR =\n 'Looks like our servers are having digestion problems. Try again later. If the problem persists, please contact our support team.';\n\nexport const FIVE_HUNDRED_ERROR =\n 'Aww bananas cake, it looks that you have encountered a technical issue. Please reach out to our Customer Experience team through support@goldbelly.com or chat at the bottom right of our site';\n\nclass ApiError {\n code: number;\n\n data: any;\n\n errors: Array;\n\n helpUrl: string;\n\n message: string;\n\n response: any;\n\n constructor( response: any ) {\n this.response = response;\n\n if ( response ) {\n this.code = response.status;\n this.message = this.code === 500 ? FIVE_HUNDRED_ERROR : response.message || DEFAULT_ERROR;\n\n const contentType = response?.headers ? response?.headers['content-type'] : undefined;\n if ( contentType && contentType.indexOf( 'application/json' ) !== -1 ) {\n this.code = response.data.status;\n this.data = response.data;\n this.message = response.data.message;\n this.helpUrl = response.data.help_url;\n }\n\n this.errors = this.parseErrors( response.data );\n }\n }\n\n hasErrors() {\n return !!this.errors;\n }\n\n parseErrors = ( data: any ) => {\n if ( data.errors && Object.keys( data.errors ).length > 0 ) {\n // FIXME: For now it's only base errors\n return this.getBaseErrors( data.errors );\n }\n if ( data.message ) {\n return [ data.message ];\n }\n return [ DEFAULT_ERROR ];\n };\n\n // Returns base errors including\n // associated models (but non recursive)\n getBaseErrors = ( errors: any ) => {\n const result: Array = [];\n\n Object.keys( errors ).forEach(( key ) => {\n if ( key === 'base' || key.match( /(^|\\.)base$/ )) {\n result.push( errors[key]);\n }\n });\n\n return result;\n };\n}\n\nexport default ApiError;\n","'use strict';\nmodule.exports = str => encodeURIComponent(str).replace(/[!'()*]/g, x => `%${x.charCodeAt(0).toString(16).toUpperCase()}`);\n","'use strict';\nvar token = '%[a-f0-9]{2}';\nvar singleMatcher = new RegExp(token, 'gi');\nvar multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn decodeURIComponent(components.join(''));\n\t} catch (err) {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tvar left = components.slice(0, split);\n\tvar right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch (err) {\n\t\tvar tokens = input.match(singleMatcher);\n\n\t\tfor (var i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher);\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tvar replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD'\n\t};\n\n\tvar match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch (err) {\n\t\t\tvar result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tvar entries = Object.keys(replaceMap);\n\n\tfor (var i = 0; i < entries.length; i++) {\n\t\t// Replace all decoded components\n\t\tvar key = entries[i];\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nmodule.exports = function (encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\tencodedURI = encodedURI.replace(/\\+/g, ' ');\n\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch (err) {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n};\n","'use strict';\n\nmodule.exports = (string, separator) => {\n\tif (!(typeof string === 'string' && typeof separator === 'string')) {\n\t\tthrow new TypeError('Expected the arguments to be of type `string`');\n\t}\n\n\tif (separator === '') {\n\t\treturn [string];\n\t}\n\n\tconst separatorIndex = string.indexOf(separator);\n\n\tif (separatorIndex === -1) {\n\t\treturn [string];\n\t}\n\n\treturn [\n\t\tstring.slice(0, separatorIndex),\n\t\tstring.slice(separatorIndex + separator.length)\n\t];\n};\n","'use strict';\nconst strictUriEncode = require('strict-uri-encode');\nconst decodeComponent = require('decode-uri-component');\nconst splitOnFirst = require('split-on-first');\n\nconst isNullOrUndefined = value => value === null || value === undefined;\n\nfunction encoderForArrayFormat(options) {\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tconst index = result.length;\n\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[', index, ']'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join('')\n\t\t\t\t];\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[]'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '[]=', encode(value, options)].join('')];\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (value === null || value === undefined || value.length === 0) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn [[encode(key, options), '=', encode(value, options)].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [[result, encode(value, options)].join(options.arrayFormatSeparator)];\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, encode(key, options)];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '=', encode(value, options)].join('')];\n\t\t\t};\n\t}\n}\n\nfunction parserForArrayFormat(options) {\n\tlet result;\n\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /\\[(\\d*)\\]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(\\[\\])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = typeof value === 'string' && value.split('').indexOf(options.arrayFormatSeparator) > -1;\n\t\t\t\tconst newValue = isArray ? value.split(options.arrayFormatSeparator).map(item => decode(item, options)) : value === null ? value : decode(value, options);\n\t\t\t\taccumulator[key] = newValue;\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\t}\n}\n\nfunction validateArrayFormatSeparator(value) {\n\tif (typeof value !== 'string' || value.length !== 1) {\n\t\tthrow new TypeError('arrayFormatSeparator must be single character string');\n\t}\n}\n\nfunction encode(value, options) {\n\tif (options.encode) {\n\t\treturn options.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction decode(value, options) {\n\tif (options.decode) {\n\t\treturn decodeComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t}\n\n\tif (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input))\n\t\t\t.sort((a, b) => Number(a) - Number(b))\n\t\t\t.map(key => input[key]);\n\t}\n\n\treturn input;\n}\n\nfunction removeHash(input) {\n\tconst hashStart = input.indexOf('#');\n\tif (hashStart !== -1) {\n\t\tinput = input.slice(0, hashStart);\n\t}\n\n\treturn input;\n}\n\nfunction getHash(url) {\n\tlet hash = '';\n\tconst hashStart = url.indexOf('#');\n\tif (hashStart !== -1) {\n\t\thash = url.slice(hashStart);\n\t}\n\n\treturn hash;\n}\n\nfunction extract(input) {\n\tinput = removeHash(input);\n\tconst queryStart = input.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\n\treturn input.slice(queryStart + 1);\n}\n\nfunction parseValue(value, options) {\n\tif (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {\n\t\tvalue = Number(value);\n\t} else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {\n\t\tvalue = value.toLowerCase() === 'true';\n\t}\n\n\treturn value;\n}\n\nfunction parse(input, options) {\n\toptions = Object.assign({\n\t\tdecode: true,\n\t\tsort: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\tparseNumbers: false,\n\t\tparseBooleans: false\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst formatter = parserForArrayFormat(options);\n\n\t// Create an object with no prototype\n\tconst ret = Object.create(null);\n\n\tif (typeof input !== 'string') {\n\t\treturn ret;\n\t}\n\n\tinput = input.trim().replace(/^[?#&]/, '');\n\n\tif (!input) {\n\t\treturn ret;\n\t}\n\n\tfor (const param of input.split('&')) {\n\t\tlet [key, value] = splitOnFirst(options.decode ? param.replace(/\\+/g, ' ') : param, '=');\n\n\t\t// Missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tvalue = value === undefined ? null : ['comma', 'separator'].includes(options.arrayFormat) ? value : decode(value, options);\n\t\tformatter(decode(key, options), value, ret);\n\t}\n\n\tfor (const key of Object.keys(ret)) {\n\t\tconst value = ret[key];\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tfor (const k of Object.keys(value)) {\n\t\t\t\tvalue[k] = parseValue(value[k], options);\n\t\t\t}\n\t\t} else {\n\t\t\tret[key] = parseValue(value, options);\n\t\t}\n\t}\n\n\tif (options.sort === false) {\n\t\treturn ret;\n\t}\n\n\treturn (options.sort === true ? Object.keys(ret).sort() : Object.keys(ret).sort(options.sort)).reduce((result, key) => {\n\t\tconst value = ret[key];\n\t\tif (Boolean(value) && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t// Sort object keys, not values\n\t\t\tresult[key] = keysSorter(value);\n\t\t} else {\n\t\t\tresult[key] = value;\n\t\t}\n\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexports.extract = extract;\nexports.parse = parse;\n\nexports.stringify = (object, options) => {\n\tif (!object) {\n\t\treturn '';\n\t}\n\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ','\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst shouldFilter = key => (\n\t\t(options.skipNull && isNullOrUndefined(object[key])) ||\n\t\t(options.skipEmptyString && object[key] === '')\n\t);\n\n\tconst formatter = encoderForArrayFormat(options);\n\n\tconst objectCopy = {};\n\n\tfor (const key of Object.keys(object)) {\n\t\tif (!shouldFilter(key)) {\n\t\t\tobjectCopy[key] = object[key];\n\t\t}\n\t}\n\n\tconst keys = Object.keys(objectCopy);\n\n\tif (options.sort !== false) {\n\t\tkeys.sort(options.sort);\n\t}\n\n\treturn keys.map(key => {\n\t\tconst value = object[key];\n\n\t\tif (value === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (value === null) {\n\t\t\treturn encode(key, options);\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value\n\t\t\t\t.reduce(formatter(key), [])\n\t\t\t\t.join('&');\n\t\t}\n\n\t\treturn encode(key, options) + '=' + encode(value, options);\n\t}).filter(x => x.length > 0).join('&');\n};\n\nexports.parseUrl = (input, options) => {\n\treturn {\n\t\turl: removeHash(input).split('?')[0] || '',\n\t\tquery: parse(extract(input), options)\n\t};\n};\n\nexports.stringifyUrl = (input, options) => {\n\tconst url = removeHash(input.url).split('?')[0] || '';\n\tconst queryFromUrl = exports.extract(input.url);\n\tconst parsedQueryFromUrl = exports.parse(queryFromUrl);\n\tconst hash = getHash(input.url);\n\tconst query = Object.assign(parsedQueryFromUrl, input.query);\n\tlet queryString = exports.stringify(query, options);\n\tif (queryString) {\n\t\tqueryString = `?${queryString}`;\n\t}\n\n\treturn `${url}${queryString}${hash}`;\n};\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport camelCaseKeys from 'camelcase-keys';\nimport queryString from 'query-string';\n\nimport api, { ApiError } from 'src/explore/services/api';\n\n// FIXME: cannot import CancelToken and isCancel through services/api\nimport axios, { AxiosError, AxiosResponse, Canceler } from 'axios';\n\ntype IState = {\n data: T | null;\n error: any; // FIXME: ApiError\n loading: boolean;\n meta: any;\n pristine: boolean;\n status: null | 'loading' | 'success' | 'canceled' | 'error';\n};\n\ntype IOptions = {\n camelCaseKeys?: boolean;\n clearOnError?: boolean;\n delay?: boolean;\n params?: { [key: string]: string | null };\n responseParser?: ( response: any ) => Promise;\n apiPathOverride?: string;\n appendHeader?: { [key: string]: string };\n};\n\nexport type IApiObject = IState & {\n refetch: () => Canceler;\n};\n\nconst INITIAL_STATE: IState = {\n data: null,\n error: null,\n loading: false,\n meta: null,\n pristine: true,\n status: null,\n};\n\nconst DEFAULT_OPTIONS: IOptions = {\n delay: false,\n responseParser: ( response ) => Promise.resolve( response ),\n};\n\nexport const useApiObject = (\n url: string = '',\n options: Partial = {}\n): IApiObject => {\n const [ state, setState ] = useState>( INITIAL_STATE );\n const savedState = useRef>( state );\n const opts = useRef( DEFAULT_OPTIONS );\n\n // Remember latest state\n useEffect(() => {\n savedState.current = state;\n }, [ state ]);\n\n // Remember options\n useEffect(() => {\n opts.current = { ...opts.current, ...options };\n }, [ options ]);\n\n // Create query string from params\n const query = queryString.stringify( options.params || {}, { skipNull: true });\n\n // Function to fetch data\n const fetchData = useCallback(() => {\n if ( !url || options.delay ) return undefined;\n\n setState({\n ...savedState.current,\n loading: true,\n status: 'loading',\n });\n\n const source = axios.CancelToken.source();\n\n let apiParams: any;\n if ( options.apiPathOverride ) {\n apiParams = {\n params: opts.current.params,\n cancelToken: source.token,\n baseURL: options.apiPathOverride,\n };\n } else {\n apiParams = {\n params: opts.current.params,\n cancelToken: source.token,\n };\n }\n\n if ( options.appendHeader ) {\n apiParams.headers = options.appendHeader;\n }\n\n api\n .get( url, apiParams )\n .then(( response: AxiosResponse ) => {\n const responseParser = (() => opts.current.responseParser( response.data ))();\n\n const responseParserPromise =\n typeof responseParser.then === 'function'\n ? responseParser\n : Promise.resolve( responseParser );\n\n responseParserPromise\n .then(( result ) => {\n if ( opts.current.camelCaseKeys ) {\n return camelCaseKeys( result, { deep: true });\n }\n\n return result;\n })\n .then(( result ) => {\n setState({\n ...savedState.current,\n data: result as T,\n error: null,\n loading: false,\n meta: response.data?.meta,\n pristine: false,\n status: 'success',\n });\n });\n })\n .catch(( error: AxiosError ) => {\n if ( axios.isCancel( error )) {\n setState({\n ...savedState.current,\n loading: false,\n pristine: false,\n status: 'canceled',\n });\n\n return;\n }\n\n const apiError = new ApiError( error.response );\n\n setState({\n ...savedState.current,\n data: opts.current.clearOnError ? null : savedState.current.data,\n error: apiError,\n loading: false,\n pristine: false,\n status: 'error',\n });\n });\n\n return source.cancel;\n }, [ url, query, options.delay ]);\n\n // Get new data\n useEffect(() => fetchData(), [ fetchData ]);\n\n return {\n ...state,\n refetch: fetchData,\n };\n};\n\nexport { IState as IAPIObjectState };\n"],"names":["DEFAULT_ERROR","FIVE_HUNDRED_ERROR","ApiError","response","data","errors","result","key","contentType","strictUriEncode","str","x","token","singleMatcher","multiMatcher","decodeComponents","components","split","left","right","decode","input","tokens","i","customDecodeURIComponent","replaceMap","match","entries","decodeUriComponent","encodedURI","splitOnFirst","string","separator","separatorIndex","require$$0","decodeComponent","require$$1","require$$2","isNullOrUndefined","value","encoderForArrayFormat","options","index","encode","parserForArrayFormat","accumulator","newValue","item","validateArrayFormatSeparator","keysSorter","a","b","removeHash","hashStart","getHash","url","hash","extract","queryStart","parseValue","parse","formatter","ret","param","k","exports","object","shouldFilter","objectCopy","keys","queryFromUrl","parsedQueryFromUrl","query","queryString","INITIAL_STATE","DEFAULT_OPTIONS","useApiObject","state","setState","useState","savedState","useRef","opts","useEffect","fetchData","useCallback","source","axios","apiParams","api","responseParser","camelCaseKeys","_a","error","apiError"],"mappings":"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","x_google_ignoreList":[1,2,3,4]}