@ryuzaki13/react-foundation-api 1.1.16 → 1.1.17
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/README.md +32 -43
- package/dist/chunks/{odataFetchFn-vnAXC-c0.js → odataFetchFn-B9wSQpUS.js} +11 -11
- package/dist/chunks/{odataFetchFn-vnAXC-c0.js.map → odataFetchFn-B9wSQpUS.js.map} +1 -1
- package/dist/odata/fetchCollectionData.d.ts +1 -1
- package/dist/odata/fetchCollectionData.d.ts.map +1 -1
- package/dist/odata/index.js +111 -112
- package/dist/odata/index.js.map +1 -1
- package/dist/odata/projectODataCollectionSort.d.ts +1 -1
- package/dist/odata/projectODataCollectionSort.d.ts.map +1 -1
- package/dist/odata/types.d.ts +1 -2
- package/dist/odata/types.d.ts.map +1 -1
- package/dist/odata/useODataCollection.d.ts +1 -1
- package/dist/odata/useODataCollection.d.ts.map +1 -1
- package/dist/odata/useODataCollectionQuery.d.ts +1 -1
- package/dist/odata/useODataCollectionQuery.d.ts.map +1 -1
- package/dist/odata/useODataEntity.d.ts +1 -1
- package/dist/odata/useODataEntity.d.ts.map +1 -1
- package/dist/persisted/index.js +1 -1
- package/package.json +2 -2
- package/src/adt/README.mdx +164 -0
- package/src/async/README.mdx +253 -0
- package/src/error-report/README.mdx +148 -0
- package/src/foundationApi.mdx +123 -0
- package/src/http/README.mdx +221 -0
- package/src/odata/README.mdx +790 -0
- package/src/persisted/README.mdx +454 -0
- package/src/resource/README.mdx +358 -0
- package/src/server-fn/README.mdx +194 -0
- package/src/transport/README.mdx +183 -0
- package/src/README.md +0 -937
- package/src/async/README.md +0 -623
- package/src/async/async.mdx +0 -6
- package/src/odata/README.md +0 -761
- package/src/odata/odataFetchFn.mdx +0 -6
- package/src/persisted/README.md +0 -598
- package/src/persisted/persisted.mdx +0 -6
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { Meta } from "@storybook/addon-docs/blocks";
|
|
2
|
+
|
|
3
|
+
<Meta title="Foundation API/SAP/Transport Requests" />
|
|
4
|
+
|
|
5
|
+
# SAP transport requests через `@ryuzaki13/react-foundation-api/transport`
|
|
6
|
+
|
|
7
|
+
Модуль получает transport requests текущего пользователя из SAP UI2 OData endpoints и нормализует workbench/customizing records.
|
|
8
|
+
|
|
9
|
+
> Здесь слово `transport` означает SAP transport request. Это не generic HTTP transport. Для обычного HTTP используйте [`/http`](../http/README.mdx), для SAP/OData transport infrastructure — [`/odata`](../odata/README.mdx).
|
|
10
|
+
|
|
11
|
+
## Импорт
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import {
|
|
15
|
+
fetchCustomizingTransportRequests,
|
|
16
|
+
fetchTransportRequests,
|
|
17
|
+
fetchUserTransportRequests,
|
|
18
|
+
fetchWorkbenchTransportRequests,
|
|
19
|
+
getTransportRequestKey,
|
|
20
|
+
normalizeTransportRequests,
|
|
21
|
+
transportRequestKeys
|
|
22
|
+
} from "@ryuzaki13/react-foundation-api/transport";
|
|
23
|
+
|
|
24
|
+
import type {
|
|
25
|
+
TransportRequest,
|
|
26
|
+
TransportRequestRaw,
|
|
27
|
+
TransportRequestScope,
|
|
28
|
+
TransportRequestType,
|
|
29
|
+
UserTransportRequests
|
|
30
|
+
} from "@ryuzaki13/react-foundation-api/transport";
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Быстрый старт
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
const requests = await fetchTransportRequests("workbench");
|
|
37
|
+
|
|
38
|
+
for (const request of requests) {
|
|
39
|
+
console.log(request.id, request.text);
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Scopes:
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
type TransportRequestType = "workbench" | "customizing";
|
|
47
|
+
type TransportRequestScope = TransportRequestType | "all";
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Без аргумента загружается только `workbench`.
|
|
51
|
+
|
|
52
|
+
## Fetch functions
|
|
53
|
+
|
|
54
|
+
| Функция | Endpoint | Результат |
|
|
55
|
+
| --- | --- | --- |
|
|
56
|
+
| `fetchWorkbenchTransportRequests` | `/TRANSPORT/WorkbenchRequests` | workbench array |
|
|
57
|
+
| `fetchCustomizingTransportRequests` | `/TRANSPORT/CustomizingRequests` | customizing array |
|
|
58
|
+
| `fetchUserTransportRequests` | Оба endpoint параллельно | `{ workbench, customizing, all }` |
|
|
59
|
+
| `fetchTransportRequests(scope)` | Endpoint по scope | единый array |
|
|
60
|
+
|
|
61
|
+
Используется base URL `odataUi2`: в dev/preview он направлен через настроенный DP0/UI2 proxy, в production — `/sap/opu/odata/UI2`.
|
|
62
|
+
|
|
63
|
+
Запросы наследуют policy OData transport:
|
|
64
|
+
|
|
65
|
+
- `credentials: include`;
|
|
66
|
+
- SAP language/client headers;
|
|
67
|
+
- SSO detection/recovery;
|
|
68
|
+
- OData V2 envelope parsing;
|
|
69
|
+
- HTTP error handling.
|
|
70
|
+
|
|
71
|
+
Если один из двух запросов `fetchUserTransportRequests` завершился ошибкой, `Promise.all` отклоняется и частичный object не возвращается.
|
|
72
|
+
|
|
73
|
+
## Результат
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
interface TransportRequest {
|
|
77
|
+
id: string;
|
|
78
|
+
type: "workbench" | "customizing";
|
|
79
|
+
text: string;
|
|
80
|
+
isDefaultRequest: boolean;
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
`all` формируется как workbench records, затем customizing records:
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
interface UserTransportRequests {
|
|
88
|
+
workbench: TransportRequest[];
|
|
89
|
+
customizing: TransportRequest[];
|
|
90
|
+
all: TransportRequest[];
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## `normalizeTransportRequests`
|
|
95
|
+
|
|
96
|
+
Функция полезна отдельно для тестов или custom transport:
|
|
97
|
+
|
|
98
|
+
```ts
|
|
99
|
+
const normalized = normalizeTransportRequests(
|
|
100
|
+
[
|
|
101
|
+
{ id: " DEVK900001 ", description: " Исправление ", isDefaultRequest: true },
|
|
102
|
+
{ id: "", description: "Без номера" },
|
|
103
|
+
{ id: "DEVK900001", description: "Дубликат" }
|
|
104
|
+
],
|
|
105
|
+
"workbench"
|
|
106
|
+
);
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Результат содержит одну запись `DEVK900001`.
|
|
110
|
+
|
|
111
|
+
Алгоритм:
|
|
112
|
+
|
|
113
|
+
1. `id` нормализуется как text с trim.
|
|
114
|
+
2. Запись без непустого `id` удаляется.
|
|
115
|
+
3. Дубликаты `id` внутри одного input удаляются, сохраняется первый.
|
|
116
|
+
4. `description` нормализуется с trim; отсутствие превращается в пустую строку.
|
|
117
|
+
5. `type` берётся из второго аргумента для всех records.
|
|
118
|
+
6. `isDefaultRequest` равен `true` только при входном значении `true`.
|
|
119
|
+
7. Порядок первых уникальных records сохраняется.
|
|
120
|
+
|
|
121
|
+
Нормализация не изменяет исходный array/objects.
|
|
122
|
+
|
|
123
|
+
## Query keys
|
|
124
|
+
|
|
125
|
+
```ts
|
|
126
|
+
transportRequestKeys.all;
|
|
127
|
+
// ["transportRequests"]
|
|
128
|
+
|
|
129
|
+
transportRequestKeys.list();
|
|
130
|
+
// ["transportRequests", "workbench"]
|
|
131
|
+
|
|
132
|
+
transportRequestKeys.list("all");
|
|
133
|
+
// ["transportRequests", "all"]
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Пример с TanStack Query:
|
|
137
|
+
|
|
138
|
+
```tsx
|
|
139
|
+
const scope: TransportRequestScope = "all";
|
|
140
|
+
|
|
141
|
+
const query = useQuery({
|
|
142
|
+
queryKey: transportRequestKeys.list(scope),
|
|
143
|
+
queryFn: () => fetchTransportRequests(scope)
|
|
144
|
+
});
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Factory ключей не создаёт query options и не передаёт AbortSignal; lifecycle запроса настраивает consumer.
|
|
148
|
+
|
|
149
|
+
## Stable key отдельной записи
|
|
150
|
+
|
|
151
|
+
```ts
|
|
152
|
+
getTransportRequestKey({ type: "workbench", id: "DEVK900001" });
|
|
153
|
+
// "workbench:DEVK900001"
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Включение `type` предотвращает collision одинаковых ID из разных списков. Функция не escaping-ит `:`; SAP transport ID обычно не содержит этот символ.
|
|
157
|
+
|
|
158
|
+
## Отличие от `/adt`
|
|
159
|
+
|
|
160
|
+
| Свойство | `/transport` | `/adt` |
|
|
161
|
+
| --- | --- | --- |
|
|
162
|
+
| Backend | SAP UI2 OData | SAP ADT CTS |
|
|
163
|
+
| Формат | JSON/OData envelope | XML |
|
|
164
|
+
| Категории | workbench/customizing | Общие ADT headers |
|
|
165
|
+
| Parser | OData transport | `fast-xml-parser` |
|
|
166
|
+
|
|
167
|
+
Не объединяйте records автоматически: контракты endpoint и значения полей различаются.
|
|
168
|
+
|
|
169
|
+
## Ошибки и ограничения
|
|
170
|
+
|
|
171
|
+
- Модуль только читает requests; он не создаёт, не освобождает и не импортирует transport.
|
|
172
|
+
- Authorization определяется SAP backend.
|
|
173
|
+
- Пустой/falsy payload endpoint превращается в `[]`; HTTP/SSO errors пробрасываются.
|
|
174
|
+
- Нет автоматической TanStack Query cache policy — используйте экспортированные keys.
|
|
175
|
+
- Runtime требует настроенного SAP proxy/base URLs и cookies.
|
|
176
|
+
|
|
177
|
+
## Полный API
|
|
178
|
+
|
|
179
|
+
| Группа | Exports |
|
|
180
|
+
| --- | --- |
|
|
181
|
+
| Fetch | `fetchWorkbenchTransportRequests`, `fetchCustomizingTransportRequests`, `fetchUserTransportRequests`, `fetchTransportRequests` |
|
|
182
|
+
| Normalize/key | `normalizeTransportRequests`, `transportRequestKeys`, `getTransportRequestKey` |
|
|
183
|
+
| Types | `TransportRequestType`, `TransportRequestScope`, `TransportRequest`, `TransportRequestRaw`, `UserTransportRequests` |
|