@numerum-tech/yeriasdk 1.0.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/README.md +864 -0
- package/dist/core/action-grid-view.d.ts +57 -0
- package/dist/core/action-grid-view.d.ts.map +1 -0
- package/dist/core/action-grid-view.js +112 -0
- package/dist/core/action-grid-view.js.map +1 -0
- package/dist/core/action-list-view.d.ts +39 -0
- package/dist/core/action-list-view.d.ts.map +1 -0
- package/dist/core/action-list-view.js +77 -0
- package/dist/core/action-list-view.js.map +1 -0
- package/dist/core/base/base-action-view.d.ts +82 -0
- package/dist/core/base/base-action-view.d.ts.map +1 -0
- package/dist/core/base/base-action-view.js +143 -0
- package/dist/core/base/base-action-view.js.map +1 -0
- package/dist/core/base-view.d.ts +105 -0
- package/dist/core/base-view.d.ts.map +1 -0
- package/dist/core/base-view.js +426 -0
- package/dist/core/base-view.js.map +1 -0
- package/dist/core/card-view.d.ts +24 -0
- package/dist/core/card-view.d.ts.map +1 -0
- package/dist/core/card-view.js +127 -0
- package/dist/core/card-view.js.map +1 -0
- package/dist/core/carousel-view.d.ts +22 -0
- package/dist/core/carousel-view.d.ts.map +1 -0
- package/dist/core/carousel-view.js +99 -0
- package/dist/core/carousel-view.js.map +1 -0
- package/dist/core/form-view.d.ts +165 -0
- package/dist/core/form-view.d.ts.map +1 -0
- package/dist/core/form-view.js +365 -0
- package/dist/core/form-view.js.map +1 -0
- package/dist/core/jsonapp.d.ts +263 -0
- package/dist/core/jsonapp.d.ts.map +1 -0
- package/dist/core/jsonapp.js +528 -0
- package/dist/core/jsonapp.js.map +1 -0
- package/dist/core/key-store.d.ts +51 -0
- package/dist/core/key-store.d.ts.map +1 -0
- package/dist/core/key-store.js +138 -0
- package/dist/core/key-store.js.map +1 -0
- package/dist/core/map-view.d.ts +45 -0
- package/dist/core/map-view.d.ts.map +1 -0
- package/dist/core/map-view.js +318 -0
- package/dist/core/map-view.js.map +1 -0
- package/dist/core/media-view.d.ts +20 -0
- package/dist/core/media-view.d.ts.map +1 -0
- package/dist/core/media-view.js +75 -0
- package/dist/core/media-view.js.map +1 -0
- package/dist/core/message-view.d.ts +53 -0
- package/dist/core/message-view.d.ts.map +1 -0
- package/dist/core/message-view.js +109 -0
- package/dist/core/message-view.js.map +1 -0
- package/dist/core/notification.d.ts +17 -0
- package/dist/core/notification.d.ts.map +1 -0
- package/dist/core/notification.js +33 -0
- package/dist/core/notification.js.map +1 -0
- package/dist/core/qr-display-view.d.ts +32 -0
- package/dist/core/qr-display-view.d.ts.map +1 -0
- package/dist/core/qr-display-view.js +66 -0
- package/dist/core/qr-display-view.js.map +1 -0
- package/dist/core/qr-scan-view.d.ts +148 -0
- package/dist/core/qr-scan-view.d.ts.map +1 -0
- package/dist/core/qr-scan-view.js +259 -0
- package/dist/core/qr-scan-view.js.map +1 -0
- package/dist/core/reader-view.d.ts +73 -0
- package/dist/core/reader-view.d.ts.map +1 -0
- package/dist/core/reader-view.js +285 -0
- package/dist/core/reader-view.js.map +1 -0
- package/dist/core/timeline-view.d.ts +16 -0
- package/dist/core/timeline-view.d.ts.map +1 -0
- package/dist/core/timeline-view.js +68 -0
- package/dist/core/timeline-view.js.map +1 -0
- package/dist/errors/index.d.ts +276 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +431 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +103 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +576 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +48 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/fileFormats.d.ts +52 -0
- package/dist/utils/fileFormats.d.ts.map +1 -0
- package/dist/utils/fileFormats.js +198 -0
- package/dist/utils/fileFormats.js.map +1 -0
- package/dist/utils/logger.d.ts +38 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +109 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/validators.d.ts +48 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/utils/validators.js +445 -0
- package/dist/utils/validators.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CarouselView = void 0;
|
|
4
|
+
const base_view_1 = require("./base-view");
|
|
5
|
+
const errors_1 = require("../errors");
|
|
6
|
+
// CarouselView organises multiple spotlight slides for mobile hero banners or promotional decks.
|
|
7
|
+
class CarouselView extends base_view_1.BaseView {
|
|
8
|
+
constructor(viewId, title, processId) {
|
|
9
|
+
super({
|
|
10
|
+
id: viewId,
|
|
11
|
+
type: 'Carousel',
|
|
12
|
+
processId,
|
|
13
|
+
metadata: {
|
|
14
|
+
version: '1.0.0',
|
|
15
|
+
createdAt: new Date()
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
this.content = {
|
|
19
|
+
title,
|
|
20
|
+
subtitle: '',
|
|
21
|
+
slides: [],
|
|
22
|
+
settings: {
|
|
23
|
+
autoplay: false,
|
|
24
|
+
intervalMs: 6000,
|
|
25
|
+
loop: true,
|
|
26
|
+
showIndicators: true
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
// Optional subtitle shown beneath the carousel heading.
|
|
31
|
+
setSubtitle(subtitle) {
|
|
32
|
+
return this.setIntroText('subtitle', subtitle);
|
|
33
|
+
}
|
|
34
|
+
// Overrides default autoplay and indicator behaviour.
|
|
35
|
+
setSettings(settings) {
|
|
36
|
+
this.content.settings = { ...settings };
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
// Appends a prepared slide to the carousel sequence.
|
|
40
|
+
addSlide(slide) {
|
|
41
|
+
if (!slide.id || !slide.title) {
|
|
42
|
+
throw new errors_1.MissingRequiredParameterError('slide id and title');
|
|
43
|
+
}
|
|
44
|
+
this.content.slides.push({
|
|
45
|
+
...slide,
|
|
46
|
+
id: slide.id.trim(),
|
|
47
|
+
title: slide.title.trim(),
|
|
48
|
+
description: slide.description?.trim(),
|
|
49
|
+
badge: slide.badge?.trim(),
|
|
50
|
+
actions: slide.actions?.map(action => ({ ...action }))
|
|
51
|
+
});
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
createSlide(id, title, description, options = {}) {
|
|
55
|
+
const slide = {
|
|
56
|
+
id: id.trim(),
|
|
57
|
+
title: title.trim(),
|
|
58
|
+
description: description?.trim(),
|
|
59
|
+
badge: options.badge?.trim(),
|
|
60
|
+
image: options.imageUrl
|
|
61
|
+
? {
|
|
62
|
+
url: options.imageUrl.trim(),
|
|
63
|
+
alt: options.imageAlt?.trim()
|
|
64
|
+
}
|
|
65
|
+
: undefined
|
|
66
|
+
};
|
|
67
|
+
return slide;
|
|
68
|
+
}
|
|
69
|
+
// Pushes an action button for a given slide id.
|
|
70
|
+
addSlideAction(slideId, text, method = 'POST', options = {}) {
|
|
71
|
+
const slide = this.content.slides.find(item => item.id === slideId);
|
|
72
|
+
if (!slide) {
|
|
73
|
+
throw new errors_1.ElementNotFoundError(0, slideId); // Using slideId as identifier
|
|
74
|
+
}
|
|
75
|
+
if (!slide.actions) {
|
|
76
|
+
slide.actions = [];
|
|
77
|
+
}
|
|
78
|
+
const action = {
|
|
79
|
+
text: text.trim(),
|
|
80
|
+
method,
|
|
81
|
+
confirmMessage: options.confirmMessage,
|
|
82
|
+
href: options.href?.trim(),
|
|
83
|
+
icon: options.icon?.trim(),
|
|
84
|
+
variant: options.variant
|
|
85
|
+
};
|
|
86
|
+
slide.actions.push(action);
|
|
87
|
+
return this;
|
|
88
|
+
}
|
|
89
|
+
clearSlides() {
|
|
90
|
+
this.content.slides = [];
|
|
91
|
+
return this;
|
|
92
|
+
}
|
|
93
|
+
// Exposes the assembled payload for advanced usage.
|
|
94
|
+
getContent() {
|
|
95
|
+
return this.content;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.CarouselView = CarouselView;
|
|
99
|
+
//# sourceMappingURL=carousel-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"carousel-view.js","sourceRoot":"","sources":["../../src/core/carousel-view.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { BaseView } from './base-view';
|
|
2
|
+
import { FormFieldParams, SubmitAction, ValidationResult, HttpMethod } from '../types';
|
|
3
|
+
import { Result } from '../errors';
|
|
4
|
+
export interface FormContent {
|
|
5
|
+
title: string;
|
|
6
|
+
intro?: string;
|
|
7
|
+
submit?: SubmitAction;
|
|
8
|
+
fields: Array<FormFieldParams & {
|
|
9
|
+
fieldType: string;
|
|
10
|
+
fieldId: string;
|
|
11
|
+
fieldLabel: string;
|
|
12
|
+
}>;
|
|
13
|
+
}
|
|
14
|
+
export declare class FormView extends BaseView {
|
|
15
|
+
private fieldValidations;
|
|
16
|
+
constructor(formId: string, title: string, processId?: string);
|
|
17
|
+
/**
|
|
18
|
+
* Définit l'introduction du formulaire
|
|
19
|
+
*/
|
|
20
|
+
setIntro(intro: string): this;
|
|
21
|
+
/**
|
|
22
|
+
* Définit la note du formulaire
|
|
23
|
+
* @deprecated Use setIntro() instead. This method is kept for backward compatibility.
|
|
24
|
+
*/
|
|
25
|
+
setNote(note: string): this;
|
|
26
|
+
/**
|
|
27
|
+
* Méthode helper pour associer ce formulaire à un processus
|
|
28
|
+
* @param processId - Identifiant du processus
|
|
29
|
+
* @param options - Options du processus (nom, étapes, etc.)
|
|
30
|
+
*/
|
|
31
|
+
belongsToProcess(processId: string, options?: {
|
|
32
|
+
processName?: string;
|
|
33
|
+
currentStep?: number;
|
|
34
|
+
totalSteps?: number;
|
|
35
|
+
stepName?: string;
|
|
36
|
+
canGoBack?: boolean;
|
|
37
|
+
canSkip?: boolean;
|
|
38
|
+
}): this;
|
|
39
|
+
/**
|
|
40
|
+
* Ajoute un champ avec validation
|
|
41
|
+
*/
|
|
42
|
+
addField(fieldType: string, fieldId: string, fieldLabel: string, params?: FormFieldParams): this;
|
|
43
|
+
/**
|
|
44
|
+
* Defines the submit button for the form
|
|
45
|
+
* Convention: Mobile app POSTs to {service.baseUrl}/{formId}
|
|
46
|
+
*
|
|
47
|
+
* @param text - Button text (e.g., "Register", "Submit")
|
|
48
|
+
* @param method - HTTP method (default: POST)
|
|
49
|
+
* @param confirmMessage - Optional confirmation message for destructive actions
|
|
50
|
+
*/
|
|
51
|
+
submitButton(text: string, method?: HttpMethod, confirmMessage?: string): this;
|
|
52
|
+
/**
|
|
53
|
+
* Convenience method for update actions (PUT)
|
|
54
|
+
*/
|
|
55
|
+
updateButton(text: string, confirmMessage?: string): this;
|
|
56
|
+
/**
|
|
57
|
+
* Convenience method for delete actions (DELETE with confirmation)
|
|
58
|
+
*/
|
|
59
|
+
deleteButton(text: string, confirmMessage?: string): this;
|
|
60
|
+
/**
|
|
61
|
+
* Méthodes de commodité pour différents types de champs
|
|
62
|
+
*/
|
|
63
|
+
addTextField(fieldId: string, fieldLabel: string, isRequired?: boolean, maxLength?: number): this;
|
|
64
|
+
addEmailField(fieldId: string, fieldLabel: string, isRequired?: boolean): this;
|
|
65
|
+
addPasswordField(fieldId: string, fieldLabel: string, minLength?: number): this;
|
|
66
|
+
addNumberField(fieldId: string, fieldLabel: string, isRequired?: boolean, minVal?: number, maxVal?: number): this;
|
|
67
|
+
addDateField(fieldId: string, fieldLabel: string, isRequired?: boolean, minDate?: string, maxDate?: string): this;
|
|
68
|
+
addSelectField(fieldId: string, fieldLabel: string, isRequired: boolean | undefined, options: Array<{
|
|
69
|
+
label: string;
|
|
70
|
+
value: unknown;
|
|
71
|
+
}>): this;
|
|
72
|
+
addPhotoField(fieldId: string, fieldLabel: string, isRequired?: boolean, formats?: string[], live?: boolean): this;
|
|
73
|
+
addFileField(fieldId: string, fieldLabel: string, isRequired: boolean | undefined, formats: string[]): this;
|
|
74
|
+
addGPSField(fieldId: string, fieldLabel: string, isRequired?: boolean, liveData?: boolean, config?: {
|
|
75
|
+
altitude?: boolean;
|
|
76
|
+
precision?: boolean;
|
|
77
|
+
}): this;
|
|
78
|
+
addPlusCodeField(fieldId: string, fieldLabel: string, isRequired?: boolean, liveData?: boolean): this;
|
|
79
|
+
addHiddenField(fieldId: string, fieldLabel: string, value: string): this;
|
|
80
|
+
addTextAreaField(fieldId: string, fieldLabel: string, isRequired?: boolean, minLength?: number, maxLength?: number): this;
|
|
81
|
+
addPhoneField(fieldId: string, fieldLabel: string, isRequired?: boolean): this;
|
|
82
|
+
addURLField(fieldId: string, fieldLabel: string, isRequired?: boolean): this;
|
|
83
|
+
addCheckboxField(fieldId: string, fieldLabel: string, isRequired?: boolean): this;
|
|
84
|
+
/**
|
|
85
|
+
* Adds a visual separator to group form fields
|
|
86
|
+
* Separators are rendered as gaps or lines by the mobile app renderer
|
|
87
|
+
* @param fieldId - Optional field ID. If not provided, auto-generates a unique ID
|
|
88
|
+
* @returns this for chaining
|
|
89
|
+
* @example
|
|
90
|
+
* form.addTextField('name', 'Name', true)
|
|
91
|
+
* .addSeparator()
|
|
92
|
+
* .addEmailField('email', 'Email', true);
|
|
93
|
+
*/
|
|
94
|
+
addSeparator(fieldId?: string): this;
|
|
95
|
+
/**
|
|
96
|
+
* Injecte des données dans les champs existants du formulaire
|
|
97
|
+
* Gère automatiquement les champs avec options (select, radio) en utilisant "selected"
|
|
98
|
+
* @param data - Objet clé-valeur où clé = fieldId
|
|
99
|
+
* @returns Result with errors for fields not found
|
|
100
|
+
* @example
|
|
101
|
+
* const result = form.injectData({
|
|
102
|
+
* name: 'John Doe',
|
|
103
|
+
* email: 'john@example.com',
|
|
104
|
+
* country: 'FR' // Pour select: met selected: true sur l'option 'FR'
|
|
105
|
+
* });
|
|
106
|
+
* if (result.isErr()) {
|
|
107
|
+
* console.warn('Some fields not found:', result.error);
|
|
108
|
+
* }
|
|
109
|
+
*/
|
|
110
|
+
injectData(data: Record<string, unknown>): Result<void, string[]>;
|
|
111
|
+
/**
|
|
112
|
+
* Définit la valeur d'un champ spécifique
|
|
113
|
+
* @param fieldId - ID du champ
|
|
114
|
+
* @param value - Valeur à injecter
|
|
115
|
+
* @example
|
|
116
|
+
* form.setFieldValue('name', 'John Doe')
|
|
117
|
+
*/
|
|
118
|
+
setFieldValue(fieldId: string, value: unknown): this;
|
|
119
|
+
/**
|
|
120
|
+
* Valide les données du formulaire
|
|
121
|
+
* Note: This is for SDK internal validation. Services using this SDK should
|
|
122
|
+
* perform their own data validation before populating views.
|
|
123
|
+
*/
|
|
124
|
+
validateFormData(formData: Record<string, any>): ValidationResult;
|
|
125
|
+
/**
|
|
126
|
+
* Obtient un champ par son ID
|
|
127
|
+
*/
|
|
128
|
+
getField(fieldId: string): (FormFieldParams & {
|
|
129
|
+
fieldType: string;
|
|
130
|
+
fieldId: string;
|
|
131
|
+
fieldLabel: string;
|
|
132
|
+
}) | undefined;
|
|
133
|
+
/**
|
|
134
|
+
* Supprime un champ par son ID
|
|
135
|
+
* @returns Result with success or error message
|
|
136
|
+
*/
|
|
137
|
+
removeField(fieldId: string): Result<void, string>;
|
|
138
|
+
/**
|
|
139
|
+
* Met à jour un champ existant
|
|
140
|
+
* @returns Result with success or error message
|
|
141
|
+
*/
|
|
142
|
+
updateField(fieldId: string, updates: Partial<FormFieldParams>): Result<void, string>;
|
|
143
|
+
/**
|
|
144
|
+
* Obtient tous les champs
|
|
145
|
+
*/
|
|
146
|
+
getFields(): Array<FormFieldParams & {
|
|
147
|
+
fieldType: string;
|
|
148
|
+
fieldId: string;
|
|
149
|
+
fieldLabel: string;
|
|
150
|
+
}>;
|
|
151
|
+
/**
|
|
152
|
+
* Obtient le nombre de champs
|
|
153
|
+
* @param excludeSeparators - If true, excludes separator fields from count (default: false)
|
|
154
|
+
*/
|
|
155
|
+
getFieldCount(excludeSeparators?: boolean): number;
|
|
156
|
+
/**
|
|
157
|
+
* Vérifie si le formulaire a des champs requis
|
|
158
|
+
*/
|
|
159
|
+
hasRequiredFields(): boolean;
|
|
160
|
+
/**
|
|
161
|
+
* Obtient les champs requis
|
|
162
|
+
*/
|
|
163
|
+
getRequiredFields(): string[];
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=form-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-view.d.ts","sourceRoot":"","sources":["../../src/core/form-view.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FormView = void 0;
|
|
4
|
+
const base_view_1 = require("./base-view");
|
|
5
|
+
const validators_1 = require("../utils/validators");
|
|
6
|
+
const errors_1 = require("../errors");
|
|
7
|
+
class FormView extends base_view_1.BaseView {
|
|
8
|
+
constructor(formId, title, processId) {
|
|
9
|
+
super({
|
|
10
|
+
id: formId,
|
|
11
|
+
type: 'Form',
|
|
12
|
+
processId,
|
|
13
|
+
metadata: {
|
|
14
|
+
version: '1.0.0',
|
|
15
|
+
createdAt: new Date()
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
this.fieldValidations = new Map();
|
|
19
|
+
this.content = {
|
|
20
|
+
title,
|
|
21
|
+
intro: '',
|
|
22
|
+
submit: undefined,
|
|
23
|
+
fields: []
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Définit l'introduction du formulaire
|
|
28
|
+
*/
|
|
29
|
+
setIntro(intro) {
|
|
30
|
+
return this.setIntroText('intro', intro);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Définit la note du formulaire
|
|
34
|
+
* @deprecated Use setIntro() instead. This method is kept for backward compatibility.
|
|
35
|
+
*/
|
|
36
|
+
setNote(note) {
|
|
37
|
+
return this.setIntro(note);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Méthode helper pour associer ce formulaire à un processus
|
|
41
|
+
* @param processId - Identifiant du processus
|
|
42
|
+
* @param options - Options du processus (nom, étapes, etc.)
|
|
43
|
+
*/
|
|
44
|
+
belongsToProcess(processId, options) {
|
|
45
|
+
this.setProcess(processId, options);
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Ajoute un champ avec validation
|
|
50
|
+
*/
|
|
51
|
+
addField(fieldType, fieldId, fieldLabel, params) {
|
|
52
|
+
if (!fieldId || !fieldLabel || !fieldType) {
|
|
53
|
+
throw new errors_1.MissingRequiredParameterError('fieldId, fieldLabel, and fieldType');
|
|
54
|
+
}
|
|
55
|
+
// Validation du champ
|
|
56
|
+
const validation = validators_1.FieldValidator.validateField(fieldType, fieldId, fieldLabel, params);
|
|
57
|
+
if (!validation.isValid) {
|
|
58
|
+
const errorMessages = validation.errors.map(e => e.message);
|
|
59
|
+
throw new errors_1.FieldValidationError(fieldId, fieldType, errorMessages);
|
|
60
|
+
}
|
|
61
|
+
const field = { fieldType, fieldId, fieldLabel, ...params };
|
|
62
|
+
this.content.fields.push(field);
|
|
63
|
+
// Stocker la validation pour ce champ
|
|
64
|
+
if (params) {
|
|
65
|
+
this.fieldValidations.set(fieldId, params);
|
|
66
|
+
}
|
|
67
|
+
return this;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Defines the submit button for the form
|
|
71
|
+
* Convention: Mobile app POSTs to {service.baseUrl}/{formId}
|
|
72
|
+
*
|
|
73
|
+
* @param text - Button text (e.g., "Register", "Submit")
|
|
74
|
+
* @param method - HTTP method (default: POST)
|
|
75
|
+
* @param confirmMessage - Optional confirmation message for destructive actions
|
|
76
|
+
*/
|
|
77
|
+
submitButton(text, method = 'POST', confirmMessage) {
|
|
78
|
+
this.content.submit = {
|
|
79
|
+
text,
|
|
80
|
+
method,
|
|
81
|
+
confirmMessage
|
|
82
|
+
};
|
|
83
|
+
return this;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Convenience method for update actions (PUT)
|
|
87
|
+
*/
|
|
88
|
+
updateButton(text, confirmMessage) {
|
|
89
|
+
return this.submitButton(text, 'PUT', confirmMessage);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Convenience method for delete actions (DELETE with confirmation)
|
|
93
|
+
*/
|
|
94
|
+
deleteButton(text, confirmMessage = 'Are you sure you want to delete this?') {
|
|
95
|
+
return this.submitButton(text, 'DELETE', confirmMessage);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Méthodes de commodité pour différents types de champs
|
|
99
|
+
*/
|
|
100
|
+
addTextField(fieldId, fieldLabel, isRequired = false, maxLength) {
|
|
101
|
+
return this.addField('text', fieldId, fieldLabel, {
|
|
102
|
+
required: isRequired,
|
|
103
|
+
maxLength
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
addEmailField(fieldId, fieldLabel, isRequired = false) {
|
|
107
|
+
return this.addField('email', fieldId, fieldLabel, {
|
|
108
|
+
required: isRequired,
|
|
109
|
+
pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
addPasswordField(fieldId, fieldLabel, minLength = 8) {
|
|
113
|
+
return this.addField('password', fieldId, fieldLabel, {
|
|
114
|
+
required: true,
|
|
115
|
+
minLength
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
addNumberField(fieldId, fieldLabel, isRequired = false, minVal, maxVal) {
|
|
119
|
+
return this.addField('number', fieldId, fieldLabel, {
|
|
120
|
+
required: isRequired,
|
|
121
|
+
min: minVal,
|
|
122
|
+
max: maxVal
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
addDateField(fieldId, fieldLabel, isRequired = false, minDate, maxDate) {
|
|
126
|
+
return this.addField('date', fieldId, fieldLabel, {
|
|
127
|
+
required: isRequired,
|
|
128
|
+
min: minDate ? new Date(minDate).getTime() : undefined,
|
|
129
|
+
max: maxDate ? new Date(maxDate).getTime() : undefined
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
addSelectField(fieldId, fieldLabel, isRequired = false, options) {
|
|
133
|
+
if (!Array.isArray(options) || options.length === 0) {
|
|
134
|
+
throw new errors_1.EmptyCollectionError('Select field options', 'Select field must have at least one option');
|
|
135
|
+
}
|
|
136
|
+
return this.addField('select', fieldId, fieldLabel, {
|
|
137
|
+
required: isRequired,
|
|
138
|
+
options
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
addPhotoField(fieldId, fieldLabel, isRequired = false, formats = ['jpeg', 'png'], live = false) {
|
|
142
|
+
if (!formats || formats.length === 0) {
|
|
143
|
+
throw new errors_1.EmptyCollectionError('Photo field formats', 'Photo field must specify at least one format');
|
|
144
|
+
}
|
|
145
|
+
const acceptedFormats = formats.map(format => `image/${format.toLowerCase()}`);
|
|
146
|
+
return this.addField('photo', fieldId, fieldLabel, {
|
|
147
|
+
required: isRequired,
|
|
148
|
+
accept: acceptedFormats,
|
|
149
|
+
live
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
addFileField(fieldId, fieldLabel, isRequired = false, formats) {
|
|
153
|
+
if (!formats || formats.length === 0) {
|
|
154
|
+
throw new errors_1.EmptyCollectionError('File field formats', 'File field must specify at least one format');
|
|
155
|
+
}
|
|
156
|
+
return this.addField('file', fieldId, fieldLabel, {
|
|
157
|
+
required: isRequired,
|
|
158
|
+
accept: formats
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
addGPSField(fieldId, fieldLabel, isRequired = false, liveData = false, config = {}) {
|
|
162
|
+
return this.addField('gps', fieldId, fieldLabel, {
|
|
163
|
+
required: isRequired,
|
|
164
|
+
live: liveData,
|
|
165
|
+
...config
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
addPlusCodeField(fieldId, fieldLabel, isRequired = false, liveData = false) {
|
|
169
|
+
return this.addField('pluscode', fieldId, fieldLabel, {
|
|
170
|
+
required: isRequired,
|
|
171
|
+
live: liveData
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
addHiddenField(fieldId, fieldLabel, value) {
|
|
175
|
+
return this.addField('hidden', fieldId, fieldLabel, { value });
|
|
176
|
+
}
|
|
177
|
+
addTextAreaField(fieldId, fieldLabel, isRequired = false, minLength, maxLength) {
|
|
178
|
+
return this.addField('textarea', fieldId, fieldLabel, {
|
|
179
|
+
required: isRequired,
|
|
180
|
+
minLength,
|
|
181
|
+
maxLength
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
addPhoneField(fieldId, fieldLabel, isRequired = false) {
|
|
185
|
+
return this.addField('phone', fieldId, fieldLabel, {
|
|
186
|
+
required: isRequired,
|
|
187
|
+
pattern: /^[\+]?[1-9][\d]{0,15}$/
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
addURLField(fieldId, fieldLabel, isRequired = false) {
|
|
191
|
+
return this.addField('url', fieldId, fieldLabel, {
|
|
192
|
+
required: isRequired
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
addCheckboxField(fieldId, fieldLabel, isRequired = false) {
|
|
196
|
+
return this.addField('checkbox', fieldId, fieldLabel, {
|
|
197
|
+
required: isRequired
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Adds a visual separator to group form fields
|
|
202
|
+
* Separators are rendered as gaps or lines by the mobile app renderer
|
|
203
|
+
* @param fieldId - Optional field ID. If not provided, auto-generates a unique ID
|
|
204
|
+
* @returns this for chaining
|
|
205
|
+
* @example
|
|
206
|
+
* form.addTextField('name', 'Name', true)
|
|
207
|
+
* .addSeparator()
|
|
208
|
+
* .addEmailField('email', 'Email', true);
|
|
209
|
+
*/
|
|
210
|
+
addSeparator(fieldId) {
|
|
211
|
+
const separatorId = fieldId || `separator-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
212
|
+
return this.addField('separator', separatorId, '', {});
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Injecte des données dans les champs existants du formulaire
|
|
216
|
+
* Gère automatiquement les champs avec options (select, radio) en utilisant "selected"
|
|
217
|
+
* @param data - Objet clé-valeur où clé = fieldId
|
|
218
|
+
* @returns Result with errors for fields not found
|
|
219
|
+
* @example
|
|
220
|
+
* const result = form.injectData({
|
|
221
|
+
* name: 'John Doe',
|
|
222
|
+
* email: 'john@example.com',
|
|
223
|
+
* country: 'FR' // Pour select: met selected: true sur l'option 'FR'
|
|
224
|
+
* });
|
|
225
|
+
* if (result.isErr()) {
|
|
226
|
+
* console.warn('Some fields not found:', result.error);
|
|
227
|
+
* }
|
|
228
|
+
*/
|
|
229
|
+
injectData(data) {
|
|
230
|
+
const errors = [];
|
|
231
|
+
Object.entries(data).forEach(([fieldId, value]) => {
|
|
232
|
+
const field = this.getField(fieldId);
|
|
233
|
+
if (!field) {
|
|
234
|
+
errors.push(`Field not found: ${fieldId}`);
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
// Détection automatique: champs avec options (select, radio, checkbox avec options)
|
|
238
|
+
if (field.options && field.fieldType === 'select') {
|
|
239
|
+
// Pour select: marquer l'option correspondante comme selected
|
|
240
|
+
const updatedOptions = field.options.map(opt => ({
|
|
241
|
+
...opt,
|
|
242
|
+
selected: opt.value === value
|
|
243
|
+
}));
|
|
244
|
+
this.updateField(fieldId, { options: updatedOptions });
|
|
245
|
+
}
|
|
246
|
+
// Radio: une seule valeur
|
|
247
|
+
else if (field.options && field.fieldType === 'radio') {
|
|
248
|
+
const updatedOptions = field.options.map(opt => ({
|
|
249
|
+
...opt,
|
|
250
|
+
selected: opt.value === value
|
|
251
|
+
}));
|
|
252
|
+
this.updateField(fieldId, { options: updatedOptions });
|
|
253
|
+
}
|
|
254
|
+
// Checkbox avec options: value est un array (multi-sélection)
|
|
255
|
+
else if (field.options && field.fieldType === 'checkbox') {
|
|
256
|
+
const selectedValues = Array.isArray(value) ? value : [value];
|
|
257
|
+
const updatedOptions = field.options.map(opt => ({
|
|
258
|
+
...opt,
|
|
259
|
+
selected: selectedValues.includes(opt.value)
|
|
260
|
+
}));
|
|
261
|
+
this.updateField(fieldId, { options: updatedOptions });
|
|
262
|
+
}
|
|
263
|
+
// Checkbox simple (true/false) ou tous les autres champs: utiliser value
|
|
264
|
+
else {
|
|
265
|
+
this.updateField(fieldId, { value: value });
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
if (errors.length > 0) {
|
|
269
|
+
return (0, errors_1.Err)(errors);
|
|
270
|
+
}
|
|
271
|
+
return (0, errors_1.Ok)(undefined);
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Définit la valeur d'un champ spécifique
|
|
275
|
+
* @param fieldId - ID du champ
|
|
276
|
+
* @param value - Valeur à injecter
|
|
277
|
+
* @example
|
|
278
|
+
* form.setFieldValue('name', 'John Doe')
|
|
279
|
+
*/
|
|
280
|
+
setFieldValue(fieldId, value) {
|
|
281
|
+
const field = this.getField(fieldId);
|
|
282
|
+
if (!field) {
|
|
283
|
+
throw new errors_1.FieldNotFoundError(fieldId, this.id);
|
|
284
|
+
}
|
|
285
|
+
this.updateField(fieldId, { value: value });
|
|
286
|
+
return this;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Valide les données du formulaire
|
|
290
|
+
* Note: This is for SDK internal validation. Services using this SDK should
|
|
291
|
+
* perform their own data validation before populating views.
|
|
292
|
+
*/
|
|
293
|
+
validateFormData(formData) {
|
|
294
|
+
return validators_1.FormValidator.validateFormData(formData, this.fieldValidations);
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Obtient un champ par son ID
|
|
298
|
+
*/
|
|
299
|
+
getField(fieldId) {
|
|
300
|
+
return this.content.fields.find(field => field.fieldId === fieldId);
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Supprime un champ par son ID
|
|
304
|
+
* @returns Result with success or error message
|
|
305
|
+
*/
|
|
306
|
+
removeField(fieldId) {
|
|
307
|
+
const fields = this.content.fields;
|
|
308
|
+
const index = fields.findIndex(field => field.fieldId === fieldId);
|
|
309
|
+
if (index !== -1) {
|
|
310
|
+
fields.splice(index, 1);
|
|
311
|
+
this.fieldValidations.delete(fieldId);
|
|
312
|
+
return (0, errors_1.Ok)(undefined);
|
|
313
|
+
}
|
|
314
|
+
return (0, errors_1.Err)(`Field '${fieldId}' not found in form '${this.id}'`);
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Met à jour un champ existant
|
|
318
|
+
* @returns Result with success or error message
|
|
319
|
+
*/
|
|
320
|
+
updateField(fieldId, updates) {
|
|
321
|
+
const field = this.getField(fieldId);
|
|
322
|
+
if (!field) {
|
|
323
|
+
return (0, errors_1.Err)(`Field '${fieldId}' not found in form '${this.id}'`);
|
|
324
|
+
}
|
|
325
|
+
Object.assign(field, updates);
|
|
326
|
+
// Mettre à jour la validation
|
|
327
|
+
if (this.fieldValidations.has(fieldId)) {
|
|
328
|
+
const existingValidation = this.fieldValidations.get(fieldId);
|
|
329
|
+
this.fieldValidations.set(fieldId, { ...existingValidation, ...updates });
|
|
330
|
+
}
|
|
331
|
+
return (0, errors_1.Ok)(undefined);
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Obtient tous les champs
|
|
335
|
+
*/
|
|
336
|
+
getFields() {
|
|
337
|
+
return [...this.content.fields];
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Obtient le nombre de champs
|
|
341
|
+
* @param excludeSeparators - If true, excludes separator fields from count (default: false)
|
|
342
|
+
*/
|
|
343
|
+
getFieldCount(excludeSeparators = false) {
|
|
344
|
+
if (excludeSeparators) {
|
|
345
|
+
return this.content.fields.filter(field => field.fieldType !== 'separator').length;
|
|
346
|
+
}
|
|
347
|
+
return this.content.fields.length;
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Vérifie si le formulaire a des champs requis
|
|
351
|
+
*/
|
|
352
|
+
hasRequiredFields() {
|
|
353
|
+
return this.content.fields.some(field => field.required);
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Obtient les champs requis
|
|
357
|
+
*/
|
|
358
|
+
getRequiredFields() {
|
|
359
|
+
return this.content.fields
|
|
360
|
+
.filter(field => field.required)
|
|
361
|
+
.map(field => field.fieldId);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
exports.FormView = FormView;
|
|
365
|
+
//# sourceMappingURL=form-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-view.js","sourceRoot":"","sources":["../../src/core/form-view.ts"],"names":[],"mappings":"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"}
|