All files / publisher/state signingKeysState.ts

50% Statements 11/22
7.14% Branches 1/14
33.33% Functions 2/6
50% Lines 11/22

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                    7x 7x                                       10x   10x   10x   10x 7x 7x 7x 7x                                       7x                  
import { atom as jotaiAtom } from "jotai";
 
import { SigningKey } from "../types/shared";
 
import { policiesListState } from "./policiesState";
 
function getFilteredSigningKeys(
  signingKeys: Array<SigningKey>,
  filterQuery?: string | null,
) {
  Eif (!filterQuery) {
    return signingKeys;
  }
 
  return signingKeys.filter((signingKey: SigningKey) => {
    if (
      (signingKey.name && signingKey.name.includes(filterQuery)) ||
      (signingKey["created-at"] &&
        signingKey["created-at"].includes(filterQuery)) ||
      (signingKey["modified-at"] &&
        signingKey["modified-at"].includes(filterQuery)) ||
      (signingKey.fingerprint &&
        signingKey.fingerprint.toString().includes(filterQuery))
    ) {
      return true;
    }
 
    return false;
  });
}
 
const signingKeysListState = jotaiAtom([] as SigningKey[]);
 
const signingKeysListFilterState = jotaiAtom("" as string);
 
const newSigningKeyState = jotaiAtom({ name: "" } as { name: string });
 
const filteredSigningKeysListState = jotaiAtom<Array<SigningKey>>((get) => {
  const filter = get(signingKeysListFilterState);
  const policies = get(policiesListState);
  const signingKeys = get(signingKeysListState);
  const signingKeysWithPolicies = signingKeys.map((signingKey) => {
    const matchingPolicies = policies.filter((policy) => {
      return policy["signing-key-sha3-384"] === signingKey["sha3-384"];
    });
 
    const signingKeyModels: string[] = [];
 
    matchingPolicies.forEach((policy) => {
      if (!signingKeyModels.includes(policy["model-name"])) {
        signingKeyModels.push(policy["model-name"]);
      }
    });
 
    return {
      ...signingKey,
      models: signingKeyModels,
      policies: matchingPolicies,
    };
  });
 
  return getFilteredSigningKeys(signingKeysWithPolicies, filter);
});
 
export {
  signingKeysListState,
  signingKeysListFilterState,
  newSigningKeyState,
  filteredSigningKeysListState,
};