Een dating-app op basis van brieven, niet van gezichten!

main

Deze repository wordt als momentopname gepubliceerd: een clone bevat de volledige inhoud, maar geen commitgeschiedenis.

6.0 kB Ruw bestand
import { storeNaam } from "./platform";

/*
 * Van een afgewezen plugin-aanroep naar een zin waar de lezer iets aan heeft.
 *
 * De codes komen uit de plugins zelf en staan hier met opzet uitgeschreven: @capacitor/geolocation
 * nummert ze OS-PLUG-GLOC-00xx (zie GeolocationErrors.kt), Capacitor's eigen brug gebruikt
 * UNIMPLEMENTED en UNAVAILABLE, en onze eigen Postbode-plugin weigert met een boodschap zonder code.
 * Drie herkomsten, dus drie manieren om te herkennen — vandaar zowel op code als op een stuk tekst.
 *
 * De regel voor de zinnen: zeg wat er aan de hand is en, als de gebruiker er iets aan kan doen, wat.
 * Kan hij er niets aan doen, zeg dat dan ook — "dit ligt aan deze versie van de app" is een beter
 * antwoord dan een aansporing die nergens toe leidt. Wat we niet herkennen tonen we zoals het is;
 * dan staat er tenminste iets dat door te geven valt, in plaats van "er ging iets mis".
 */

/* @capacitor/geolocation, GeolocationErrors.kt */
const GEOLOCATIE = {
  "OS-PLUG-GLOC-0002": "Je toestel kon geen positie bepalen.",
  "OS-PLUG-GLOC-0003": "De app heeft geen toestemming voor je locatie.",
  "OS-PLUG-GLOC-0007": "Locatie staat uit op je toestel — zet hem aan bij de snelle instellingen.",
  "OS-PLUG-GLOC-0009": "De vraag om locatie aan te zetten is afgewezen.",
  "OS-PLUG-GLOC-0010":
    "Het duurde te lang om je positie te bepalen. Binnenshuis gebeurt dat; buiten of bij een raam lukt het meestal wel.",
  "OS-PLUG-GLOC-0011": "Deze app-versie vraagt de locatie verkeerd op.",
  "OS-PLUG-GLOC-0014": "Google Play-services heeft eerst aandacht nodig op dit toestel.",
  "OS-PLUG-GLOC-0015": "Google Play-services werkt niet op dit toestel.",
  "OS-PLUG-GLOC-0016": "De locatie-instellingen van dit toestel lieten het niet toe.",
  "OS-PLUG-GLOC-0017": "Locatie én netwerklocatie staan allebei uit op je toestel.",
  "OS-PLUG-GLOC-0018": "Deze app-versie vraagt geen locatietoestemming aan.",
};

/*
 * De bezorging. Capacitor's twee eigen codes, en daarnaast drie boodschappen zonder code: die van
 * onze plugin zelf, en twee die Capacitor tekstueel afgeeft als de app verkeerd in elkaar zit.
 */
const MELDING = [
  { code: "UNIMPLEMENTED", zin: "Deze app-versie kent deze instelling nog niet." },
  { code: "UNAVAILABLE", zin: "Deze instelling werkt niet op dit toestel." },
  { bevat: "apiUrl en token", zin: "De app is niet ingelogd, of kent het adres van de server niet." },
  { bevat: "PermissionCallback", zin: "Deze app-versie kan geen toestemming vragen — een fout in de app, niet in je toestel." },
  { bevat: "Missing the following permissions", zin: "Deze app-versie vraagt geen toestemming voor meldingen aan." },
];

/*
 * De kassa (@capgo/native-purchases). Hier valt niet op een code te matchen, want die is er niet:
 * de plugin gooit bij élk niet-OK antwoord van Play dezelfde zin — "Purchase is not purchased" —
 * of je nu zelf afhaakt, het netwerk wegvalt of je het product al bezit. Play's responseCode, waar
 * het verschil in zit, gooit hij weg (NativePurchasesPlugin.java, onPurchasesUpdated).
 *
 * Die ene zin kan dus niet zeggen wat er gebeurde, en dan hoort de tekst niet te doen alsof. Wat we
 * wel kunnen is de kant kiezen die het minst kwaad kan: verreweg de meeste van die antwoorden zijn
 * iemand die de betaalkaart wegtikt, en die een rode storing voorschotelen is erger dan een echte
 * storing rustig brengen. Vandaar `zacht`: het scherm brengt hem dan als mededeling, niet als fout.
 */
const BETALING = [
  {
    bevat: "Purchase is not purchased",
    zacht: true,
    zin: () =>
      "De betaling is niet afgerond, dus er is geen account aangemaakt. Heb je hem zelf afgebroken, " +
      "dan is er niets gebeurd; zo niet, probeer het dan zo nog eens.",
  },
  {
    bevat: "Purchase is pending",
    zacht: true,
    zin: () =>
      "De betaling loopt nog — sommige betaalmethodes doen er langer over. Zodra hij rond is, kun je " +
      "het account hier aanmaken.",
  },
  {
    bevat: "Product not found",
    zin: () => `${storeNaam()} kent dit product niet. Dat kan aan het land of aan het account liggen.`,
  },
  { bevat: "Billing is not available", zin: () => "Betalen kan niet op dit toestel." },
  {
    bevat: "Billing service unavailable",
    zin: () => `${storeNaam()} is nu niet bereikbaar. Controleer je verbinding en probeer het zo nog eens.`,
  },
  /* De drie controles die de plugin zelf doet voor hij begint: die kunnen alleen aan ons liggen */
  { bevat: "is empty", zin: () => "De app vroeg de betaling verkeerd op — dit ligt aan deze versie van de app." },
  { bevat: "quantity is less than", zin: () => "De app vroeg de betaling verkeerd op — dit ligt aan deze versie van de app." },
];

/* Wat er staat als we het niet herkennen: de code als die er is, anders de kale boodschap */
const onbekend = (fout) => {
  const bericht = fout?.message ? String(fout.message) : "onbekende fout";
  return fout?.code ? `${bericht} (${fout.code})` : bericht;
};

/* Een afgewezen locatie-aanvraag (@capacitor/geolocation gooit; `fout` is de uitzondering) */
export const locatieFout = (fout) => GEOLOCATIE[fout?.code] ?? onbekend(fout);

/* Een afgewezen Postbode-aanroep (`fout` is het { code, message } uit lib/postbode.js) */
export const meldingFout = (fout) => {
  const bericht = fout?.message ? String(fout.message) : "";
  const treffer = MELDING.find(
    (m) => (m.code && m.code === fout?.code) || (m.bevat && bericht.includes(m.bevat))
  );
  return treffer ? treffer.zin : onbekend(fout);
};

/*
 * Een afgewezen aanroep van de kassa. Geeft { zin, zacht } terug — `zacht` betekent: breng dit als
 * mededeling en niet als storing. Wat we niet herkennen is per definitie niet zacht: van een fout
 * die we niet kennen mogen we niet aannemen dat er niets aan de hand is.
 */
export const betalingFout = (fout) => {
  const bericht = fout?.message ? String(fout.message) : "";
  const treffer = BETALING.find((b) => bericht.includes(b.bevat));
  return treffer
    ? { zin: treffer.zin(), zacht: treffer.zacht === true }
    : { zin: onbekend(fout), zacht: false };
};