@forthtilliath/react-native-kit 0.20.0 → 0.21.0

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 CHANGED
@@ -581,6 +581,24 @@ import {
581
581
  />;
582
582
  ```
583
583
 
584
+ `checkForUpdate` receives `{ includePrereleases }` (`false` by default). Pass `onIncludePrereleasesChange` to show a "Recevoir les versions de test" switch: the app stores the choice, hands it back as `includePrereleases`, and the screen checks again on each change (an older check that answers late is ignored). Hand the value on to `fetchLatestRelease({ …, includePrereleases, requireVerifiedApk: true })`, to `fetchReleaseHistory({ …, includePrereleases })` (the history is fetched again when that function changes), and to the launch check (`UpdateNotifier`) too. Style it with `styles.prereleaseSwitch` / `styles.prereleaseSwitchColors` (`SwitchRow`'s slots).
585
+
586
+ ```tsx
587
+ <UpdateSettingsScreen
588
+ checkForUpdate={({ includePrereleases }) =>
589
+ fetchLatestRelease({
590
+ owner,
591
+ repo,
592
+ includePrereleases,
593
+ requireVerifiedApk: true,
594
+ })
595
+ }
596
+ includePrereleases={includePrereleases}
597
+ onIncludePrereleasesChange={setIncludePrereleases}
598
+ {...otherProps}
599
+ />
600
+ ```
601
+
584
602
  #### `<BackupSettingsScreen onExport onImport reminder? />`
585
603
 
586
604
  Export/import buttons plus an optional reminder-notification switch. Deliberately just a shell: what actually gets exported/imported is entirely app-specific (your own database tables), so `onExport`/`onImport` are required — this package can't have a sensible default for "how do I export my schema". Import asks for confirmation first (via `confirmDestructive`, from `utils/helpers/`) since it replaces existing data; `onImport` itself doesn't need to.
@@ -3,8 +3,14 @@ import type { UpdateSettingsScreenHistoryEntry, UpdateSettingsScreenLabels, Upda
3
3
  export type { UpdateSettingsScreenHistoryEntry, UpdateSettingsScreenLabels, UpdateSettingsScreenRelease, UpdateSettingsScreenStyles, } from "./UpdateSettingsScreen.styles.js";
4
4
  export interface UpdateSettingsScreenProps {
5
5
  currentVersion: string;
6
- /** Fetches the latest available release, or `null` if there is none. */
7
- checkForUpdate: () => Promise<UpdateSettingsScreenRelease | null>;
6
+ /**
7
+ * Fetches the latest available release, or `null` if there is none.
8
+ * Receives the current `includePrereleases`, e.g. to pass on to
9
+ * `fetchLatestRelease`.
10
+ */
11
+ checkForUpdate: (options: {
12
+ includePrereleases: boolean;
13
+ }) => Promise<UpdateSettingsScreenRelease | null>;
8
14
  /** Positive when `a` is newer than `b`, e.g. semver comparison. */
9
15
  compareVersions: (a: string, b: string) => number;
10
16
  /**
@@ -14,6 +20,13 @@ export interface UpdateSettingsScreenProps {
14
20
  downloadAndInstallApk: (apkUrl: string, onProgress?: (fraction: number) => void, apkSha256?: string) => Promise<void>;
15
21
  /** Omit to not show a version history section at all. */
16
22
  fetchReleaseHistory?: () => Promise<UpdateSettingsScreenHistoryEntry[]>;
23
+ /** Whether test versions (alpha, beta…) are offered. Defaults to `false`. */
24
+ includePrereleases?: boolean;
25
+ /**
26
+ * Shows a "test versions" switch when passed; the app stores the choice and
27
+ * hands it back as `includePrereleases`. Every change triggers a new check.
28
+ */
29
+ onIncludePrereleasesChange?: (value: boolean) => void;
17
30
  /**
18
31
  * Locale for formatting each history entry's date. Defaults to the
19
32
  * locale's (`"fr-FR"`, or `"en-US"` with `locale="en"`).
@@ -27,5 +40,5 @@ export interface UpdateSettingsScreenProps {
27
40
  locale?: KitLocale;
28
41
  styles?: UpdateSettingsScreenStyles;
29
42
  }
30
- export declare function UpdateSettingsScreen({ currentVersion, checkForUpdate, compareVersions, downloadAndInstallApk, fetchReleaseHistory, dateLocale: customDateLocale, labels, locale, styles, }: UpdateSettingsScreenProps): import("react").JSX.Element;
43
+ export declare function UpdateSettingsScreen({ currentVersion, checkForUpdate, compareVersions, downloadAndInstallApk, fetchReleaseHistory, includePrereleases, onIncludePrereleasesChange, dateLocale: customDateLocale, labels, locale, styles, }: UpdateSettingsScreenProps): import("react").JSX.Element;
31
44
  //# sourceMappingURL=UpdateSettingsScreen.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UpdateSettingsScreen.d.ts","sourceRoot":"","sources":["../../../src/components/settings/UpdateSettingsScreen.tsx"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,SAAS,EAEf,MAAM,sBAAsB,CAAC;AAG9B,OAAO,KAAK,EACV,gCAAgC,EAChC,0BAA0B,EAC1B,2BAA2B,EAC3B,0BAA0B,EAC3B,MAAM,kCAAkC,CAAC;AAI1C,YAAY,EACV,gCAAgC,EAChC,0BAA0B,EAC1B,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,kCAAkC,CAAC;AAU1C,MAAM,WAAW,yBAAyB;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,cAAc,EAAE,MAAM,OAAO,CAAC,2BAA2B,GAAG,IAAI,CAAC,CAAC;IAClE,mEAAmE;IACnE,eAAe,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAClD;;;OAGG;IACH,qBAAqB,EAAE,CACrB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,EACvC,SAAS,CAAC,EAAE,MAAM,KACf,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,yDAAyD;IACzD,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,gCAAgC,EAAE,CAAC,CAAC;IACxE;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,0BAA0B,CAAC;IACpC;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,0BAA0B,CAAC;CACrC;AAQD,wBAAgB,oBAAoB,CAAC,EACnC,cAAc,EACd,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EACN,MAAM,EACN,MAAM,GACP,EAAE,yBAAyB,+BA8J3B"}
1
+ {"version":3,"file":"UpdateSettingsScreen.d.ts","sourceRoot":"","sources":["../../../src/components/settings/UpdateSettingsScreen.tsx"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,SAAS,EAEf,MAAM,sBAAsB,CAAC;AAI9B,OAAO,KAAK,EACV,gCAAgC,EAChC,0BAA0B,EAC1B,2BAA2B,EAC3B,0BAA0B,EAC3B,MAAM,kCAAkC,CAAC;AAI1C,YAAY,EACV,gCAAgC,EAChC,0BAA0B,EAC1B,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,kCAAkC,CAAC;AAU1C,MAAM,WAAW,yBAAyB;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,cAAc,EAAE,CAAC,OAAO,EAAE;QACxB,kBAAkB,EAAE,OAAO,CAAC;KAC7B,KAAK,OAAO,CAAC,2BAA2B,GAAG,IAAI,CAAC,CAAC;IAClD,mEAAmE;IACnE,eAAe,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAClD;;;OAGG;IACH,qBAAqB,EAAE,CACrB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,EACvC,SAAS,CAAC,EAAE,MAAM,KACf,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,yDAAyD;IACzD,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,gCAAgC,EAAE,CAAC,CAAC;IACxE,6EAA6E;IAC7E,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;OAGG;IACH,0BAA0B,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACtD;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,0BAA0B,CAAC;IACpC;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,0BAA0B,CAAC;CACrC;AAQD,wBAAgB,oBAAoB,CAAC,EACnC,cAAc,EACd,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,kBAA0B,EAC1B,0BAA0B,EAC1B,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EACN,MAAM,EACN,MAAM,GACP,EAAE,yBAAyB,+BAsL3B"}
@@ -1,18 +1,19 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useCallback, useEffect, useMemo, useState } from "react";
2
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
3
3
  import { ActivityIndicator, Pressable, Text, View } from "react-native";
4
4
  import { ChangelogNotes } from "@forthtilliath/expo-release-updates-ui";
5
5
  import { KIT_LOCALE_TAGS, useKitLocale, } from "../../i18n/locale.js";
6
6
  import { mergeSlotStyles } from "../../utils/helpers/mergeSlotStyles.js";
7
+ import { SwitchRow } from "./SwitchRow.js";
7
8
  import { defaultLabels, defaultStyles } from "./UpdateSettingsScreen.styles.js";
8
9
  import { UpdateSettingsScreenHistory } from "./UpdateSettingsScreenHistory.js";
9
10
  // Full "check for update" screen: installed version, a manual check button,
10
11
  // the available-update box (with changelog + install button) or an
11
12
  // up-to-date/error message, download progress, and — if
12
13
  // `fetchReleaseHistory` is passed — a list of past releases. Checks
13
- // automatically once on mount (the caller decided to navigate here, no need
14
- // to make them tap "check" again).
15
- export function UpdateSettingsScreen({ currentVersion, checkForUpdate, compareVersions, downloadAndInstallApk, fetchReleaseHistory, dateLocale: customDateLocale, labels, locale, styles, }) {
14
+ // automatically on mount (the caller decided to navigate here, no need to make
15
+ // them tap "check" again) and again whenever `includePrereleases` changes.
16
+ export function UpdateSettingsScreen({ currentVersion, checkForUpdate, compareVersions, downloadAndInstallApk, fetchReleaseHistory, includePrereleases = false, onIncludePrereleasesChange, dateLocale: customDateLocale, labels, locale, styles, }) {
16
17
  const resolvedLocale = useKitLocale(locale);
17
18
  const dateLocale = customDateLocale ?? KIT_LOCALE_TAGS[resolvedLocale];
18
19
  const merged = {
@@ -34,10 +35,16 @@ export function UpdateSettingsScreen({ currentVersion, checkForUpdate, compareVe
34
35
  setReleaseHistory([]);
35
36
  });
36
37
  }, [fetchReleaseHistory]);
38
+ // Only the latest check may update the screen: toggling the switch during a
39
+ // check must not let the older answer land last.
40
+ const latestCheckRef = useRef(0);
37
41
  const handleCheckForUpdate = useCallback(async () => {
42
+ const check = ++latestCheckRef.current;
38
43
  setUpdateState({ status: "checking" });
39
44
  try {
40
- const release = await checkForUpdate();
45
+ const release = await checkForUpdate({ includePrereleases });
46
+ if (check !== latestCheckRef.current)
47
+ return;
41
48
  if (!release || compareVersions(release.version, currentVersion) <= 0) {
42
49
  setUpdateState({ status: "up-to-date" });
43
50
  return;
@@ -45,13 +52,21 @@ export function UpdateSettingsScreen({ currentVersion, checkForUpdate, compareVe
45
52
  setUpdateState({ status: "available", release });
46
53
  }
47
54
  catch {
55
+ if (check !== latestCheckRef.current)
56
+ return;
48
57
  setUpdateState({ status: "error", message: t.checkError });
49
58
  }
50
- }, [checkForUpdate, compareVersions, currentVersion, t.checkError]);
59
+ }, [
60
+ checkForUpdate,
61
+ compareVersions,
62
+ currentVersion,
63
+ includePrereleases,
64
+ t.checkError,
65
+ ]);
51
66
  useEffect(() => {
52
67
  void handleCheckForUpdate();
53
- // eslint-disable-next-line @eslint-react/exhaustive-deps -- runs once on mount by design; handleCheckForUpdate is expected to be stable enough for the screen's lifetime.
54
- }, []);
68
+ // eslint-disable-next-line @eslint-react/exhaustive-deps -- runs on mount and when includePrereleases changes by design; the other inputs are expected to be stable enough for the screen's lifetime.
69
+ }, [includePrereleases]);
55
70
  async function handleInstall({ apkUrl, apkSha256, }) {
56
71
  setUpdateState({ status: "downloading", progress: 0 });
57
72
  try {
@@ -70,7 +85,7 @@ export function UpdateSettingsScreen({ currentVersion, checkForUpdate, compareVe
70
85
  text: merged.helpText,
71
86
  ...merged.notes,
72
87
  }), [merged.helpText, merged.notes, merged.updateAvailableTitle]);
73
- return (_jsxs(View, { style: merged.container, children: [_jsxs(View, { style: merged.infoBox, children: [_jsx(Text, { style: merged.infoLabel, children: t.installedVersionLabel }), _jsx(Text, { style: merged.infoValue, children: currentVersion })] }), updateState.status !== "available" &&
88
+ return (_jsxs(View, { style: merged.container, children: [_jsxs(View, { style: merged.infoBox, children: [_jsx(Text, { style: merged.infoLabel, children: t.installedVersionLabel }), _jsx(Text, { style: merged.infoValue, children: currentVersion })] }), onIncludePrereleasesChange && (_jsx(SwitchRow, { label: t.prereleaseLabel, description: t.prereleaseDescription, value: includePrereleases, onChange: onIncludePrereleasesChange, disabled: updateState.status === "downloading", colors: styles?.prereleaseSwitchColors, styles: styles?.prereleaseSwitch })), updateState.status !== "available" &&
74
89
  updateState.status !== "downloading" && (_jsx(Pressable, { style: [merged.button, isBusy && merged.buttonDisabled], onPress: () => {
75
90
  void handleCheckForUpdate();
76
91
  }, disabled: isBusy, accessibilityRole: "button", accessibilityLabel: t.checkButton, children: updateState.status === "checking" ? (_jsx(ActivityIndicator, { color: activityIndicatorColor })) : (_jsx(Text, { style: merged.buttonText, children: t.checkButton })) })), updateState.status === "up-to-date" && (_jsx(Text, { style: merged.helpText, children: t.upToDate })), updateState.status === "error" && (_jsx(Text, { style: merged.errorText, children: updateState.message })), updateState.status === "available" && (_jsxs(View, { style: merged.updateAvailableBox, children: [_jsx(Text, { style: merged.updateAvailableTitle, children: t.availableTitle(updateState.release.version) }), updateState.release.notes ? (_jsx(ChangelogNotes, { notes: updateState.release.notes, styles: merged.notes })) : null, _jsx(Pressable, { style: merged.button, onPress: () => {
@@ -1,5 +1,6 @@
1
1
  import type { StyleProp, TextStyle, ViewStyle } from "react-native";
2
2
  import type { ChangelogNotesStyles } from "@forthtilliath/expo-release-updates-ui";
3
+ import type { SwitchRowColors, SwitchRowStyles } from "./SwitchRow.js";
3
4
  export interface UpdateSettingsScreenRelease {
4
5
  version: string;
5
6
  notes: string;
@@ -24,6 +25,8 @@ export interface UpdateSettingsScreenLabels {
24
25
  downloadingLabel?: (percent: number) => string;
25
26
  downloadingHint?: string;
26
27
  historyTitle?: string;
28
+ prereleaseLabel?: string;
29
+ prereleaseDescription?: string;
27
30
  }
28
31
  export interface UpdateSettingsScreenStyles {
29
32
  container?: StyleProp<ViewStyle>;
@@ -45,6 +48,9 @@ export interface UpdateSettingsScreenStyles {
45
48
  changelogVersion?: StyleProp<TextStyle>;
46
49
  changelogDate?: StyleProp<TextStyle>;
47
50
  notes?: ChangelogNotesStyles;
51
+ /** The "test versions" switch row, shown with `onIncludePrereleasesChange`. */
52
+ prereleaseSwitch?: SwitchRowStyles;
53
+ prereleaseSwitchColors?: SwitchRowColors;
48
54
  }
49
55
  export declare const defaultLabels: {
50
56
  fr: {
@@ -59,6 +65,8 @@ export declare const defaultLabels: {
59
65
  downloadingLabel: (percent: number) => string;
60
66
  downloadingHint: string;
61
67
  historyTitle: string;
68
+ prereleaseLabel: string;
69
+ prereleaseDescription: string;
62
70
  };
63
71
  en: {
64
72
  installedVersionLabel: string;
@@ -72,7 +80,11 @@ export declare const defaultLabels: {
72
80
  downloadingLabel: (percent: number) => string;
73
81
  downloadingHint: string;
74
82
  historyTitle: string;
83
+ prereleaseLabel: string;
84
+ prereleaseDescription: string;
75
85
  };
76
86
  };
77
- export declare const defaultStyles: Required<Omit<UpdateSettingsScreenStyles, "activityIndicatorColor" | "notes">> & Pick<UpdateSettingsScreenStyles, "activityIndicatorColor" | "notes">;
87
+ type LooseStyleKeys = "activityIndicatorColor" | "notes" | "prereleaseSwitch" | "prereleaseSwitchColors";
88
+ export declare const defaultStyles: Required<Omit<UpdateSettingsScreenStyles, LooseStyleKeys>> & Pick<UpdateSettingsScreenStyles, "activityIndicatorColor" | "notes">;
89
+ export {};
78
90
  //# sourceMappingURL=UpdateSettingsScreen.styles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UpdateSettingsScreen.styles.d.ts","sourceRoot":"","sources":["../../../src/components/settings/UpdateSettingsScreen.styles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UpdateSettingsScreen.styles.d.ts","sourceRoot":"","sources":["../../../src/components/settings/UpdateSettingsScreen.styles.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,8 @@ export const defaultLabels = {
11
11
  downloadingLabel: (percent) => `Téléchargement… ${String(percent)}%`,
12
12
  downloadingHint: "Ton téléphone va ensuite te demander confirmation pour installer la mise à jour.",
13
13
  historyTitle: "Historique des versions",
14
+ prereleaseLabel: "Recevoir les versions de test",
15
+ prereleaseDescription: "Versions alpha et bêta, avant leur sortie : elles peuvent contenir des bugs.",
14
16
  },
15
17
  en: {
16
18
  installedVersionLabel: "Installed version",
@@ -24,6 +26,8 @@ export const defaultLabels = {
24
26
  downloadingLabel: (percent) => `Downloading… ${String(percent)}%`,
25
27
  downloadingHint: "Your phone will then ask you to confirm the install.",
26
28
  historyTitle: "Version history",
29
+ prereleaseLabel: "Get test versions",
30
+ prereleaseDescription: "Alpha and beta versions, before their release: they may contain bugs.",
27
31
  },
28
32
  };
29
33
  export const defaultStyles = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forthtilliath/react-native-kit",
3
- "version": "0.20.0",
3
+ "version": "0.21.0",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "license": "MIT",
@@ -103,14 +103,14 @@
103
103
  "typescript": "^5.9.3",
104
104
  "vitest": "^5.0.5",
105
105
  "@forthtilliath/eslint-config": "0.10.0",
106
- "@forthtilliath/typescript-config": "0.1.1",
107
- "@forthtilliath/expo-release-updates-ui": "^0.5.1"
106
+ "@forthtilliath/expo-release-updates-ui": "^0.5.2",
107
+ "@forthtilliath/typescript-config": "0.1.1"
108
108
  },
109
109
  "size-limit": [
110
110
  {
111
111
  "name": "dist (all modules, brotli)",
112
112
  "path": "dist/**/*.js",
113
- "limit": "47 KB"
113
+ "limit": "48 KB"
114
114
  }
115
115
  ],
116
116
  "scripts": {