5htp-core 0.2.2-2 → 0.2.3

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 (41) hide show
  1. package/package.json +1 -1
  2. package/src/client/app/component.tsx +1 -2
  3. package/src/client/app/index.ts +1 -1
  4. package/src/client/assets/css/components/button.less +4 -3
  5. package/src/client/assets/css/components/card.less +26 -11
  6. package/src/client/assets/css/components/other.less +0 -11
  7. package/src/client/assets/css/components.less +17 -3
  8. package/src/client/assets/css/core.less +55 -0
  9. package/src/client/assets/css/theme.less +0 -4
  10. package/src/client/assets/css/utils/medias.less +0 -47
  11. package/src/client/components/Dialog/Manager.tsx +1 -4
  12. package/src/client/components/Form.ts +123 -0
  13. package/src/client/components/{Form → Form_old}/index.tsx +0 -0
  14. package/src/client/components/{Form → Form_old}/index.tsx.old +0 -0
  15. package/src/client/components/containers/Popover/index.tsx +38 -120
  16. package/src/client/components/data/progressbar/circular/index.tsx +1 -3
  17. package/src/client/components/inputv3/base.less +0 -1
  18. package/src/client/components/inputv3/base.tsx +5 -1
  19. package/src/client/components/inputv3/string/index.tsx +22 -9
  20. package/src/client/services/router/components/Page.tsx +16 -18
  21. package/src/client/services/router/components/router.tsx +3 -3
  22. package/src/client/services/router/index.tsx +17 -14
  23. package/src/client/services/router/request/api.ts +3 -2
  24. package/src/client/services/router/response/index.tsx +4 -0
  25. package/src/client/services/router/response/page.ts +2 -1
  26. package/src/common/router/index.ts +1 -1
  27. package/src/common/router/layouts.ts +38 -6
  28. package/src/common/router/register.ts +3 -9
  29. package/src/common/router/request/api.ts +3 -1
  30. package/src/common/validation/index.ts +1 -1
  31. package/src/common/validation/schema.ts +6 -1
  32. package/src/common/validation/validators.ts +1 -1
  33. package/src/server/services/database/index.ts +9 -13
  34. package/src/server/services/router/index.ts +3 -3
  35. package/src/server/services/router/request/api.ts +3 -0
  36. package/src/server/services/router/response/index.ts +7 -4
  37. package/src/server/services/router/response/mask/Filter.ts +16 -72
  38. package/src/server/services/router/response/mask/index.ts +4 -7
  39. package/src/server/services/router/response/page/document.tsx +2 -2
  40. package/src/server/services/router/response/page/index.tsx +2 -2
  41. package/src/server/services/schema/request.ts +4 -2
@@ -9,12 +9,6 @@ import { TSelecteur } from './selecteurs';
9
9
  - TYPES
10
10
  ----------------------------------*/
11
11
 
12
- import type Modele from '@server/services/models';
13
- import type { TMetasAttribut, TControleAcces } from '@server/services/models/attributes';
14
- import type { TModelMetas } from '@server/services/models/table';
15
-
16
- import type { User } from '@models';
17
-
18
12
  type TObjet = { [cle: string]: TObjet | any };
19
13
 
20
14
  /*----------------------------------
@@ -30,21 +24,17 @@ const maxLevel = 10; // Prévention contre les références circulaires
30
24
  ----------------------------------*/
