All files / publisher/state policiesState.ts

55.55% Statements 10/18
10% Branches 1/10
33.33% Functions 2/6
55.55% Lines 10/18

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                    1x 1x                                   10x         10x         10x     1x 1x 1x 1x                     1x                        
import { atom, selector } from "recoil";
 
import { signingKeysListState } from "./signingKeysState";
 
import { Policy } from "../types/shared";
 
function getFilteredPolicies(
  policies: Array<Policy>,
  filterQuery?: string | null,
) {
  Eif (!filterQuery) {
    return policies;
  }
 
  return policies.filter((policy: Policy) => {
    if (
      (policy["signing-key-name"] &&
        policy["signing-key-name"].includes(filterQuery)) ||
      policy["created-at"].includes(filterQuery) ||
      (policy["modified-at"] && policy["modified-at"].includes(filterQuery)) ||
      policy.revision.toString().includes(filterQuery)
    ) {
      return true;
    }
 
    return false;
  });
}
 
const policiesListState = atom({
  key: "policiesList",
  default: [] as Array<Policy>,
});
 
const policiesListFilterState = atom({
  key: "policiesListFilter",
  default: "" as string,
});
 
const filteredPoliciesListState = selector<Array<Policy>>({
  key: "filteredPoliciesList",
  get: ({ get }) => {
    const filter = get(policiesListFilterState);
    const policies = get(policiesListState);
    const signingKeys = get(signingKeysListState);
    const policiesWithKeys = policies.map((policy) => {
      const signingKey = signingKeys.find(
        (key) => key["sha3-384"] === policy["signing-key-sha3-384"],
      );
 
      return {
        ...policy,
        "signing-key-name": signingKey?.name,
      };
    });
 
    return getFilteredPolicies(policiesWithKeys, filter);
  },
  set: ({ set }, newValue) => {
    set(policiesListState, newValue);
  },
});
 
export {
  policiesListState,
  policiesListFilterState,
  filteredPoliciesListState,
};