Commit 2bd3e078 authored by Ben Mullins's avatar Ben Mullins Committed by Tim Plunkett
Browse files

Issue #3284463 by bnjmnm, srishtiiee, hooroomoo: Cache filter criteria in localStorage

parent c9d8654d
Loading
Loading
Loading
Loading
+0 −0

File changed.

Preview suppressed by a .gitattributes entry or the file's encoding is unsupported.

+0 −0

File changed.

Preview suppressed by a .gitattributes entry or the file's encoding is unsupported.

+9 −3
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@
  import { createEventDispatcher, getContext, onMount } from 'svelte';
  import { moduleCategoryFilter, moduleCategoryVocabularies } from './stores';
  import MediaQuery from './MediaQuery.svelte';
  import { normalizeOptions, shallowCompare } from './util';

  const { drupalSettings, Drupal } = window;
  const dispatch = createEventDispatcher();
@@ -35,9 +36,14 @@
  const apiModuleCategory = fetchAllCategories();
  onMount(async () => {
    apiModuleCategory.then((value) => {
      Object.values(value).forEach((item) => {
        $moduleCategoryVocabularies[item.id] = item.name;
      });
      const normalizedValue = normalizeOptions(value);
      const storedValue = $moduleCategoryVocabularies;
      if (
        storedValue === null ||
        !shallowCompare(normalizedValue, storedValue)
      ) {
        moduleCategoryVocabularies.set(normalizedValue);
      }
    });
  });
</script>
+13 −9
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@
  import { slide } from 'svelte/transition';
  import FilterGroup from './FilterGroup.svelte';
  import FilterApplied from './FilterApplied.svelte';
  import { normalizeOptions, shallowCompare } from './util';
  import {
    filters,
    rowsCount,
@@ -57,23 +58,26 @@
  const sortOptions = SORT_OPTIONS;
  let sortText = sortOptions.find((option) => option.id === $sort).text;

  const updateVocabularies = (vocabulary, value) => {
    const normalizedValue = normalizeOptions(value);
    const storedValue = JSON.parse(localStorage.getItem(`pb.${vocabulary}`));
    if (storedValue === null || !shallowCompare(normalizedValue, storedValue)) {
      $filtersVocabularies[vocabulary] = normalizedValue;
      localStorage.setItem(`pb.${vocabulary}`, JSON.stringify(normalizedValue));
    }
  };

  onMount(async () => {
    apiDevelopmentStatus.then((value) => {
      Object.values(value).forEach((item) => {
        $filtersVocabularies.developmentStatus[item.id] = item.name;
      });
      updateVocabularies('developmentStatus', value);
    });

    apiMaintenanceStatus.then((value) => {
      Object.values(value).forEach((item) => {
        $filtersVocabularies.maintenanceStatus[item.id] = item.name;
      });
      updateVocabularies('maintenanceStatus', value);
    });

    apiSecurityCoverage.then((value) => {
      Object.values(value).forEach((item) => {
        $filtersVocabularies.securityCoverage[item.id] = item.name;
      });
      updateVocabularies('securityCoverage', value);
    });
  });

+7 −4
Original line number Diff line number Diff line
@@ -12,9 +12,9 @@ filters.subscribe((val) => sessionStorage.setItem('advancedFilter', JSON.stringi
export const rowsCount = writable(0);

export const filtersVocabularies = writable({
  developmentStatus: [],
  maintenanceStatus: [],
  securityCoverage: []
  developmentStatus: JSON.parse(localStorage.getItem('pb.developmentStatus')) || [],
  maintenanceStatus: JSON.parse(localStorage.getItem('pb.maintenanceStatus')) || [],
  securityCoverage: JSON.parse(localStorage.getItem('pb.securityCoverage')) || []
});

// Special cases that will render icons near the label.
@@ -26,9 +26,12 @@ export const specialIds = writable({
// Store for applied category filters.
const storedModuleCategoryFilter = JSON.parse(sessionStorage.getItem('categoryFilter')) || [];
export const moduleCategoryFilter = writable(storedModuleCategoryFilter);
export const moduleCategoryVocabularies = writable([]);
moduleCategoryFilter.subscribe((val) => sessionStorage.setItem('categoryFilter', JSON.stringify(val)));

// Store for module category vocabularies.
export const moduleCategoryVocabularies = writable(JSON.parse(localStorage.getItem('pb.moduleCategoryVocabularies')) || []);
moduleCategoryVocabularies.subscribe((val) => localStorage.setItem('pb.moduleCategoryVocabularies', JSON.stringify(val)));

// Store used to check if the page has loaded once already.
const storedIsFirstLoad = JSON.parse(sessionStorage.getItem('isFirstLoad')) === false ? JSON.parse(sessionStorage.getItem('isFirstLoad')) : true;
export const isFirstLoad = writable(storedIsFirstLoad);
Loading