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.
Files changed (152) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +136 -0
  3. package/lib/commonjs/assets/index.js +6 -0
  4. package/lib/commonjs/assets/index.js.map +1 -0
  5. package/lib/commonjs/components/index.js +6 -0
  6. package/lib/commonjs/components/index.js.map +1 -0
  7. package/lib/commonjs/constants/index.js +6 -0
  8. package/lib/commonjs/constants/index.js.map +1 -0
  9. package/lib/commonjs/hooks/index.js +6 -0
  10. package/lib/commonjs/hooks/index.js.map +1 -0
  11. package/lib/commonjs/index.js +34 -0
  12. package/lib/commonjs/index.js.map +1 -0
  13. package/lib/commonjs/navigation/index.js +6 -0
  14. package/lib/commonjs/navigation/index.js.map +1 -0
  15. package/lib/commonjs/package.json +1 -0
  16. package/lib/commonjs/providers/TransportContext.js +9 -0
  17. package/lib/commonjs/providers/TransportContext.js.map +1 -0
  18. package/lib/commonjs/providers/TransportProvider.js +46 -0
  19. package/lib/commonjs/providers/TransportProvider.js.map +1 -0
  20. package/lib/commonjs/providers/types.js +6 -0
  21. package/lib/commonjs/providers/types.js.map +1 -0
  22. package/lib/commonjs/providers/useTransport.js +16 -0
  23. package/lib/commonjs/providers/useTransport.js.map +1 -0
  24. package/lib/commonjs/screens/StudentRouteDetails/StudentRouteDetailsScreen.js +308 -0
  25. package/lib/commonjs/screens/StudentRouteDetails/StudentRouteDetailsScreen.js.map +1 -0
  26. package/lib/commonjs/screens/TransportDashboard/TransportDashboard.js +87 -0
  27. package/lib/commonjs/screens/TransportDashboard/TransportDashboard.js.map +1 -0
  28. package/lib/commonjs/services/api/createApiClient.js +116 -0
  29. package/lib/commonjs/services/api/createApiClient.js.map +1 -0
  30. package/lib/commonjs/services/api/types.js +6 -0
  31. package/lib/commonjs/services/api/types.js.map +1 -0
  32. package/lib/commonjs/services/index.js +6 -0
  33. package/lib/commonjs/services/index.js.map +1 -0
  34. package/lib/commonjs/services/transport/studentRouteDetails.js +10 -0
  35. package/lib/commonjs/services/transport/studentRouteDetails.js.map +1 -0
  36. package/lib/commonjs/services/transport/types.js +2 -0
  37. package/lib/commonjs/services/transport/types.js.map +1 -0
  38. package/lib/commonjs/store/index.js +6 -0
  39. package/lib/commonjs/store/index.js.map +1 -0
  40. package/lib/commonjs/types/index.js +2 -0
  41. package/lib/commonjs/types/index.js.map +1 -0
  42. package/lib/commonjs/types/transport.js +2 -0
  43. package/lib/commonjs/types/transport.js.map +1 -0
  44. package/lib/commonjs/utils/index.js +6 -0
  45. package/lib/commonjs/utils/index.js.map +1 -0
  46. package/lib/module/assets/index.js +4 -0
  47. package/lib/module/assets/index.js.map +1 -0
  48. package/lib/module/components/index.js +4 -0
  49. package/lib/module/components/index.js.map +1 -0
  50. package/lib/module/constants/index.js +4 -0
  51. package/lib/module/constants/index.js.map +1 -0
  52. package/lib/module/hooks/index.js +4 -0
  53. package/lib/module/hooks/index.js.map +1 -0
  54. package/lib/module/index.js +7 -0
  55. package/lib/module/index.js.map +1 -0
  56. package/lib/module/navigation/index.js +4 -0
  57. package/lib/module/navigation/index.js.map +1 -0
  58. package/lib/module/package.json +1 -0
  59. package/lib/module/providers/TransportContext.js +5 -0
  60. package/lib/module/providers/TransportContext.js.map +1 -0
  61. package/lib/module/providers/TransportProvider.js +41 -0
  62. package/lib/module/providers/TransportProvider.js.map +1 -0
  63. package/lib/module/providers/types.js +4 -0
  64. package/lib/module/providers/types.js.map +1 -0
  65. package/lib/module/providers/useTransport.js +12 -0
  66. package/lib/module/providers/useTransport.js.map +1 -0
  67. package/lib/module/screens/StudentRouteDetails/StudentRouteDetailsScreen.js +303 -0
  68. package/lib/module/screens/StudentRouteDetails/StudentRouteDetailsScreen.js.map +1 -0
  69. package/lib/module/screens/TransportDashboard/TransportDashboard.js +82 -0
  70. package/lib/module/screens/TransportDashboard/TransportDashboard.js.map +1 -0
  71. package/lib/module/services/api/createApiClient.js +111 -0
  72. package/lib/module/services/api/createApiClient.js.map +1 -0
  73. package/lib/module/services/api/types.js +4 -0
  74. package/lib/module/services/api/types.js.map +1 -0
  75. package/lib/module/services/index.js +4 -0
  76. package/lib/module/services/index.js.map +1 -0
  77. package/lib/module/services/transport/studentRouteDetails.js +6 -0
  78. package/lib/module/services/transport/studentRouteDetails.js.map +1 -0
  79. package/lib/module/services/transport/types.js +2 -0
  80. package/lib/module/services/transport/types.js.map +1 -0
  81. package/lib/module/store/index.js +4 -0
  82. package/lib/module/store/index.js.map +1 -0
  83. package/lib/module/types/index.js +2 -0
  84. package/lib/module/types/index.js.map +1 -0
  85. package/lib/module/types/transport.js +2 -0
  86. package/lib/module/types/transport.js.map +1 -0
  87. package/lib/module/utils/index.js +4 -0
  88. package/lib/module/utils/index.js.map +1 -0
  89. package/lib/typescript/assets/index.d.ts +2 -0
  90. package/lib/typescript/assets/index.d.ts.map +1 -0
  91. package/lib/typescript/components/index.d.ts +2 -0
  92. package/lib/typescript/components/index.d.ts.map +1 -0
  93. package/lib/typescript/constants/index.d.ts +2 -0
  94. package/lib/typescript/constants/index.d.ts.map +1 -0
  95. package/lib/typescript/hooks/index.d.ts +2 -0
  96. package/lib/typescript/hooks/index.d.ts.map +1 -0
  97. package/lib/typescript/index.d.ts +8 -0
  98. package/lib/typescript/index.d.ts.map +1 -0
  99. package/lib/typescript/navigation/index.d.ts +2 -0
  100. package/lib/typescript/navigation/index.d.ts.map +1 -0
  101. package/lib/typescript/providers/TransportContext.d.ts +8 -0
  102. package/lib/typescript/providers/TransportContext.d.ts.map +1 -0
  103. package/lib/typescript/providers/TransportProvider.d.ts +3 -0
  104. package/lib/typescript/providers/TransportProvider.d.ts.map +1 -0
  105. package/lib/typescript/providers/types.d.ts +28 -0
  106. package/lib/typescript/providers/types.d.ts.map +1 -0
  107. package/lib/typescript/providers/useTransport.d.ts +2 -0
  108. package/lib/typescript/providers/useTransport.d.ts.map +1 -0
  109. package/lib/typescript/screens/StudentRouteDetails/StudentRouteDetailsScreen.d.ts +6 -0
  110. package/lib/typescript/screens/StudentRouteDetails/StudentRouteDetailsScreen.d.ts.map +1 -0
  111. package/lib/typescript/screens/TransportDashboard/TransportDashboard.d.ts +12 -0
  112. package/lib/typescript/screens/TransportDashboard/TransportDashboard.d.ts.map +1 -0
  113. package/lib/typescript/services/api/createApiClient.d.ts +18 -0
  114. package/lib/typescript/services/api/createApiClient.d.ts.map +1 -0
  115. package/lib/typescript/services/api/types.d.ts +18 -0
  116. package/lib/typescript/services/api/types.d.ts.map +1 -0
  117. package/lib/typescript/services/index.d.ts +2 -0
  118. package/lib/typescript/services/index.d.ts.map +1 -0
  119. package/lib/typescript/services/transport/studentRouteDetails.d.ts +5 -0
  120. package/lib/typescript/services/transport/studentRouteDetails.d.ts.map +1 -0
  121. package/lib/typescript/services/transport/types.d.ts +7 -0
  122. package/lib/typescript/services/transport/types.d.ts.map +1 -0
  123. package/lib/typescript/store/index.d.ts +2 -0
  124. package/lib/typescript/store/index.d.ts.map +1 -0
  125. package/lib/typescript/types/index.d.ts +2 -0
  126. package/lib/typescript/types/index.d.ts.map +1 -0
  127. package/lib/typescript/types/transport.d.ts +12 -0
  128. package/lib/typescript/types/transport.d.ts.map +1 -0
  129. package/lib/typescript/utils/index.d.ts +2 -0
  130. package/lib/typescript/utils/index.d.ts.map +1 -0
  131. package/package.json +61 -0
  132. package/src/assets/index.ts +2 -0
  133. package/src/components/index.ts +2 -0
  134. package/src/constants/index.ts +2 -0
  135. package/src/hooks/index.ts +2 -0
  136. package/src/index.ts +10 -0
  137. package/src/navigation/index.ts +2 -0
  138. package/src/providers/TransportContext.ts +11 -0
  139. package/src/providers/TransportProvider.tsx +47 -0
  140. package/src/providers/types.ts +28 -0
  141. package/src/providers/useTransport.ts +11 -0
  142. package/src/screens/StudentRouteDetails/StudentRouteDetailsScreen.tsx +284 -0
  143. package/src/screens/TransportDashboard/TransportDashboard.tsx +93 -0
  144. package/src/services/api/createApiClient.ts +170 -0
  145. package/src/services/api/types.ts +30 -0
  146. package/src/services/index.ts +2 -0
  147. package/src/services/transport/studentRouteDetails.ts +10 -0
  148. package/src/services/transport/types.ts +7 -0
  149. package/src/store/index.ts +2 -0
  150. package/src/types/index.ts +2 -0
  151. package/src/types/transport.ts +12 -0
  152. 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,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"..\\..\\..\\src","sources":["assets/index.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"..\\..\\..\\src","sources":["components/index.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"..\\..\\..\\src","sources":["constants/index.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=index.js.map
@@ -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,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=index.js.map
@@ -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,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=types.js.map
@@ -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