31
25
  export default class Filtre {
32
26
 
33
- public constructor(
34
- private user?: User
35
- ) {
27
+ public constructor() {
36
28
 
37
29
 
38
30
  }
39
31
 
40
- public async filtrer(
32
+ public filtrer(
41
33
  donnee: TObjet | Array<unknown> | Date,
42
34
  schema?: TSelecteur,
43
-
44
35
  chemin: string[] = [],
45
- metasPropriete?: TMetasAttribut,
46
36
  schemaParent?: TObjet
47
- ): Promise<any> {
37
+ ): any {
48
38
 
49
39
  // Prévention contre les références circulaires
50
40
  if (chemin.length > maxLevel)
@@ -57,7 +47,7 @@ export default class Filtre {
57
47
 
58
48
  debug && console.log(`[requete][reponse][filtre]`, chemin.join('.'), ': Tableau');
59
49
 
60
- return await this.tableau(donnee, schema, chemin, metasPropriete, schemaParent);
50
+ return this.tableau(donnee, schema, chemin, schemaParent);
61
51
 
62
52
  // Valeur: Chaque true doit être remplacé par la donnee[ nomBranche ] correspondante
63
53
  // Si la donnée est une chaine, un nombre, etc ... On la traite comme s'il y avait un true
@@ -75,7 +65,7 @@ export default class Filtre {
75
65
 
76
66
  debug && console.log(`[requete][reponse][filtre]`, chemin.join('.'), ': Valeur');
77
67
 
78
- return await this.valeur(
68
+ return this.valeur(
79
69
  donnee,
80
70
  schema,
81
71
  chemin
@@ -86,7 +76,7 @@ export default class Filtre {
86
76
 
87
77
  debug && console.log(`[requete][reponse][filtre]`, chemin.join('.'), ': Objet');
88
78
 
89
- return await this.objet(donnee, schema, chemin, schemaParent);
79
+ return this.objet(donnee, schema, chemin, schemaParent);
90
80
 
91
81
  }
92
82
 
@@ -98,12 +88,11 @@ export default class Filtre {
98
88
  }
99
89
  }
100
90
 
101
- private async tableau(
91
+ private tableau(
102
92
  donnee: any[],
103
93
  schema: TSelecteur | undefined,
104
94
 
105
95
  chemin: string[],
106
- metasPropriete?: TMetasAttribut,
107
96
  schemaParent?: TObjet
108
97
  ) {
109
98
 
@@ -111,12 +100,11 @@ export default class Filtre {
111
100
 
112
101
  for (const iElem in donnee) {
113
102
  retour.push(
114
- await this.filtrer(
103
+ this.filtrer(
115
104
  donnee[iElem],
116
105
  schema,
117
106
 
118
107
  [...chemin, iElem],
119
- metasPropriete,
120
108
  schemaParent
121
109
  )
122
110
  )
@@ -125,7 +113,7 @@ export default class Filtre {
125
113
  return retour;
126
114
  }
127
115
 
128
- private async objet(
116
+ private objet(
129
117
  donnee: TObjet,
130
118
  schema: TSelecteur | undefined,
131
119
 
@@ -167,29 +155,11 @@ export default class Filtre {
167
155
  }
168
156
 
169
157
  let retour: TObjet = {};
170
- let metasClasse: TModelMetas | undefined;
171
-
172
- // Modèle
173
- // On préfère cette méthode plutot que « instanceof Model »
174
- // Car la rféérence vers Model peut ne pas être reconnue quand l'instance est créée depuis le projet
175
- if (donnee._metas !== undefined) {
176
-
177
- metasClasse = donnee._metas as unknown as TModelMetas;
178
-
179
- // Injection nom modèle
180
- // Permet de reconnaitre de quel modèle il s'agit coté client
181
- // (Ex: retour pouvant avoir plusieurs types différent: Depot | Post)
182
- retour._modele = metasClasse.name;
183
- }
184
158
 
185
159
  // Liste des clés à itérer
186
160
  let clesAiterer: string[];
187
161
  if (schema !== undefined)
188
162
  clesAiterer = Object.keys(schema as object);
189
- // Admin = toutes les données sont exposées à l'api
190
- // Si la donnée est une instance de classe, on utilise la liste des propriétés exposées à l'api
191
- else if (metasClasse)
192
- clesAiterer = metasClasse.api;
193
163
  else // En dernier recours, on itère tout simplement les données de l'objet
194
164
  clesAiterer = Object.keys(donnee);
195
165
 
@@ -199,31 +169,16 @@ export default class Filtre {
199
169
  const cheminA = [...chemin, nomBranche];
200
170
  let donneeBranche = undefined;
201
171
 
202
- // Filtrage
203
- // propriete doit IMPERATIVEMENT être avant tout accès à la donnée
204
- // Afin que les promises soient bien catchées
205
- if (metasClasse !== undefined) {
206
-
207
- donneeBranche = await this.propriete(nomBranche, donnee, metasClasse, cheminA);
208
-
209
- // Exclusion de cette donnée
210
- if (donneeBranche === undefined) {
211
- //debug && console.log('EXCLUSION', cheminA.join('.'));
212
- continue;
213
- }
214
- }
215
-
216
172
  // Extraction de la valeur de la propriété
217
173
  if (donneeBranche === undefined)
218
174
  donneeBranche = donnee[nomBranche];
219
175
 
220
176
  // Filtrage de la valeur de la propriété
221
- retour[nomBranche] = await this.filtrer(
177
+ retour[nomBranche] = this.filtrer(
222
178
  donneeBranche,
223
179
  schema !== undefined ? schema[nomBranche] : undefined,
224
180
 
225
181
  cheminA,
226
- metasClasse === undefined ? undefined : metasClasse.attributes[nomBranche],
227
182
 
228
183
  schema as TObjet
229
184
  );
@@ -233,7 +188,7 @@ export default class Filtre {
233
188
  }
234
189
 
235
190
  // Traitement des données aux extrémités (auxquelles font référence les true)
236
- private async valeur(
191
+ private valeur(
237
192
  donnee: any,
238
193
  schema: TSelecteur,
239
194
  chemin: string[]
@@ -265,12 +220,12 @@ export default class Filtre {
265
220
  return donnee;
266
221
  }
267
222
 
268
- private async propriete<TModele extends Modele>(
223
+ /*private propriete<TModele extends Modele>(
269
224
  nom: keyof TModele,
270
225
  modele: TModele,
271
226
  metasClasse: TModelMetas,
272
227
  cheminA: string[]
273
- ): Promise<any | undefined> {
228
+ ): any | undefined {
274
229
 
275
230
  const metasProp = metasClasse.attributes[nom];
276
231
 
@@ -285,20 +240,9 @@ export default class Filtre {
285
240
  }
286
241
 
287
242
  let valeur: any;
288
-
289
243
  // Si promise, on lui rattache un catch le plus tôt possible, avant qu'on ne tente d'acceder à sa valeur
290
244
  // (un simple acces lançant directement la promise)
291
- if (metasProp.api.async) {
292
-
293
- try {
294
- valeur = await modele[nom];
295
- } catch (e) {
296
- console.error(`${cheminA.join('.')}: Erreur lors de l'execution de la promise ${metasClasse.nom}.${nom}`, e);
297
- throw e;
298
- }
299
-
300
- } else
301
- valeur = modele[nom];
245
+ valeur = modele[nom];
302
246
 
303
247
  // Permissions
304
248
  if (!this.controleAcces(modele, metasProp.api.auth, `Elimination de la donnée ${cheminA.join('.')} (${metasClasse.nom}.${nom})`)) {
@@ -316,7 +260,7 @@ export default class Filtre {
316
260
  return undefined;
317
261
 
318
262
  // Dernier traitement des valeurs
319
- //valeur = await filtresProps(valeur, metasProp);
263
+ //valeur = filtresProps(valeur, metasProp);
320
264
  return valeur;
321
265
  }
322
266
 
@@ -374,6 +318,6 @@ export default class Filtre {
374
318
 
375
319
  return false;
376
320
  }
377
- }
321
+ }*/
378
322
 
379
323
  }
@@ -24,12 +24,9 @@ const debug = false;
24
24
  ----------------------------------*/
25
25
 
26
26
  // proprieteModele = Si l'objet actuellement traité fait partie des valeurs d'un modèle
27
- export default async (
27
+ export default (
28
28
  donnee: any,
29
- selecteurs?: string | TObjetSelecteurs,
30
-
31
- // Facultatif, car il faut pouvoir utiliser filtreApi pour l'emission socket général (ex: résultats selection trading)
32
- user?: User | null
29
+ selecteurs?: string | TObjetSelecteurs
33
30
  ) => {
34
31
 
35
32
  // Pas besoin de filtrer
@@ -48,8 +45,8 @@ export default async (
48
45
 
49
46
  debug && console.log('Avant filtrage', donnee);
50
47
 
51
- const filtre = new Filter(user);
52
- const retour = await filtre.filtrer(donnee, selecteursCompiles);
48
+ const filtre = new Filter();
49
+ const retour = filtre.filtrer(donnee, selecteursCompiles);
53
50
 
54
51
  // Empêche un nouveau filtrage
55
52
  // OBSOLETE: éviter d emodifier le retour des api, car cela peut poser probleme lors du traitement de ces données (ex: itération clés objet)
@@ -153,7 +153,7 @@ export default class DocumentRenderer {
153
153
 
154
154
  private async scripts( response, page ) {
155
155
 
156
- const ssrData = safeStringify( await response.forSsr(page) );
156
+ const context = safeStringify( response.forSsr(page) );
157
157
 
158
158
  const routesForClient = JSON.stringify( this.router.ssrRoutes );
159
159
 
@@ -161,7 +161,7 @@ export default class DocumentRenderer {
161
161
  {/* JS */}
162
162
  {!page.amp && (
163
163
  <script type="text/javascript" dangerouslySetInnerHTML={{
164
- __html: `window.ssr=${ssrData}; window.routes=${routesForClient};` + (
164
+ __html: `window.ssr=${context}; window.routes=${routesForClient};` + (
165
165
  this.app.env.profile === 'dev' ? 'window.dev = true;' : ''
166
166
  )
167
167
  }} />
@@ -9,8 +9,7 @@ const safeStringify = require('fast-safe-stringify'); // remplace les référenc
9
9
 
10
10
  // Core
11
11
  import { default as Router, TRouterContext } from "@server/services/router";
12
- import type ServerResponse from "@server/services/router/response";
13
- import type { TRoute } from '@common/router';
12
+ import type { Layout } from '@common/router';
14
13
  import PageResponse, { TDataProvider, TFrontRenderer } from "@common/router/response/page";
15
14
 
16
15
  // Composants UI
@@ -33,6 +32,7 @@ export default class Page<TRouter extends Router = Router> extends PageResponse<
33
32
  public dataProvider: TDataProvider | null,
34
33
  public renderer: TFrontRenderer,
35
34
  public context: TRouterContext,
35
+ public layout?: Layout,
36
36
 
37
37
  public route = context.route,
38
38
  public router = context.request.router
@@ -38,11 +38,13 @@ export default class RequestValidator extends ServerSchemaValidator implements R
38
38
 
39
39
  }
40
40
 
41
- public validate<TSchemaFieldsA extends TSchemaFields>( fields: TSchemaFieldsA ): TValidatedData<TSchemaFieldsA> {
41
+ public validate<TSchemaFieldsA extends TSchemaFields>(
42
+ fields: TSchemaFieldsA | Schema<TSchemaFieldsA>
43
+ ): TValidatedData<TSchemaFieldsA> {
42
44
 
43
45
  this.config.debug && console.log(LogPrefix, "Validate request data:", this.request.data);
44
46
 
45
- const schema = new Schema(fields);
47
+ const schema = fields instanceof Schema ? fields : new Schema(fields);
46
48
 
47
49
  // Les InputError seront propagées vers le middleware dédié à la gestion des erreurs
48
50
  const { values } = schema.validate(