# All files / src/components sequence-tools.tsx

90.9% Statements 10/11
66.66% Branches 4/6
100% Functions 4/4
90% Lines 9/10

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

    8x
    8x

    8x
    3x

    8x

    15x
    3x

    15x
    15x

     import Button from './button';
    import { Dropdown } from './dropdown-button';

    const expasyPrefixUrl = '//web.expasy.org/cgi-bin';
    const sequenceTools = [
      {
        name: 'ProtParam',
        url: '/protparam/protparam?',
      },
      {
        name: 'ProtScale',
        url: '/protscale/protscale.pl?',
      },
      {
        name: 'Compute pI/Mw',
        url: '/compute_pi/pi_tool?',
      },
      {
        name: 'PeptideMass',
        url: '/peptide_mass/peptide-mass.pl?',
      },
      {
        name: 'PeptideCutter',
        url: '/peptide_cutter/peptidecutter.pl?',
      },
    ] as const;
    export type SequenceToolName = (typeof sequenceTools)[number]['name'];

    const visibleElement = (onClick: () => unknown) => (
      <Button variant="tertiary" onClick={onClick}>
        Tools
      </Button>
    );

    type SequenceToolsProps = {
      accession: string;
      onBlastClick?: () => void;
      tools?: SequenceToolName[];
    };

    const SequenceTools = ({
      accession,
      onBlastClick,
      tools,
    }: SequenceToolsProps) => {
      const applicableTools = tools || sequenceTools.map((tool) => tool.name);
      return (
        <Dropdown visibleElement={visibleElement}>
          <ul>
            {onBlastClick && (
              <li>
                <Button variant="tertiary" onClick={onBlastClick}>
                  BLAST
                </Button>
              </li>
            )}
            {sequenceTools.map((sequenceTool) => {
              Eif (applicableTools.includes(sequenceTool.name)) {
                return (
                  <li key={sequenceTool.name}>
                    <a
                      href={`${expasyPrefixUrl}${sequenceTool.url}${accession}`}
                      target="_blank"
                      rel="noopener noreferrer"
                    >
                      {sequenceTool.name}
                    </a>
                  </li>
                );
              }
              return null;
            })}
          </ul>
        </Dropdown>
      );
    };

    export default SequenceTools;