function filter()

in api/index.js [103:153]


function filter(stacks, query) {
  const {
    name,
    status,
    latestOperation: {
      name: lastOpName,
      initiator,
      timestamp: {
        after: timestampAfter,
        before: timestampBefore,
      } = {},
    } = {},
  } = query;

  let filtered = stacks;

  if (name) {
    filtered = stacks.filter((stack) => stack.name.toLowerCase().includes(name.toLowerCase()));
  }

  if (status) {
    filtered = filtered.filter((stack) => strEqualsIgnoreCase(stack.status, status));
  }

  if (lastOpName) {
    filtered = filtered.filter(({latestOperation: {name}}) => strEqualsIgnoreCase(name, lastOpName));
  }

  if (initiator) {
    filtered = filtered.filter(({latestOperation: {initiator: stackInitiator}}) => {
      stackInitiator = stackInitiator.toLowerCase;
      initiator = initiator.toLowerCase();
      return stackInitiator.includes(initiator);
    });
  }

  if (timestampBefore) {
    const dtBefore = Date.parse(timestampBefore);
    if (dtBefore) {
      filtered = filtered.filter((stack) => new Date(stack.latestOperation.timestamp) < dtBefore);
    }
  }
  if (timestampAfter) {
    const dtAfter = Date.parse(timestampAfter);
    if (dtAfter) {
      filtered = filtered.filter((stack) => new Date(stack.latestOperation.timestamp) >= dtAfter);
    }
  }

  return filtered;
}