@innspel/react-native 0.9.1 → 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/README.md +12 -0
- package/dist/index.cjs +148 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +214 -85
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.cts
CHANGED
|
@@ -630,6 +630,8 @@ declare const tekst: {
|
|
|
630
630
|
readonly mineSak: (nr: string) => string;
|
|
631
631
|
/** «Feil · sak 2041» — sporet først, aldri rå id og aldri kontraktens type (DD-50). */
|
|
632
632
|
readonly sakHode: (spor: string, nr: string) => string;
|
|
633
|
+
/** F14: svaret kom siden forrige gang denne enheten viste lista. */
|
|
634
|
+
readonly nyttSvar: "Nytt svar";
|
|
633
635
|
readonly bildeFjernet: "Bildet er fjernet.";
|
|
634
636
|
readonly svarFra: (leietaker: string) => string;
|
|
635
637
|
readonly svarFraGenerisk: "Svar";
|
package/dist/index.d.ts
CHANGED
|
@@ -630,6 +630,8 @@ declare const tekst: {
|
|
|
630
630
|
readonly mineSak: (nr: string) => string;
|
|
631
631
|
/** «Feil · sak 2041» — sporet først, aldri rå id og aldri kontraktens type (DD-50). */
|
|
632
632
|
readonly sakHode: (spor: string, nr: string) => string;
|
|
633
|
+
/** F14: svaret kom siden forrige gang denne enheten viste lista. */
|
|
634
|
+
readonly nyttSvar: "Nytt svar";
|
|
633
635
|
readonly bildeFjernet: "Bildet er fjernet.";
|
|
634
636
|
readonly svarFra: (leietaker: string) => string;
|
|
635
637
|
readonly svarFraGenerisk: "Svar";
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/InnspelProvider.tsx
|
|
2
|
-
import { createContext as createContext3, useCallback as useCallback3, useContext as useContext4, useMemo as
|
|
2
|
+
import { createContext as createContext3, useCallback as useCallback3, useContext as useContext4, useMemo as useMemo4, useRef as useRef4, useState as useState5 } from "react";
|
|
3
3
|
import { View as View9 } from "react-native";
|
|
4
4
|
|
|
5
5
|
// src/skjermbilde.ts
|
|
@@ -355,7 +355,7 @@ import {
|
|
|
355
355
|
InnspelApiError,
|
|
356
356
|
InnspelQueueFullError
|
|
357
357
|
} from "@innspel/core";
|
|
358
|
-
import { useCallback as useCallback2, useContext as useContext3, useEffect, useRef as
|
|
358
|
+
import { useCallback as useCallback2, useContext as useContext3, useEffect as useEffect2, useRef as useRef3, useState as useState4 } from "react";
|
|
359
359
|
import { KeyboardAvoidingView, Modal, Pressable as Pressable5, View as View8 } from "react-native";
|
|
360
360
|
import { initialWindowMetrics, SafeAreaInsetsContext } from "react-native-safe-area-context";
|
|
361
361
|
|
|
@@ -517,11 +517,11 @@ function Ikon({
|
|
|
517
517
|
}
|
|
518
518
|
|
|
519
519
|
// src/widget/Felt.tsx
|
|
520
|
-
import { useMemo, useState } from "react";
|
|
520
|
+
import { useMemo as useMemo2, useState } from "react";
|
|
521
521
|
import { Pressable as Pressable2, ScrollView, Text as Text2, TextInput, View as View2 } from "react-native";
|
|
522
522
|
|
|
523
523
|
// src/widget/primitiver.tsx
|
|
524
|
-
import "react";
|
|
524
|
+
import { useMemo, useRef } from "react";
|
|
525
525
|
import { Pressable, Text, View } from "react-native";
|
|
526
526
|
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
|
|
527
527
|
function Btn({
|
|
@@ -534,10 +534,12 @@ function Btn({
|
|
|
534
534
|
accessibilityLabel,
|
|
535
535
|
grow,
|
|
536
536
|
testID,
|
|
537
|
-
busy
|
|
537
|
+
busy,
|
|
538
|
+
trykkForbiForelder
|
|
538
539
|
}) {
|
|
539
540
|
const tema = useTema();
|
|
540
541
|
const c = tema.color;
|
|
542
|
+
const forbi = useTrykkForbiForelder(onPress, !!disabled, tema.touch / 2);
|
|
541
543
|
const bakgrunn = variant === "primary" ? c.actionPrimary : variant === "secondary" ? c.surfaceRaised : "transparent";
|
|
542
544
|
const tekstfarge = variant === "primary" ? c.onActionPrimary : variant === "danger" ? c.danger : c.actionSecondaryText;
|
|
543
545
|
const kant = variant === "ghost" ? "transparent" : variant === "primary" ? c.actionPrimary : c.actionSecondaryBorder;
|
|
@@ -551,6 +553,7 @@ function Btn({
|
|
|
551
553
|
accessibilityState: { disabled: !!disabled, busy: !!busy },
|
|
552
554
|
disabled,
|
|
553
555
|
onPress,
|
|
556
|
+
...trykkForbiForelder ? forbi : {},
|
|
554
557
|
style: {
|
|
555
558
|
minHeight: tema.touch,
|
|
556
559
|
borderRadius: tema.radius.md,
|
|
@@ -583,6 +586,37 @@ function Btn({
|
|
|
583
586
|
hint ? /* @__PURE__ */ jsx2(Hint, { children: hint }) : null
|
|
584
587
|
] });
|
|
585
588
|
}
|
|
589
|
+
function useTrykkForbiForelder(onPress, laast, slingring) {
|
|
590
|
+
const start = useRef(null);
|
|
591
|
+
const fikkResponder = useRef(false);
|
|
592
|
+
const siste = useRef({ onPress, laast });
|
|
593
|
+
siste.current = { onPress, laast };
|
|
594
|
+
return useMemo(
|
|
595
|
+
() => ({
|
|
596
|
+
onPressIn: () => {
|
|
597
|
+
fikkResponder.current = true;
|
|
598
|
+
},
|
|
599
|
+
onTouchStart: (e) => {
|
|
600
|
+
start.current = { x: e.nativeEvent.pageX, y: e.nativeEvent.pageY };
|
|
601
|
+
},
|
|
602
|
+
onTouchEnd: (e) => {
|
|
603
|
+
const s = start.current;
|
|
604
|
+
start.current = null;
|
|
605
|
+
const innenfor = s !== null && Math.abs(e.nativeEvent.pageX - s.x) <= slingring && Math.abs(e.nativeEvent.pageY - s.y) <= slingring;
|
|
606
|
+
setTimeout(() => {
|
|
607
|
+
const tatt = fikkResponder.current;
|
|
608
|
+
fikkResponder.current = false;
|
|
609
|
+
if (!tatt && innenfor && !siste.current.laast) siste.current.onPress?.();
|
|
610
|
+
}, 0);
|
|
611
|
+
},
|
|
612
|
+
onTouchCancel: () => {
|
|
613
|
+
start.current = null;
|
|
614
|
+
fikkResponder.current = false;
|
|
615
|
+
}
|
|
616
|
+
}),
|
|
617
|
+
[slingring]
|
|
618
|
+
);
|
|
619
|
+
}
|
|
586
620
|
function H({ children, sub }) {
|
|
587
621
|
const tema = useTema();
|
|
588
622
|
return /* @__PURE__ */ jsxs(View, { style: { gap: tema.space.xs }, children: [
|
|
@@ -830,6 +864,8 @@ var tekst = {
|
|
|
830
864
|
mineSak: (nr) => `Sak ${saksnr(nr)}`,
|
|
831
865
|
/** «Feil · sak 2041» — sporet først, aldri rå id og aldri kontraktens type (DD-50). */
|
|
832
866
|
sakHode: (spor, nr) => `${stor(spor)} \xB7 sak ${saksnr(nr)}`,
|
|
867
|
+
/** F14: svaret kom siden forrige gang denne enheten viste lista. */
|
|
868
|
+
nyttSvar: "Nytt svar",
|
|
833
869
|
// Leietakeren fjernet vedlegget. Bare AT — aldri hvorfor, av hvem eller når.
|
|
834
870
|
bildeFjernet: "Bildet er fjernet.",
|
|
835
871
|
svarFra: (leietaker) => `Svar fra ${leietaker}`,
|
|
@@ -940,7 +976,7 @@ function Felt({
|
|
|
940
976
|
const full = brukt >= textMaxLength;
|
|
941
977
|
const visTeller = brukt >= textMaxLength * 0.8;
|
|
942
978
|
const uavklart = funn.find((f) => !beholdt.includes(f.match));
|
|
943
|
-
const linjer =
|
|
979
|
+
const linjer = useMemo2(() => {
|
|
944
980
|
const etiketter = {
|
|
945
981
|
screen: "Skjerm",
|
|
946
982
|
appVersion: "Appversjon",
|
|
@@ -1217,7 +1253,8 @@ function Felt({
|
|
|
1217
1253
|
disabled: forKort || sender,
|
|
1218
1254
|
busy: sender,
|
|
1219
1255
|
hint: forKort ? tekst.forKort(minTextLength) : harVedlegg ? tekst.sendHintMedBilde : void 0,
|
|
1220
|
-
onPress: onSend
|
|
1256
|
+
onPress: onSend,
|
|
1257
|
+
trykkForbiForelder: true
|
|
1221
1258
|
}
|
|
1222
1259
|
) })
|
|
1223
1260
|
] });
|
|
@@ -1479,25 +1516,80 @@ function Kvittering({
|
|
|
1479
1516
|
}
|
|
1480
1517
|
|
|
1481
1518
|
// src/widget/MineInnspill.tsx
|
|
1482
|
-
import "react";
|
|
1519
|
+
import { useEffect, useState as useState2 } from "react";
|
|
1483
1520
|
import { ActivityIndicator as ActivityIndicator2, ScrollView as ScrollView3, Text as Text6, View as View6 } from "react-native";
|
|
1521
|
+
|
|
1522
|
+
// src/widget/nyttSvar.ts
|
|
1523
|
+
var N\u00D8KKEL = "innspel:svar-sett";
|
|
1524
|
+
async function merkNyeSvar(rader, storage) {
|
|
1525
|
+
let grense = 0;
|
|
1526
|
+
try {
|
|
1527
|
+
grense = Number.parseInt(await storage.get(N\u00D8KKEL) ?? "", 10) || 0;
|
|
1528
|
+
} catch {
|
|
1529
|
+
grense = 0;
|
|
1530
|
+
}
|
|
1531
|
+
const tid = (r) => r.pending === true ? NaN : Date.parse(r.reply?.at ?? "");
|
|
1532
|
+
const merket = rader.map((rad) => ({ rad, nytt: tid(rad) > grense }));
|
|
1533
|
+
return [...merket.filter((m) => m.nytt), ...merket.filter((m) => !m.nytt)];
|
|
1534
|
+
}
|
|
1535
|
+
async function markerSvarSett(storage, n\u00E5 = Date.now()) {
|
|
1536
|
+
try {
|
|
1537
|
+
await storage.set(N\u00D8KKEL, String(n\u00E5));
|
|
1538
|
+
} catch {
|
|
1539
|
+
}
|
|
1540
|
+
}
|
|
1541
|
+
|
|
1542
|
+
// src/widget/MineInnspill.tsx
|
|
1484
1543
|
import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1485
1544
|
function MineInnspill({
|
|
1486
1545
|
rader,
|
|
1487
1546
|
laster,
|
|
1488
1547
|
tenantName,
|
|
1489
|
-
onNytt
|
|
1548
|
+
onNytt,
|
|
1549
|
+
storage
|
|
1490
1550
|
}) {
|
|
1491
1551
|
const tema = useTema();
|
|
1552
|
+
const [visning, setVisning] = useState2(() => rader.map((rad) => ({ rad, nytt: false })));
|
|
1553
|
+
useEffect(() => {
|
|
1554
|
+
let gjelder = true;
|
|
1555
|
+
void merkNyeSvar(rader, storage).then((m) => {
|
|
1556
|
+
if (gjelder) setVisning(m);
|
|
1557
|
+
}).catch(() => {
|
|
1558
|
+
if (gjelder) setVisning(rader.map((rad) => ({ rad, nytt: false })));
|
|
1559
|
+
});
|
|
1560
|
+
return () => {
|
|
1561
|
+
gjelder = false;
|
|
1562
|
+
};
|
|
1563
|
+
}, [storage, rader]);
|
|
1564
|
+
useEffect(() => {
|
|
1565
|
+
if (!laster && rader.length) void markerSvarSett(storage).catch(() => void 0);
|
|
1566
|
+
}, [storage, laster, rader]);
|
|
1492
1567
|
return /* @__PURE__ */ jsxs6(View6, { style: { flex: 1, gap: tema.space.md }, children: [
|
|
1493
1568
|
/* @__PURE__ */ jsx7(H, { sub: tekst.mineUnder, children: tekst.mineTittel }),
|
|
1494
|
-
laster ? /* @__PURE__ */ jsx7(ActivityIndicator2, { accessibilityLabel: "Henter innspillene dine", color: tema.color.textSecondary }) : rader.length === 0 ? /* @__PURE__ */ jsx7(Hint, { children: tekst.mineTom }) : /* @__PURE__ */ jsx7(ScrollView3, { style: { flex: 1 }, contentContainerStyle: { gap: tema.space.sm }, children:
|
|
1569
|
+
laster ? /* @__PURE__ */ jsx7(ActivityIndicator2, { accessibilityLabel: "Henter innspillene dine", color: tema.color.textSecondary }) : rader.length === 0 ? /* @__PURE__ */ jsx7(Hint, { children: tekst.mineTom }) : /* @__PURE__ */ jsx7(ScrollView3, { style: { flex: 1 }, contentContainerStyle: { gap: tema.space.sm }, children: visning.map(({ rad, nytt }) => {
|
|
1495
1570
|
const venter = rad.pending === true;
|
|
1496
1571
|
const v = venter ? venterVisning : statusVisning(rad.status, rad.type, rad.deadlineAt);
|
|
1497
1572
|
const nokkel = venter ? rad.clientRef : rad.id;
|
|
1498
1573
|
const svar = venter ? void 0 : rad.reply;
|
|
1499
1574
|
return /* @__PURE__ */ jsxs6(Card, { dashed: venter, children: [
|
|
1500
|
-
/* @__PURE__ */
|
|
1575
|
+
/* @__PURE__ */ jsxs6(View6, { style: { flexDirection: "row", alignItems: "center", gap: tema.space.xs, flexWrap: "wrap" }, children: [
|
|
1576
|
+
/* @__PURE__ */ jsx7(Hint, { children: venter ? `${tekst.mineIkkeSendt} \xB7 ${rad.type === "onske" ? tekst.onske : tekst.feil}` : tekst.sakHode(rad.type === "onske" ? tekst.onske : tekst.feil, rad.id) }),
|
|
1577
|
+
nytt ? /* @__PURE__ */ jsx7(
|
|
1578
|
+
Text6,
|
|
1579
|
+
{
|
|
1580
|
+
testID: "nytt-svar",
|
|
1581
|
+
style: {
|
|
1582
|
+
color: tema.color.info,
|
|
1583
|
+
backgroundColor: tema.color.infoBg,
|
|
1584
|
+
fontSize: tema.font.tiny,
|
|
1585
|
+
fontWeight: tema.weight.semibold,
|
|
1586
|
+
borderRadius: tema.radius.pill,
|
|
1587
|
+
paddingHorizontal: tema.space.sm
|
|
1588
|
+
},
|
|
1589
|
+
children: tekst.nyttSvar
|
|
1590
|
+
}
|
|
1591
|
+
) : null
|
|
1592
|
+
] }),
|
|
1501
1593
|
/* @__PURE__ */ jsx7(
|
|
1502
1594
|
Text6,
|
|
1503
1595
|
{
|
|
@@ -1550,7 +1642,7 @@ function MineInnspill({
|
|
|
1550
1642
|
|
|
1551
1643
|
// src/widget/Skjermbilde.tsx
|
|
1552
1644
|
import { skaler, strokTilRekter, treffer, trykkTilRekt } from "@innspel/core";
|
|
1553
|
-
import { useCallback, useMemo as
|
|
1645
|
+
import { useCallback, useMemo as useMemo3, useRef as useRef2, useState as useState3 } from "react";
|
|
1554
1646
|
import { Image as Image2, Pressable as Pressable4, StyleSheet, Text as Text7, View as View7 } from "react-native";
|
|
1555
1647
|
import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
1556
1648
|
function Skjermbilde({
|
|
@@ -1565,17 +1657,17 @@ function Skjermbilde({
|
|
|
1565
1657
|
onLeggVed
|
|
1566
1658
|
}) {
|
|
1567
1659
|
const tema = useTema();
|
|
1568
|
-
const [verktoy, setVerktoy] =
|
|
1569
|
-
const [allTekst, setAllTekst] =
|
|
1570
|
-
const [egne, setEgne] =
|
|
1571
|
-
const [ramme, setRamme] =
|
|
1572
|
-
const strok =
|
|
1573
|
-
const visning =
|
|
1660
|
+
const [verktoy, setVerktoy] = useState3("pensel");
|
|
1661
|
+
const [allTekst, setAllTekst] = useState3(false);
|
|
1662
|
+
const [egne, setEgne] = useState3([]);
|
|
1663
|
+
const [ramme, setRamme] = useState3(null);
|
|
1664
|
+
const strok = useRef2([]);
|
|
1665
|
+
const visning = useMemo3(() => {
|
|
1574
1666
|
if (!ramme) return null;
|
|
1575
1667
|
const s = Math.min(ramme.width / bilde.width, ramme.height / bilde.height);
|
|
1576
1668
|
return { width: Math.floor(bilde.width * s), height: Math.floor(bilde.height * s) };
|
|
1577
1669
|
}, [ramme, bilde.width, bilde.height]);
|
|
1578
|
-
const automasker =
|
|
1670
|
+
const automasker = useMemo3(
|
|
1579
1671
|
() => visning ? automaskerRot.map((r) => skaler(r, rotStorrelse, visning)) : [],
|
|
1580
1672
|
[automaskerRot, rotStorrelse, visning]
|
|
1581
1673
|
);
|
|
@@ -1792,28 +1884,28 @@ function Widget({
|
|
|
1792
1884
|
const tema = useTema();
|
|
1793
1885
|
const insets = useContext3(SafeAreaInsetsContext) ?? initialWindowMetrics?.insets ?? { top: 0, bottom: 0, left: 0, right: 0 };
|
|
1794
1886
|
const skjermbilde = useSkjermbilde();
|
|
1795
|
-
const previewRef =
|
|
1796
|
-
const [steg, setSteg] =
|
|
1797
|
-
const [spor, setSpor] =
|
|
1798
|
-
const [verdi, setVerdi] =
|
|
1799
|
-
const [kort, setKort] =
|
|
1800
|
-
const [lasterKort, setLasterKort] =
|
|
1801
|
-
const [lenketTil, setLenketTil] =
|
|
1802
|
-
const [funn, setFunn] =
|
|
1803
|
-
const [fjernede, setFjernede] =
|
|
1804
|
-
const [sender, setSender] =
|
|
1887
|
+
const previewRef = useRef3(null);
|
|
1888
|
+
const [steg, setSteg] = useState4("valg");
|
|
1889
|
+
const [spor, setSpor] = useState4("feil");
|
|
1890
|
+
const [verdi, setVerdi] = useState4("");
|
|
1891
|
+
const [kort, setKort] = useState4([]);
|
|
1892
|
+
const [lasterKort, setLasterKort] = useState4(false);
|
|
1893
|
+
const [lenketTil, setLenketTil] = useState4();
|
|
1894
|
+
const [funn, setFunn] = useState4([]);
|
|
1895
|
+
const [fjernede, setFjernede] = useState4([]);
|
|
1896
|
+
const [sender, setSender] = useState4(false);
|
|
1805
1897
|
const online = useNettstatus(client);
|
|
1806
|
-
const [feil, setFeil] =
|
|
1807
|
-
const [kvittering, setKvittering] =
|
|
1808
|
-
const [mine, setMine] =
|
|
1809
|
-
const [lasterMine, setLasterMine] =
|
|
1810
|
-
const [bilde, setBilde] =
|
|
1811
|
-
const [automasker, setAutomasker] =
|
|
1812
|
-
const [rotStorrelse, setRotStorrelse] =
|
|
1813
|
-
const [komponerer, setKomponerer] =
|
|
1814
|
-
const [kilde, setKilde] =
|
|
1815
|
-
const [vedlegg, setVedlegg] =
|
|
1816
|
-
const [innstillinger, setInnstillinger] =
|
|
1898
|
+
const [feil, setFeil] = useState4();
|
|
1899
|
+
const [kvittering, setKvittering] = useState4();
|
|
1900
|
+
const [mine, setMine] = useState4([]);
|
|
1901
|
+
const [lasterMine, setLasterMine] = useState4(false);
|
|
1902
|
+
const [bilde, setBilde] = useState4();
|
|
1903
|
+
const [automasker, setAutomasker] = useState4([]);
|
|
1904
|
+
const [rotStorrelse, setRotStorrelse] = useState4({ width: 1, height: 1 });
|
|
1905
|
+
const [komponerer, setKomponerer] = useState4(false);
|
|
1906
|
+
const [kilde, setKilde] = useState4("skjerm");
|
|
1907
|
+
const [vedlegg, setVedlegg] = useState4();
|
|
1908
|
+
const [innstillinger, setInnstillinger] = useState4({ ...client.settings });
|
|
1817
1909
|
const skjermbildeMulig = innstillinger.screenshotsEnabled && skjermbilde?.adapter != null;
|
|
1818
1910
|
const fangstMulig = skjermbildeMulig && skjermbilde?.adapter?.captureScreen !== false;
|
|
1819
1911
|
const galleriMulig = skjermbildeMulig && typeof skjermbilde?.adapter?.pick === "function";
|
|
@@ -1833,11 +1925,25 @@ function Widget({
|
|
|
1833
1925
|
setVedlegg(void 0);
|
|
1834
1926
|
setKomponerer(false);
|
|
1835
1927
|
}, []);
|
|
1928
|
+
const [mineDirekte, setMineDirekte] = useState4(false);
|
|
1929
|
+
const [stegForMine, setStegForMine] = useState4("valg");
|
|
1930
|
+
const stegRef = useRef3(steg);
|
|
1931
|
+
stegRef.current = steg;
|
|
1932
|
+
const harUtkast = verdi.trim().length > 0 || vedlegg !== void 0;
|
|
1836
1933
|
const lukk = useCallback2(() => {
|
|
1934
|
+
onLukk();
|
|
1935
|
+
if (stegRef.current === "mine" && mineDirekte) {
|
|
1936
|
+
setSteg(stegForMine);
|
|
1937
|
+
setMineDirekte(false);
|
|
1938
|
+
}
|
|
1939
|
+
}, [onLukk, mineDirekte, stegForMine]);
|
|
1940
|
+
const lukkOgNullstill = useCallback2(() => {
|
|
1837
1941
|
onLukk();
|
|
1838
1942
|
nullstill();
|
|
1943
|
+
setMineDirekte(false);
|
|
1944
|
+
setStegForMine("valg");
|
|
1839
1945
|
}, [onLukk, nullstill]);
|
|
1840
|
-
|
|
1946
|
+
useEffect2(() => {
|
|
1841
1947
|
if (!synlig) return;
|
|
1842
1948
|
client.track({ name: "widget_opened" });
|
|
1843
1949
|
void client.queue.flush().catch(() => void 0);
|
|
@@ -1845,8 +1951,8 @@ function Widget({
|
|
|
1845
1951
|
if (!client.isAnonymous) {
|
|
1846
1952
|
void client.subjects.submissions().then(setMine).catch(() => void 0);
|
|
1847
1953
|
}
|
|
1848
|
-
if (apneOpsjoner?.view === "mine" && !client.isAnonymous) void visMine();
|
|
1849
|
-
else if (apneOpsjoner?.track) velgSpor(apneOpsjoner.track);
|
|
1954
|
+
if (apneOpsjoner?.view === "mine" && !client.isAnonymous) void visMine(true);
|
|
1955
|
+
else if (apneOpsjoner?.track && !harUtkast) void velgSpor(apneOpsjoner.track);
|
|
1850
1956
|
}, [synlig]);
|
|
1851
1957
|
const hentKort = useCallback2(async () => {
|
|
1852
1958
|
setLasterKort(true);
|
|
@@ -1870,7 +1976,7 @@ function Widget({
|
|
|
1870
1976
|
},
|
|
1871
1977
|
[client, hentKort]
|
|
1872
1978
|
);
|
|
1873
|
-
|
|
1979
|
+
useEffect2(() => {
|
|
1874
1980
|
if (steg === "kjenteFeil" && !lasterKort && kort.length === 0) setSteg("felt");
|
|
1875
1981
|
}, [steg, lasterKort, kort.length]);
|
|
1876
1982
|
const endreTekst = useCallback2(
|
|
@@ -1944,6 +2050,11 @@ function Widget({
|
|
|
1944
2050
|
}, []);
|
|
1945
2051
|
const gaaTilbake = useCallback2(() => {
|
|
1946
2052
|
setFeil(void 0);
|
|
2053
|
+
if (steg === "mine") {
|
|
2054
|
+
if (mineDirekte) lukk();
|
|
2055
|
+
else setSteg("valg");
|
|
2056
|
+
return;
|
|
2057
|
+
}
|
|
1947
2058
|
if (steg === "skjermbilde") {
|
|
1948
2059
|
setBilde(void 0);
|
|
1949
2060
|
setAutomasker([]);
|
|
@@ -1955,7 +2066,12 @@ function Widget({
|
|
|
1955
2066
|
return;
|
|
1956
2067
|
}
|
|
1957
2068
|
setSteg("valg");
|
|
1958
|
-
}, [steg, spor, kort.length]);
|
|
2069
|
+
}, [steg, spor, kort.length, mineDirekte, lukk]);
|
|
2070
|
+
const androidTilbake = useCallback2(() => {
|
|
2071
|
+
if (steg === "valg") lukk();
|
|
2072
|
+
else if (steg === "kvittering") lukkOgNullstill();
|
|
2073
|
+
else gaaTilbake();
|
|
2074
|
+
}, [steg, lukk, lukkOgNullstill, gaaTilbake]);
|
|
1959
2075
|
const send = useCallback2(async () => {
|
|
1960
2076
|
setSender(true);
|
|
1961
2077
|
setFeil(void 0);
|
|
@@ -1965,7 +2081,7 @@ function Widget({
|
|
|
1965
2081
|
text: verdi,
|
|
1966
2082
|
...vedlegg ? { attachment: vedlegg } : {},
|
|
1967
2083
|
...spor === "feil" && lenketTil ? { relatedKnownIssueId: lenketTil.id } : {},
|
|
1968
|
-
|
|
2084
|
+
context: fjernetKontekst(client, fjernede, apneOpsjoner?.screen)
|
|
1969
2085
|
});
|
|
1970
2086
|
if (res.status === "queued") {
|
|
1971
2087
|
setKvittering({ art: "k\xF8", ...res.attachment ? { vedlegg: "forkastet" } : {} });
|
|
@@ -1986,7 +2102,7 @@ function Widget({
|
|
|
1986
2102
|
} finally {
|
|
1987
2103
|
setSender(false);
|
|
1988
2104
|
}
|
|
1989
|
-
}, [client, spor, verdi, vedlegg, lenketTil, fjernede]);
|
|
2105
|
+
}, [client, spor, verdi, vedlegg, lenketTil, fjernede, apneOpsjoner?.screen]);
|
|
1990
2106
|
const jaOgsa = useCallback2(
|
|
1991
2107
|
async (k) => {
|
|
1992
2108
|
setSender(true);
|
|
@@ -2002,7 +2118,13 @@ function Widget({
|
|
|
2002
2118
|
},
|
|
2003
2119
|
[client]
|
|
2004
2120
|
);
|
|
2005
|
-
const visMine = useCallback2(async () => {
|
|
2121
|
+
const visMine = useCallback2(async (direkte = false) => {
|
|
2122
|
+
if (direkte) {
|
|
2123
|
+
if (stegRef.current !== "mine") setStegForMine(stegRef.current);
|
|
2124
|
+
} else {
|
|
2125
|
+
setStegForMine("valg");
|
|
2126
|
+
}
|
|
2127
|
+
setMineDirekte(direkte);
|
|
2006
2128
|
setSteg("mine");
|
|
2007
2129
|
setLasterMine(true);
|
|
2008
2130
|
try {
|
|
@@ -2013,13 +2135,18 @@ function Widget({
|
|
|
2013
2135
|
setLasterMine(false);
|
|
2014
2136
|
}
|
|
2015
2137
|
}, [client]);
|
|
2138
|
+
const nyttFraMine = useCallback2(() => {
|
|
2139
|
+
setMineDirekte(false);
|
|
2140
|
+
if (harUtkast) setSteg(stegForMine);
|
|
2141
|
+
else nullstill();
|
|
2142
|
+
}, [harUtkast, stegForMine, nullstill]);
|
|
2016
2143
|
return /* @__PURE__ */ jsx9(
|
|
2017
2144
|
Modal,
|
|
2018
2145
|
{
|
|
2019
2146
|
visible: synlig,
|
|
2020
2147
|
transparent: true,
|
|
2021
2148
|
animationType: "slide",
|
|
2022
|
-
onRequestClose:
|
|
2149
|
+
onRequestClose: androidTilbake,
|
|
2023
2150
|
accessibilityViewIsModal: true,
|
|
2024
2151
|
children: /* @__PURE__ */ jsx9(
|
|
2025
2152
|
KeyboardAvoidingView,
|
|
@@ -2057,7 +2184,7 @@ function Widget({
|
|
|
2057
2184
|
testID: "lukk",
|
|
2058
2185
|
accessibilityRole: "button",
|
|
2059
2186
|
accessibilityLabel: tekst.lukk,
|
|
2060
|
-
onPress: lukk,
|
|
2187
|
+
onPress: steg === "kvittering" ? lukkOgNullstill : lukk,
|
|
2061
2188
|
style: { minWidth: tema.touch, minHeight: tema.touch, alignItems: "center", justifyContent: "center" },
|
|
2062
2189
|
children: /* @__PURE__ */ jsx9(Ikon, { navn: "close-outline", farge: tema.color.textSecondary })
|
|
2063
2190
|
}
|
|
@@ -2075,7 +2202,7 @@ function Widget({
|
|
|
2075
2202
|
ikon: "list-outline",
|
|
2076
2203
|
label: mine.length > 0 ? tekst.mineMedAntall(mine.length) : tekst.mineTittel,
|
|
2077
2204
|
accessibilityLabel: mine.length > 0 ? tekst.mineEtikett(mine.length) : tekst.mineTittel,
|
|
2078
|
-
onPress: visMine
|
|
2205
|
+
onPress: () => void visMine()
|
|
2079
2206
|
}
|
|
2080
2207
|
) : null
|
|
2081
2208
|
] }) : null,
|
|
@@ -2102,7 +2229,7 @@ function Widget({
|
|
|
2102
2229
|
onEndre: endreTekst,
|
|
2103
2230
|
minTextLength: innstillinger.minTextLength,
|
|
2104
2231
|
textMaxLength: innstillinger.textMaxLength,
|
|
2105
|
-
kontekst: client.context,
|
|
2232
|
+
kontekst: { ...client.context, ...apneOpsjoner?.screen ? { screen: apneOpsjoner.screen } : {} },
|
|
2106
2233
|
fjernedeFelter: fjernede,
|
|
2107
2234
|
onFjernKontekst: (f) => setFjernede((x) => [...x, f]),
|
|
2108
2235
|
...lenketTil ? { lenketTil, onFjernLenke: () => setLenketTil(void 0) } : {},
|
|
@@ -2139,16 +2266,17 @@ function Widget({
|
|
|
2139
2266
|
...kvittering.nr ? { saksnummer: kvittering.nr } : {},
|
|
2140
2267
|
...kvittering.vedlegg ? { vedlegg: kvittering.vedlegg } : {},
|
|
2141
2268
|
...kvittering.frist ? { frist: kvittering.frist } : {},
|
|
2142
|
-
onLukk:
|
|
2269
|
+
onLukk: lukkOgNullstill
|
|
2143
2270
|
}
|
|
2144
2271
|
) : null,
|
|
2145
2272
|
steg === "mine" ? /* @__PURE__ */ jsx9(
|
|
2146
2273
|
MineInnspill,
|
|
2147
2274
|
{
|
|
2275
|
+
storage: client.storage,
|
|
2148
2276
|
rader: mine,
|
|
2149
2277
|
laster: lasterMine,
|
|
2150
2278
|
...tenantName ? { tenantName } : {},
|
|
2151
|
-
onNytt:
|
|
2279
|
+
onNytt: nyttFraMine
|
|
2152
2280
|
}
|
|
2153
2281
|
) : null
|
|
2154
2282
|
]
|
|
@@ -2161,17 +2289,18 @@ function Widget({
|
|
|
2161
2289
|
}
|
|
2162
2290
|
function useNettstatus(client) {
|
|
2163
2291
|
const c = client.connectivity;
|
|
2164
|
-
const [online, setOnline] =
|
|
2165
|
-
|
|
2292
|
+
const [online, setOnline] = useState4(() => c?.isOnline() ?? true);
|
|
2293
|
+
useEffect2(() => {
|
|
2166
2294
|
if (!c) return void 0;
|
|
2167
2295
|
setOnline(c.isOnline());
|
|
2168
2296
|
return c.subscribe?.((v) => setOnline(v));
|
|
2169
2297
|
}, [c]);
|
|
2170
2298
|
return online;
|
|
2171
2299
|
}
|
|
2172
|
-
function fjernetKontekst(client, fjernede) {
|
|
2300
|
+
function fjernetKontekst(client, fjernede, skjerm) {
|
|
2173
2301
|
const ut = {};
|
|
2174
|
-
|
|
2302
|
+
if (skjerm) ut["screen"] = skjerm;
|
|
2303
|
+
for (const k of [...Object.keys(client.context), "screen"]) {
|
|
2175
2304
|
if (k !== "sdkVersion" && fjernede.includes(k)) ut[k] = void 0;
|
|
2176
2305
|
}
|
|
2177
2306
|
return ut;
|
|
@@ -2189,11 +2318,11 @@ function InnspelProvider({
|
|
|
2189
2318
|
screenshot,
|
|
2190
2319
|
imageStepNote
|
|
2191
2320
|
}) {
|
|
2192
|
-
const [synlig, setSynlig] =
|
|
2193
|
-
const [apneOpsjoner, setApneOpsjoner] =
|
|
2194
|
-
const registrert =
|
|
2195
|
-
const rootRef =
|
|
2196
|
-
const privat =
|
|
2321
|
+
const [synlig, setSynlig] = useState5(false);
|
|
2322
|
+
const [apneOpsjoner, setApneOpsjoner] = useState5();
|
|
2323
|
+
const registrert = useRef4(false);
|
|
2324
|
+
const rootRef = useRef4(null);
|
|
2325
|
+
const privat = useMemo4(createPrivateRegistry, []);
|
|
2197
2326
|
const open = useCallback3(
|
|
2198
2327
|
async (options) => {
|
|
2199
2328
|
setApneOpsjoner(options);
|
|
@@ -2206,9 +2335,9 @@ function InnspelProvider({
|
|
|
2206
2335
|
client.registerPresenter({ open });
|
|
2207
2336
|
registrert.current = true;
|
|
2208
2337
|
}
|
|
2209
|
-
const tema =
|
|
2210
|
-
const verdi =
|
|
2211
|
-
const skjermbilde =
|
|
2338
|
+
const tema = useMemo4(() => byggTema(theme, colorScheme), [theme, colorScheme]);
|
|
2339
|
+
const verdi = useMemo4(() => ({ client, open, close }), [client, open, close]);
|
|
2340
|
+
const skjermbilde = useMemo4(
|
|
2212
2341
|
() => ({ adapter: screenshot ?? null, rootRef, privat }),
|
|
2213
2342
|
[screenshot, privat]
|
|
2214
2343
|
);
|
|
@@ -2238,14 +2367,14 @@ function useInnspel() {
|
|
|
2238
2367
|
}
|
|
2239
2368
|
|
|
2240
2369
|
// src/InnspelPrivate.tsx
|
|
2241
|
-
import { useEffect as
|
|
2370
|
+
import { useEffect as useEffect3, useRef as useRef5 } from "react";
|
|
2242
2371
|
import { View as View10 } from "react-native";
|
|
2243
2372
|
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
2244
2373
|
function InnspelPrivate({ children, style }) {
|
|
2245
|
-
const ref =
|
|
2374
|
+
const ref = useRef5(null);
|
|
2246
2375
|
const kontekst = useSkjermbilde();
|
|
2247
2376
|
const registrer = kontekst?.privat.register;
|
|
2248
|
-
|
|
2377
|
+
useEffect3(() => {
|
|
2249
2378
|
if (!registrer) return;
|
|
2250
2379
|
return registrer(ref);
|
|
2251
2380
|
}, [registrer]);
|
|
@@ -2256,7 +2385,7 @@ function InnspelPrivate({ children, style }) {
|
|
|
2256
2385
|
import {
|
|
2257
2386
|
InnspelApiError as InnspelApiError2
|
|
2258
2387
|
} from "@innspel/core";
|
|
2259
|
-
import { useCallback as useCallback4, useEffect as
|
|
2388
|
+
import { useCallback as useCallback4, useEffect as useEffect4, useState as useState7 } from "react";
|
|
2260
2389
|
import { Modal as Modal4, Pressable as Pressable8, Text as Text12, View as View15 } from "react-native";
|
|
2261
2390
|
|
|
2262
2391
|
// src/program/Aksept.tsx
|
|
@@ -2430,7 +2559,7 @@ function Aksept({
|
|
|
2430
2559
|
}
|
|
2431
2560
|
|
|
2432
2561
|
// src/program/HvordanGikkDet.tsx
|
|
2433
|
-
import { useState as
|
|
2562
|
+
import { useState as useState6 } from "react";
|
|
2434
2563
|
import { Modal as Modal3, Pressable as Pressable7, Text as Text9, TextInput as TextInput2, View as View12 } from "react-native";
|
|
2435
2564
|
import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
2436
2565
|
var UTFALL = [
|
|
@@ -2450,8 +2579,8 @@ function HvordanGikkDet({
|
|
|
2450
2579
|
onLukk
|
|
2451
2580
|
}) {
|
|
2452
2581
|
const tema = useTema();
|
|
2453
|
-
const [valgt, setValgt] =
|
|
2454
|
-
const [setning, setSetning] =
|
|
2582
|
+
const [valgt, setValgt] = useState6();
|
|
2583
|
+
const [setning, setSetning] = useState6("");
|
|
2455
2584
|
return /* @__PURE__ */ jsx13(Modal3, { visible: true, transparent: true, animationType: "fade", onRequestClose: onLukk, accessibilityViewIsModal: true, children: /* @__PURE__ */ jsx13(View12, { style: { flex: 1, backgroundColor: tema.color.scrim, justifyContent: "flex-end", padding: tema.space.md }, children: /* @__PURE__ */ jsxs11(
|
|
2456
2585
|
View12,
|
|
2457
2586
|
{
|
|
@@ -2675,17 +2804,17 @@ function InnspelProgram({
|
|
|
2675
2804
|
}) {
|
|
2676
2805
|
const { client } = useInnspel();
|
|
2677
2806
|
const tema = useTema();
|
|
2678
|
-
const [mine, setMine] =
|
|
2679
|
-
const [deltakelse, setDeltakelse] =
|
|
2680
|
-
const [viserAksept, setViserAksept] =
|
|
2681
|
-
const [viserGaaUt, setViserGaaUt] =
|
|
2682
|
-
const [avvist, setAvvist] =
|
|
2683
|
-
const [sender, setSender] =
|
|
2684
|
-
const [feil, setFeil] =
|
|
2685
|
-
const [dialog, setDialog] =
|
|
2686
|
-
const [svarFeil, setSvarFeil] =
|
|
2687
|
-
const [lagtBort, setLagtBort] =
|
|
2688
|
-
const [meldFeilFor, setMeldFeilFor] =
|
|
2807
|
+
const [mine, setMine] = useState7();
|
|
2808
|
+
const [deltakelse, setDeltakelse] = useState7();
|
|
2809
|
+
const [viserAksept, setViserAksept] = useState7(false);
|
|
2810
|
+
const [viserGaaUt, setViserGaaUt] = useState7(false);
|
|
2811
|
+
const [avvist, setAvvist] = useState7(false);
|
|
2812
|
+
const [sender, setSender] = useState7(false);
|
|
2813
|
+
const [feil, setFeil] = useState7();
|
|
2814
|
+
const [dialog, setDialog] = useState7();
|
|
2815
|
+
const [svarFeil, setSvarFeil] = useState7();
|
|
2816
|
+
const [lagtBort, setLagtBort] = useState7(/* @__PURE__ */ new Set());
|
|
2817
|
+
const [meldFeilFor, setMeldFeilFor] = useState7();
|
|
2689
2818
|
const leggBort = useCallback4((id) => setLagtBort((s) => /* @__PURE__ */ new Set([...s, id])), []);
|
|
2690
2819
|
const lagreSvar = useCallback4(
|
|
2691
2820
|
async (outcome, text) => {
|
|
@@ -2710,7 +2839,7 @@ function InnspelProgram({
|
|
|
2710
2839
|
},
|
|
2711
2840
|
[client, deltakelse, dialog, onMeldFeil]
|
|
2712
2841
|
);
|
|
2713
|
-
|
|
2842
|
+
useEffect4(() => {
|
|
2714
2843
|
if (client.isAnonymous) return;
|
|
2715
2844
|
let levende = true;
|
|
2716
2845
|
void client.programs.list().then((svar) => {
|