{"version":3,"file":"trackingConsent.mjs","names":[],"sources":["../../src/domain/trackingConsent.ts"],"sourcesContent":["import { Observable } from '../tools/observable'\n\nexport const TrackingConsent = {\n  GRANTED: 'granted',\n  NOT_GRANTED: 'not-granted',\n} as const\nexport type TrackingConsent = (typeof TrackingConsent)[keyof typeof TrackingConsent]\n\nexport interface TrackingConsentState {\n  tryToInit: (trackingConsent: TrackingConsent) => void\n  update: (trackingConsent: TrackingConsent) => void\n  isGranted: () => boolean\n  observable: Observable<void>\n  onGrantedOnce: (callback: () => void) => void\n}\n\nexport function createTrackingConsentState(currentConsent?: TrackingConsent): TrackingConsentState {\n  const observable = new Observable<void>()\n\n  function isGranted() {\n    return currentConsent === TrackingConsent.GRANTED\n  }\n\n  return {\n    tryToInit(trackingConsent: TrackingConsent) {\n      if (!currentConsent) {\n        currentConsent = trackingConsent\n      }\n    },\n    onGrantedOnce(fn) {\n      if (isGranted()) {\n        fn()\n      } else {\n        const subscription = observable.subscribe(() => {\n          if (isGranted()) {\n            fn()\n            subscription.unsubscribe()\n          }\n        })\n      }\n    },\n    update(trackingConsent: TrackingConsent) {\n      currentConsent = trackingConsent\n      observable.notify()\n    },\n    isGranted,\n    observable,\n  }\n}\n"],"mappings":";;AAEA,MAAa,kBAAkB;CAC7B,SAAS;CACT,aAAa;AACf;AAWA,SAAgB,2BAA2B,gBAAwD;CACjG,MAAM,aAAa,IAAI,WAAiB;CAExC,SAAS,YAAY;EACnB,OAAO,mBAAmB,gBAAgB;CAC5C;CAEA,OAAO;EACL,UAAU,iBAAkC;GAC1C,IAAI,CAAC,gBACH,iBAAiB;EAErB;EACA,cAAc,IAAI;GAChB,IAAI,UAAU,GACZ,GAAG;QACE;IACL,MAAM,eAAe,WAAW,gBAAgB;KAC9C,IAAI,UAAU,GAAG;MACf,GAAG;MACH,aAAa,YAAY;KAC3B;IACF,CAAC;GACH;EACF;EACA,OAAO,iBAAkC;GACvC,iBAAiB;GACjB,WAAW,OAAO;EACpB;EACA;EACA;CACF;AACF"}