ketting 8.0.3 → 8.2.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/dist/action.d.ts +14 -0
- package/dist/action.js +38 -10
- package/dist/action.js.map +1 -1
- package/dist/field.d.ts +31 -11
- package/dist/follow-promise.d.ts +14 -0
- package/dist/follow-promise.js +16 -0
- package/dist/follow-promise.js.map +1 -1
- package/dist/state/base-state.d.ts +2 -0
- package/dist/state/base-state.js +21 -4
- package/dist/state/base-state.js.map +1 -1
- package/dist/state/hal.js +46 -22
- package/dist/state/hal.js.map +1 -1
- package/dist/state/interface.d.ts +7 -1
- package/dist/state/interface.js.map +1 -1
- package/dist/util/fetch-body-helper.js +1 -1
- package/dist/util/fetch-body-helper.js.map +1 -1
- package/package.json +2 -2
- package/src/action.ts +56 -11
- package/src/field.ts +32 -12
- package/src/follow-promise.ts +20 -0
- package/src/state/base-state.ts +28 -5
- package/src/state/hal.ts +51 -25
- package/src/state/interface.ts +8 -1
- package/src/util/fetch-body-helper.ts +1 -1
package/dist/action.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { State } from './state';
|
|
2
2
|
import Client from './client';
|
|
3
3
|
import { Field } from './field';
|
|
4
|
+
import Resource from './resource';
|
|
4
5
|
export interface ActionInfo {
|
|
5
6
|
/**
|
|
6
7
|
* What url to post the form to.
|
|
@@ -43,6 +44,16 @@ export interface Action<T extends Record<string, any> = Record<string, any>> ext
|
|
|
43
44
|
* Return a field by name.
|
|
44
45
|
*/
|
|
45
46
|
field(name: string): Field | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Execute the action or submit the form, then return the next resource.
|
|
49
|
+
*
|
|
50
|
+
* If a server responds with a 201 Status code and a Location header,
|
|
51
|
+
* it will automatically return the newly created resource.
|
|
52
|
+
*
|
|
53
|
+
* If the server responded with a 204 or 205, this function will return
|
|
54
|
+
* `this`.
|
|
55
|
+
*/
|
|
56
|
+
submitFollow(formData: T): Promise<Resource>;
|
|
46
57
|
}
|
|
47
58
|
export declare class SimpleAction<TFormData extends Record<string, any>> implements Action {
|
|
48
59
|
/**
|
|
@@ -82,6 +93,9 @@ export declare class SimpleAction<TFormData extends Record<string, any>> impleme
|
|
|
82
93
|
* Execute the action or submit the form.
|
|
83
94
|
*/
|
|
84
95
|
submit(formData: TFormData): Promise<State<any>>;
|
|
96
|
+
submitFollow(formData: TFormData): Promise<Resource>;
|
|
97
|
+
private validateForm;
|
|
98
|
+
private fetchOrThrowWithBody;
|
|
85
99
|
field(name: string): Field | undefined;
|
|
86
100
|
}
|
|
87
101
|
export declare class ActionNotFound extends Error {
|
package/dist/action.js
CHANGED
|
@@ -14,6 +14,38 @@ class SimpleAction {
|
|
|
14
14
|
*/
|
|
15
15
|
async submit(formData) {
|
|
16
16
|
const uri = new URL(this.uri);
|
|
17
|
+
const newFormData = this.validateForm(formData);
|
|
18
|
+
if (this.method === 'GET') {
|
|
19
|
+
uri.search = qs.stringify(newFormData);
|
|
20
|
+
const resource = this.client.go(uri.toString());
|
|
21
|
+
return resource.get();
|
|
22
|
+
}
|
|
23
|
+
const response = await this.fetchOrThrowWithBody(uri, newFormData);
|
|
24
|
+
const state = this.client.getStateForResponse(uri.toString(), response);
|
|
25
|
+
return state;
|
|
26
|
+
}
|
|
27
|
+
async submitFollow(formData) {
|
|
28
|
+
const uri = new URL(this.uri);
|
|
29
|
+
const newFormData = this.validateForm(formData);
|
|
30
|
+
if (this.method === 'GET') {
|
|
31
|
+
uri.search = qs.stringify(newFormData);
|
|
32
|
+
return this.client.go(uri.toString());
|
|
33
|
+
}
|
|
34
|
+
const response = await this.fetchOrThrowWithBody(uri, newFormData);
|
|
35
|
+
switch (response.status) {
|
|
36
|
+
case 201:
|
|
37
|
+
if (response.headers.has('location')) {
|
|
38
|
+
return this.client.go(response.headers.get('location'));
|
|
39
|
+
}
|
|
40
|
+
throw new Error('Could not follow after a 201 request, because the server did not reply with a Location header. If you sent a Location header, check if your service is returning "Access-Control-Expose-Headers: Location".');
|
|
41
|
+
case 204:
|
|
42
|
+
case 205:
|
|
43
|
+
return this.client.go(uri.toString());
|
|
44
|
+
default:
|
|
45
|
+
throw new Error('Did not receive a 201, 204 or 205 status code so we could not follow to the next resource');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
validateForm(formData) {
|
|
17
49
|
const newFormData = {
|
|
18
50
|
...formData
|
|
19
51
|
};
|
|
@@ -29,31 +61,27 @@ class SimpleAction {
|
|
|
29
61
|
}
|
|
30
62
|
}
|
|
31
63
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
return resource.get();
|
|
36
|
-
}
|
|
64
|
+
return newFormData;
|
|
65
|
+
}
|
|
66
|
+
fetchOrThrowWithBody(uri, formData) {
|
|
37
67
|
let body;
|
|
38
68
|
switch (this.contentType) {
|
|
39
69
|
case 'application/x-www-form-urlencoded':
|
|
40
|
-
body = qs.stringify(
|
|
70
|
+
body = qs.stringify(formData);
|
|
41
71
|
break;
|
|
42
72
|
case 'application/json':
|
|
43
|
-
body = JSON.stringify(
|
|
73
|
+
body = JSON.stringify(formData);
|
|
44
74
|
break;
|
|
45
75
|
default:
|
|
46
76
|
throw new Error(`Serializing mimetype ${this.contentType} is not yet supported in actions`);
|
|
47
77
|
}
|
|
48
|
-
|
|
78
|
+
return this.client.fetcher.fetchOrThrow(uri.toString(), {
|
|
49
79
|
method: this.method,
|
|
50
80
|
body,
|
|
51
81
|
headers: {
|
|
52
82
|
'Content-Type': this.contentType
|
|
53
83
|
}
|
|
54
84
|
});
|
|
55
|
-
const state = this.client.getStateForResponse(uri.toString(), response);
|
|
56
|
-
return state;
|
|
57
85
|
}
|
|
58
86
|
field(name) {
|
|
59
87
|
return this.fields.find(field => field.name === name);
|
package/dist/action.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","sourceRoot":"","sources":["../src/action.ts"],"names":[],"mappings":";;;AACA,kCAAkC;
|
|
1
|
+
{"version":3,"file":"action.js","sourceRoot":"","sources":["../src/action.ts"],"names":[],"mappings":"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"}
|
package/dist/field.d.ts
CHANGED
|
@@ -18,10 +18,6 @@ interface BaseField<T> {
|
|
|
18
18
|
* This is similar to the HTML5 "type" attribute on forms.
|
|
19
19
|
*/
|
|
20
20
|
type: string;
|
|
21
|
-
/**
|
|
22
|
-
* The current (pre-filed) value on the form.
|
|
23
|
-
*/
|
|
24
|
-
value?: T;
|
|
25
21
|
/**
|
|
26
22
|
* This could be used to describe a sample value.
|
|
27
23
|
*/
|
|
@@ -39,12 +35,18 @@ interface BaseField<T> {
|
|
|
39
35
|
*/
|
|
40
36
|
label?: string;
|
|
41
37
|
}
|
|
38
|
+
interface SingleValueField<T> extends BaseField<T> {
|
|
39
|
+
/**
|
|
40
|
+
* The current (pre-filed) value on the form.
|
|
41
|
+
*/
|
|
42
|
+
value?: T;
|
|
43
|
+
}
|
|
42
44
|
/**
|
|
43
45
|
* The base type for things that are range-like.
|
|
44
46
|
*
|
|
45
47
|
* This includes numbers, dates and time fields.
|
|
46
48
|
*/
|
|
47
|
-
export interface RangeField<T> extends
|
|
49
|
+
export interface RangeField<T> extends SingleValueField<T> {
|
|
48
50
|
max?: number;
|
|
49
51
|
min?: number;
|
|
50
52
|
step?: number;
|
|
@@ -52,14 +54,14 @@ export interface RangeField<T> extends BaseField<T> {
|
|
|
52
54
|
/**
|
|
53
55
|
* Toggles/checkboxes
|
|
54
56
|
*/
|
|
55
|
-
export interface BooleanField extends
|
|
57
|
+
export interface BooleanField extends SingleValueField<boolean> {
|
|
56
58
|
type: 'checkbox' | 'radio';
|
|
57
59
|
}
|
|
58
60
|
/**
|
|
59
61
|
* Any field that encodes itself as a string but with no
|
|
60
62
|
* special features.
|
|
61
63
|
*/
|
|
62
|
-
export interface BasicStringField extends
|
|
64
|
+
export interface BasicStringField extends SingleValueField<string> {
|
|
63
65
|
type: 'color' | 'email' | 'password' | 'search' | 'tel' | 'url';
|
|
64
66
|
minLength?: number;
|
|
65
67
|
maxLength?: number;
|
|
@@ -70,10 +72,10 @@ export interface RangeStringField extends RangeField<string> {
|
|
|
70
72
|
export interface DateTimeField extends RangeField<Date> {
|
|
71
73
|
type: 'datetime' | 'datetime-local';
|
|
72
74
|
}
|
|
73
|
-
export interface HiddenField extends
|
|
75
|
+
export interface HiddenField extends SingleValueField<string | number | null | boolean> {
|
|
74
76
|
type: 'hidden';
|
|
75
77
|
}
|
|
76
|
-
export interface FileField extends
|
|
78
|
+
export interface FileField extends SingleValueField<never> {
|
|
77
79
|
type: 'file';
|
|
78
80
|
}
|
|
79
81
|
export interface NumberField extends RangeField<number> {
|
|
@@ -138,6 +140,15 @@ export type SelectFieldSingle = BaseField<string> & {
|
|
|
138
140
|
type: 'select';
|
|
139
141
|
renderAs?: 'radio' | 'dropdown';
|
|
140
142
|
multiple?: false;
|
|
143
|
+
/**
|
|
144
|
+
* The current (pre-filed) value on the form.
|
|
145
|
+
*/
|
|
146
|
+
selectedValue?: string;
|
|
147
|
+
/**
|
|
148
|
+
* The current (pre-filed) value on the form.
|
|
149
|
+
* @deprecated Use selectedValue instead
|
|
150
|
+
*/
|
|
151
|
+
value?: string;
|
|
141
152
|
} & OptionsDataSource;
|
|
142
153
|
/**
|
|
143
154
|
* An options field where users can select more than 1 item
|
|
@@ -146,14 +157,23 @@ export type SelectFieldMulti = BaseField<string> & {
|
|
|
146
157
|
type: 'select';
|
|
147
158
|
renderAs?: 'checkbox' | 'dropdown';
|
|
148
159
|
multiple: true;
|
|
160
|
+
/**
|
|
161
|
+
* The current (pre-filed) values on the form.
|
|
162
|
+
*/
|
|
163
|
+
selectedValues?: string[];
|
|
164
|
+
/**
|
|
165
|
+
* The current (pre-filed) value on the form.
|
|
166
|
+
* @deprecated Use selectedValues instead
|
|
167
|
+
*/
|
|
168
|
+
value?: string;
|
|
149
169
|
} & OptionsDataSource;
|
|
150
|
-
export interface TextField extends
|
|
170
|
+
export interface TextField extends SingleValueField<string> {
|
|
151
171
|
type: 'text';
|
|
152
172
|
minLength?: number;
|
|
153
173
|
maxLength?: number;
|
|
154
174
|
pattern?: RegExp;
|
|
155
175
|
}
|
|
156
|
-
export interface TextAreaField extends
|
|
176
|
+
export interface TextAreaField extends SingleValueField<string> {
|
|
157
177
|
type: 'textarea';
|
|
158
178
|
minLength?: number;
|
|
159
179
|
maxLength?: number;
|
package/dist/follow-promise.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import Resource from './resource';
|
|
2
2
|
import { LinkVariables } from './link';
|
|
3
|
+
import { State } from './state';
|
|
4
|
+
import { GetRequestOptions } from './types';
|
|
3
5
|
/**
|
|
4
6
|
* Base interface for both FollowOne and FollowAll
|
|
5
7
|
*/
|
|
@@ -63,6 +65,12 @@ export declare class FollowPromiseOne<T = any> extends FollowPromise<Resource<T>
|
|
|
63
65
|
* For example: resource.follow('foo').follow('bar');
|
|
64
66
|
*/
|
|
65
67
|
follow<TNested = any>(rel: string, variables?: LinkVariables): FollowPromiseOne<TNested>;
|
|
68
|
+
/**
|
|
69
|
+
* Gets the current state of the resource.
|
|
70
|
+
*
|
|
71
|
+
* This function will return a State object.
|
|
72
|
+
*/
|
|
73
|
+
get(getOptions?: GetRequestOptions): Promise<State<T>>;
|
|
66
74
|
/**
|
|
67
75
|
* Follows a set of links immediately after following this link.
|
|
68
76
|
*
|
|
@@ -93,6 +101,12 @@ export declare class FollowPromiseMany<T = any> extends FollowPromise<Resource<T
|
|
|
93
101
|
* Implementation of a Promise.finally function
|
|
94
102
|
*/
|
|
95
103
|
finally<TResult1 = any>(onfinally: () => TResult1 | PromiseLike<TResult1>): Promise<TResult1>;
|
|
104
|
+
/**
|
|
105
|
+
* Gets the current states of the resources.
|
|
106
|
+
*
|
|
107
|
+
* This function will return an array of State object.
|
|
108
|
+
*/
|
|
109
|
+
get(getOptions?: GetRequestOptions): Promise<State<T>[]>;
|
|
96
110
|
/**
|
|
97
111
|
* This function does the actual fetching, to obtained the url
|
|
98
112
|
* of the linked resource. It returns the Resource object.
|
package/dist/follow-promise.js
CHANGED
|
@@ -82,6 +82,14 @@ class FollowPromiseOne extends FollowPromise {
|
|
|
82
82
|
follow(rel, variables) {
|
|
83
83
|
return new FollowPromiseOne(this.fetchLinkedResource(), rel, variables);
|
|
84
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Gets the current state of the resource.
|
|
87
|
+
*
|
|
88
|
+
* This function will return a State object.
|
|
89
|
+
*/
|
|
90
|
+
async get(getOptions) {
|
|
91
|
+
return (await this).get(getOptions);
|
|
92
|
+
}
|
|
85
93
|
/**
|
|
86
94
|
* Follows a set of links immediately after following this link.
|
|
87
95
|
*
|
|
@@ -146,6 +154,14 @@ class FollowPromiseMany extends FollowPromise {
|
|
|
146
154
|
finally(onfinally) {
|
|
147
155
|
return this.then(() => onfinally(), () => onfinally());
|
|
148
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* Gets the current states of the resources.
|
|
159
|
+
*
|
|
160
|
+
* This function will return an array of State object.
|
|
161
|
+
*/
|
|
162
|
+
async get(getOptions) {
|
|
163
|
+
return Promise.all((await this).map(resource => resource.get(getOptions)));
|
|
164
|
+
}
|
|
149
165
|
/**
|
|
150
166
|
* This function does the actual fetching, to obtained the url
|
|
151
167
|
* of the linked resource. It returns the Resource object.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"follow-promise.js","sourceRoot":"","sources":["../src/follow-promise.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"follow-promise.js","sourceRoot":"","sources":["../src/follow-promise.ts"],"names":[],"mappings":"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"}
|
|
@@ -83,6 +83,8 @@ export declare class BaseState<T> extends BaseHeadState implements State<T> {
|
|
|
83
83
|
* formats that only supply 1 action, and no name.
|
|
84
84
|
*/
|
|
85
85
|
action<TFormData extends Record<string, any> = any>(name?: string): Action<TFormData>;
|
|
86
|
+
findAction<TFormData extends Record<string, any> = any>(name?: string): Action<TFormData> | undefined;
|
|
87
|
+
private doFindAction;
|
|
86
88
|
/**
|
|
87
89
|
* Returns all actions
|
|
88
90
|
*/
|
package/dist/state/base-state.js
CHANGED
|
@@ -93,9 +93,26 @@ class BaseState extends BaseHeadState {
|
|
|
93
93
|
* formats that only supply 1 action, and no name.
|
|
94
94
|
*/
|
|
95
95
|
action(name) {
|
|
96
|
-
|
|
96
|
+
const actionSearchResult = this.doFindAction(name);
|
|
97
|
+
if (actionSearchResult === 'NO_ACTION_DEFINED') {
|
|
97
98
|
throw new action_1.ActionNotFound('This State does not define any actions');
|
|
98
99
|
}
|
|
100
|
+
if (actionSearchResult === 'NO_ACTION_FOR_THE_PROVIDED_NAME') {
|
|
101
|
+
throw new action_1.ActionNotFound('This State defines no action');
|
|
102
|
+
}
|
|
103
|
+
return actionSearchResult;
|
|
104
|
+
}
|
|
105
|
+
findAction(name) {
|
|
106
|
+
const actionSearchResult = this.doFindAction(name);
|
|
107
|
+
if (typeof actionSearchResult !== 'object') {
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
return actionSearchResult;
|
|
111
|
+
}
|
|
112
|
+
doFindAction(name) {
|
|
113
|
+
if (!this.actionInfo.length) {
|
|
114
|
+
return 'NO_ACTION_DEFINED';
|
|
115
|
+
}
|
|
99
116
|
if (name === undefined) {
|
|
100
117
|
return new action_1.SimpleAction(this.client, this.actionInfo[0]);
|
|
101
118
|
}
|
|
@@ -104,7 +121,7 @@ class BaseState extends BaseHeadState {
|
|
|
104
121
|
return new action_1.SimpleAction(this.client, action);
|
|
105
122
|
}
|
|
106
123
|
}
|
|
107
|
-
|
|
124
|
+
return 'NO_ACTION_FOR_THE_PROVIDED_NAME';
|
|
108
125
|
}
|
|
109
126
|
/**
|
|
110
127
|
* Returns all actions
|
|
@@ -135,8 +152,8 @@ class BaseState extends BaseHeadState {
|
|
|
135
152
|
* JSON.serialize().
|
|
136
153
|
*/
|
|
137
154
|
serializeBody() {
|
|
138
|
-
if ((
|
|
139
|
-
(
|
|
155
|
+
if ((globalThis.Buffer && this.data instanceof Buffer) ||
|
|
156
|
+
(globalThis.Blob && this.data instanceof Blob) ||
|
|
140
157
|
typeof this.data === 'string') {
|
|
141
158
|
return this.data;
|
|
142
159
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-state.js","sourceRoot":"","sources":["../../src/state/base-state.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"base-state.js","sourceRoot":"","sources":["../../src/state/base-state.ts"],"names":[],"mappings":"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"}
|
package/dist/state/hal.js
CHANGED
|
@@ -160,7 +160,6 @@ function parseHalEmbedded(client, context, body, headers) {
|
|
|
160
160
|
}
|
|
161
161
|
for (const embeddedItem of embeddedList) {
|
|
162
162
|
if (embeddedItem._links?.self?.href === undefined) {
|
|
163
|
-
// eslint-disable-next-line no-console
|
|
164
163
|
console.warn('An item in _embedded was ignored. Each item must have a single "self" link');
|
|
165
164
|
continue;
|
|
166
165
|
}
|
|
@@ -207,41 +206,40 @@ function parseHalField(halField) {
|
|
|
207
206
|
case 'url':
|
|
208
207
|
case 'email':
|
|
209
208
|
if (halField.options) {
|
|
209
|
+
const multiple = !('maxItems' in halField.options) || !halField.options.maxItems || halField.options.maxItems > 1;
|
|
210
210
|
const baseField = {
|
|
211
211
|
name: halField.name,
|
|
212
212
|
type: 'select',
|
|
213
213
|
label: halField.prompt,
|
|
214
214
|
required: halField.required || false,
|
|
215
215
|
readOnly: halField.readOnly || false,
|
|
216
|
-
|
|
217
|
-
value: (halField.options.selectedValues || halField.value)
|
|
216
|
+
value: (halField.options.selectedValues || halField.value),
|
|
218
217
|
};
|
|
219
|
-
const
|
|
220
|
-
|
|
221
|
-
if (isInlineOptions(halField.options)) {
|
|
222
|
-
const options = {};
|
|
223
|
-
for (const entry of halField.options.inline) {
|
|
224
|
-
if (typeof entry === 'string') {
|
|
225
|
-
options[entry] = entry;
|
|
226
|
-
}
|
|
227
|
-
else {
|
|
228
|
-
options[entry[valueField]] = entry[labelField];
|
|
229
|
-
}
|
|
230
|
-
}
|
|
218
|
+
const optionsDataSource = toOptionsDataSource(halField.options);
|
|
219
|
+
if (multiple) {
|
|
231
220
|
return {
|
|
221
|
+
multiple: true,
|
|
222
|
+
selectedValues: halField.options.selectedValues,
|
|
232
223
|
...baseField,
|
|
233
|
-
|
|
224
|
+
...optionsDataSource
|
|
234
225
|
};
|
|
235
226
|
}
|
|
236
227
|
else {
|
|
228
|
+
const selectedValues = halField.options.selectedValues;
|
|
229
|
+
let selectedValue;
|
|
230
|
+
if (selectedValues) {
|
|
231
|
+
if (selectedValues.length === 1) {
|
|
232
|
+
selectedValue = selectedValues[0];
|
|
233
|
+
}
|
|
234
|
+
else if (selectedValues.length > 1) {
|
|
235
|
+
console.warn(`More than 1 selected value received for single select field ${baseField.name}. Ignoring all selected values for this field.`);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
237
238
|
return {
|
|
239
|
+
multiple,
|
|
240
|
+
selectedValue,
|
|
238
241
|
...baseField,
|
|
239
|
-
|
|
240
|
-
href: halField.options.link.href,
|
|
241
|
-
type: halField.options.link.type,
|
|
242
|
-
labelField,
|
|
243
|
-
valueField,
|
|
244
|
-
}
|
|
242
|
+
...optionsDataSource
|
|
245
243
|
};
|
|
246
244
|
}
|
|
247
245
|
}
|
|
@@ -357,6 +355,32 @@ function parseHalField(halField) {
|
|
|
357
355
|
return undefined;
|
|
358
356
|
}
|
|
359
357
|
}
|
|
358
|
+
function toOptionsDataSource(halFieldOptions) {
|
|
359
|
+
const labelField = halFieldOptions.promptField || 'prompt';
|
|
360
|
+
const valueField = halFieldOptions.valueField || 'value';
|
|
361
|
+
if (isInlineOptions(halFieldOptions)) {
|
|
362
|
+
const options = {};
|
|
363
|
+
for (const entry of halFieldOptions.inline) {
|
|
364
|
+
if (typeof entry === 'string') {
|
|
365
|
+
options[entry] = entry;
|
|
366
|
+
}
|
|
367
|
+
else {
|
|
368
|
+
options[entry[valueField]] = entry[labelField];
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
return { options };
|
|
372
|
+
}
|
|
373
|
+
else {
|
|
374
|
+
return {
|
|
375
|
+
dataSource: {
|
|
376
|
+
href: halFieldOptions.link.href,
|
|
377
|
+
type: halFieldOptions.link.type,
|
|
378
|
+
labelField,
|
|
379
|
+
valueField,
|
|
380
|
+
}
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
}
|
|
360
384
|
function isInlineOptions(options) {
|
|
361
385
|
return options.inline !== undefined;
|
|
362
386
|
}
|
package/dist/state/hal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hal.js","sourceRoot":"","sources":["../../src/state/hal.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hal.js","sourceRoot":"","sources":["../../src/state/hal.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,6 +46,12 @@ export type State<T = any> = {
|
|
|
46
46
|
* If the format provides a default action, the name may be omitted.
|
|
47
47
|
*/
|
|
48
48
|
action<TFormData extends Record<string, any> = any>(name?: string): Action<TFormData>;
|
|
49
|
+
/**
|
|
50
|
+
* Find an action by name.
|
|
51
|
+
*
|
|
52
|
+
* If the format provides a default action, the name may be omitted.
|
|
53
|
+
*/
|
|
54
|
+
findAction<TFormData extends Record<string, any> = any>(name?: string): Action<TFormData> | undefined;
|
|
49
55
|
/**
|
|
50
56
|
* Returns all actions
|
|
51
57
|
*/
|
|
@@ -98,7 +104,7 @@ export type State<T = any> = {
|
|
|
98
104
|
* Some information in HEAD responses might be available, but many aren't.
|
|
99
105
|
* Notably, the body.
|
|
100
106
|
*/
|
|
101
|
-
export type HeadState = Omit<State, 'data' | 'action' | 'actions' | 'hasAction' | 'serializeBody' | 'getEmbedded' | 'client' | 'clone'>;
|
|
107
|
+
export type HeadState = Omit<State, 'data' | 'action' | 'findAction' | 'actions' | 'hasAction' | 'serializeBody' | 'getEmbedded' | 'client' | 'clone'>;
|
|
102
108
|
/**
|
|
103
109
|
* A 'StateFactory' is responsible for taking a Fetch Response, and returning
|
|
104
110
|
* an object that impements the State interface
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/state/interface.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/state/interface.ts"],"names":[],"mappings":";;AAqIA,0BAQC;AA5ID,kCAA+C;AAoI/C,SAAgB,OAAO,CAAC,KAA0B;IAEhD,OAAO,CACL,OAAQ,KAAa,CAAC,GAAG,KAAK,QAAQ;QACrC,KAAa,CAAC,KAAK,YAAY,YAAK;QACpC,KAAa,CAAC,OAAO,YAAY,OAAO,CAC1C,CAAC;AAEJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-body-helper.js","sourceRoot":"","sources":["../../src/util/fetch-body-helper.ts"],"names":[],"mappings":";;AAAA,gDAYC;AAZD,SAAgB,kBAAkB,CAAC,KAAU;IAE3C,IAAI,OAAO,KAAK,KAAI,QAAQ,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"fetch-body-helper.js","sourceRoot":"","sources":["../../src/util/fetch-body-helper.ts"],"names":[],"mappings":";;AAAA,gDAYC;AAZD,SAAgB,kBAAkB,CAAC,KAAU;IAE3C,IAAI,OAAO,KAAK,KAAI,QAAQ,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,IAAI,KAAK,YAAY,MAAM,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AAEd,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ketting",
|
|
3
|
-
"version": "8.0
|
|
3
|
+
"version": "8.2.0",
|
|
4
4
|
"description": "Opiniated HATEAOS / Rest client.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"types": "dist/index.d.ts",
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@badgateway/oauth2-client": "^2.0.17",
|
|
42
|
-
"hal-types": "^
|
|
42
|
+
"hal-types": "^3.0.0",
|
|
43
43
|
"http-link-header": "^1.0.3",
|
|
44
44
|
"querystring-browser": "^1.0.4",
|
|
45
45
|
"sax": "^1.2.4",
|
package/src/action.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { State } from './state';
|
|
|
2
2
|
import * as qs from 'querystring';
|
|
3
3
|
import Client from './client';
|
|
4
4
|
import { Field } from './field';
|
|
5
|
+
import Resource from './resource';
|
|
5
6
|
|
|
6
7
|
export interface ActionInfo {
|
|
7
8
|
|
|
@@ -54,6 +55,17 @@ export interface Action<T extends Record<string, any> = Record<string, any>> ext
|
|
|
54
55
|
* Return a field by name.
|
|
55
56
|
*/
|
|
56
57
|
field(name: string): Field | undefined;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Execute the action or submit the form, then return the next resource.
|
|
61
|
+
*
|
|
62
|
+
* If a server responds with a 201 Status code and a Location header,
|
|
63
|
+
* it will automatically return the newly created resource.
|
|
64
|
+
*
|
|
65
|
+
* If the server responded with a 204 or 205, this function will return
|
|
66
|
+
* `this`.
|
|
67
|
+
*/
|
|
68
|
+
submitFollow(formData: T): Promise<Resource>;
|
|
57
69
|
}
|
|
58
70
|
|
|
59
71
|
export class SimpleAction<TFormData extends Record<string, any>> implements Action {
|
|
@@ -113,6 +125,44 @@ export class SimpleAction<TFormData extends Record<string, any>> implements Acti
|
|
|
113
125
|
|
|
114
126
|
const uri = new URL(this.uri);
|
|
115
127
|
|
|
128
|
+
const newFormData = this.validateForm(formData);
|
|
129
|
+
|
|
130
|
+
if (this.method === 'GET') {
|
|
131
|
+
uri.search = qs.stringify(newFormData);
|
|
132
|
+
const resource = this.client.go(uri.toString());
|
|
133
|
+
return resource.get();
|
|
134
|
+
}
|
|
135
|
+
const response = await this.fetchOrThrowWithBody(uri, newFormData);
|
|
136
|
+
const state = this.client.getStateForResponse(uri.toString(), response);
|
|
137
|
+
return state;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
async submitFollow(formData: TFormData): Promise<Resource> {
|
|
141
|
+
const uri = new URL(this.uri);
|
|
142
|
+
|
|
143
|
+
const newFormData = this.validateForm(formData);
|
|
144
|
+
|
|
145
|
+
if (this.method === 'GET') {
|
|
146
|
+
uri.search = qs.stringify(newFormData);
|
|
147
|
+
return this.client.go(uri.toString());
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const response = await this.fetchOrThrowWithBody(uri, newFormData);
|
|
151
|
+
switch (response.status) {
|
|
152
|
+
case 201:
|
|
153
|
+
if (response.headers.has('location')) {
|
|
154
|
+
return this.client.go(response.headers.get('location')!);
|
|
155
|
+
}
|
|
156
|
+
throw new Error('Could not follow after a 201 request, because the server did not reply with a Location header. If you sent a Location header, check if your service is returning "Access-Control-Expose-Headers: Location".');
|
|
157
|
+
case 204 :
|
|
158
|
+
case 205 :
|
|
159
|
+
return this.client.go(uri.toString());
|
|
160
|
+
default:
|
|
161
|
+
throw new Error('Did not receive a 201, 204 or 205 status code so we could not follow to the next resource');
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
private validateForm(formData: TFormData): TFormData {
|
|
116
166
|
const newFormData: TFormData = {
|
|
117
167
|
...formData
|
|
118
168
|
};
|
|
@@ -132,33 +182,28 @@ export class SimpleAction<TFormData extends Record<string, any>> implements Acti
|
|
|
132
182
|
}
|
|
133
183
|
|
|
134
184
|
}
|
|
185
|
+
return newFormData;
|
|
186
|
+
}
|
|
135
187
|
|
|
136
|
-
|
|
137
|
-
uri.search = qs.stringify(newFormData);
|
|
138
|
-
const resource = this.client.go(uri.toString());
|
|
139
|
-
return resource.get();
|
|
140
|
-
}
|
|
188
|
+
private fetchOrThrowWithBody(uri: URL, formData: TFormData): Promise<Response> {
|
|
141
189
|
let body;
|
|
142
190
|
switch (this.contentType) {
|
|
143
191
|
case 'application/x-www-form-urlencoded' :
|
|
144
|
-
body = qs.stringify(
|
|
192
|
+
body = qs.stringify(formData);
|
|
145
193
|
break;
|
|
146
194
|
case 'application/json':
|
|
147
|
-
body = JSON.stringify(
|
|
195
|
+
body = JSON.stringify(formData);
|
|
148
196
|
break;
|
|
149
197
|
default :
|
|
150
198
|
throw new Error(`Serializing mimetype ${this.contentType} is not yet supported in actions`);
|
|
151
199
|
}
|
|
152
|
-
|
|
200
|
+
return this.client.fetcher.fetchOrThrow(uri.toString(), {
|
|
153
201
|
method: this.method,
|
|
154
202
|
body,
|
|
155
203
|
headers: {
|
|
156
204
|
'Content-Type': this.contentType
|
|
157
205
|
}
|
|
158
206
|
});
|
|
159
|
-
const state = this.client.getStateForResponse(uri.toString(), response);
|
|
160
|
-
return state;
|
|
161
|
-
|
|
162
207
|
}
|
|
163
208
|
|
|
164
209
|
field(name: string): Field | undefined {
|
package/src/field.ts
CHANGED
|
@@ -32,11 +32,6 @@ interface BaseField<T> {
|
|
|
32
32
|
*/
|
|
33
33
|
type: string;
|
|
34
34
|
|
|
35
|
-
/**
|
|
36
|
-
* The current (pre-filed) value on the form.
|
|
37
|
-
*/
|
|
38
|
-
value?: T;
|
|
39
|
-
|
|
40
35
|
/**
|
|
41
36
|
* This could be used to describe a sample value.
|
|
42
37
|
*/
|
|
@@ -58,12 +53,19 @@ interface BaseField<T> {
|
|
|
58
53
|
label?: string;
|
|
59
54
|
}
|
|
60
55
|
|
|
56
|
+
interface SingleValueField<T> extends BaseField<T> {
|
|
57
|
+
/**
|
|
58
|
+
* The current (pre-filed) value on the form.
|
|
59
|
+
*/
|
|
60
|
+
value?: T;
|
|
61
|
+
}
|
|
62
|
+
|
|
61
63
|
/**
|
|
62
64
|
* The base type for things that are range-like.
|
|
63
65
|
*
|
|
64
66
|
* This includes numbers, dates and time fields.
|
|
65
67
|
*/
|
|
66
|
-
export interface RangeField<T> extends
|
|
68
|
+
export interface RangeField<T> extends SingleValueField<T> {
|
|
67
69
|
max?: number;
|
|
68
70
|
min?: number;
|
|
69
71
|
step?: number;
|
|
@@ -72,7 +74,7 @@ export interface RangeField<T> extends BaseField<T> {
|
|
|
72
74
|
/**
|
|
73
75
|
* Toggles/checkboxes
|
|
74
76
|
*/
|
|
75
|
-
export interface BooleanField extends
|
|
77
|
+
export interface BooleanField extends SingleValueField<boolean> {
|
|
76
78
|
type: 'checkbox' | 'radio';
|
|
77
79
|
}
|
|
78
80
|
|
|
@@ -80,7 +82,7 @@ export interface BooleanField extends BaseField<boolean> {
|
|
|
80
82
|
* Any field that encodes itself as a string but with no
|
|
81
83
|
* special features.
|
|
82
84
|
*/
|
|
83
|
-
export interface BasicStringField extends
|
|
85
|
+
export interface BasicStringField extends SingleValueField<string> {
|
|
84
86
|
type: 'color' | 'email' | 'password' | 'search' | 'tel' | 'url';
|
|
85
87
|
minLength?: number;
|
|
86
88
|
maxLength?: number;
|
|
@@ -94,11 +96,11 @@ export interface DateTimeField extends RangeField<Date> {
|
|
|
94
96
|
type: 'datetime' | 'datetime-local';
|
|
95
97
|
}
|
|
96
98
|
|
|
97
|
-
export interface HiddenField extends
|
|
99
|
+
export interface HiddenField extends SingleValueField<string | number | null | boolean> {
|
|
98
100
|
type: 'hidden';
|
|
99
101
|
}
|
|
100
102
|
|
|
101
|
-
export interface FileField extends
|
|
103
|
+
export interface FileField extends SingleValueField<never> {
|
|
102
104
|
type: 'file';
|
|
103
105
|
}
|
|
104
106
|
|
|
@@ -170,6 +172,15 @@ export type SelectFieldSingle = BaseField<string> & {
|
|
|
170
172
|
type: 'select';
|
|
171
173
|
renderAs?: 'radio' | 'dropdown';
|
|
172
174
|
multiple?: false;
|
|
175
|
+
/**
|
|
176
|
+
* The current (pre-filed) value on the form.
|
|
177
|
+
*/
|
|
178
|
+
selectedValue?: string;
|
|
179
|
+
/**
|
|
180
|
+
* The current (pre-filed) value on the form.
|
|
181
|
+
* @deprecated Use selectedValue instead
|
|
182
|
+
*/
|
|
183
|
+
value?: string;
|
|
173
184
|
} & OptionsDataSource;
|
|
174
185
|
|
|
175
186
|
/**
|
|
@@ -179,17 +190,26 @@ export type SelectFieldMulti = BaseField<string> & {
|
|
|
179
190
|
type: 'select';
|
|
180
191
|
renderAs?: 'checkbox' | 'dropdown';
|
|
181
192
|
multiple: true;
|
|
193
|
+
/**
|
|
194
|
+
* The current (pre-filed) values on the form.
|
|
195
|
+
*/
|
|
196
|
+
selectedValues?: string[];
|
|
197
|
+
/**
|
|
198
|
+
* The current (pre-filed) value on the form.
|
|
199
|
+
* @deprecated Use selectedValues instead
|
|
200
|
+
*/
|
|
201
|
+
value?: string;
|
|
182
202
|
} & OptionsDataSource;
|
|
183
203
|
|
|
184
204
|
|
|
185
|
-
export interface TextField extends
|
|
205
|
+
export interface TextField extends SingleValueField<string> {
|
|
186
206
|
type: 'text';
|
|
187
207
|
minLength?: number;
|
|
188
208
|
maxLength?: number;
|
|
189
209
|
pattern?: RegExp;
|
|
190
210
|
}
|
|
191
211
|
|
|
192
|
-
export interface TextAreaField extends
|
|
212
|
+
export interface TextAreaField extends SingleValueField<string> {
|
|
193
213
|
type: 'textarea';
|
|
194
214
|
minLength?: number;
|
|
195
215
|
maxLength?: number;
|
package/src/follow-promise.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import Resource from './resource';
|
|
2
2
|
import { LinkVariables } from './link';
|
|
3
|
+
import {State} from './state';
|
|
4
|
+
import {GetRequestOptions} from './types';
|
|
3
5
|
|
|
4
6
|
/**
|
|
5
7
|
* Base interface for both FollowOne and FollowAll
|
|
@@ -123,6 +125,15 @@ export class FollowPromiseOne<T = any> extends FollowPromise<Resource<T>> {
|
|
|
123
125
|
|
|
124
126
|
}
|
|
125
127
|
|
|
128
|
+
/**
|
|
129
|
+
* Gets the current state of the resource.
|
|
130
|
+
*
|
|
131
|
+
* This function will return a State object.
|
|
132
|
+
*/
|
|
133
|
+
async get(getOptions?: GetRequestOptions): Promise<State<T>> {
|
|
134
|
+
return (await this).get(getOptions);
|
|
135
|
+
}
|
|
136
|
+
|
|
126
137
|
/**
|
|
127
138
|
* Follows a set of links immediately after following this link.
|
|
128
139
|
*
|
|
@@ -219,6 +230,15 @@ export class FollowPromiseMany<T = any> extends FollowPromise<Resource<T>[]> {
|
|
|
219
230
|
|
|
220
231
|
}
|
|
221
232
|
|
|
233
|
+
/**
|
|
234
|
+
* Gets the current states of the resources.
|
|
235
|
+
*
|
|
236
|
+
* This function will return an array of State object.
|
|
237
|
+
*/
|
|
238
|
+
async get(getOptions?: GetRequestOptions): Promise<State<T>[]> {
|
|
239
|
+
return Promise.all((await this).map(resource => resource.get(getOptions)));
|
|
240
|
+
}
|
|
241
|
+
|
|
222
242
|
/**
|
|
223
243
|
* This function does the actual fetching, to obtained the url
|
|
224
244
|
* of the linked resource. It returns the Resource object.
|
package/src/state/base-state.ts
CHANGED
|
@@ -165,9 +165,31 @@ export class BaseState<T> extends BaseHeadState implements State<T> {
|
|
|
165
165
|
*/
|
|
166
166
|
action<TFormData extends Record<string, any> = any>(name?: string): Action<TFormData> {
|
|
167
167
|
|
|
168
|
-
|
|
168
|
+
const actionSearchResult = this.doFindAction(name);
|
|
169
|
+
if (actionSearchResult === 'NO_ACTION_DEFINED') {
|
|
169
170
|
throw new ActionNotFound('This State does not define any actions');
|
|
170
171
|
}
|
|
172
|
+
if (actionSearchResult === 'NO_ACTION_FOR_THE_PROVIDED_NAME') {
|
|
173
|
+
throw new ActionNotFound('This State defines no action');
|
|
174
|
+
}
|
|
175
|
+
return actionSearchResult;
|
|
176
|
+
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
findAction<TFormData extends Record<string, any> = any>(name?: string): Action<TFormData> | undefined {
|
|
180
|
+
|
|
181
|
+
const actionSearchResult = this.doFindAction(name);
|
|
182
|
+
if (typeof actionSearchResult !== 'object') {
|
|
183
|
+
return undefined;
|
|
184
|
+
}
|
|
185
|
+
return actionSearchResult;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
private doFindAction<TFormData extends Record<string, any> = any>(name?: string): Action<TFormData> | ActionNotFoundReason {
|
|
189
|
+
|
|
190
|
+
if (!this.actionInfo.length) {
|
|
191
|
+
return 'NO_ACTION_DEFINED';
|
|
192
|
+
}
|
|
171
193
|
if (name === undefined) {
|
|
172
194
|
return new SimpleAction(this.client, this.actionInfo[0]);
|
|
173
195
|
}
|
|
@@ -176,8 +198,7 @@ export class BaseState<T> extends BaseHeadState implements State<T> {
|
|
|
176
198
|
return new SimpleAction(this.client, action);
|
|
177
199
|
}
|
|
178
200
|
}
|
|
179
|
-
|
|
180
|
-
|
|
201
|
+
return 'NO_ACTION_FOR_THE_PROVIDED_NAME';
|
|
181
202
|
}
|
|
182
203
|
|
|
183
204
|
/**
|
|
@@ -216,8 +237,8 @@ export class BaseState<T> extends BaseHeadState implements State<T> {
|
|
|
216
237
|
serializeBody(): Buffer|Blob|string {
|
|
217
238
|
|
|
218
239
|
if (
|
|
219
|
-
(
|
|
220
|
-
(
|
|
240
|
+
(globalThis.Buffer && this.data instanceof Buffer) ||
|
|
241
|
+
(globalThis.Blob && this.data instanceof Blob) ||
|
|
221
242
|
typeof this.data === 'string')
|
|
222
243
|
{
|
|
223
244
|
return this.data;
|
|
@@ -255,3 +276,5 @@ export class BaseState<T> extends BaseHeadState implements State<T> {
|
|
|
255
276
|
}
|
|
256
277
|
|
|
257
278
|
}
|
|
279
|
+
|
|
280
|
+
type ActionNotFoundReason = 'NO_ACTION_DEFINED' | 'NO_ACTION_FOR_THE_PROVIDED_NAME';
|
package/src/state/hal.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { parseLink } from '../http/util';
|
|
|
3
3
|
import { Link, Links } from '../link';
|
|
4
4
|
import { resolve } from '../util/uri';
|
|
5
5
|
import { ActionInfo } from '../action';
|
|
6
|
-
import {
|
|
6
|
+
import {Field, OptionsDataSource} from '../field';
|
|
7
7
|
import { StateFactory } from './interface';
|
|
8
8
|
import Client from '../client';
|
|
9
9
|
import * as hal from 'hal-types';
|
|
@@ -219,7 +219,7 @@ function parseHalEmbedded(client: Client, context: string, body: hal.HalResource
|
|
|
219
219
|
for (const embeddedItem of embeddedList) {
|
|
220
220
|
|
|
221
221
|
if ((embeddedItem._links?.self as hal.HalLink)?.href === undefined) {
|
|
222
|
-
|
|
222
|
+
|
|
223
223
|
console.warn('An item in _embedded was ignored. Each item must have a single "self" link');
|
|
224
224
|
continue;
|
|
225
225
|
}
|
|
@@ -281,44 +281,41 @@ function parseHalField(halField: hal.HalFormsProperty): Field | undefined {
|
|
|
281
281
|
case 'email' :
|
|
282
282
|
|
|
283
283
|
if (halField.options) {
|
|
284
|
+
const multiple: boolean | undefined = !('maxItems' in halField.options) || !halField.options.maxItems || halField.options.maxItems > 1;
|
|
285
|
+
|
|
284
286
|
const baseField = {
|
|
285
287
|
name: halField.name,
|
|
286
288
|
type: 'select' as const,
|
|
287
289
|
label: halField.prompt,
|
|
288
290
|
required: halField.required || false,
|
|
289
291
|
readOnly: halField.readOnly || false,
|
|
290
|
-
|
|
291
|
-
value: (halField.options.selectedValues || halField.value) as any
|
|
292
|
+
value: (halField.options.selectedValues || halField.value) as any,
|
|
292
293
|
};
|
|
293
294
|
|
|
294
|
-
const
|
|
295
|
-
const valueField = halField.options.valueField || 'value';
|
|
296
|
-
if (isInlineOptions(halField.options)) {
|
|
297
|
-
|
|
298
|
-
const options: Record<string, string> = {};
|
|
299
|
-
|
|
300
|
-
for(const entry of halField.options.inline) {
|
|
301
|
-
|
|
302
|
-
if (typeof entry === 'string') {
|
|
303
|
-
options[entry] = entry;
|
|
304
|
-
} else {
|
|
305
|
-
options[entry[valueField]] = entry[labelField];
|
|
306
|
-
}
|
|
307
|
-
}
|
|
295
|
+
const optionsDataSource = toOptionsDataSource(halField.options);
|
|
308
296
|
|
|
297
|
+
if (multiple) {
|
|
309
298
|
return {
|
|
299
|
+
multiple: true,
|
|
300
|
+
selectedValues: halField.options.selectedValues,
|
|
310
301
|
...baseField,
|
|
311
|
-
|
|
302
|
+
...optionsDataSource
|
|
312
303
|
};
|
|
313
304
|
} else {
|
|
305
|
+
const selectedValues = halField.options.selectedValues;
|
|
306
|
+
let selectedValue: string | undefined;
|
|
307
|
+
if (selectedValues) {
|
|
308
|
+
if (selectedValues.length === 1) {
|
|
309
|
+
selectedValue = selectedValues[0];
|
|
310
|
+
} else if (selectedValues.length > 1) {
|
|
311
|
+
console.warn(`More than 1 selected value received for single select field ${baseField.name}. Ignoring all selected values for this field.`);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
314
|
return {
|
|
315
|
+
multiple,
|
|
316
|
+
selectedValue,
|
|
315
317
|
...baseField,
|
|
316
|
-
|
|
317
|
-
href: halField.options.link.href,
|
|
318
|
-
type: halField.options.link.type,
|
|
319
|
-
labelField,
|
|
320
|
-
valueField,
|
|
321
|
-
}
|
|
318
|
+
...optionsDataSource
|
|
322
319
|
};
|
|
323
320
|
}
|
|
324
321
|
} else {
|
|
@@ -435,6 +432,35 @@ function parseHalField(halField: hal.HalFormsProperty): Field | undefined {
|
|
|
435
432
|
|
|
436
433
|
}
|
|
437
434
|
|
|
435
|
+
function toOptionsDataSource(halFieldOptions: NonNullable<hal.HalFormsSimpleProperty['options']>): OptionsDataSource {
|
|
436
|
+
const labelField = halFieldOptions.promptField || 'prompt';
|
|
437
|
+
const valueField = halFieldOptions.valueField || 'value';
|
|
438
|
+
if (isInlineOptions(halFieldOptions)) {
|
|
439
|
+
|
|
440
|
+
const options: Record<string, string> = {};
|
|
441
|
+
|
|
442
|
+
for (const entry of halFieldOptions.inline) {
|
|
443
|
+
|
|
444
|
+
if (typeof entry === 'string') {
|
|
445
|
+
options[entry] = entry;
|
|
446
|
+
} else {
|
|
447
|
+
options[entry[valueField]] = entry[labelField];
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
return {options};
|
|
452
|
+
} else {
|
|
453
|
+
return {
|
|
454
|
+
dataSource: {
|
|
455
|
+
href: halFieldOptions.link.href,
|
|
456
|
+
type: halFieldOptions.link.type,
|
|
457
|
+
labelField,
|
|
458
|
+
valueField,
|
|
459
|
+
}
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
|
|
438
464
|
function isInlineOptions(options: hal.HalFormsSimpleProperty['options']): options is hal.HalFormsOptionsInline {
|
|
439
465
|
|
|
440
466
|
return (options as any).inline !== undefined;
|
package/src/state/interface.ts
CHANGED
|
@@ -56,6 +56,13 @@ export type State<T = any> = {
|
|
|
56
56
|
*/
|
|
57
57
|
action<TFormData extends Record<string, any> = any>(name?: string): Action<TFormData>;
|
|
58
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Find an action by name.
|
|
61
|
+
*
|
|
62
|
+
* If the format provides a default action, the name may be omitted.
|
|
63
|
+
*/
|
|
64
|
+
findAction<TFormData extends Record<string, any> = any>(name?: string): Action<TFormData> | undefined;
|
|
65
|
+
|
|
59
66
|
/**
|
|
60
67
|
* Returns all actions
|
|
61
68
|
*/
|
|
@@ -116,7 +123,7 @@ export type State<T = any> = {
|
|
|
116
123
|
* Some information in HEAD responses might be available, but many aren't.
|
|
117
124
|
* Notably, the body.
|
|
118
125
|
*/
|
|
119
|
-
export type HeadState = Omit<State, 'data' | 'action' | 'actions' | 'hasAction' | 'serializeBody' | 'getEmbedded' | 'client' | 'clone'>;
|
|
126
|
+
export type HeadState = Omit<State, 'data' | 'action' | 'findAction' | 'actions' | 'hasAction' | 'serializeBody' | 'getEmbedded' | 'client' | 'clone'>;
|
|
120
127
|
|
|
121
128
|
/**
|
|
122
129
|
* A 'StateFactory' is responsible for taking a Fetch Response, and returning
|