@innspel/react-native 0.9.2 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -902,6 +902,8 @@ var tekst = {
902
902
  mineSak: (nr) => `Sak ${saksnr(nr)}`,
903
903
  /** «Feil · sak 2041» — sporet først, aldri rå id og aldri kontraktens type (DD-50). */
904
904
  sakHode: (spor, nr) => `${stor(spor)} \xB7 sak ${saksnr(nr)}`,
905
+ /** F14: svaret kom siden forrige gang denne enheten viste lista. */
906
+ nyttSvar: "Nytt svar",
905
907
  // Leietakeren fjernet vedlegget. Bare AT — aldri hvorfor, av hvem eller når.
906
908
  bildeFjernet: "Bildet er fjernet.",
907
909
  svarFra: (leietaker) => `Svar fra ${leietaker}`,
@@ -1554,23 +1556,78 @@ function Kvittering({
1554
1556
  // src/widget/MineInnspill.tsx
1555
1557
  var import_react9 = require("react");
1556
1558
  var import_react_native7 = require("react-native");
1559
+
1560
+ // src/widget/nyttSvar.ts
1561
+ var N\u00D8KKEL = "innspel:svar-sett";
1562
+ async function merkNyeSvar(rader, storage) {
1563
+ let grense = 0;
1564
+ try {
1565
+ grense = Number.parseInt(await storage.get(N\u00D8KKEL) ?? "", 10) || 0;
1566
+ } catch {
1567
+ grense = 0;
1568
+ }
1569
+ const tid = (r) => r.pending === true ? NaN : Date.parse(r.reply?.at ?? "");
1570
+ const merket = rader.map((rad) => ({ rad, nytt: tid(rad) > grense }));
1571
+ return [...merket.filter((m) => m.nytt), ...merket.filter((m) => !m.nytt)];
1572
+ }
1573
+ async function markerSvarSett(storage, n\u00E5 = Date.now()) {
1574
+ try {
1575
+ await storage.set(N\u00D8KKEL, String(n\u00E5));
1576
+ } catch {
1577
+ }
1578
+ }
1579
+
1580
+ // src/widget/MineInnspill.tsx
1557
1581
  var import_jsx_runtime7 = require("react/jsx-runtime");
1558
1582
  function MineInnspill({
1559
1583
  rader,
1560
1584
  laster,
1561
1585
  tenantName,
1562
- onNytt
1586
+ onNytt,
1587
+ storage
1563
1588
  }) {
1564
1589
  const tema = useTema();
1590
+ const [visning, setVisning] = (0, import_react9.useState)(() => rader.map((rad) => ({ rad, nytt: false })));
1591
+ (0, import_react9.useEffect)(() => {
1592
+ let gjelder = true;
1593
+ void merkNyeSvar(rader, storage).then((m) => {
1594
+ if (gjelder) setVisning(m);
1595
+ }).catch(() => {
1596
+ if (gjelder) setVisning(rader.map((rad) => ({ rad, nytt: false })));
1597
+ });
1598
+ return () => {
1599
+ gjelder = false;
1600
+ };
1601
+ }, [storage, rader]);
1602
+ (0, import_react9.useEffect)(() => {
1603
+ if (!laster && rader.length) void markerSvarSett(storage).catch(() => void 0);
1604
+ }, [storage, laster, rader]);
1565
1605
  return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_react_native7.View, { style: { flex: 1, gap: tema.space.md }, children: [
1566
1606
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(H, { sub: tekst.mineUnder, children: tekst.mineTittel }),
1567
- laster ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_react_native7.ActivityIndicator, { accessibilityLabel: "Henter innspillene dine", color: tema.color.textSecondary }) : rader.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Hint, { children: tekst.mineTom }) : /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_react_native7.ScrollView, { style: { flex: 1 }, contentContainerStyle: { gap: tema.space.sm }, children: rader.map((rad) => {
1607
+ laster ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_react_native7.ActivityIndicator, { accessibilityLabel: "Henter innspillene dine", color: tema.color.textSecondary }) : rader.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Hint, { children: tekst.mineTom }) : /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_react_native7.ScrollView, { style: { flex: 1 }, contentContainerStyle: { gap: tema.space.sm }, children: visning.map(({ rad, nytt }) => {
1568
1608
  const venter = rad.pending === true;
1569
1609
  const v = venter ? venterVisning : statusVisning(rad.status, rad.type, rad.deadlineAt);
1570
1610
  const nokkel = venter ? rad.clientRef : rad.id;
1571
1611
  const svar = venter ? void 0 : rad.reply;
1572
1612
  return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(Card, { dashed: venter, children: [
1573
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Hint, { children: venter ? `${tekst.mineIkkeSendt} \xB7 ${rad.type === "onske" ? tekst.onske : tekst.feil}` : tekst.sakHode(rad.type === "onske" ? tekst.onske : tekst.feil, rad.id) }),
1613
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_react_native7.View, { style: { flexDirection: "row", alignItems: "center", gap: tema.space.xs, flexWrap: "wrap" }, children: [
1614
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Hint, { children: venter ? `${tekst.mineIkkeSendt} \xB7 ${rad.type === "onske" ? tekst.onske : tekst.feil}` : tekst.sakHode(rad.type === "onske" ? tekst.onske : tekst.feil, rad.id) }),
1615
+ nytt ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1616
+ import_react_native7.Text,
1617
+ {
1618
+ testID: "nytt-svar",
1619
+ style: {
1620
+ color: tema.color.info,
1621
+ backgroundColor: tema.color.infoBg,
1622
+ fontSize: tema.font.tiny,
1623
+ fontWeight: tema.weight.semibold,
1624
+ borderRadius: tema.radius.pill,
1625
+ paddingHorizontal: tema.space.sm
1626
+ },
1627
+ children: tekst.nyttSvar
1628
+ }
1629
+ ) : null
1630
+ ] }),
1574
1631
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1575
1632
  import_react_native7.Text,
1576
1633
  {
@@ -2062,7 +2119,7 @@ function Widget({
2062
2119
  text: verdi,
2063
2120
  ...vedlegg ? { attachment: vedlegg } : {},
2064
2121
  ...spor === "feil" && lenketTil ? { relatedKnownIssueId: lenketTil.id } : {},
2065
- ...fjernede.length ? { context: fjernetKontekst(client, fjernede) } : {}
2122
+ context: fjernetKontekst(client, fjernede, apneOpsjoner?.screen)
2066
2123
  });
2067
2124
  if (res.status === "queued") {
2068
2125
  setKvittering({ art: "k\xF8", ...res.attachment ? { vedlegg: "forkastet" } : {} });
@@ -2083,7 +2140,7 @@ function Widget({
2083
2140
  } finally {
2084
2141
  setSender(false);
2085
2142
  }
2086
- }, [client, spor, verdi, vedlegg, lenketTil, fjernede]);
2143
+ }, [client, spor, verdi, vedlegg, lenketTil, fjernede, apneOpsjoner?.screen]);
2087
2144
  const jaOgsa = (0, import_react11.useCallback)(
2088
2145
  async (k) => {
2089
2146
  setSender(true);
@@ -2210,7 +2267,7 @@ function Widget({
2210
2267
  onEndre: endreTekst,
2211
2268
  minTextLength: innstillinger.minTextLength,
2212
2269
  textMaxLength: innstillinger.textMaxLength,
2213
- kontekst: client.context,
2270
+ kontekst: { ...client.context, ...apneOpsjoner?.screen ? { screen: apneOpsjoner.screen } : {} },
2214
2271
  fjernedeFelter: fjernede,
2215
2272
  onFjernKontekst: (f) => setFjernede((x) => [...x, f]),
2216
2273
  ...lenketTil ? { lenketTil, onFjernLenke: () => setLenketTil(void 0) } : {},
@@ -2253,6 +2310,7 @@ function Widget({
2253
2310
  steg === "mine" ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
2254
2311
  MineInnspill,
2255
2312
  {
2313
+ storage: client.storage,
2256
2314
  rader: mine,
2257
2315
  laster: lasterMine,
2258
2316
  ...tenantName ? { tenantName } : {},
@@ -2277,9 +2335,10 @@ function useNettstatus(client) {
2277
2335
  }, [c]);
2278
2336
  return online;
2279
2337
  }
2280
- function fjernetKontekst(client, fjernede) {
2338
+ function fjernetKontekst(client, fjernede, skjerm) {
2281
2339
  const ut = {};
2282
- for (const k of Object.keys(client.context)) {
2340
+ if (skjerm) ut["screen"] = skjerm;
2341
+ for (const k of [...Object.keys(client.context), "screen"]) {
2283
2342
  if (k !== "sdkVersion" && fjernede.includes(k)) ut[k] = void 0;
2284
2343
  }
2285
2344
  return ut;