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"
>