outgoing: selectLocalizedContent()

in src/amo/reducers/addons.js [199:375]


      outgoing: selectLocalizedContent(url.outgoing, lang),
    };
  }

  return null;
};

export function createInternalAddon(
  apiAddon: ExternalAddonType | PartialExternalAddonType,
  lang: string,
): AddonType {
  const addon: AddonType = {
    authors: apiAddon.authors,
    average_daily_users: apiAddon.average_daily_users,
    categories: selectCategoryObject(apiAddon),
    contributions_url: apiAddon.contributions_url,
    created: apiAddon.created,
    default_locale: apiAddon.default_locale,
    description: selectLocalizedContent(apiAddon.description, lang),
    developer_comments: selectLocalizedContent(
      apiAddon.developer_comments,
      lang,
    ),
    edit_url: apiAddon.edit_url,
    guid: apiAddon.guid,
    has_eula: apiAddon.has_eula,
    has_privacy_policy: apiAddon.has_privacy_policy,
    homepage: selectLocalizedUrlWithOutgoing(apiAddon.homepage, lang),
    icon_url: apiAddon.icon_url,
    icons: apiAddon.icons,
    id: apiAddon.id,
    is_disabled: apiAddon.is_disabled,
    is_experimental: apiAddon.is_experimental,
    is_source_public: apiAddon.is_source_public,
    last_updated: apiAddon.last_updated,
    latest_unlisted_version: apiAddon.latest_unlisted_version,
    locale_disambiguation: apiAddon.locale_disambiguation,
    name: selectLocalizedContent(apiAddon.name, lang),
    previews: apiAddon.previews
      ? createInternalPreviews(apiAddon.previews, lang)
      : undefined,
    promoted: makeInternalPromoted(apiAddon.promoted),
    ratings: apiAddon.ratings,
    requires_payment: apiAddon.requires_payment,
    review_url: apiAddon.review_url,
    slug: apiAddon.slug,
    status: apiAddon.status,
    summary: selectLocalizedContent(apiAddon.summary, lang),
    support_email: selectLocalizedContent(apiAddon.support_email, lang),
    support_url: selectLocalizedUrlWithOutgoing(apiAddon.support_url, lang),
    tags: apiAddon.tags,
    target_locale: apiAddon.target_locale,
    type: apiAddon.type,
    url: apiAddon.url,
    weekly_downloads: apiAddon.weekly_downloads,

    // These are custom properties not in the API response.
    currentVersionId: apiAddon.current_version
      ? apiAddon.current_version.id
      : null,
    isMozillaSignedExtension: false,
    isAndroidCompatible: false,
  };

  const currentVersion = apiAddon.current_version;

  if (currentVersion) {
    addon.isMozillaSignedExtension =
      currentVersion.file.is_mozilla_signed_extension;
    addon.isAndroidCompatible =
      addon.type === ADDON_TYPE_EXTENSION &&
      !!currentVersion.compatibility[CLIENT_APP_ANDROID] &&
      currentVersion.compatibility[CLIENT_APP_ANDROID].max === '*';
  }

  return addon;
}

export const getAddonByID = (
  addons: AddonsState,
  id: AddonID,
): AddonType | null => {
  return addons.byID[`${id}`] || null;
};

export const getAddonByIdInURL = (
  addons: AddonsState,
  id: string,
): AddonType | null => {
  const addonId = addons.byIdInURL[id];

  return getAddonByID(addons, addonId);
};

export const isAddonLoading = (state: AppState, id: string): boolean => {
  if (typeof id !== 'string') {
    return false;
  }

  return Boolean(state.addons.loadingByIdInURL[id]);
};

export const getAllAddons = (state: AppState): Array<AddonType> => {
  const addons = state.addons.byID;

  // $FlowFixMe: see https://github.com/facebook/flow/issues/2221.
  return Object.values(addons);
};

type GetBySlugParams = {|
  slug: string,
  state: AddonsState,
|};

export const getAddonInfoBySlug = ({
  slug,
  state,
}: GetBySlugParams): AddonInfoType | null => {
  invariant(slug, 'slug is required');
  invariant(state, 'state is required');

  const infoForSlug = state.infoBySlug[slug];
  return (infoForSlug && infoForSlug.info) || null;
};

export const isAddonInfoLoading = ({
  slug,
  state,
}: GetBySlugParams): boolean => {
  invariant(slug, 'slug is required');
  invariant(state, 'state is required');

  const infoForSlug = state.infoBySlug[slug];
  return Boolean(infoForSlug && infoForSlug.loading);
};

export const createInternalAddonInfo = (
  addonInfo: ExternalAddonInfoType,
  lang: string,
): AddonInfoType => {
  return {
    eula: selectLocalizedContent(addonInfo.eula, lang),
    privacyPolicy: selectLocalizedContent(addonInfo.privacy_policy, lang),
  };
};

export function createGroupedRatings(
  grouping: $Shape<GroupedRatingsType> = {},
): GroupedRatingsType {
  return {
    /* eslint-disable quote-props */
    '1': 0,
    '2': 0,
    '3': 0,
    '4': 0,
    '5': 0,
    /* eslint-enable quote-props */
    ...grouping,
  };
}

type Action =
  | FetchAddonAction
  | FetchAddonInfoAction
  | LoadAddonInfoAction
  | LoadAddonAction
  | UnloadAddonReviewsAction
  | UpdateRatingCountsAction;

export default function addonsReducer(
  // eslint-disable-next-line default-param-last
  state: AddonsState = initialState,
  action: Action,
): AddonsState {
  switch (action.type) {
    case SET_LANG:
      return {