replayPreferences.tsx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import localStorage from 'sentry/utils/localStorage';
  2. const LOCAL_STORAGE_KEY = 'replay-config';
  3. export type ReplayPrefs = {
  4. isSkippingInactive: boolean;
  5. playbackSpeed: number;
  6. timestampType: 'relative' | 'absolute';
  7. };
  8. const CAN_SKIP_PREFS: ReplayPrefs = {
  9. isSkippingInactive: true,
  10. playbackSpeed: 1,
  11. timestampType: 'relative',
  12. };
  13. const NO_SKIP_PREFS: ReplayPrefs = {
  14. isSkippingInactive: false,
  15. playbackSpeed: 1,
  16. timestampType: 'relative',
  17. };
  18. export interface PrefsStrategy {
  19. _prefs: ReplayPrefs;
  20. get: () => ReplayPrefs;
  21. set: (prefs: ReplayPrefs) => void;
  22. }
  23. export const StaticReplayPreferences: PrefsStrategy = {
  24. _prefs: {...CAN_SKIP_PREFS},
  25. get() {
  26. return this._prefs;
  27. },
  28. set(prefs) {
  29. this._prefs = prefs;
  30. },
  31. };
  32. export const StaticNoSkipReplayPreferences: PrefsStrategy = {
  33. _prefs: {...NO_SKIP_PREFS},
  34. get() {
  35. return this._prefs;
  36. },
  37. set(prefs) {
  38. this._prefs = prefs;
  39. },
  40. };
  41. export const LocalStorageReplayPreferences: PrefsStrategy = {
  42. _prefs: {...CAN_SKIP_PREFS},
  43. get() {
  44. const parsed = JSON.parse(localStorage.getItem(LOCAL_STORAGE_KEY) || '{}');
  45. return {...CAN_SKIP_PREFS, ...parsed};
  46. },
  47. set(prefs) {
  48. this._prefs = prefs;
  49. localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(prefs));
  50. },
  51. };