From 8de076566190eb5d3663c2376fac5abb4396b910 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Mon, 6 Apr 2026 13:57:24 +0000 Subject: [PATCH] Refactor: extract shift title literals into constants Extracted 'Lavoro' and 'Riposo' string literals into reusable constants `SHIFT_TITLE_WORK` and `SHIFT_TITLE_REST` in `src/constants/shifts.ts` to improve code maintainability and reduce duplication. Updated all occurrences in utility functions, components, and screens. Co-authored-by: TargetMisser <52361977+TargetMisser@users.noreply.github.com> --- package-lock.json | 51 ++++++++++++++++------------------ src/constants/shifts.ts | 2 ++ src/screens/CalendarScreen.tsx | 7 +++-- src/screens/FlightScreen.tsx | 5 ++-- src/screens/HomeScreen.tsx | 25 +++++++++-------- src/screens/ShiftScreen.tsx | 9 +++--- src/utils/autoNotifications.ts | 3 +- src/utils/shiftCalendar.ts | 8 ++++-- src/widgets/ShiftWidget.tsx | 7 +++-- 9 files changed, 62 insertions(+), 55 deletions(-) create mode 100644 src/constants/shifts.ts diff --git a/package-lock.json b/package-lock.json index a3bbe99..9b54474 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "@expo/vector-icons": "^15.0.3", "@react-native-async-storage/async-storage": "2.2.0", - "@react-native-picker/picker": "2.11.1", + "@react-native-picker/picker": "2.11.4", "@types/tesseract.js": "^0.0.2", "expo": "~54.0.0", "expo-blur": "~15.0.8", @@ -23,18 +23,19 @@ "expo-linear-gradient": "~15.0.8", "expo-location": "~19.0.8", "expo-notifications": "~0.32.16", + "expo-secure-store": "~15.0.5", "expo-status-bar": "~3.0.9", "react": "19.1.0", "react-native": "0.81.5", "react-native-android-widget": "^0.20.1", "react-native-calendars": "^1.1314.0", - "react-native-webview": "13.15.0", + "react-native-webview": "13.16.1", "tesseract.js": "^7.0.0" }, "devDependencies": { "@react-native-community/cli": "^20.1.3", "@types/react": "~19.1.10", - "pdfjs-dist": "^5.5.207", + "pdfjs-dist": "^5.6.205", "typescript": "~5.9.2" } }, @@ -80,7 +81,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -1492,7 +1492,6 @@ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", "license": "MIT", - "peer": true, "engines": { "node": ">=6.9.0" } @@ -2431,7 +2430,6 @@ "integrity": "sha512-sLo8cu9JyFNfuuF1C+8NJ4DHE/PEFaXGd4enkcxi/OJjGG8+sOQrdjNQ4i+cVh/2c+ah1mEMwsYjc3z0+/MqSg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@react-native-community/cli-clean": "20.1.3", "@react-native-community/cli-config": "20.1.3", @@ -2996,9 +2994,9 @@ } }, "node_modules/@react-native-picker/picker": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/@react-native-picker/picker/-/picker-2.11.1.tgz", - "integrity": "sha512-ThklnkK4fV3yynnIIRBkxxjxR4IFbdMNJVF6tlLdOJ/zEFUEFUEdXY0KmH0iYzMwY8W4/InWsLiA7AkpAbnexA==", + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@react-native-picker/picker/-/picker-2.11.4.tgz", + "integrity": "sha512-Kf8h1AMnBo54b1fdiVylP2P/iFcZqzpMYcglC28EEFB1DEnOjsNr6Ucqc+3R9e91vHxEDnhZFbYDmAe79P2gjA==", "license": "MIT", "workspaces": [ "example" @@ -3399,7 +3397,6 @@ "integrity": "sha512-Qec1E3mhALmaspIrhWt9jkQMNdw6bReVu64mjvhbhq2NFPftLPVr+l1SZgmw/66WwBNpDh7ao5AT6gF5v41PFA==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.0.2" } @@ -4109,7 +4106,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -5014,7 +5010,6 @@ "resolved": "https://registry.npmjs.org/expo/-/expo-54.0.33.tgz", "integrity": "sha512-3yOEfAKqo+gqHcV8vKcnq0uA5zxlohnhA3fu4G43likN8ct5ZZ3LjAh9wDdKteEkoad3tFPvwxmXW711S5OHUw==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.20.0", "@expo/cli": "54.0.23", @@ -5130,7 +5125,6 @@ "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-14.0.11.tgz", "integrity": "sha512-ga0q61ny4s/kr4k8JX9hVH69exVSIfcIc19+qZ7gt71Mqtm7xy2c6kwsPTCyhBW2Ro5yXTT8EaZOpuRi35rHbg==", "license": "MIT", - "peer": true, "dependencies": { "fontfaceobserver": "^2.1.0" }, @@ -5239,6 +5233,15 @@ "react-native": "*" } }, + "node_modules/expo-secure-store": { + "version": "15.0.8", + "resolved": "https://registry.npmjs.org/expo-secure-store/-/expo-secure-store-15.0.8.tgz", + "integrity": "sha512-lHnzvRajBu4u+P99+0GEMijQMFCOYpWRO4dWsXSuMt77+THPIGjzNvVKrGSl6mMrLsfVaKL8BpwYZLGlgA+zAw==", + "license": "MIT", + "peerDependencies": { + "expo": "*" + } + }, "node_modules/expo-server": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/expo-server/-/expo-server-1.0.5.tgz", @@ -8412,16 +8415,16 @@ } }, "node_modules/pdfjs-dist": { - "version": "5.5.207", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-5.5.207.tgz", - "integrity": "sha512-WMqqw06w1vUt9ZfT0gOFhMf3wHsWhaCrxGrckGs5Cci6ybDW87IvPaOd2pnBwT6BJuP/CzXDZxjFgmSULLdsdw==", + "version": "5.6.205", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-5.6.205.tgz", + "integrity": "sha512-tlUj+2IDa7G1SbvBNN74UHRLJybZDWYom+k6p5KIZl7huBvsA4APi6mKL+zCxd3tLjN5hOOEE9Tv7VdzO88pfg==", "dev": true, "license": "Apache-2.0", "engines": { "node": ">=20.19.0 || >=22.13.0 || >=24" }, "optionalDependencies": { - "@napi-rs/canvas": "^0.1.95", + "@napi-rs/canvas": "^0.1.96", "node-readable-to-web-readable-stream": "^0.4.2" } }, @@ -8436,7 +8439,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -8716,7 +8718,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -8742,7 +8743,6 @@ "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.81.5.tgz", "integrity": "sha512-1w+/oSjEXZjMqsIvmkCRsOc8UBYv163bTWKTI8+1mxztvQPhCRYGTvZ/PL1w16xXHneIj/SLGfxWg2GWN2uexw==", "license": "MIT", - "peer": true, "dependencies": { "@jest/create-cache-key-function": "^29.7.0", "@react-native/assets-registry": "0.81.5", @@ -8849,11 +8849,10 @@ "license": "MIT" }, "node_modules/react-native-webview": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-13.15.0.tgz", - "integrity": "sha512-Vzjgy8mmxa/JO6l5KZrsTC7YemSdq+qB01diA0FqjUTaWGAGwuykpJ73MDj3+mzBSlaDxAEugHzTtkUQkQEQeQ==", + "version": "13.16.1", + "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-13.16.1.tgz", + "integrity": "sha512-If0eHhoEdOYDcHsX+xBFwHMbWBGK1BvGDQDQdVkwtSIXiq1uiqjkpWVP2uQ1as94J0CzvFE9PUNDuhiX0Z6ubw==", "license": "MIT", - "peer": true, "dependencies": { "escape-string-regexp": "^4.0.0", "invariant": "2.2.4" @@ -8952,7 +8951,6 @@ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -10211,9 +10209,8 @@ "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/src/constants/shifts.ts b/src/constants/shifts.ts new file mode 100644 index 0000000..07a2b6b --- /dev/null +++ b/src/constants/shifts.ts @@ -0,0 +1,2 @@ +export const SHIFT_TITLE_WORK = 'Lavoro'; +export const SHIFT_TITLE_REST = 'Riposo'; diff --git a/src/screens/CalendarScreen.tsx b/src/screens/CalendarScreen.tsx index 1266625..91b9c3d 100644 --- a/src/screens/CalendarScreen.tsx +++ b/src/screens/CalendarScreen.tsx @@ -22,6 +22,7 @@ import { getPdfExtractorHtml, parseShiftCells, type ParsedSchedule, type ParsedEmployee, type ParsedShift, } from '../utils/pdfShiftParser'; +import { SHIFT_TITLE_REST, SHIFT_TITLE_WORK } from '../constants/shifts'; const PRIMARY = '#2563EB'; const STORAGE_KEY = '@shift_import_name'; @@ -522,19 +523,19 @@ export default function CalendarScreen() { {/* Tipo */} TIPO - {(['Lavoro', 'Riposo'] as const).map(t => ( + {([SHIFT_TITLE_WORK, SHIFT_TITLE_REST] as const).map(t => ( setManualType(t)} > - {t === 'Lavoro' ? 'โœˆ๏ธ Lavoro' : '๐ŸŒด Riposo'} + {t === SHIFT_TITLE_WORK ? `โœˆ๏ธ ${SHIFT_TITLE_WORK}` : `๐ŸŒด ${SHIFT_TITLE_REST}`} ))} {/* Orari (solo lavoro) */} - {manualType === 'Lavoro' && ( + {manualType === SHIFT_TITLE_WORK && ( <> ORARIO INIZIO diff --git a/src/screens/FlightScreen.tsx b/src/screens/FlightScreen.tsx index 155fb94..605f1dc 100644 --- a/src/screens/FlightScreen.tsx +++ b/src/screens/FlightScreen.tsx @@ -17,6 +17,7 @@ import { requestWidgetUpdate } from 'react-native-android-widget'; import { WIDGET_CACHE_KEY } from '../widgets/widgetTaskHandler'; import type { WidgetData, WidgetFlight } from '../widgets/widgetTaskHandler'; import { ShiftWidget } from '../widgets/ShiftWidget'; +import { SHIFT_TITLE_REST, SHIFT_TITLE_WORK } from '../constants/shifts'; const WearDataSender = Platform.OS === 'android' ? NativeModules.WearDataSender : null; @@ -311,12 +312,12 @@ export default function FlightScreen() { const todayEnd = new Date(todayStart); todayEnd.setHours(23, 59, 59, 999); const tomorrowStart = new Date(todayStart); tomorrowStart.setDate(tomorrowStart.getDate() + 1); for (const e of evts) { - if (e.title.includes('Riposo')) { + if (e.title.includes(SHIFT_TITLE_REST)) { const evtDay = new Date(e.startDate); if (evtDay >= todayStart && evtDay <= todayEnd) isRestDay = true; continue; } - if (!e.title.includes('Lavoro')) continue; + if (!e.title.includes(SHIFT_TITLE_WORK)) continue; const s = new Date(e.startDate).getTime() / 1000; const en = new Date(e.endDate).getTime() / 1000; const evtDay = new Date(e.startDate); diff --git a/src/screens/HomeScreen.tsx b/src/screens/HomeScreen.tsx index 466c5ef..0bb3bc0 100644 --- a/src/screens/HomeScreen.tsx +++ b/src/screens/HomeScreen.tsx @@ -19,6 +19,7 @@ import { replaceShiftForDate, replaceShiftsForRange, } from '../utils/shiftCalendar'; +import { SHIFT_TITLE_REST, SHIFT_TITLE_WORK } from '../constants/shifts'; const GOLD = '#F59E0B'; @@ -27,7 +28,7 @@ if (Platform.OS === 'android' && UIManager.setLayoutAnimationEnabledExperimental } const PINNED_FLIGHT_KEY = 'pinned_flight_v1'; -const HOME_SHIFT_TITLES = { work: 'Turno Lavoro โœˆ๏ธ', rest: '๐ŸŒด Riposo' }; +const HOME_SHIFT_TITLES = { work: `Turno ${SHIFT_TITLE_WORK} โœˆ๏ธ`, rest: `๐ŸŒด ${SHIFT_TITLE_REST}` }; const HOME_REST_TIMING = { startHour: 12, startMinute: 0, endHour: 14, endMinute: 0, allDay: true }; const weatherMap: Record = { @@ -158,7 +159,7 @@ export default function HomeScreen() { const [processing, setProcessing] = useState(false); const [shiftModalOpen, setShiftModalOpen] = useState(false); - const [newShiftType, setNewShiftType] = useState<'Lavoro' | 'Riposo'>('Lavoro'); + const [newShiftType, setNewShiftType] = useState(SHIFT_TITLE_WORK); const [newStartH, setNewStartH] = useState('08'); const [newStartM, setNewStartM] = useState('00'); const [newEndH, setNewEndH] = useState('16'); @@ -197,7 +198,7 @@ export default function HomeScreen() { const openModifyModal = () => { if (shiftEvent) { - setNewShiftType(isRest ? 'Riposo' : 'Lavoro'); + setNewShiftType(isRest ? SHIFT_TITLE_REST : SHIFT_TITLE_WORK); const start = new Date(shiftEvent.startDate); const end = new Date(shiftEvent.endDate); setNewStartH(start.getHours().toString().padStart(2, '0')); @@ -205,7 +206,7 @@ export default function HomeScreen() { setNewEndH(end.getHours().toString().padStart(2, '0')); setNewEndM(end.getMinutes().toString().padStart(2, '0')); } else { - setNewShiftType('Lavoro'); + setNewShiftType(SHIFT_TITLE_WORK); setNewStartH('08'); setNewStartM('00'); setNewEndH('16'); setNewEndM('00'); } setShiftModalOpen(true); @@ -227,9 +228,9 @@ export default function HomeScreen() { await replaceShiftForDate({ calendarId, date, - type: newShiftType === 'Riposo' ? 'rest' : 'work', - startTime: newShiftType === 'Lavoro' ? `${newStartH.padStart(2, '0')}:${newStartM.padStart(2, '0')}` : undefined, - endTime: newShiftType === 'Lavoro' ? `${newEndH.padStart(2, '0')}:${newEndM.padStart(2, '0')}` : undefined, + type: newShiftType === SHIFT_TITLE_REST ? 'rest' : 'work', + startTime: newShiftType === SHIFT_TITLE_WORK ? `${newStartH.padStart(2, '0')}:${newStartM.padStart(2, '0')}` : undefined, + endTime: newShiftType === SHIFT_TITLE_WORK ? `${newEndH.padStart(2, '0')}:${newEndM.padStart(2, '0')}` : undefined, titles: HOME_SHIFT_TITLES, restTiming: HOME_REST_TIMING, }); @@ -251,7 +252,7 @@ export default function HomeScreen() { d.setHours(0, 0, 0, 0); const dEnd = new Date(); dEnd.setHours(23, 59, 59, 999); const events = await Calendar.getEventsAsync([cal.id], d, dEnd); - const shift = events.find(e => e.title.includes('Lavoro') || e.title.includes('Riposo')); + const shift = events.find(e => e.title.includes(SHIFT_TITLE_WORK) || e.title.includes(SHIFT_TITLE_REST)); setShiftEvent(shift || null); } catch (e) { console.error('[shift]', e); } finally { setLoadingShift(false); } }; @@ -350,8 +351,8 @@ export default function HomeScreen() { } catch (e: any) { Alert.alert('Errore Calendario', e.message); } }; - const isRest = shiftEvent?.title?.includes('Riposo'); - const isWork = shiftEvent?.title?.includes('Lavoro'); + const isRest = shiftEvent?.title?.includes(SHIFT_TITLE_REST); + const isWork = shiftEvent?.title?.includes(SHIFT_TITLE_WORK); const s = useMemo(() => makeStyles(colors), [colors]); return ( @@ -397,7 +398,7 @@ export default function HomeScreen() { IN CORSO - Turno Lavoro โœˆ๏ธ + Turno {SHIFT_TITLE_WORK} โœˆ๏ธ {new Date(shiftEvent.startDate).toLocaleTimeString('it-IT',{hour:'2-digit',minute:'2-digit'})} โ€“ {new Date(shiftEvent.endDate).toLocaleTimeString('it-IT',{hour:'2-digit',minute:'2-digit'})} @@ -406,7 +407,7 @@ export default function HomeScreen() { ) : isRest ? ( ๐ŸŒด - Giorno di Riposo + Giorno di {SHIFT_TITLE_REST} ) : ( Nessun turno per oggi diff --git a/src/screens/ShiftScreen.tsx b/src/screens/ShiftScreen.tsx index 102709b..c05ce62 100644 --- a/src/screens/ShiftScreen.tsx +++ b/src/screens/ShiftScreen.tsx @@ -3,6 +3,7 @@ import { View, Text, StyleSheet, ActivityIndicator, ScrollView, Alert, Touchable import * as ImagePicker from 'expo-image-picker'; import { WebView } from 'react-native-webview'; import * as Calendar from 'expo-calendar'; +import { SHIFT_TITLE_REST, SHIFT_TITLE_WORK } from '../constants/shifts'; const PRIMARY = '#2563EB'; const DARK_BLUE = '#1E3A8A'; @@ -136,11 +137,11 @@ export default function ShiftScreen() { const isDuplicate = existingEvents.some(e => { if (s.isRest) { - return e.title.includes("Riposo"); + return e.title.includes(SHIFT_TITLE_REST); } else { // Verifica se c'รจ giร  un turno di lavoro che inizia alla stessa ora const eStart = new Date(e.startDate); - return e.title.includes("Lavoro") && eStart.getHours() === s.startH; + return e.title.includes(SHIFT_TITLE_WORK) && eStart.getHours() === s.startH; } }); @@ -153,7 +154,7 @@ export default function ShiftScreen() { const alldayStart = new Date(d.year, d.month, d.day, 12, 0, 0); const alldayEnd = new Date(d.year, d.month, d.day, 14, 0, 0); await Calendar.createEventAsync(targetCalendar.id, { - title: "๐ŸŒด Riposo", + title: `๐ŸŒด ${SHIFT_TITLE_REST}`, startDate: alldayStart, endDate: alldayEnd, allDay: true, @@ -173,7 +174,7 @@ export default function ShiftScreen() { } await Calendar.createEventAsync(targetCalendar.id, { - title: "Turno Lavoro โœˆ๏ธ", + title: `Turno ${SHIFT_TITLE_WORK} โœˆ๏ธ`, startDate: startDate, endDate: endDate, notes: "Dati estratti: " + d.raw + " -> " + s.raw, diff --git a/src/utils/autoNotifications.ts b/src/utils/autoNotifications.ts index 4c44518..5b3d4c3 100644 --- a/src/utils/autoNotifications.ts +++ b/src/utils/autoNotifications.ts @@ -1,6 +1,7 @@ import * as Calendar from 'expo-calendar'; import * as Notifications from 'expo-notifications'; import AsyncStorage from '@react-native-async-storage/async-storage'; +import { SHIFT_TITLE_WORK } from '../constants/shifts'; import { getAirlineOps } from './airlineOps'; import { fetchAirportScheduleRaw } from './fr24api'; @@ -42,7 +43,7 @@ export async function autoScheduleNotifications(): Promise { const today = new Date(); today.setHours(0, 0, 0, 0); const endOfDay = new Date(today); endOfDay.setHours(23, 59, 59, 999); const events = await Calendar.getEventsAsync([cal.id], today, endOfDay); - const shiftEvent = events.find(e => e.title.includes('Lavoro')); + const shiftEvent = events.find(e => e.title.includes(SHIFT_TITLE_WORK)); if (!shiftEvent) return 0; const shiftStart = new Date(shiftEvent.startDate).getTime() / 1000; diff --git a/src/utils/shiftCalendar.ts b/src/utils/shiftCalendar.ts index 0eb0c9a..3bdc9bc 100644 --- a/src/utils/shiftCalendar.ts +++ b/src/utils/shiftCalendar.ts @@ -33,9 +33,11 @@ type ReplaceShiftsForRangeArgs = { restTiming?: RestEventTiming; }; +import { SHIFT_TITLE_REST, SHIFT_TITLE_WORK } from '../constants/shifts'; + const DEFAULT_TITLES: ShiftEventTitles = { - work: 'Lavoro', - rest: 'Riposo', + work: SHIFT_TITLE_WORK, + rest: SHIFT_TITLE_REST, }; const DEFAULT_REST_TIMING: RestEventTiming = { @@ -57,7 +59,7 @@ function parseTime(time: string): { hour: number; minute: number } { } function isShiftEventTitle(title?: string | null) { - return (title || '').includes('Lavoro') || (title || '').includes('Riposo'); + return (title || '').includes(SHIFT_TITLE_WORK) || (title || '').includes(SHIFT_TITLE_REST); } async function createShiftEvent( diff --git a/src/widgets/ShiftWidget.tsx b/src/widgets/ShiftWidget.tsx index b0b1554..1ed8b49 100644 --- a/src/widgets/ShiftWidget.tsx +++ b/src/widgets/ShiftWidget.tsx @@ -1,6 +1,7 @@ import React from 'react'; import { FlexWidget, TextWidget, ListWidget } from 'react-native-android-widget'; import type { WidgetData, WidgetFlight } from './widgetTaskHandler'; +import { SHIFT_TITLE_REST, SHIFT_TITLE_WORK } from '../constants/shifts'; const BG = '#0F172A'; const HEADER_BG = '#1E293B'; @@ -138,7 +139,7 @@ export function ShiftWidget({ data }: { data: WidgetData }) { > @@ -206,7 +207,7 @@ export function ShiftWidget({ data }: { data: WidgetData }) { }} > @@ -250,7 +251,7 @@ export function ShiftWidget({ data }: { data: WidgetData }) { clickAction="OPEN_APP" >