{"version":3,"file":"onOptionChange.mjs","sources":[""],"sourcesContent":["import { wait } from \"@web3r/flowerkit/fn\";\r\nimport { getFormDataFromObj } from \"@web3r/flowerkit/net\";\r\nimport type { RefObject } from \"react\";\r\nimport type { ActionMeta, OnChangeValue } from \"react-select\";\r\nimport { getSelectOptionsFromUrl } from \"./getSelectOptionsFromUrl\";\r\nimport type {\r\n  TOptionType,\r\n  TSelectUserValue,\r\n  IStateActions,\r\n  IOnSelectChangeRequestConfig,\r\n  ISelect,\r\n  TInputRef,\r\n  TSelectPackageAPI,\r\n} from \"../config/types\";\r\n\r\ntype TOnOptionChangeParams<IsMulti extends boolean> = {\n  data: OnChangeValue<TOptionType, IsMulti>;\n  onSelectChangeRequest?: IOnSelectChangeRequestConfig;\n  stateActions: IStateActions;\n  selectOptions: TOptionType[];\n  selectRef: RefObject<TSelectPackageAPI>;\n  inputRef: TInputRef;\n  onChange?: ISelect[\"onChange\"];\n  name: string;\n  actionData?: ActionMeta<TOptionType>;\n};\n\r\n/**\r\n * Handles the change of a selected option.\r\n * If `onSelectChangeRequest` is provided, it performs an asynchronous request\r\n * (e.g., to fetch additional data) and then calls the user's `onChange`.\r\n * @template IsMulti\r\n * @returns {Promise<void>}\r\n */\r\nexport const onOptionChange = async <IsMulti extends boolean>({\r\n  data,\r\n  onSelectChangeRequest,\r\n  stateActions,\r\n  selectOptions,\r\n  selectRef,\r\n  inputRef,\r\n  onChange,\r\n  name,\r\n  actionData,\r\n}: TOnOptionChangeParams<IsMulti>): Promise<void> => {\r\n  const { action } = actionData || {};\r\n\r\n  // If an async change request is configured, perform it first\r\n  if (onSelectChangeRequest) {\n    const {\n      onBeforeSend = () => stateActions.setSelectLoading(true),\n      onSuccess = (data) => Promise.resolve(data),\n      onError = () => Promise.resolve(undefined),\n      onDone = () => wait(500).then(() => stateActions.setSelectLoading(false)),\n      requestCfg = {},\n      getData = (selectValue: TSelectUserValue) => {\n        if (name.endsWith(\"]\") || Array.isArray(selectValue)) {\n          return new FormData();\r\n        } else {\r\n          return getFormDataFromObj({ [name]: selectValue });\r\n        }\r\n      },\r\n    } = onSelectChangeRequest;\n\n    onBeforeSend();\n    try {\n      const resp = await getSelectOptionsFromUrl({\n        ...requestCfg,\n        data: getData(data),\n      });\n      await onSuccess({ resp, stateActions });\n    } catch (error) {\n      try {\n        await onError({ error, stateActions });\n      } catch (onErrorError) {\n        console.error(\"[Select] onSelectChangeRequest.onError failed\", onErrorError);\n      }\n    } finally {\n      try {\n        await Promise.resolve(onDone({ stateActions }));\n      } catch (onDoneError) {\n        console.error(\"[Select] onSelectChangeRequest.onDone failed\", onDoneError);\n      }\n    }\n  }\n\r\n  stateActions.setSelectValue(data);\n\n  // Invoke the user's onChange handler if provided\n  if (typeof onChange === \"function\") {\n    return onChange({\n      type: \"select\",\n      refs: {\n        selectRef,\n        inputRef,\n      },\n      data: {\n        action,\n        name,\n        value: data,\n        options: selectOptions,\n      },\n      stateActions,\n    });\n  }\n\n  return Promise.resolve();\n};\n"],"names":["onOptionChange","async","data","onSelectChangeRequest","stateActions","selectOptions","selectRef","inputRef","onChange","name","actionData","action","onBeforeSend","setSelectLoading","onSuccess","Promise","resolve","onError","undefined","onDone","wait","then","requestCfg","getData","selectValue","endsWith","Array","isArray","FormData","getFormDataFromObj","resp","getSelectOptionsFromUrl","error","onErrorError","console","onDoneError","setSelectValue","type","refs","value","options"],"mappings":";;;;;;;GAkCO,MAAMA,eAAiBC,OAC5BC,UACAC,4CACAC,0BACAC,4BACAC,oBACAC,kBACAC,kBACAC,UACAC,0BAEA,MAAMC,OAAEA,QAAWD,YAAc,CAAA;6DAGjC;GAAIP,sBAAuB,CACzB,MAAMS,aACJA,aAAe,IAAMR,aAAaS,iBAAiB,MAAKC,UACxDA,UAAaZ,MAASa,QAAQC,QAAQd,MAAKe,QAC3CA,QAAU,IAAMF,QAAQC,aAAQE,GAAUC,OAC1CA,OAAS,IAAMC,KAAK,KAAKC,KAAK,IAAMjB,aAAaS,iBAAiB,QAAOS,WACzEA,WAAa,CAAA,EAAEC,QACfA,QAAWC,cACT,GAAIf,KAAKgB,SAAS,MAAQC,MAAMC,QAAQH,aACtC,OAAO,IAAII,cAEX,OAAOC,mBAAmB,CAAEpB,CAACA,MAAOe,gBAGtCrB,sBAEJS,eACA,IACE,MAAMkB,WAAaC,wBAAwB,IACtCT,WACHpB,KAAMqB,QAAQrB,cAEVY,UAAU,CAAEgB,UAAM1B,2BAC1B,CAAE,MAAO4B,OACP,UACQf,QAAQ,CAAEe,YAAO5B,2BACzB,CAAE,MAAO6B,cACPC,QAAQF,MAAM,gDAAiDC,aACjE,CACF,CAAC,QACC,UACQlB,QAAQC,QAAQG,OAAO,CAAEf,4BACjC,CAAE,MAAO+B,aACPD,QAAQF,MAAM,+CAAgDG,YAChE,CACF,CACF,CAEA/B,aAAagC,eAAelC;iDAG5B;UAAWM,WAAa,WACtB,OAAOA,SAAS,CACd6B,KAAM,SACNC,KAAM,CACJhC,oBACAC,mBAEFL,KAAM,CACJS,cACAF,UACA8B,MAAOrC,KACPsC,QAASnC,eAEXD,4BAIJ,OAAOW,QAAQC"}