All files / publisher/listing/utils getChanges.ts

0% Statements 0/31
0% Branches 0/40
0% Functions 0/2
0% Lines 0/30

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 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120                                                                                                                                                                                                                                               
import formatImageChanges from "./formatImageChanges";
 
import type { Data } from "../types";
 
export default function getChanges(
  dirtyFields: any,
  fieldValues: any,
  data: Data,
): { [key: string]: any } {
  const changes: { [key: string]: any } = {};
 
  if (
    dirtyFields.banner_urls ||
    dirtyFields.icon_url ||
    dirtyFields.screenshot_urls ||
    dirtyFields.icon ||
    dirtyFields.banner ||
    dirtyFields.screenshots
  ) {
    changes.images = formatImageChanges(
      data.banner_urls,
      fieldValues.icon_url,
      fieldValues.screenshot_urls,
      fieldValues.screenshots,
      dirtyFields,
    );
  }
 
  const forbiddenKeys = [
    "primary_category",
    "secondary_category",
    "websites",
    "contacts",
    "donations",
    "source_code",
    "issues",
    "icon",
    "icon_url",
  ];
 
  const linksKeys = [
    "websites",
    "contacts",
    "donations",
    "source_code",
    "issues",
    "primary_website",
  ];
 
  const getUrls = (item: { url: string }) => item.url;
 
  for (const [key, value] of Object.entries(dirtyFields)) {
    if (!forbiddenKeys.includes(key) && value !== false) {
      changes[key] = fieldValues[key];
    }
 
    if (linksKeys.includes(key)) {
      changes.links = {
        contact: fieldValues.contacts.map(getUrls),
        donations: fieldValues.donations.map(getUrls),
        issues: fieldValues.issues.map(getUrls),
        source: fieldValues.source_code.map(getUrls),
        website: fieldValues.websites.map(getUrls),
      };
 
      if (fieldValues.primary_website) {
        changes.links.website.unshift(fieldValues.primary_website);
      }
    }
  }
 
  if (dirtyFields.primary_category || dirtyFields.secondary_category) {
    const categories = [];
 
    if (fieldValues.primary_category) {
      categories.push(fieldValues.primary_category);
    }
 
    if (fieldValues.secondary_category) {
      categories.push(fieldValues.secondary_category);
    }
 
    changes.categories = categories;
  }
 
  if (
    dirtyFields.public_metrics_territories ||
    dirtyFields.public_metrics_distros
  ) {
    if (fieldValues.public_metrics_territories === true) {
      changes.public_metrics_blacklist = [
        "weekly_installed_base_by_operating_system_normalized",
      ];
    }
 
    if (fieldValues.public_metrics_distros === true) {
      changes.public_metrics_blacklist = ["installed_base_by_country_percent"];
    }
 
    if (
      fieldValues.public_metrics_territories === true &&
      fieldValues.public_metrics_distros === true
    ) {
      changes.public_metrics_blacklist = [];
    }
 
    if (
      fieldValues.public_metrics_territories === false &&
      fieldValues.public_metrics_distros === false
    ) {
      changes.public_metrics_blacklist = [
        "installed_base_by_country_percent",
        "weekly_installed_base_by_operating_system_normalized",
      ];
    }
  }
 
  return changes;
}