@innspel/react-native 0.9.1 → 0.9.2
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 +81 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +99 -29
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -73,6 +73,18 @@ innsenderen får se før hun skriver.
|
|
|
73
73
|
Utenfor React — en navigasjonshandler, en krasjlytter — bruker du klienten
|
|
74
74
|
direkte: `innspel.openFeedback({ screen: 'Dørlista' })`.
|
|
75
75
|
|
|
76
|
+
Lukking — X, eller Android-tilbake på første steg — beholder det innsenderen har
|
|
77
|
+
skrevet til widgeten åpnes igjen; bare en fullført innsending nullstiller. Åpner du med
|
|
78
|
+
`track` mens det står et utkast, står hun der hun var. `view: 'mine'` legges over
|
|
79
|
+
utkastet, og «Tilbake» i lista lukker.
|
|
80
|
+
|
|
81
|
+
**Legg provideren rundt appen, ikke inni en `ScrollView`.** Arket er en `Modal`, men
|
|
82
|
+
React Natives trykkhåndtering går gjennom React-treet: en `ScrollView` over provideren
|
|
83
|
+
med `keyboardShouldPersistTaps` på standardverdien tar første trykk mens tastaturet er
|
|
84
|
+
oppe, og bruker det til å lukke tastaturet. Send teller det trykket likevel; de andre
|
|
85
|
+
knappene i arket gjør ikke. Må provideren stå inni en scrollflate, gi den
|
|
86
|
+
`keyboardShouldPersistTaps="handled"`.
|
|
87
|
+
|
|
76
88
|
## Token-endepunktet
|
|
77
89
|
|
|
78
90
|
Det eneste du må bygge selv. Se
|
package/dist/index.cjs
CHANGED
|
@@ -572,10 +572,12 @@ function Btn({
|
|
|
572
572
|
accessibilityLabel,
|
|
573
573
|
grow,
|
|
574
574
|
testID,
|
|
575
|
-
busy
|
|
575
|
+
busy,
|
|
576
|
+
trykkForbiForelder
|
|
576
577
|
}) {
|
|
577
578
|
const tema = useTema();
|
|
578
579
|
const c = tema.color;
|
|
580
|
+
const forbi = useTrykkForbiForelder(onPress, !!disabled, tema.touch / 2);
|
|
579
581
|
const bakgrunn = variant === "primary" ? c.actionPrimary : variant === "secondary" ? c.surfaceRaised : "transparent";
|
|
580
582
|
const tekstfarge = variant === "primary" ? c.onActionPrimary : variant === "danger" ? c.danger : c.actionSecondaryText;
|
|
581
583
|
const kant = variant === "ghost" ? "transparent" : variant === "primary" ? c.actionPrimary : c.actionSecondaryBorder;
|
|
@@ -589,6 +591,7 @@ function Btn({
|
|
|
589
591
|
accessibilityState: { disabled: !!disabled, busy: !!busy },
|
|
590
592
|
disabled,
|
|
591
593
|
onPress,
|
|
594
|
+
...trykkForbiForelder ? forbi : {},
|
|
592
595
|
style: {
|
|
593
596
|
minHeight: tema.touch,
|
|
594
597
|
borderRadius: tema.radius.md,
|
|
@@ -621,6 +624,37 @@ function Btn({
|
|
|
621
624
|
hint ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Hint, { children: hint }) : null
|
|
622
625
|
] });
|
|
623
626
|
}
|
|
627
|
+
function useTrykkForbiForelder(onPress, laast, slingring) {
|
|
628
|
+
const start = (0, import_react4.useRef)(null);
|
|
629
|
+
const fikkResponder = (0, import_react4.useRef)(false);
|
|
630
|
+
const siste = (0, import_react4.useRef)({ onPress, laast });
|
|
631
|
+
siste.current = { onPress, laast };
|
|
632
|
+
return (0, import_react4.useMemo)(
|
|
633
|
+
() => ({
|
|
634
|
+
onPressIn: () => {
|
|
635
|
+
fikkResponder.current = true;
|
|
636
|
+
},
|
|
637
|
+
onTouchStart: (e) => {
|
|
638
|
+
start.current = { x: e.nativeEvent.pageX, y: e.nativeEvent.pageY };
|
|
639
|
+
},
|
|
640
|
+
onTouchEnd: (e) => {
|
|
641
|
+
const s = start.current;
|
|
642
|
+
start.current = null;
|
|
643
|
+
const innenfor = s !== null && Math.abs(e.nativeEvent.pageX - s.x) <= slingring && Math.abs(e.nativeEvent.pageY - s.y) <= slingring;
|
|
644
|
+
setTimeout(() => {
|
|
645
|
+
const tatt = fikkResponder.current;
|
|
646
|
+
fikkResponder.current = false;
|
|
647
|
+
if (!tatt && innenfor && !siste.current.laast) siste.current.onPress?.();
|
|
648
|
+
}, 0);
|
|
649
|
+
},
|
|
650
|
+
onTouchCancel: () => {
|
|
651
|
+
start.current = null;
|
|
652
|
+
fikkResponder.current = false;
|
|
653
|
+
}
|
|
654
|
+
}),
|
|
655
|
+
[slingring]
|
|
656
|
+
);
|
|
657
|
+
}
|
|
624
658
|
function H({ children, sub }) {
|
|
625
659
|
const tema = useTema();
|
|
626
660
|
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_react_native2.View, { style: { gap: tema.space.xs }, children: [
|
|
@@ -1255,7 +1289,8 @@ function Felt({
|
|
|
1255
1289
|
disabled: forKort || sender,
|
|
1256
1290
|
busy: sender,
|
|
1257
1291
|
hint: forKort ? tekst.forKort(minTextLength) : harVedlegg ? tekst.sendHintMedBilde : void 0,
|
|
1258
|
-
onPress: onSend
|
|
1292
|
+
onPress: onSend,
|
|
1293
|
+
trykkForbiForelder: true
|
|
1259
1294
|
}
|
|
1260
1295
|
) })
|
|
1261
1296
|
] });
|
|
@@ -1871,9 +1906,23 @@ function Widget({
|
|
|
1871
1906
|
setVedlegg(void 0);
|
|
1872
1907
|
setKomponerer(false);
|
|
1873
1908
|
}, []);
|
|
1909
|
+
const [mineDirekte, setMineDirekte] = (0, import_react11.useState)(false);
|
|
1910
|
+
const [stegForMine, setStegForMine] = (0, import_react11.useState)("valg");
|
|
1911
|
+
const stegRef = (0, import_react11.useRef)(steg);
|
|
1912
|
+
stegRef.current = steg;
|
|
1913
|
+
const harUtkast = verdi.trim().length > 0 || vedlegg !== void 0;
|
|
1874
1914
|
const lukk = (0, import_react11.useCallback)(() => {
|
|
1915
|
+
onLukk();
|
|
1916
|
+
if (stegRef.current === "mine" && mineDirekte) {
|
|
1917
|
+
setSteg(stegForMine);
|
|
1918
|
+
setMineDirekte(false);
|
|
1919
|
+
}
|
|
1920
|
+
}, [onLukk, mineDirekte, stegForMine]);
|
|
1921
|
+
const lukkOgNullstill = (0, import_react11.useCallback)(() => {
|
|
1875
1922
|
onLukk();
|
|
1876
1923
|
nullstill();
|
|
1924
|
+
setMineDirekte(false);
|
|
1925
|
+
setStegForMine("valg");
|
|
1877
1926
|
}, [onLukk, nullstill]);
|
|
1878
1927
|
(0, import_react11.useEffect)(() => {
|
|
1879
1928
|
if (!synlig) return;
|
|
@@ -1883,8 +1932,8 @@ function Widget({
|
|
|
1883
1932
|
if (!client.isAnonymous) {
|
|
1884
1933
|
void client.subjects.submissions().then(setMine).catch(() => void 0);
|
|
1885
1934
|
}
|
|
1886
|
-
if (apneOpsjoner?.view === "mine" && !client.isAnonymous) void visMine();
|
|
1887
|
-
else if (apneOpsjoner?.track) velgSpor(apneOpsjoner.track);
|
|
1935
|
+
if (apneOpsjoner?.view === "mine" && !client.isAnonymous) void visMine(true);
|
|
1936
|
+
else if (apneOpsjoner?.track && !harUtkast) void velgSpor(apneOpsjoner.track);
|
|
1888
1937
|
}, [synlig]);
|
|
1889
1938
|
const hentKort = (0, import_react11.useCallback)(async () => {
|
|
1890
1939
|
setLasterKort(true);
|
|
@@ -1982,6 +2031,11 @@ function Widget({
|
|
|
1982
2031
|
}, []);
|
|
1983
2032
|
const gaaTilbake = (0, import_react11.useCallback)(() => {
|
|
1984
2033
|
setFeil(void 0);
|
|
2034
|
+
if (steg === "mine") {
|
|
2035
|
+
if (mineDirekte) lukk();
|
|
2036
|
+
else setSteg("valg");
|
|
2037
|
+
return;
|
|
2038
|
+
}
|
|
1985
2039
|
if (steg === "skjermbilde") {
|
|
1986
2040
|
setBilde(void 0);
|
|
1987
2041
|
setAutomasker([]);
|
|
@@ -1993,7 +2047,12 @@ function Widget({
|
|
|
1993
2047
|
return;
|
|
1994
2048
|
}
|
|
1995
2049
|
setSteg("valg");
|
|
1996
|
-
}, [steg, spor, kort.length]);
|
|
2050
|
+
}, [steg, spor, kort.length, mineDirekte, lukk]);
|
|
2051
|
+
const androidTilbake = (0, import_react11.useCallback)(() => {
|
|
2052
|
+
if (steg === "valg") lukk();
|
|
2053
|
+
else if (steg === "kvittering") lukkOgNullstill();
|
|
2054
|
+
else gaaTilbake();
|
|
2055
|
+
}, [steg, lukk, lukkOgNullstill, gaaTilbake]);
|
|
1997
2056
|
const send = (0, import_react11.useCallback)(async () => {
|
|
1998
2057
|
setSender(true);
|
|
1999
2058
|
setFeil(void 0);
|
|
@@ -2040,7 +2099,13 @@ function Widget({
|
|
|
2040
2099
|
},
|
|
2041
2100
|
[client]
|
|
2042
2101
|
);
|
|
2043
|
-
const visMine = (0, import_react11.useCallback)(async () => {
|
|
2102
|
+
const visMine = (0, import_react11.useCallback)(async (direkte = false) => {
|
|
2103
|
+
if (direkte) {
|
|
2104
|
+
if (stegRef.current !== "mine") setStegForMine(stegRef.current);
|
|
2105
|
+
} else {
|
|
2106
|
+
setStegForMine("valg");
|
|
2107
|
+
}
|
|
2108
|
+
setMineDirekte(direkte);
|
|
2044
2109
|
setSteg("mine");
|
|
2045
2110
|
setLasterMine(true);
|
|
2046
2111
|
try {
|
|
@@ -2051,13 +2116,18 @@ function Widget({
|
|
|
2051
2116
|
setLasterMine(false);
|
|
2052
2117
|
}
|
|
2053
2118
|
}, [client]);
|
|
2119
|
+
const nyttFraMine = (0, import_react11.useCallback)(() => {
|
|
2120
|
+
setMineDirekte(false);
|
|
2121
|
+
if (harUtkast) setSteg(stegForMine);
|
|
2122
|
+
else nullstill();
|
|
2123
|
+
}, [harUtkast, stegForMine, nullstill]);
|
|
2054
2124
|
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
2055
2125
|
import_react_native9.Modal,
|
|
2056
2126
|
{
|
|
2057
2127
|
visible: synlig,
|
|
2058
2128
|
transparent: true,
|
|
2059
2129
|
animationType: "slide",
|
|
2060
|
-
onRequestClose:
|
|
2130
|
+
onRequestClose: androidTilbake,
|
|
2061
2131
|
accessibilityViewIsModal: true,
|
|
2062
2132
|
children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
2063
2133
|
import_react_native9.KeyboardAvoidingView,
|
|
@@ -2095,7 +2165,7 @@ function Widget({
|
|
|
2095
2165
|
testID: "lukk",
|
|
2096
2166
|
accessibilityRole: "button",
|
|
2097
2167
|
accessibilityLabel: tekst.lukk,
|
|
2098
|
-
onPress: lukk,
|
|
2168
|
+
onPress: steg === "kvittering" ? lukkOgNullstill : lukk,
|
|
2099
2169
|
style: { minWidth: tema.touch, minHeight: tema.touch, alignItems: "center", justifyContent: "center" },
|
|
2100
2170
|
children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Ikon, { navn: "close-outline", farge: tema.color.textSecondary })
|
|
2101
2171
|
}
|
|
@@ -2113,7 +2183,7 @@ function Widget({
|
|
|
2113
2183
|
ikon: "list-outline",
|
|
2114
2184
|
label: mine.length > 0 ? tekst.mineMedAntall(mine.length) : tekst.mineTittel,
|
|
2115
2185
|
accessibilityLabel: mine.length > 0 ? tekst.mineEtikett(mine.length) : tekst.mineTittel,
|
|
2116
|
-
onPress: visMine
|
|
2186
|
+
onPress: () => void visMine()
|
|
2117
2187
|
}
|
|
2118
2188
|
) : null
|
|
2119
2189
|
] }) : null,
|
|
@@ -2177,7 +2247,7 @@ function Widget({
|
|
|
2177
2247
|
...kvittering.nr ? { saksnummer: kvittering.nr } : {},
|
|
2178
2248
|
...kvittering.vedlegg ? { vedlegg: kvittering.vedlegg } : {},
|
|
2179
2249
|
...kvittering.frist ? { frist: kvittering.frist } : {},
|
|
2180
|
-
onLukk:
|
|
2250
|
+
onLukk: lukkOgNullstill
|
|
2181
2251
|
}
|
|
2182
2252
|
) : null,
|
|
2183
2253
|
steg === "mine" ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
@@ -2186,7 +2256,7 @@ function Widget({
|
|
|
2186
2256
|
rader: mine,
|
|
2187
2257
|
laster: lasterMine,
|
|
2188
2258
|
...tenantName ? { tenantName } : {},
|
|
2189
|
-
onNytt:
|
|
2259
|
+
onNytt: nyttFraMine
|
|
2190
2260
|
}
|
|
2191
2261
|
) : null
|
|
2192
2262
|
]
|