fix(mobile): complete block G metadata and accessibility

This commit is contained in:
saravanakumardb1 2026-03-31 00:23:57 -07:00
parent a9172e4230
commit e4683ad695
10 changed files with 50 additions and 28 deletions

View File

@ -28,6 +28,7 @@
"@bytelyst/survey-client": "^0.1.0",
"@bytelyst/telemetry-client": "^0.1.0",
"expo": "~55.0.4",
"expo-constants": "~18.0.13",
"expo-router": "~6.0.4",
"expo-status-bar": "~3.0.9",
"react": "19.2.0",

View File

@ -3,11 +3,11 @@ import { Tabs } from 'expo-router';
export default function TabLayout() {
return (
<Tabs screenOptions={{ headerShown: false }}>
<Tabs.Screen name="index" options={{ title: 'Home' }} />
<Tabs.Screen name="search" options={{ title: 'Search' }} />
<Tabs.Screen name="capture" options={{ title: 'Capture' }} />
<Tabs.Screen name="inbox" options={{ title: 'Inbox' }} />
<Tabs.Screen name="settings" options={{ title: 'Settings' }} />
<Tabs.Screen name="index" options={{ title: 'Home', tabBarAccessibilityLabel: 'Home tab' }} />
<Tabs.Screen name="search" options={{ title: 'Search', tabBarAccessibilityLabel: 'Search tab' }} />
<Tabs.Screen name="capture" options={{ title: 'Capture', tabBarAccessibilityLabel: 'Capture tab' }} />
<Tabs.Screen name="inbox" options={{ title: 'Inbox', tabBarAccessibilityLabel: 'Inbox tab' }} />
<Tabs.Screen name="settings" options={{ title: 'Settings', tabBarAccessibilityLabel: 'Settings tab' }} />
</Tabs>
);
}

View File

