All files / client/src/utils sessionStorage.ts

80.76% Statements 42/52
55% Branches 11/20
100% Functions 6/6
84% Lines 42/50

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119                356x                 356x   356x 1185x       1185x 1185x 225x     225x     960x     356x       356x 1185x       1185x 1185x 1156x     29x 29x         29x     356x 1185x 1185x 1185x     356x 1185x       1185x 1185x 1185x 1185x           356x   356x 1185x       1185x 1185x 1141x     1141x     44x     356x   356x 264x       264x 264x 264x                          
import { z } from "zod";
import { StartingTimeOption } from "client/views/all-program-items/programListUtils";
import { AgeGroup, Language, Tag } from "shared/types/models/programItem";
import { StringToJsonSchema } from "client/utils/zodUtils";
import { browserStoragePrefix } from "shared/constants/browserStorage";
 
// A const object instead of an enum because enum members can't hold the
// computed event-specific prefix
export const SessionStorageValue = {
  ALL_PROGRAM_ITEMS_SEARCH_TERM: `${browserStoragePrefix}-allProgramItemsSearchTerm`,
  ALL_PROGRAM_ITEMS_TAG: `${browserStoragePrefix}-allProgramItemsTag`,
  ALL_PROGRAM_ITEMS_SELECTED_VIEW: `${browserStoragePrefix}-allProgramItemsSelectedView`,
  ALL_PROGRAM_ITEMS_STARTING_TIME: `${browserStoragePrefix}-allProgramItemsStartingTime`,
  ALL_PROGRAM_ITEMS_HIDE_FULL: `${browserStoragePrefix}-allProgramItemsHideFull`,
  MY_PROGRAM_ITEMS_SHOW_ALL_PROGRAM_ITEMS: `${browserStoragePrefix}-myProgramItemsShowAllProgramItems`,
} as const;
 
const SavedSearchTermSchema = z.string();
 
export const getSavedSearchTerm = (): string => {
  const serializedValue = sessionStorage.getItem(
    SessionStorageValue.ALL_PROGRAM_ITEMS_SEARCH_TERM,
  );
 
  const result = SavedSearchTermSchema.safeParse(serializedValue);
  if (!result.success) {
    sessionStorage.removeItem(
      SessionStorageValue.ALL_PROGRAM_ITEMS_SEARCH_TERM,
    );
    return "";
  }
 
  return result.data;
};
 
const SavedTagsSchema = z.array(
  z.enum(Tag).or(z.enum(Language)).or(z.enum(AgeGroup)),
);
 
export const getSavedTags = (): (Tag | Language | AgeGroup)[] => {
  const serializedValue = sessionStorage.getItem(
    SessionStorageValue.ALL_PROGRAM_ITEMS_TAG,
  );
 
  const parseJsonResult = StringToJsonSchema.safeParse(serializedValue);
  if (!parseJsonResult.success) {
    return [];
  }
 
  const result = SavedTagsSchema.safeParse(parseJsonResult.data);
  Iif (!result.success) {
    sessionStorage.removeItem(SessionStorageValue.ALL_PROGRAM_ITEMS_TAG);
    return [];
  }
 
  return result.data;
};
 
const SavedHideFullSchema = z.preprocess((val) => {
  Iif (val === "true") return true;
  Iif (val === "false") return false;
  return;
}, z.boolean().nullable());
 
export const getSavedHideFull = (): boolean => {
  const serializedValue = sessionStorage.getItem(
    SessionStorageValue.ALL_PROGRAM_ITEMS_HIDE_FULL,
  );
 
  const result = SavedHideFullSchema.safeParse(serializedValue);
  Eif (!result.success) {
    sessionStorage.removeItem(SessionStorageValue.ALL_PROGRAM_ITEMS_HIDE_FULL);
    return false;
  }
 
  return result.data ?? false;
};
 
const SavedStartingTimeSchema = z.enum(StartingTimeOption);
 
export const getSavedStartingTime = (): StartingTimeOption => {
  const serializedValue = sessionStorage.getItem(
    SessionStorageValue.ALL_PROGRAM_ITEMS_STARTING_TIME,
  );
 
  const result = SavedStartingTimeSchema.safeParse(serializedValue);
  if (!result.success) {
    sessionStorage.removeItem(
      SessionStorageValue.ALL_PROGRAM_ITEMS_STARTING_TIME,
    );
    return StartingTimeOption.UPCOMING;
  }
 
  return result.data;
};
 
const SavedShowAllProgramItemsSchema = z.boolean();
 
export const getSavedShowAllProgramItems = (): boolean => {
  const serializedValue = sessionStorage.getItem(
    SessionStorageValue.MY_PROGRAM_ITEMS_SHOW_ALL_PROGRAM_ITEMS,
  );
 
  const parseJsonResult = StringToJsonSchema.safeParse(serializedValue);
  Eif (!parseJsonResult.success) {
    return false;
  }
 
  const result = SavedShowAllProgramItemsSchema.safeParse(parseJsonResult.data);
  if (!result.success) {
    sessionStorage.removeItem(
      SessionStorageValue.MY_PROGRAM_ITEMS_SHOW_ALL_PROGRAM_ITEMS,
    );
    return false;
  }
 
  return result.data;
};