ubkerp.transport.module 0.1.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/LICENSE +22 -0
- package/README.md +136 -0
- package/lib/commonjs/assets/index.js +6 -0
- package/lib/commonjs/assets/index.js.map +1 -0
- package/lib/commonjs/components/index.js +6 -0
- package/lib/commonjs/components/index.js.map +1 -0
- package/lib/commonjs/constants/index.js +6 -0
- package/lib/commonjs/constants/index.js.map +1 -0
- package/lib/commonjs/hooks/index.js +6 -0
- package/lib/commonjs/hooks/index.js.map +1 -0
- package/lib/commonjs/index.js +34 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/navigation/index.js +6 -0
- package/lib/commonjs/navigation/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/providers/TransportContext.js +9 -0
- package/lib/commonjs/providers/TransportContext.js.map +1 -0
- package/lib/commonjs/providers/TransportProvider.js +46 -0
- package/lib/commonjs/providers/TransportProvider.js.map +1 -0
- package/lib/commonjs/providers/types.js +6 -0
- package/lib/commonjs/providers/types.js.map +1 -0
- package/lib/commonjs/providers/useTransport.js +16 -0
- package/lib/commonjs/providers/useTransport.js.map +1 -0
- package/lib/commonjs/screens/StudentRouteDetails/StudentRouteDetailsScreen.js +308 -0
- package/lib/commonjs/screens/StudentRouteDetails/StudentRouteDetailsScreen.js.map +1 -0
- package/lib/commonjs/screens/TransportDashboard/TransportDashboard.js +87 -0
- package/lib/commonjs/screens/TransportDashboard/TransportDashboard.js.map +1 -0
- package/lib/commonjs/services/api/createApiClient.js +116 -0
- package/lib/commonjs/services/api/createApiClient.js.map +1 -0
- package/lib/commonjs/services/api/types.js +6 -0
- package/lib/commonjs/services/api/types.js.map +1 -0
- package/lib/commonjs/services/index.js +6 -0
- package/lib/commonjs/services/index.js.map +1 -0
- package/lib/commonjs/services/transport/studentRouteDetails.js +10 -0
- package/lib/commonjs/services/transport/studentRouteDetails.js.map +1 -0
- package/lib/commonjs/services/transport/types.js +2 -0
- package/lib/commonjs/services/transport/types.js.map +1 -0
- package/lib/commonjs/store/index.js +6 -0
- package/lib/commonjs/store/index.js.map +1 -0
- package/lib/commonjs/types/index.js +2 -0
- package/lib/commonjs/types/index.js.map +1 -0
- package/lib/commonjs/types/transport.js +2 -0
- package/lib/commonjs/types/transport.js.map +1 -0
- package/lib/commonjs/utils/index.js +6 -0
- package/lib/commonjs/utils/index.js.map +1 -0
- package/lib/module/assets/index.js +4 -0
- package/lib/module/assets/index.js.map +1 -0
- package/lib/module/components/index.js +4 -0
- package/lib/module/components/index.js.map +1 -0
- package/lib/module/constants/index.js +4 -0
- package/lib/module/constants/index.js.map +1 -0
- package/lib/module/hooks/index.js +4 -0
- package/lib/module/hooks/index.js.map +1 -0
- package/lib/module/index.js +7 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/navigation/index.js +4 -0
- package/lib/module/navigation/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/providers/TransportContext.js +5 -0
- package/lib/module/providers/TransportContext.js.map +1 -0
- package/lib/module/providers/TransportProvider.js +41 -0
- package/lib/module/providers/TransportProvider.js.map +1 -0
- package/lib/module/providers/types.js +4 -0
- package/lib/module/providers/types.js.map +1 -0
- package/lib/module/providers/useTransport.js +12 -0
- package/lib/module/providers/useTransport.js.map +1 -0
- package/lib/module/screens/StudentRouteDetails/StudentRouteDetailsScreen.js +303 -0
- package/lib/module/screens/StudentRouteDetails/StudentRouteDetailsScreen.js.map +1 -0
- package/lib/module/screens/TransportDashboard/TransportDashboard.js +82 -0
- package/lib/module/screens/TransportDashboard/TransportDashboard.js.map +1 -0
- package/lib/module/services/api/createApiClient.js +111 -0
- package/lib/module/services/api/createApiClient.js.map +1 -0
- package/lib/module/services/api/types.js +4 -0
- package/lib/module/services/api/types.js.map +1 -0
- package/lib/module/services/index.js +4 -0
- package/lib/module/services/index.js.map +1 -0
- package/lib/module/services/transport/studentRouteDetails.js +6 -0
- package/lib/module/services/transport/studentRouteDetails.js.map +1 -0
- package/lib/module/services/transport/types.js +2 -0
- package/lib/module/services/transport/types.js.map +1 -0
- package/lib/module/store/index.js +4 -0
- package/lib/module/store/index.js.map +1 -0
- package/lib/module/types/index.js +2 -0
- package/lib/module/types/index.js.map +1 -0
- package/lib/module/types/transport.js +2 -0
- package/lib/module/types/transport.js.map +1 -0
- package/lib/module/utils/index.js +4 -0
- package/lib/module/utils/index.js.map +1 -0
- package/lib/typescript/assets/index.d.ts +2 -0
- package/lib/typescript/assets/index.d.ts.map +1 -0
- package/lib/typescript/components/index.d.ts +2 -0
- package/lib/typescript/components/index.d.ts.map +1 -0
- package/lib/typescript/constants/index.d.ts +2 -0
- package/lib/typescript/constants/index.d.ts.map +1 -0
- package/lib/typescript/hooks/index.d.ts +2 -0
- package/lib/typescript/hooks/index.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +8 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/navigation/index.d.ts +2 -0
- package/lib/typescript/navigation/index.d.ts.map +1 -0
- package/lib/typescript/providers/TransportContext.d.ts +8 -0
- package/lib/typescript/providers/TransportContext.d.ts.map +1 -0
- package/lib/typescript/providers/TransportProvider.d.ts +3 -0
- package/lib/typescript/providers/TransportProvider.d.ts.map +1 -0
- package/lib/typescript/providers/types.d.ts +28 -0
- package/lib/typescript/providers/types.d.ts.map +1 -0
- package/lib/typescript/providers/useTransport.d.ts +2 -0
- package/lib/typescript/providers/useTransport.d.ts.map +1 -0
- package/lib/typescript/screens/StudentRouteDetails/StudentRouteDetailsScreen.d.ts +6 -0
- package/lib/typescript/screens/StudentRouteDetails/StudentRouteDetailsScreen.d.ts.map +1 -0
- package/lib/typescript/screens/TransportDashboard/TransportDashboard.d.ts +12 -0
- package/lib/typescript/screens/TransportDashboard/TransportDashboard.d.ts.map +1 -0
- package/lib/typescript/services/api/createApiClient.d.ts +18 -0
- package/lib/typescript/services/api/createApiClient.d.ts.map +1 -0
- package/lib/typescript/services/api/types.d.ts +18 -0
- package/lib/typescript/services/api/types.d.ts.map +1 -0
- package/lib/typescript/services/index.d.ts +2 -0
- package/lib/typescript/services/index.d.ts.map +1 -0
- package/lib/typescript/services/transport/studentRouteDetails.d.ts +5 -0
- package/lib/typescript/services/transport/studentRouteDetails.d.ts.map +1 -0
- package/lib/typescript/services/transport/types.d.ts +7 -0
- package/lib/typescript/services/transport/types.d.ts.map +1 -0
- package/lib/typescript/store/index.d.ts +2 -0
- package/lib/typescript/store/index.d.ts.map +1 -0
- package/lib/typescript/types/index.d.ts +2 -0
- package/lib/typescript/types/index.d.ts.map +1 -0
- package/lib/typescript/types/transport.d.ts +12 -0
- package/lib/typescript/types/transport.d.ts.map +1 -0
- package/lib/typescript/utils/index.d.ts +2 -0
- package/lib/typescript/utils/index.d.ts.map +1 -0
- package/package.json +61 -0
- package/src/assets/index.ts +2 -0
- package/src/components/index.ts +2 -0
- package/src/constants/index.ts +2 -0
- package/src/hooks/index.ts +2 -0
- package/src/index.ts +10 -0
- package/src/navigation/index.ts +2 -0
- package/src/providers/TransportContext.ts +11 -0
- package/src/providers/TransportProvider.tsx +47 -0
- package/src/providers/types.ts +28 -0
- package/src/providers/useTransport.ts +11 -0
- package/src/screens/StudentRouteDetails/StudentRouteDetailsScreen.tsx +284 -0
- package/src/screens/TransportDashboard/TransportDashboard.tsx +93 -0
- package/src/services/api/createApiClient.ts +170 -0
- package/src/services/api/types.ts +30 -0
- package/src/services/index.ts +2 -0
- package/src/services/transport/studentRouteDetails.ts +10 -0
- package/src/services/transport/types.ts +7 -0
- package/src/store/index.ts +2 -0
- package/src/types/index.ts +2 -0
- package/src/types/transport.ts +12 -0
- package/src/utils/index.ts +2 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 UBK INFOTECH PVT LTD
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
package/README.md
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# @ubkerp/transport-module
|
|
2
|
+
|
|
3
|
+
Reusable React Native Transport Module for UBKERP (UBK INFOTECH PVT LTD). This package keeps authentication external and makes API + UI reusable.
|
|
4
|
+
|
|
5
|
+
## Setup (library)
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
cd transport-module
|
|
9
|
+
npm i
|
|
10
|
+
npm run build
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Install (consumer app)
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm i @ubkerp/transport-module
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
### A) Direct token
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
<TransportProvider apiBaseUrl="https://domain.com/api" authToken={token}>
|
|
25
|
+
<StudentRouteDetailsScreen />
|
|
26
|
+
</TransportProvider>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### B) Async token callback (recommended)
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
<TransportProvider
|
|
33
|
+
apiBaseUrl="https://domain.com/api"
|
|
34
|
+
getAuthToken={async () => {
|
|
35
|
+
return await AsyncStorage.getItem('token');
|
|
36
|
+
}}>
|
|
37
|
+
<StudentRouteDetailsScreen />
|
|
38
|
+
</TransportProvider>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### C) Custom headers (optional)
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
<TransportProvider
|
|
45
|
+
apiBaseUrl="https://domain.com/api"
|
|
46
|
+
headers={{
|
|
47
|
+
Authorization: token,
|
|
48
|
+
}}>
|
|
49
|
+
<StudentRouteDetailsScreen />
|
|
50
|
+
</TransportProvider>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## API Configuration
|
|
54
|
+
|
|
55
|
+
`TransportProvider` configures a dedicated Axios instance:
|
|
56
|
+
|
|
57
|
+
- Dynamic `apiBaseUrl`
|
|
58
|
+
- Dynamic headers (static `headers` + token injection)
|
|
59
|
+
- Axios interceptors
|
|
60
|
+
- Token refresh support (optional `refreshAuthToken`)
|
|
61
|
+
- Retry mechanism (configurable via `retry`)
|
|
62
|
+
- Global API error handling (optional `onApiError`)
|
|
63
|
+
|
|
64
|
+
## Exports
|
|
65
|
+
|
|
66
|
+
```ts
|
|
67
|
+
export {
|
|
68
|
+
TransportProvider,
|
|
69
|
+
useTransport,
|
|
70
|
+
TransportDashboard,
|
|
71
|
+
StudentRouteDetailsScreen,
|
|
72
|
+
} from '@ubkerp/transport-module';
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Example
|
|
76
|
+
|
|
77
|
+
Use the screen exports in your consumer app navigation.
|
|
78
|
+
|
|
79
|
+
## Migration Strategy (incremental)
|
|
80
|
+
|
|
81
|
+
This library is designed to migrate your existing Transport module without rewriting the business logic.
|
|
82
|
+
|
|
83
|
+
### Current Source Files (in ERP app)
|
|
84
|
+
|
|
85
|
+
- `src/screens/TransportRoute/TransportRoute.jsx` → dashboard/hub UI
|
|
86
|
+
- `src/screens/TransportRoute/RouteTransport.jsx` → student route details UI + API call
|
|
87
|
+
- `src/screens/TransportRoute/TransportFee.jsx` → transport fee UI + receipts (large; migrate after RouteDetails)
|
|
88
|
+
- `src/api/fee_show_data.js` → `fee_show_data2()` transport fee API
|
|
89
|
+
- `src/api/apiService.js` → generic GET/POST wrappers
|
|
90
|
+
- `src/styles/TransportRoute/TransportRoute.styles.jsx` → styles
|
|
91
|
+
- `src/routes/StackNavigator.js` → navigation registration (must stay in consumer app)
|
|
92
|
+
|
|
93
|
+
### Move Order (recommended)
|
|
94
|
+
|
|
95
|
+
1) Services first (no UI)
|
|
96
|
+
- Move API calls into `transport-module/src/services/**`
|
|
97
|
+
- Keep endpoints unchanged; only remove hardcoded `API_BASE_URL` usage
|
|
98
|
+
|
|
99
|
+
2) Types
|
|
100
|
+
- Introduce strong TypeScript models in `transport-module/src/types/**`
|
|
101
|
+
|
|
102
|
+
3) Provider
|
|
103
|
+
- Add `TransportProvider` to replace internal AuthContext dependency
|
|
104
|
+
|
|
105
|
+
4) Screens
|
|
106
|
+
- Move screens into `transport-module/src/screens/**`
|
|
107
|
+
- Remove `useNavigation()` from screens; expose callbacks/props instead
|
|
108
|
+
|
|
109
|
+
5) Shared UI components
|
|
110
|
+
- Extract cards, loading/empty/error states into `src/components/**`
|
|
111
|
+
|
|
112
|
+
### Refactoring Needed (safe + minimal)
|
|
113
|
+
|
|
114
|
+
- Replace `API_BASE_URL` imports with `TransportProvider` (`apiBaseUrl`)
|
|
115
|
+
- Replace AuthContext with external token injection (`authToken` / `getAuthToken` / `headers`)
|
|
116
|
+
- Keep request paths identical (example: `/student/studentAPP/TransportDetails/studentRoutedetails`)
|
|
117
|
+
|
|
118
|
+
### Dependency Mapping (Transport module)
|
|
119
|
+
|
|
120
|
+
- Must be provided by consumer (peer deps): `react`, `react-native`
|
|
121
|
+
- Included by library: `axios`
|
|
122
|
+
- Optional consumer-level dependencies depending on migrated screens:
|
|
123
|
+
- If you keep `native-base`, `react-native-fast-image`, `@fortawesome/*`, they should be added as peerDependencies later when those screens are migrated
|
|
124
|
+
|
|
125
|
+
### Breaking Changes Prevention
|
|
126
|
+
|
|
127
|
+
- Preserve endpoint paths and payload shapes
|
|
128
|
+
- Avoid changing response parsing; wrap only for reusability
|
|
129
|
+
- Keep UI props backward compatible by adding optional props instead of changing required ones
|
|
130
|
+
|
|
131
|
+
## Next Modules (planned)
|
|
132
|
+
|
|
133
|
+
- Transport Fee (fee_show_data2 + TransportFee screen)
|
|
134
|
+
- Vehicle / Driver / Route management (if present in ERP app)
|
|
135
|
+
- Pickup point + allocation screens
|
|
136
|
+
- GPS tracking + bus attendance + reports
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"..\\..\\..\\src","sources":["assets/index.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"..\\..\\..\\src","sources":["components/index.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"..\\..\\..\\src","sources":["constants/index.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"..\\..\\..\\src","sources":["hooks/index.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "StudentRouteDetailsScreen", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _StudentRouteDetailsScreen.StudentRouteDetailsScreen;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "TransportDashboard", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _TransportDashboard.TransportDashboard;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "TransportProvider", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () {
|
|
21
|
+
return _TransportProvider.TransportProvider;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports, "useTransport", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function () {
|
|
27
|
+
return _useTransport.useTransport;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
var _TransportProvider = require("./providers/TransportProvider");
|
|
31
|
+
var _useTransport = require("./providers/useTransport");
|
|
32
|
+
var _TransportDashboard = require("./screens/TransportDashboard/TransportDashboard");
|
|
33
|
+
var _StudentRouteDetailsScreen = require("./screens/StudentRouteDetails/StudentRouteDetailsScreen");
|
|
34
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_TransportProvider","require","_useTransport","_TransportDashboard","_StudentRouteDetailsScreen"],"sourceRoot":"..\\..\\src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,kBAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAEA,IAAAE,mBAAA,GAAAF,OAAA;AACA,IAAAG,0BAAA,GAAAH,OAAA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"..\\..\\..\\src","sources":["navigation/index.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.TransportContext = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
const TransportContext = exports.TransportContext = /*#__PURE__*/(0, _react.createContext)(null);
|
|
9
|
+
//# sourceMappingURL=TransportContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","TransportContext","exports","createContext"],"sourceRoot":"..\\..\\..\\src","sources":["providers/TransportContext.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AASO,MAAMC,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,gBAAG,IAAAE,oBAAa,EAA+B,IAAI,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.TransportProvider = TransportProvider;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _TransportContext = require("./TransportContext");
|
|
9
|
+
var _createApiClient = require("../services/api/createApiClient");
|
|
10
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
11
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
12
|
+
function TransportProvider({
|
|
13
|
+
children,
|
|
14
|
+
apiBaseUrl,
|
|
15
|
+
fileBaseUrl,
|
|
16
|
+
authToken,
|
|
17
|
+
getAuthToken,
|
|
18
|
+
headers,
|
|
19
|
+
refreshAuthToken,
|
|
20
|
+
onApiError,
|
|
21
|
+
retry
|
|
22
|
+
}) {
|
|
23
|
+
const api = (0, _react.useMemo)(() => {
|
|
24
|
+
return (0, _createApiClient.createApiClient)({
|
|
25
|
+
baseUrl: apiBaseUrl,
|
|
26
|
+
authToken,
|
|
27
|
+
getAuthToken,
|
|
28
|
+
headers,
|
|
29
|
+
refreshAuthToken,
|
|
30
|
+
onApiError,
|
|
31
|
+
retry
|
|
32
|
+
});
|
|
33
|
+
}, [apiBaseUrl, authToken, getAuthToken, headers, refreshAuthToken, onApiError, retry]);
|
|
34
|
+
const value = (0, _react.useMemo)(() => {
|
|
35
|
+
return {
|
|
36
|
+
api,
|
|
37
|
+
apiBaseUrl,
|
|
38
|
+
fileBaseUrl
|
|
39
|
+
};
|
|
40
|
+
}, [api, apiBaseUrl, fileBaseUrl]);
|
|
41
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TransportContext.TransportContext.Provider, {
|
|
42
|
+
value: value,
|
|
43
|
+
children: children
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=TransportProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_TransportContext","_createApiClient","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TransportProvider","children","apiBaseUrl","fileBaseUrl","authToken","getAuthToken","headers","refreshAuthToken","onApiError","retry","api","useMemo","createApiClient","baseUrl","value","jsx","TransportContext","Provider"],"sourceRoot":"..\\..\\..\\src","sources":["providers/TransportProvider.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,iBAAA,GAAAD,OAAA;AAEA,IAAAE,gBAAA,GAAAF,OAAA;AAAgE,IAAAG,WAAA,GAAAH,OAAA;AAAA,SAAAD,wBAAAK,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAP,uBAAA,YAAAA,CAAAK,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAEzD,SAASkB,iBAAiBA,CAAC;EAChCC,QAAQ;EACRC,UAAU;EACVC,WAAW;EACXC,SAAS;EACTC,YAAY;EACZC,OAAO;EACPC,gBAAgB;EAChBC,UAAU;EACVC;AACsB,CAAC,EAAE;EACzB,MAAMC,GAAG,GAAG,IAAAC,cAAO,EAAC,MAAM;IACxB,OAAO,IAAAC,gCAAe,EAAC;MACrBC,OAAO,EAAEX,UAAU;MACnBE,SAAS;MACTC,YAAY;MACZC,OAAO;MACPC,gBAAgB;MAChBC,UAAU;MACVC;IACF,CAAC,CAAC;EACJ,CAAC,EAAE,CACDP,UAAU,EACVE,SAAS,EACTC,YAAY,EACZC,OAAO,EACPC,gBAAgB,EAChBC,UAAU,EACVC,KAAK,CACN,CAAC;EAEF,MAAMK,KAAK,GAAG,IAAAH,cAAO,EAAC,MAAM;IAC1B,OAAO;MAACD,GAAG;MAAER,UAAU;MAAEC;IAAW,CAAC;EACvC,CAAC,EAAE,CAACO,GAAG,EAAER,UAAU,EAAEC,WAAW,CAAC,CAAC;EAElC,oBACE,IAAAvB,WAAA,CAAAmC,GAAA,EAACrC,iBAAA,CAAAsC,gBAAgB,CAACC,QAAQ;IAACH,KAAK,EAAEA,KAAM;IAAAb,QAAA,EACrCA;EAAQ,CACgB,CAAC;AAEhC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"..\\..\\..\\src","sources":["providers/types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useTransport = useTransport;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _TransportContext = require("./TransportContext");
|
|
9
|
+
function useTransport() {
|
|
10
|
+
const ctx = (0, _react.useContext)(_TransportContext.TransportContext);
|
|
11
|
+
if (!ctx) {
|
|
12
|
+
throw new Error('TransportProvider is missing');
|
|
13
|
+
}
|
|
14
|
+
return ctx;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=useTransport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_TransportContext","useTransport","ctx","useContext","TransportContext","Error"],"sourceRoot":"..\\..\\..\\src","sources":["providers/useTransport.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,iBAAA,GAAAD,OAAA;AAEO,SAASE,YAAYA,CAAA,EAAG;EAC7B,MAAMC,GAAG,GAAG,IAAAC,iBAAU,EAACC,kCAAgB,CAAC;EACxC,IAAI,CAACF,GAAG,EAAE;IACR,MAAM,IAAIG,KAAK,CAAC,8BAA8B,CAAC;EACjD;EACA,OAAOH,GAAG;AACZ","ignoreList":[]}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.StudentRouteDetailsScreen = StudentRouteDetailsScreen;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
var _useTransport = require("../../providers/useTransport");
|
|
10
|
+
var _studentRouteDetails = require("../../services/transport/studentRouteDetails");
|
|
11
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
13
|
+
function buildDriverImageUrl(args) {
|
|
14
|
+
if (!args.fileBaseUrl || !args.driverImage) return undefined;
|
|
15
|
+
const base = args.fileBaseUrl.endsWith('/') ? args.fileBaseUrl.slice(0, -1) : args.fileBaseUrl;
|
|
16
|
+
const img = args.driverImage.startsWith('/') ? args.driverImage.slice(1) : args.driverImage;
|
|
17
|
+
return `${base}/staff/document/${img}`;
|
|
18
|
+
}
|
|
19
|
+
function StudentRouteDetailsScreen({
|
|
20
|
+
renderTop
|
|
21
|
+
}) {
|
|
22
|
+
const {
|
|
23
|
+
api,
|
|
24
|
+
fileBaseUrl
|
|
25
|
+
} = (0, _useTransport.useTransport)();
|
|
26
|
+
const [loading, setLoading] = (0, _react.useState)(true);
|
|
27
|
+
const [data, setData] = (0, _react.useState)(null);
|
|
28
|
+
const [loadError, setLoadError] = (0, _react.useState)(null);
|
|
29
|
+
const driverImageUrl = (0, _react.useMemo)(() => {
|
|
30
|
+
return buildDriverImageUrl({
|
|
31
|
+
fileBaseUrl,
|
|
32
|
+
driverImage: data?.driver_image
|
|
33
|
+
});
|
|
34
|
+
}, [data?.driver_image, fileBaseUrl]);
|
|
35
|
+
const load = (0, _react.useCallback)(async () => {
|
|
36
|
+
try {
|
|
37
|
+
setLoading(true);
|
|
38
|
+
setLoadError(null);
|
|
39
|
+
const res = await (0, _studentRouteDetails.getStudentRouteDetails)(api);
|
|
40
|
+
const first = Array.isArray(res.data) ? res.data[0] : undefined;
|
|
41
|
+
setData(first ?? null);
|
|
42
|
+
} catch (e) {
|
|
43
|
+
setData(null);
|
|
44
|
+
setLoadError('Failed to load transport route details');
|
|
45
|
+
} finally {
|
|
46
|
+
setLoading(false);
|
|
47
|
+
}
|
|
48
|
+
}, [api]);
|
|
49
|
+
(0, _react.useEffect)(() => {
|
|
50
|
+
load();
|
|
51
|
+
}, [load]);
|
|
52
|
+
const handleCall = (0, _react.useCallback)(async () => {
|
|
53
|
+
const phone = data?.contact_number;
|
|
54
|
+
if (!phone) {
|
|
55
|
+
_reactNative.Alert.alert('Error', 'Contact number not available');
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const phoneNumber = phone.toString().replace(/[^0-9+]/g, '');
|
|
59
|
+
const url = `tel:${phoneNumber}`;
|
|
60
|
+
const supported = await _reactNative.Linking.canOpenURL(url);
|
|
61
|
+
if (!supported) {
|
|
62
|
+
_reactNative.Alert.alert('Error', 'Phone calls are not supported on this device');
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
await _reactNative.Linking.openURL(url);
|
|
66
|
+
}, [data?.contact_number]);
|
|
67
|
+
if (loading) {
|
|
68
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
69
|
+
style: styles.center,
|
|
70
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
|
|
71
|
+
size: "large"
|
|
72
|
+
})
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
if (!data?.route_title) {
|
|
76
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
77
|
+
style: styles.center,
|
|
78
|
+
children: loadError ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
79
|
+
style: styles.errorText,
|
|
80
|
+
children: loadError
|
|
81
|
+
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
82
|
+
style: styles.noDataText,
|
|
83
|
+
children: "No Data Found"
|
|
84
|
+
})
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
88
|
+
style: styles.container,
|
|
89
|
+
children: [renderTop ? renderTop() : null, /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.ScrollView, {
|
|
90
|
+
showsVerticalScrollIndicator: false,
|
|
91
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
92
|
+
style: styles.routeTitleCard,
|
|
93
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
94
|
+
style: styles.routeTitle,
|
|
95
|
+
children: data.route_title
|
|
96
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
97
|
+
style: styles.routeSubtitle,
|
|
98
|
+
children: "Route Details"
|
|
99
|
+
})]
|
|
100
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
101
|
+
style: styles.card,
|
|
102
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
103
|
+
style: styles.cardTitle,
|
|
104
|
+
children: "Vehicle Information"
|
|
105
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
106
|
+
style: styles.detailRow,
|
|
107
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
108
|
+
style: styles.detailLabel,
|
|
109
|
+
children: "Vehicle No:"
|
|
110
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
111
|
+
style: styles.detailValue,
|
|
112
|
+
children: data.vehicle_no ?? '-'
|
|
113
|
+
})]
|
|
114
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
115
|
+
style: styles.detailRow,
|
|
116
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
117
|
+
style: styles.detailLabel,
|
|
118
|
+
children: "Model:"
|
|
119
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
120
|
+
style: styles.detailValue,
|
|
121
|
+
children: data.vehicle_model ?? '-'
|
|
122
|
+
})]
|
|
123
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
124
|
+
style: styles.detailRow,
|
|
125
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
126
|
+
style: styles.detailLabel,
|
|
127
|
+
children: "Stop Name:"
|
|
128
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
129
|
+
style: styles.detailValue,
|
|
130
|
+
children: data.stop_name ?? '-'
|
|
131
|
+
})]
|
|
132
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
133
|
+
style: styles.detailRow,
|
|
134
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
135
|
+
style: styles.detailLabel,
|
|
136
|
+
children: "Pick Up:"
|
|
137
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
138
|
+
style: [styles.detailValue, styles.pickup],
|
|
139
|
+
children: data.pickup_time ?? '-'
|
|
140
|
+
})]
|
|
141
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
142
|
+
style: styles.detailRow,
|
|
143
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
144
|
+
style: styles.detailLabel,
|
|
145
|
+
children: "Drop Time:"
|
|
146
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
147
|
+
style: [styles.detailValue, styles.drop],
|
|
148
|
+
children: data.drop_time ?? '-'
|
|
149
|
+
})]
|
|
150
|
+
})]
|
|
151
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
152
|
+
style: styles.card,
|
|
153
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
154
|
+
style: styles.cardTitle,
|
|
155
|
+
children: "Driver Information"
|
|
156
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
157
|
+
style: styles.driverContainer,
|
|
158
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
159
|
+
style: styles.driverImageContainer,
|
|
160
|
+
children: driverImageUrl ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, {
|
|
161
|
+
style: styles.driverImage,
|
|
162
|
+
source: {
|
|
163
|
+
uri: driverImageUrl
|
|
164
|
+
}
|
|
165
|
+
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
166
|
+
style: styles.driverImageFallback
|
|
167
|
+
})
|
|
168
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
169
|
+
style: styles.driverInfo,
|
|
170
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
171
|
+
style: styles.driverLabel,
|
|
172
|
+
children: "Driver Name"
|
|
173
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
174
|
+
style: styles.driverName,
|
|
175
|
+
children: data.driver ?? '-'
|
|
176
|
+
})]
|
|
177
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
178
|
+
onPress: handleCall,
|
|
179
|
+
style: styles.callButton,
|
|
180
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
181
|
+
style: styles.callText,
|
|
182
|
+
children: "Call"
|
|
183
|
+
})
|
|
184
|
+
})]
|
|
185
|
+
})]
|
|
186
|
+
})]
|
|
187
|
+
})]
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
const styles = _reactNative.StyleSheet.create({
|
|
191
|
+
container: {
|
|
192
|
+
flex: 1,
|
|
193
|
+
backgroundColor: '#FFFFFF'
|
|
194
|
+
},
|
|
195
|
+
center: {
|
|
196
|
+
flex: 1,
|
|
197
|
+
justifyContent: 'center',
|
|
198
|
+
alignItems: 'center',
|
|
199
|
+
backgroundColor: '#FFFFFF'
|
|
200
|
+
},
|
|
201
|
+
noDataText: {
|
|
202
|
+
fontSize: 16,
|
|
203
|
+
color: '#6B7280'
|
|
204
|
+
},
|
|
205
|
+
errorText: {
|
|
206
|
+
fontSize: 16,
|
|
207
|
+
color: '#DC2626',
|
|
208
|
+
textAlign: 'center',
|
|
209
|
+
paddingHorizontal: 24
|
|
210
|
+
},
|
|
211
|
+
routeTitleCard: {
|
|
212
|
+
margin: 16,
|
|
213
|
+
borderRadius: 16,
|
|
214
|
+
padding: 16,
|
|
215
|
+
backgroundColor: '#F3F4F6',
|
|
216
|
+
alignItems: 'center'
|
|
217
|
+
},
|
|
218
|
+
routeTitle: {
|
|
219
|
+
fontSize: 18,
|
|
220
|
+
fontWeight: '700',
|
|
221
|
+
color: '#111827'
|
|
222
|
+
},
|
|
223
|
+
routeSubtitle: {
|
|
224
|
+
marginTop: 6,
|
|
225
|
+
fontSize: 12,
|
|
226
|
+
color: '#6B7280'
|
|
227
|
+
},
|
|
228
|
+
card: {
|
|
229
|
+
marginHorizontal: 16,
|
|
230
|
+
marginBottom: 16,
|
|
231
|
+
borderRadius: 16,
|
|
232
|
+
padding: 16,
|
|
233
|
+
backgroundColor: '#FFFFFF',
|
|
234
|
+
borderWidth: 1,
|
|
235
|
+
borderColor: '#E5E7EB'
|
|
236
|
+
},
|
|
237
|
+
cardTitle: {
|
|
238
|
+
fontSize: 16,
|
|
239
|
+
fontWeight: '700',
|
|
240
|
+
color: '#111827',
|
|
241
|
+
marginBottom: 12
|
|
242
|
+
},
|
|
243
|
+
detailRow: {
|
|
244
|
+
flexDirection: 'row',
|
|
245
|
+
justifyContent: 'space-between',
|
|
246
|
+
paddingVertical: 6
|
|
247
|
+
},
|
|
248
|
+
detailLabel: {
|
|
249
|
+
fontSize: 14,
|
|
250
|
+
color: '#374151'
|
|
251
|
+
},
|
|
252
|
+
detailValue: {
|
|
253
|
+
fontSize: 14,
|
|
254
|
+
color: '#111827',
|
|
255
|
+
fontWeight: '600'
|
|
256
|
+
},
|
|
257
|
+
pickup: {
|
|
258
|
+
color: '#16A34A'
|
|
259
|
+
},
|
|
260
|
+
drop: {
|
|
261
|
+
color: '#DC2626'
|
|
262
|
+
},
|
|
263
|
+
driverContainer: {
|
|
264
|
+
flexDirection: 'row',
|
|
265
|
+
alignItems: 'center'
|
|
266
|
+
},
|
|
267
|
+
driverImageContainer: {
|
|
268
|
+
width: 56,
|
|
269
|
+
height: 56,
|
|
270
|
+
borderRadius: 28,
|
|
271
|
+
overflow: 'hidden',
|
|
272
|
+
backgroundColor: '#F3F4F6'
|
|
273
|
+
},
|
|
274
|
+
driverImage: {
|
|
275
|
+
width: 56,
|
|
276
|
+
height: 56
|
|
277
|
+
},
|
|
278
|
+
driverImageFallback: {
|
|
279
|
+
width: 56,
|
|
280
|
+
height: 56,
|
|
281
|
+
backgroundColor: '#E5E7EB'
|
|
282
|
+
},
|
|
283
|
+
driverInfo: {
|
|
284
|
+
flex: 1,
|
|
285
|
+
marginLeft: 12
|
|
286
|
+
},
|
|
287
|
+
driverLabel: {
|
|
288
|
+
fontSize: 12,
|
|
289
|
+
color: '#6B7280'
|
|
290
|
+
},
|
|
291
|
+
driverName: {
|
|
292
|
+
fontSize: 14,
|
|
293
|
+
fontWeight: '700',
|
|
294
|
+
color: '#111827',
|
|
295
|
+
marginTop: 2
|
|
296
|
+
},
|
|
297
|
+
callButton: {
|
|
298
|
+
paddingHorizontal: 12,
|
|
299
|
+
paddingVertical: 8,
|
|
300
|
+
borderRadius: 10,
|
|
301
|
+
backgroundColor: '#DCFCE7'
|
|
302
|
+
},
|
|
303
|
+
callText: {
|
|
304
|
+
color: '#16A34A',
|
|
305
|
+
fontWeight: '700'
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
//# sourceMappingURL=StudentRouteDetailsScreen.js.map
|