aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/app/components/PullToRefresh.css
diff options
context:
space:
mode:
authorAriel Costas Guerrero <ariel@costas.dev>2025-09-07 19:22:28 +0200
committerAriel Costas Guerrero <ariel@costas.dev>2025-09-07 19:22:28 +0200
commit80bcf4a5f29ab926c2208d5efb4c19087c600323 (patch)
tree1e5826b29d8a22e057616e16069232f95788f3ba /src/frontend/app/components/PullToRefresh.css
parent8182a08f60e88595984ba80b472f29ccf53c19bd (diff)
feat: Enhance StopSheet component with error handling and loading states
- Added skeleton loading state to StopSheet for better UX during data fetch. - Implemented error handling with descriptive messages for network and server errors. - Introduced manual refresh functionality to reload stop estimates. - Updated styles for loading and error states. - Created StopSheetSkeleton and TimetableSkeleton components for consistent loading indicators. feat: Improve StopList component with loading indicators and network data fetching - Integrated loading state for StopList while fetching stops from the network. - Added skeleton loading indicators for favourite and recent stops. - Refactored data fetching logic to include favourite and recent stops with full data. - Enhanced user experience with better loading and error handling. feat: Update Timetable component with loading and error handling - Added loading skeletons to Timetable for improved user experience. - Implemented error handling for timetable data fetching. - Refactored data loading logic to handle errors gracefully and provide retry options. chore: Update package dependencies - Upgraded react-router, lucide-react, and other dependencies to their latest versions. - Updated types for TypeScript compatibility.
Diffstat (limited to 'src/frontend/app/components/PullToRefresh.css')
-rw-r--r--src/frontend/app/components/PullToRefresh.css64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/frontend/app/components/PullToRefresh.css b/src/frontend/app/components/PullToRefresh.css
index e69de29..d4946d2 100644
--- a/src/frontend/app/components/PullToRefresh.css
+++ b/src/frontend/app/components/PullToRefresh.css
@@ -0,0 +1,64 @@
+.pull-to-refresh-container {
+ position: relative;
+ width: 100%;
+ height: 100%;
+}
+
+.pull-to-refresh-indicator {
+ position: fixed;
+ top: 20px;
+ left: 50%;
+ transform: translateX(-50%);
+ z-index: 1000;
+ pointer-events: none;
+}
+
+.refresh-icon-container {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+ background: var(--surface-color, #f8f9fa);
+ border: 2px solid var(--border-color, #e9ecef);
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
+ transition: all 0.2s ease;
+}
+
+.refresh-icon-container.active {
+ background: var(--primary-color, #007bff);
+ border-color: var(--primary-color, #007bff);
+}
+
+.refresh-icon {
+ width: 20px;
+ height: 20px;
+ color: var(--text-secondary, #6c757d);
+ transition: color 0.2s ease;
+}
+
+.refresh-icon-container.active .refresh-icon {
+ color: white;
+}
+
+.refresh-icon.spinning {
+ animation: spin 1s linear infinite;
+}
+
+@keyframes spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+.pull-to-refresh-content {
+ width: 100%;
+ height: 100%;
+ /* Completely normal scrolling */
+ overflow: visible;
+ touch-action: auto;
+}