{"version":3,"file":"SetInterval.cjs","sources":["../../../../src/components/SetInterval/SetInterval.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport * as React from 'react';\nimport { interval, Subscription, Subject, of, NEVER } from 'rxjs';\nimport { tap, switchMap } from 'rxjs/operators';\n\nimport { stringToMs, SelectableValue } from '@grafana/data';\n\nimport { RefreshPicker } from '../RefreshPicker/RefreshPicker';\n\nexport function getIntervalFromString(strInterval: string): SelectableValue<number> {\n  return {\n    label: strInterval,\n    value: stringToMs(strInterval),\n  };\n}\n\ninterface Props {\n  func: () => unknown;\n  loading: boolean;\n  interval: string;\n}\n\n/**\n * @deprecated\n */\nexport const SetInterval = React.memo(({ func, loading, interval: intervalStr }: Props) => {\n  const propsSubjectRef = useRef<Subject<Props> | null>(null);\n  const subscriptionRef = useRef<Subscription | null>(null);\n  const prevPropsRef = useRef<Props>({ func, loading, interval: intervalStr });\n\n  useEffect(() => {\n    propsSubjectRef.current = new Subject<Props>();\n    subscriptionRef.current = propsSubjectRef.current\n      .pipe(\n        // switchMap creates a new observables based on the input stream,\n        // which becomes part of the propsSubject stream\n        switchMap((props) => {\n          // If the query is live, empty value is emitted. `of` creates single value,\n          // which is merged to propsSubject stream\n          if (RefreshPicker.isLive(props.interval)) {\n            return of({});\n          }\n          // When query is loading, a new stream is merged. But it's a stream that emits no values(NEVER),\n          // hence next call of this function will happen when query changes, and new props are passed into this component\n          // When query is NOT loading, a new value is emitted, this time it's an interval value,\n          // which makes tap function below execute on that interval basis.\n          return props.loading ? NEVER : interval(stringToMs(props.interval));\n        }),\n        // tap will execute function passed by props\n        // * on value from `of` stream merged if query is live\n        // * on specified interval (triggered by values emitted by interval)\n        tap(() => {\n          propsSubjectRef.current && func();\n        })\n      )\n      .subscribe();\n\n    propsSubjectRef.current.next({ func, loading, interval: intervalStr });\n\n    return () => {\n      if (subscriptionRef.current) {\n        subscriptionRef.current.unsubscribe();\n      }\n      if (propsSubjectRef.current) {\n        propsSubjectRef.current.complete();\n      }\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  useEffect(() => {\n    const prev = prevPropsRef.current;\n    const currentProps: Props = { func, loading, interval: intervalStr };\n    if (RefreshPicker.isLive(prev.interval) && RefreshPicker.isLive(currentProps.interval)) {\n      return;\n    }\n\n    propsSubjectRef.current && propsSubjectRef.current.next(currentProps);\n    prevPropsRef.current = currentProps;\n  }, [func, loading, intervalStr]);\n  return null;\n});\n\nSetInterval.displayName = 'SetInterval';\n"],"names":["stringToMs","React","useRef","useEffect","Subject","switchMap","RefreshPicker","of","NEVER","interval","tap"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASO,SAAS,sBAAsB,WAAA,EAA8C;AAClF,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,WAAA;AAAA,IACP,KAAA,EAAOA,gBAAW,WAAW;AAAA,GAC/B;AACF;AAWO,MAAM,WAAA,GAAcC,iBAAM,IAAA,CAAK,CAAC,EAAE,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,WAAA,EAAY,KAAa;AACzF,EAAA,MAAM,eAAA,GAAkBC,aAA8B,IAAI,CAAA;AAC1D,EAAA,MAAM,eAAA,GAAkBA,aAA4B,IAAI,CAAA;AACxD,EAAA,MAAM,eAAeA,YAAA,CAAc,EAAE,MAAM,OAAA,EAAS,QAAA,EAAU,aAAa,CAAA;AAE3E,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,eAAA,CAAgB,OAAA,GAAU,IAAIC,YAAA,EAAe;AAC7C,IAAA,eAAA,CAAgB,OAAA,GAAU,gBAAgB,OAAA,CACvC,IAAA;AAAA;AAAA;AAAA,MAGCC,mBAAA,CAAU,CAAC,KAAA,KAAU;AAGnB,QAAA,IAAIC,2BAAA,CAAc,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA,EAAG;AACxC,UAAA,OAAOC,OAAA,CAAG,EAAE,CAAA;AAAA,QACd;AAKA,QAAA,OAAO,MAAM,OAAA,GAAUC,UAAA,GAAQC,cAAST,eAAA,CAAW,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,MACpE,CAAC,CAAA;AAAA;AAAA;AAAA;AAAA,MAIDU,cAAI,MAAM;AACR,QAAA,eAAA,CAAgB,WAAW,IAAA,EAAK;AAAA,MAClC,CAAC;AAAA,MAEF,SAAA,EAAU;AAEb,IAAA,eAAA,CAAgB,QAAQ,IAAA,CAAK,EAAE,MAAM,OAAA,EAAS,QAAA,EAAU,aAAa,CAAA;AAErE,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,gBAAgB,OAAA,EAAS;AAC3B,QAAA,eAAA,CAAgB,QAAQ,WAAA,EAAY;AAAA,MACtC;AACA,MAAA,IAAI,gBAAgB,OAAA,EAAS;AAC3B,QAAA,eAAA,CAAgB,QAAQ,QAAA,EAAS;AAAA,MACnC;AAAA,IACF,CAAA;AAAA,EAEF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAP,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,OAAO,YAAA,CAAa,OAAA;AAC1B,IAAA,MAAM,YAAA,GAAsB,EAAE,IAAA,EAAM,OAAA,EAAS,UAAU,WAAA,EAAY;AACnE,IAAA,IAAIG,2BAAA,CAAc,OAAO,IAAA,CAAK,QAAQ,KAAKA,2BAAA,CAAc,MAAA,CAAO,YAAA,CAAa,QAAQ,CAAA,EAAG;AACtF,MAAA;AAAA,IACF;AAEA,IAAA,eAAA,CAAgB,OAAA,IAAW,eAAA,CAAgB,OAAA,CAAQ,IAAA,CAAK,YAAY,CAAA;AACpE,IAAA,YAAA,CAAa,OAAA,GAAU,YAAA;AAAA,EACzB,CAAA,EAAG,CAAC,IAAA,EAAM,OAAA,EAAS,WAAW,CAAC,CAAA;AAC/B,EAAA,OAAO,IAAA;AACT,CAAC;AAED,WAAA,CAAY,WAAA,GAAc,aAAA;;;;;"}