@ -64,6 +64,7 @@ export default function CaptureScreen() {
textAlignVertical="top"
/>
<Pressable
accessibilityLabel={activeWorkspaceId ? 'Save draft note' : 'Select workspace before saving'}
onPress={async () => {
const didSave = await saveDraft(activeWorkspaceId, title, body);
setSaved(didSave);

View File

@ -40,6 +40,7 @@ export default function InboxScreen() {
<Text style={styles.status}>Status: {item.status}</Text>
<View style={styles.actionRow}>
<Pressable
accessibilityLabel={`Approve ${item.title}`}
style={[
styles.approveButton,
pendingApprovalId === item.id || item.status !== 'pending' ? styles.buttonDisabled : null,
@ -61,6 +62,7 @@ export default function InboxScreen() {
</Text>
</Pressable>
<Pressable
accessibilityLabel={`Reject ${item.title}`}
style={[
styles.rejectButton,
pendingApprovalId === item.id || item.status !== 'pending' ? styles.buttonDisabled : null,

View File

@ -63,6 +63,7 @@ export default function AuthScreen() {
/>
{errorMessage ? <Text style={styles.errorText}>{errorMessage}</Text> : null}
<Pressable
accessibilityLabel={mode === 'signin' ? 'Sign in' : 'Register account'}
onPress={async () => {
const didAuthenticate =
mode === 'signin'
@ -87,6 +88,7 @@ export default function AuthScreen() {
</Text>
</Pressable>
<Pressable
accessibilityLabel={mode === 'signin' ? 'Switch to register mode' : 'Switch to sign in mode'}
onPress={() => {
setErrorMessage(null);
setMode((current) => (current === 'signin' ? 'register' : 'signin'));

View File

@ -0,0 +1,12 @@
import Constants from 'expo-constants';
import { Platform } from 'react-native';
export const APP_PLATFORM: 'ios' | 'android' = Platform.OS === 'android' ? 'android' : 'ios';
export const APP_VERSION = Constants.expoConfig?.version ?? '0.1.0';
export const BUILD_NUMBER =
Constants.expoConfig?.ios?.buildNumber ??
(Constants.expoConfig?.android?.versionCode ? String(Constants.expoConfig.android.versionCode) : '1');
export const OS_VERSION = typeof Platform.Version === 'string' ? Platform.Version : String(Platform.Version ?? 'unknown');

View File

@ -1,6 +1,7 @@
import { createBroadcastClient, type BroadcastClient } from '@bytelyst/broadcast-client';
import { API_CONFIG, PRODUCT_ID } from '../api/config';
import { getAuthClient } from '../api/auth';
import { APP_PLATFORM, APP_VERSION, OS_VERSION } from './app-metadata';
let broadcastClient: BroadcastClient | null = null;
@ -10,9 +11,9 @@ export function getBroadcastClient(): BroadcastClient {
baseUrl: API_CONFIG.platformBaseUrl,
productId: PRODUCT_ID,
getAuthToken: () => getAuthClient().getAccessToken() ?? '',
platform: 'ios',
appVersion: '0.1.0',
osVersion: 'unknown',
platform: APP_PLATFORM,
appVersion: APP_VERSION,
osVersion: OS_VERSION,
});
}

View File

@ -5,6 +5,7 @@ import { createBlobClient } from '@bytelyst/blob-client';
import { DiagnosticsClient } from '@bytelyst/diagnostics-client';
import { API_CONFIG, PRODUCT_ID } from '../api/config';
import { mmkvStorage } from '../store/mmkv-storage';
import { APP_VERSION, BUILD_NUMBER, OS_VERSION } from './app-metadata';
function getAccessToken(): string | null {
return mmkvStorage.getItem(`${PRODUCT_ID}_access_token`);
@ -17,10 +18,10 @@ export const telemetryClient = createTelemetryClient({
platform: 'mobile',
channel: 'notelett_mobile',
transport: 'fetch',
appVersion: '0.1.0',
buildNumber: '1',
appVersion: APP_VERSION,
buildNumber: BUILD_NUMBER,
releaseChannel: 'dev',
osFamily: 'other',
osFamily: OS_VERSION,
});
export const featureFlagClient = createFeatureFlagClient({
@ -54,9 +55,9 @@ export function getDiagnosticsClient() {
platform: 'mobile',
channel: 'notelett_mobile',
anonymousInstallId: mmkvStorage.getItem(`${PRODUCT_ID}_install_id`) ?? 'unknown',
osFamily: 'other',
appVersion: '0.1.0',
buildNumber: '1',
osFamily: OS_VERSION,
appVersion: APP_VERSION,
buildNumber: BUILD_NUMBER,
releaseChannel: 'dev',
getAuthToken: () => getAccessToken() ?? '',
});

View File

@ -1,6 +1,7 @@
import { createSurveyClient, type SurveyClient } from '@bytelyst/survey-client';
import { API_CONFIG, PRODUCT_ID } from '../api/config';
import { getAuthClient } from '../api/auth';
import { APP_PLATFORM, APP_VERSION, OS_VERSION } from './app-metadata';
let surveyClient: SurveyClient | null = null;
@ -10,9 +11,9 @@ export function getSurveyClient(): SurveyClient {
baseUrl: API_CONFIG.platformBaseUrl,
productId: PRODUCT_ID,
getAuthToken: () => getAuthClient().getAccessToken() ?? '',
platform: 'ios',
appVersion: '0.1.0',
osVersion: 'unknown',
platform: APP_PLATFORM,
appVersion: APP_VERSION,
osVersion: OS_VERSION,
});
}

23
pnpm-lock.yaml generated
View File

@ -126,9 +126,12 @@ importers:
expo:
specifier: ~55.0.4
version: 55.0.8(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(expo-router@6.0.23)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
expo-constants:
specifier: ~18.0.13
version: 18.0.13(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))
expo-router:
specifier: ~6.0.4
version: 6.0.23(fbac16d1b6e18492193348f9e089f0a0)
version: 6.0.23(8f4d8b3ea945913a36065f8394178341)
expo-status-bar:
specifier: ~3.0.9
version: 3.0.9(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)
@ -7335,7 +7338,7 @@ snapshots:
'@exodus/bytes@1.15.0': {}
'@expo/cli@55.0.18(@expo/dom-webview@55.0.3)(expo-constants@55.0.9)(expo-font@55.0.4(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(expo-router@6.0.23)(expo@55.0.8)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
'@expo/cli@55.0.18(@expo/dom-webview@55.0.3)(expo-constants@55.0.9(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3))(expo-font@55.0.4(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(expo-router@6.0.23)(expo@55.0.8)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
dependencies:
'@expo/code-signing-certificates': 0.0.6
'@expo/config': 55.0.10(typescript@5.9.3)
@ -7352,7 +7355,7 @@ snapshots:
'@expo/plist': 0.5.2
'@expo/prebuild-config': 55.0.10(expo@55.0.8)(typescript@5.9.3)
'@expo/require-utils': 55.0.3(typescript@5.9.3)
'@expo/router-server': 55.0.11(expo-constants@55.0.9)(expo-font@55.0.4(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(expo-router@6.0.23)(expo-server@55.0.6)(expo@55.0.8)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@expo/router-server': 55.0.11(expo-constants@55.0.9(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3))(expo-font@55.0.4(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(expo-router@6.0.23)(expo-server@55.0.6)(expo@55.0.8)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@expo/schema-utils': 55.0.2
'@expo/spawn-async': 1.7.2
'@expo/ws-tunnel': 1.0.6
@ -7396,7 +7399,7 @@ snapshots:
ws: 8.20.0
zod: 3.25.76
optionalDependencies:
expo-router: 6.0.23(fbac16d1b6e18492193348f9e089f0a0)
expo-router: 6.0.23(8f4d8b3ea945913a36065f8394178341)
react-native: 0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0)
transitivePeerDependencies:
- '@expo/dom-webview'
@ -7679,7 +7682,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@expo/router-server@55.0.11(expo-constants@55.0.9)(expo-font@55.0.4(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(expo-router@6.0.23)(expo-server@55.0.6)(expo@55.0.8)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
'@expo/router-server@55.0.11(expo-constants@55.0.9(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3))(expo-font@55.0.4(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(expo-router@6.0.23)(expo-server@55.0.6)(expo@55.0.8)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
debug: 4.4.3
expo: 55.0.8(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(expo-router@6.0.23)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
@ -7688,7 +7691,7 @@ snapshots:
expo-server: 55.0.6
react: 19.2.0
optionalDependencies:
expo-router: 6.0.23(fbac16d1b6e18492193348f9e089f0a0)
expo-router: 6.0.23(8f4d8b3ea945913a36065f8394178341)
react-dom: 19.2.0(react@19.2.0)
transitivePeerDependencies:
- supports-color
@ -8409,9 +8412,7 @@ snapshots:
metro-runtime: 0.83.5
transitivePeerDependencies:
- '@babel/core'
- bufferutil
- supports-color
- utf-8-validate
'@react-native/normalize-colors@0.83.2': {}
@ -10365,7 +10366,7 @@ snapshots:
react: 19.2.0
react-native: 0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0)
expo-router@6.0.23(fbac16d1b6e18492193348f9e089f0a0):
expo-router@6.0.23(8f4d8b3ea945913a36065f8394178341):
dependencies:
'@expo/schema-utils': 0.1.8
'@radix-ui/react-slot': 1.2.0(@types/react@19.2.14)(react@19.2.0)
@ -10377,7 +10378,7 @@ snapshots:
debug: 4.4.3
escape-string-regexp: 4.0.0
expo: 55.0.8(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(expo-router@6.0.23)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
expo-constants: 55.0.9(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3)
expo-constants: 18.0.13(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))
expo-linking: 8.0.11(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)
expo-server: 1.0.5
fast-deep-equal: 3.1.3
@ -10419,7 +10420,7 @@ snapshots:
expo@55.0.8(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(expo-router@6.0.23)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3):
dependencies:
'@babel/runtime': 7.29.2
'@expo/cli': 55.0.18(@expo/dom-webview@55.0.3)(expo-constants@55.0.9)(expo-font@55.0.4(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(expo-router@6.0.23)(expo@55.0.8)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
'@expo/cli': 55.0.18(@expo/dom-webview@55.0.3)(expo-constants@55.0.9(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3))(expo-font@55.0.4(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(expo-router@6.0.23)(expo@55.0.8)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
'@expo/config': 55.0.10(typescript@5.9.3)
'@expo/config-plugins': 55.0.7
'@expo/devtools': 55.0.2(react-native@0.83.2(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0))(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)