{"version":3,"file":"getOptions.mjs","sources":[""],"sourcesContent":["import { getSelectOptionsFromUrl } from \"./getSelectOptionsFromUrl\";\r\nimport { selectEmptyOptions } from \"../config/constants\";\r\nimport type {\r\n  TOptionType,\r\n  IStateActions,\r\n  IOnOptionsSearchRequestConfig,\r\n} from \"../config/types\";\r\n\r\ntype TGetOptionsParams = {\r\n  value: string;\r\n  callback: (options: TOptionType[]) => void;\r\n  onOptionsSearchRequest: IOnOptionsSearchRequestConfig;\r\n  stateActions: IStateActions;\r\n  name: string;\r\n};\r\n\r\n/**\r\n * Fetches options asynchronously based on the user's search input.\r\n * Uses the configuration provided in `onOptionsSearchRequest`.\r\n * @returns {Promise<void>}\r\n */\r\nexport const getOptions = async ({\r\n  value,\r\n  callback,\r\n  onOptionsSearchRequest,\r\n  stateActions,\r\n  name,\r\n}: TGetOptionsParams): Promise<TOptionType[]> => {\r\n\r\n  if (!onOptionsSearchRequest) {\r\n    console.error(\"[Select] No 'onOptionsSearchRequest' object provided to select cfg\");\r\n    return Promise.reject(selectEmptyOptions);\r\n  }\r\n\r\n  const {\r\n    onSuccess,\r\n    onError,\r\n    onDone,\r\n    requestCfg = {},\r\n    requestFn = null,\r\n    getMappedOptions = (options) => options,\r\n    getData = (selectValue) => {\r\n      const baseData = requestCfg?.data ?? {};\r\n      return { [name]: selectValue, ...baseData };\r\n    },\r\n  } = onOptionsSearchRequest;\r\n\r\n  const fn = async () => {\r\n    const cfg = {\r\n      ...requestCfg,\r\n      data: getData(value),\r\n    };\r\n    if (typeof requestFn === \"function\") {\r\n      return await requestFn(cfg)\r\n        .then((options = selectEmptyOptions) => {\r\n          return options;\r\n        });\r\n    } else {\r\n      return await getSelectOptionsFromUrl(cfg)\r\n        .then((options = selectEmptyOptions) => {\r\n          return options;\r\n        });\r\n    }\r\n  };\r\n\r\n  return await fn()\r\n    .then(\r\n      (options: TOptionType[]) => {\r\n        if (typeof onSuccess === \"function\") {\r\n          return onSuccess({ options, stateActions, callback });\r\n        } else {\r\n          callback(getMappedOptions(options));\r\n          return options;\r\n        }\r\n      }\r\n    )\r\n    .catch((error: Error) => {\r\n      if (typeof onError === \"function\") {\r\n        return onError({ error, stateActions, callback });\r\n      } else {\r\n        return selectEmptyOptions;\r\n      }\r\n    })\r\n    .finally(() => {\r\n      if (typeof onDone === \"function\") {\r\n        onDone({ stateActions, callback });\r\n      }\r\n    });\r\n};\r\n"],"names":["getOptions","async","value","callback","onOptionsSearchRequest","stateActions","name","console","error","Promise","reject","selectEmptyOptions","onSuccess","onError","onDone","requestCfg","requestFn","getMappedOptions","options","getData","selectValue","baseData","data","fn","cfg","then","getSelectOptionsFromUrl","catch","finally"],"mappings":";;;;;GAqBO,MAAMA,WAAaC,OACxBC,YACAC,kBACAC,8CACAC,0BACAC,cAGA,IAAKF,uBAAwB,CAC3BG,QAAQC,MAAM,sEACd,OAAOC,QAAQC,OAAOC,mBACxB,CAEA,MAAMC,UACJA,UAASC,QACTA,QAAOC,OACPA,OAAMC,WACNA,WAAa,CAAA,EAAEC,UACfA,UAAY,KAAIC,iBAChBA,iBAAoBC,SAAYA,QAAOC,QACvCA,QAAWC,cACT,MAAMC,SAAWN,YAAYO,MAAQ,CAAA,EACrC,MAAO,CAAEhB,CAACA,MAAOc,eAAgBC,YAEjCjB,uBAEJ,MAAMmB,GAAKtB,UACT,MAAMuB,IAAM,IACPT,WACHO,KAAMH,QAAQjB,QAEhB,UAAWc,YAAc,WACvB,aAAaA,UAAUQ,KACpBC,KAAK,CAACP,QAAUP,qBACRO,cAGX,aAAaQ,wBAAwBF,KAClCC,KAAK,CAACP,QAAUP,qBACRO,UAKf,aAAaK,KACVE,KACEP,UACC,UAAWN,YAAc,WACvB,OAAOA,UAAU,CAAEM,gBAASb,0BAAcF,wBACrC,CACLA,SAASc,iBAAiBC,UAC1B,OAAOA,OACT,IAGHS,MAAOnB,QACN,UAAWK,UAAY,WACrB,OAAOA,QAAQ,CAAEL,YAAOH,0BAAcF,yBAEtC,OAAOQ,qBAGViB,QAAQ,KACP,UAAWd,SAAW,WACpBA,OAAO,CAAET,0BAAcF"}