@supersoniks/concorde 1.1.45 → 1.1.47
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 +0 -0
- package/cli.js +0 -0
- package/concorde-core.bundle.js +36 -23
- package/concorde-core.es.js +1156 -864
- package/concorde-customer.bundle.js +129 -0
- package/concorde-customer.es.js +22004 -0
- package/core/_types/types.d.ts +0 -1
- package/core/components/functional/date/date.js +15 -7
- package/core/components/functional/fetch/fetch.d.ts +3 -1
- package/core/components/functional/list/list.d.ts +36 -19
- package/core/components/functional/list/list.js +15 -23
- package/core/components/functional/queue/queue.d.ts +6 -1
- package/core/components/functional/queue/queue.js +92 -54
- package/core/components/functional/sdui/sdui.d.ts +3 -4
- package/core/components/functional/sdui/sdui.js +0 -3
- package/core/components/ui/_css/type.js +12 -12
- package/core/components/ui/alert/alert.d.ts +3 -0
- package/core/components/ui/alert/alert.js +33 -1
- package/core/components/ui/badge/badge.d.ts +1 -1
- package/core/components/ui/badge/badge.js +9 -3
- package/core/components/ui/button/button.d.ts +2 -0
- package/core/components/ui/button/button.js +37 -12
- package/core/components/ui/form/checkbox/checkbox.d.ts +3 -0
- package/core/components/ui/form/checkbox/checkbox.js +14 -3
- package/core/components/ui/form/css/form-control.d.ts +1 -0
- package/core/components/ui/form/css/form-control.js +17 -0
- package/core/components/ui/form/input/input.d.ts +4 -3
- package/core/components/ui/form/input/input.js +38 -1
- package/core/components/ui/form/textarea/textarea.d.ts +1 -0
- package/core/components/ui/icon/icon.js +1 -1
- package/core/components/ui/image/image.d.ts +2 -0
- package/core/components/ui/image/image.js +28 -0
- package/core/components/ui/modal/modal-close.js +2 -3
- package/core/components/ui/modal/modal-content.js +1 -0
- package/core/components/ui/modal/modal.d.ts +8 -0
- package/core/components/ui/modal/modal.js +34 -6
- package/core/components/ui/pop/pop.js +1 -1
- package/core/components/ui/theme/css/tailwind.css +0 -0
- package/core/components/ui/theme/css/tailwind.d.ts +0 -0
- package/core/components/ui/theme/theme-collection/core-variables.js +18 -9
- package/core/components/ui/theme/theme.js +15 -8
- package/core/components/ui/toast/toast.d.ts +1 -1
- package/core/components/ui/toast/types.d.ts +1 -1
- package/core/components/ui/ui.d.ts +0 -1
- package/core/components/ui/ui.js +0 -1
- package/core/mixins/Fetcher.d.ts +3 -1
- package/core/mixins/Fetcher.js +45 -14
- package/core/mixins/FormCheckable.d.ts +1 -0
- package/core/mixins/FormInput.d.ts +1 -0
- package/core/mixins/Subscriber.d.ts +1 -0
- package/core/mixins/Subscriber.js +12 -7
- package/core/utils/LocationHandler.js +9 -3
- package/core/utils/PublisherProxy.d.ts +30 -4
- package/core/utils/PublisherProxy.js +218 -7
- package/core/utils/api.d.ts +3 -0
- package/core/utils/api.js +3 -1
- package/img/concorde-logo.svg +0 -0
- package/img/concorde.png +0 -0
- package/img/concorde_def.png +0 -0
- package/mixins.d.ts +5 -1
- package/package.json +5 -1
- package/svg/regular/plane.svg +0 -0
- package/svg/solid/plane.svg +0 -0
package/core/_types/types.d.ts
CHANGED
|
@@ -26,6 +26,5 @@ export type CoreJSType = string | number | boolean | null | {
|
|
|
26
26
|
export type TypeAndRecordOfType<U> = U & Record<string | number, U>;
|
|
27
27
|
export type PublisherContentType = CoreJSType & {
|
|
28
28
|
__value?: CoreJSType;
|
|
29
|
-
_key_?: number;
|
|
30
29
|
};
|
|
31
30
|
export type HTMLFormControl = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;
|
|
@@ -45,7 +45,9 @@ let SonicDate = class SonicDate extends Subscriber(TemplatesContainer(LitElement
|
|
|
45
45
|
}
|
|
46
46
|
set wording_billet_periode_validite(value) {
|
|
47
47
|
this._wording_billet_periode_validite = value;
|
|
48
|
-
this.duAu = this.wording_billet_periode_validite
|
|
48
|
+
this.duAu = this.wording_billet_periode_validite
|
|
49
|
+
.split("%s")
|
|
50
|
+
.map((str) => str.trim());
|
|
49
51
|
this.duAu.pop();
|
|
50
52
|
this.requestUpdate();
|
|
51
53
|
}
|
|
@@ -74,25 +76,31 @@ let SonicDate = class SonicDate extends Subscriber(TemplatesContainer(LitElement
|
|
|
74
76
|
}
|
|
75
77
|
const format = new Intl.DateTimeFormat(this.language || this.pageLanguage, options);
|
|
76
78
|
parts = format.formatRangeToParts(start, end);
|
|
77
|
-
//En mode design on cache les ","
|
|
78
|
-
if (this.designMode) {
|
|
79
|
-
parts.forEach((part) => (part.hidden = part.value.trim() == ","));
|
|
80
|
-
}
|
|
81
79
|
//on affiche du au uniquement si on a deux dates différentes
|
|
82
80
|
if (!isSameDay) {
|
|
83
|
-
const to = parts.find((part) => part.type == "literal" &&
|
|
81
|
+
const to = parts.find((part) => part.type == "literal" &&
|
|
82
|
+
part.source == "shared" &&
|
|
83
|
+
part.value.trim().length > 0);
|
|
84
84
|
if (to) {
|
|
85
85
|
to.value = " " + this.duAu[1] + " ";
|
|
86
86
|
to.type = "to";
|
|
87
87
|
}
|
|
88
88
|
if (!this.designMode)
|
|
89
|
-
parts.unshift({
|
|
89
|
+
parts.unshift({
|
|
90
|
+
type: "from",
|
|
91
|
+
value: this.duAu[0] + " ",
|
|
92
|
+
source: "shared",
|
|
93
|
+
});
|
|
90
94
|
}
|
|
91
95
|
}
|
|
92
96
|
else {
|
|
93
97
|
const format = new Intl.DateTimeFormat(this.language || this.pageLanguage, options);
|
|
94
98
|
parts = format.formatToParts(start);
|
|
95
99
|
}
|
|
100
|
+
//En mode design on cache les ","
|
|
101
|
+
if (this.designMode) {
|
|
102
|
+
parts.forEach((part) => (part.hidden = part.value.trim() == ","));
|
|
103
|
+
}
|
|
96
104
|
parts[0].value = Format.ucFirst(parts[0].value);
|
|
97
105
|
return parts.filter((p) => p.hidden !== true);
|
|
98
106
|
}
|
|
@@ -19,7 +19,8 @@ declare const Fetch_base: {
|
|
|
19
19
|
onInvalidate?: (() => void) | undefined;
|
|
20
20
|
disconnectedCallback(): void;
|
|
21
21
|
connectedCallback(): void;
|
|
22
|
-
|
|
22
|
+
lazyLoadSpan?: HTMLSpanElement | undefined;
|
|
23
|
+
handleLazyLoad(): void;
|
|
23
24
|
onIntersection(entries: IntersectionObserverEntry[]): void;
|
|
24
25
|
propertyMap: object;
|
|
25
26
|
isConnected: boolean;
|
|
@@ -45,6 +46,7 @@ declare const Fetch_base: {
|
|
|
45
46
|
requestUpdate(): void;
|
|
46
47
|
getAttribute(name: string): string;
|
|
47
48
|
hasAttribute(attributeName: string): boolean;
|
|
49
|
+
getBoundingClientRect(): DOMRect;
|
|
48
50
|
};
|
|
49
51
|
} & (new (...args: any[]) => import("@supersoniks/concorde/core/mixins/Subscriber").SubscriberInterface<import("../../../_types/types").CoreJSType>) & typeof LitElement;
|
|
50
52
|
/**
|
|
@@ -5,6 +5,38 @@ import "@supersoniks/concorde/core/components/functional/subscriber/subscriber";
|
|
|
5
5
|
import { DirectiveResult } from "lit/directive";
|
|
6
6
|
import { TemplateContentDirective } from "lit/directives/template-content.js";
|
|
7
7
|
import { TemplateResult } from "lit";
|
|
8
|
+
/**
|
|
9
|
+
* ### List boucle sur sa propriété "props" et crée des éléments a partir des données en bouclant également sur ses templates.
|
|
10
|
+
*
|
|
11
|
+
* Extends mixins : Fetcher, [Subscriber](./?path=/docs/miscallenous-🔔-subscriber--page)
|
|
12
|
+
*
|
|
13
|
+
* * Si le composant possède un attribut *fetch*, il charge un contenu via un appel d'api web.<br>
|
|
14
|
+
* Voir [fetcher](./?path=/docs/core-components-functional-fetch--basic) pour la configuration des autres attributs.
|
|
15
|
+
* * Chaque élément créé est englobé dans un objet [Subscriber](./?path=/docs/miscallenous-🔔-subscriber--page).<br>
|
|
16
|
+
* Un dataProvider y est associé a l'adresse suivante *dataProvider-de-la-liste$/*index-de-la-ligne-courante*
|
|
17
|
+
* Les données de la ligne sont donc disponible pour les élements internes (subscribers, data-binding)
|
|
18
|
+
* * Lors du chargement un objet loader inline est affiché.
|
|
19
|
+
* * Si le résultat de la requête est un objet, il est imbriqué dans un tableau pour garantir le fonctionnement.<br>
|
|
20
|
+
* Cependant, si l'attribut `extractValues` est présent, les valeurs des propriétés de l'objet sont mises dans dans un tableau pour le rendu.
|
|
21
|
+
* * La propriété _metadata_ est ajoutés à la donnée de chaque item. Elle contient les informations suivantes :
|
|
22
|
+
* * key : l'index de l'item dans la liste
|
|
23
|
+
* * even : true si l'index est pair
|
|
24
|
+
* * odd : true si l'index est impair
|
|
25
|
+
* * onlyChild : true si la liste ne contient qu'un seul item
|
|
26
|
+
* * firstChild : true si l'item est le premier de la liste
|
|
27
|
+
* * lastChild : true si l'item est le dernier de la liste
|
|
28
|
+
* * Si la liste ne contient aucun item, le template "no-item" est utilisé si il est défini.
|
|
29
|
+
* * On peut appler la methode invalidate() sur son publishe pour declencher le rechargement des données
|
|
30
|
+
* *
|
|
31
|
+
*/
|
|
32
|
+
export type ListItemMetadata = {
|
|
33
|
+
key?: string;
|
|
34
|
+
even?: boolean;
|
|
35
|
+
odd?: boolean;
|
|
36
|
+
onlyChild?: boolean;
|
|
37
|
+
firstChild?: boolean;
|
|
38
|
+
lastChild?: boolean;
|
|
39
|
+
};
|
|
8
40
|
declare const List_base: {
|
|
9
41
|
new (...args: any[]): {
|
|
10
42
|
api: import("../../../utils/api").default | null;
|
|
@@ -24,7 +56,8 @@ declare const List_base: {
|
|
|
24
56
|
onInvalidate?: (() => void) | undefined;
|
|
25
57
|
disconnectedCallback(): void;
|
|
26
58
|
connectedCallback(): void;
|
|
27
|
-
|
|
59
|
+
lazyLoadSpan?: HTMLSpanElement | undefined;
|
|
60
|
+
handleLazyLoad(): void;
|
|
28
61
|
onIntersection(entries: IntersectionObserverEntry[]): void;
|
|
29
62
|
propertyMap: object;
|
|
30
63
|
isConnected: boolean;
|
|
@@ -50,25 +83,9 @@ declare const List_base: {
|
|
|
50
83
|
requestUpdate(): void;
|
|
51
84
|
getAttribute(name: string): string;
|
|
52
85
|
hasAttribute(attributeName: string): boolean;
|
|
86
|
+
getBoundingClientRect(): DOMRect;
|
|
53
87
|
};
|
|
54
88
|
} & (new (...args: any[]) => import("@supersoniks/concorde/core/mixins/Subscriber").SubscriberInterface<import("../../../_types/types").CoreJSType>) & (new (...args: any[]) => import("@supersoniks/concorde/core/mixins/TemplatesContainer").TemplatesContainerInterface) & typeof LitElement;
|
|
55
|
-
/**
|
|
56
|
-
* ### List boucle sur sa propriété "props" et crée des éléments a partir des données en bouclant également sur ses templates.
|
|
57
|
-
*
|
|
58
|
-
* Extends mixins : Fetcher, [Subscriber](./?path=/docs/miscallenous-🔔-subscriber--page)
|
|
59
|
-
*
|
|
60
|
-
* * Si le composant possède un attribut *fetch*, il charge un contenu via un appel d'api web.<br>
|
|
61
|
-
* Voir [fetcher](./?path=/docs/core-components-functional-fetch--basic) pour la configuration des autres attributs.
|
|
62
|
-
* * Chaque élément créé est englobé dans un objet [Subscriber](./?path=/docs/miscallenous-🔔-subscriber--page).<br>
|
|
63
|
-
* Un dataProvider y est associé a l'adresse suivante *dataProvider-de-la-liste$/*index-de-la-ligne-courante*
|
|
64
|
-
* Les données de la ligne sont donc disponible pour les élements internes (subscribers, data-binding)
|
|
65
|
-
* * Lors du chargement un objet loader inline est affiché.
|
|
66
|
-
* * Si le résultat de la requête est un objet, il est imbriqué dans un tableau pour garantir le fonctionnement.<br>
|
|
67
|
-
* Cependant, si l'attribut `extractValues` est présent, les valeurs des propriétés de l'objet sont mises dans dans un tableau pour le rendu.
|
|
68
|
-
* * La propriété _key_ est ajoutés à la donnée de chaque item. Elle contient l'index dans le cas d'un liste simple ou la clés associée à la valeur si `extractValues` est définit.
|
|
69
|
-
* * On peut appler la methode invalidate() sur son publishe pour declencher le rechargement des données
|
|
70
|
-
* *
|
|
71
|
-
*/
|
|
72
89
|
export declare class List extends List_base {
|
|
73
90
|
itemPropertyMap?: object;
|
|
74
91
|
/**
|
|
@@ -81,11 +98,11 @@ export declare class List extends List_base {
|
|
|
81
98
|
*/
|
|
82
99
|
idKey: string;
|
|
83
100
|
connectedCallback(): void;
|
|
101
|
+
disconnectedCallback(): void;
|
|
84
102
|
renderLoadingState(): DirectiveResult<typeof TemplateContentDirective> | TemplateResult;
|
|
85
103
|
renderNoResultState(): TemplateResult<1>;
|
|
86
104
|
formatProps(): (import("../../../_types/types").CoreJSType[] & {
|
|
87
105
|
__value?: import("../../../_types/types").CoreJSType | undefined;
|
|
88
|
-
_key_?: number | undefined;
|
|
89
106
|
} & {
|
|
90
107
|
_sonic_http_response_?: Response | undefined;
|
|
91
108
|
text?: string | undefined;
|
|
@@ -14,23 +14,6 @@ import "@supersoniks/concorde/core/components/functional/subscriber/subscriber";
|
|
|
14
14
|
import Objects from "@supersoniks/concorde/core/utils/Objects";
|
|
15
15
|
import TemplatesContainer from "@supersoniks/concorde/core/mixins/TemplatesContainer";
|
|
16
16
|
const tagName = "sonic-list";
|
|
17
|
-
/**
|
|
18
|
-
* ### List boucle sur sa propriété "props" et crée des éléments a partir des données en bouclant également sur ses templates.
|
|
19
|
-
*
|
|
20
|
-
* Extends mixins : Fetcher, [Subscriber](./?path=/docs/miscallenous-🔔-subscriber--page)
|
|
21
|
-
*
|
|
22
|
-
* * Si le composant possède un attribut *fetch*, il charge un contenu via un appel d'api web.<br>
|
|
23
|
-
* Voir [fetcher](./?path=/docs/core-components-functional-fetch--basic) pour la configuration des autres attributs.
|
|
24
|
-
* * Chaque élément créé est englobé dans un objet [Subscriber](./?path=/docs/miscallenous-🔔-subscriber--page).<br>
|
|
25
|
-
* Un dataProvider y est associé a l'adresse suivante *dataProvider-de-la-liste$/*index-de-la-ligne-courante*
|
|
26
|
-
* Les données de la ligne sont donc disponible pour les élements internes (subscribers, data-binding)
|
|
27
|
-
* * Lors du chargement un objet loader inline est affiché.
|
|
28
|
-
* * Si le résultat de la requête est un objet, il est imbriqué dans un tableau pour garantir le fonctionnement.<br>
|
|
29
|
-
* Cependant, si l'attribut `extractValues` est présent, les valeurs des propriétés de l'objet sont mises dans dans un tableau pour le rendu.
|
|
30
|
-
* * La propriété _key_ est ajoutés à la donnée de chaque item. Elle contient l'index dans le cas d'un liste simple ou la clés associée à la valeur si `extractValues` est définit.
|
|
31
|
-
* * On peut appler la methode invalidate() sur son publishe pour declencher le rechargement des données
|
|
32
|
-
* *
|
|
33
|
-
*/
|
|
34
17
|
let List = class List extends Fetcher(Subscriber(TemplatesContainer(LitElement))) {
|
|
35
18
|
constructor() {
|
|
36
19
|
super(...arguments);
|
|
@@ -53,6 +36,9 @@ let List = class List extends Fetcher(Subscriber(TemplatesContainer(LitElement))
|
|
|
53
36
|
this.isLoading = true;
|
|
54
37
|
super.connectedCallback();
|
|
55
38
|
}
|
|
39
|
+
disconnectedCallback() {
|
|
40
|
+
super.disconnectedCallback();
|
|
41
|
+
}
|
|
56
42
|
renderLoadingState() {
|
|
57
43
|
return this.templateParts["skeleton"]
|
|
58
44
|
? templateContent(this.templateParts["skeleton"])
|
|
@@ -150,13 +136,19 @@ let List = class List extends Fetcher(Subscriber(TemplatesContainer(LitElement))
|
|
|
150
136
|
}
|
|
151
137
|
if (key == "_sonic_http_response_")
|
|
152
138
|
return nothing;
|
|
153
|
-
;
|
|
154
139
|
if (typeof key != "string" && typeof key != "number")
|
|
155
140
|
return nothing;
|
|
156
|
-
const
|
|
157
|
-
|
|
141
|
+
const isLastChild = index >= length - 1;
|
|
142
|
+
const indexMod2 = index % 2;
|
|
143
|
+
const childPublisher = this.publisher[key];
|
|
144
|
+
/**
|
|
145
|
+
* Ajout de metatdonnées au publisher de l'enfant
|
|
146
|
+
*/
|
|
147
|
+
//La prop key est gardée pour le moment pour compatibilité
|
|
148
|
+
//TODO : supprimer la prop key cquand c'est ok côté covoit.
|
|
149
|
+
childPublisher._key_ = key + "";
|
|
150
|
+
childPublisher._metadata_ = Object.assign(Object.assign({}, childPublisher._metadata_.get()), { key: key, even: indexMod2 == 0, odd: indexMod2 == 1, onlyChild: length == 1, firstChild: index == 0, lastChild: isLastChild });
|
|
158
151
|
counter++;
|
|
159
|
-
const isNotLast = index < length - 1;
|
|
160
152
|
if (templatePart)
|
|
161
153
|
counter = -1;
|
|
162
154
|
return (item &&
|
|
@@ -164,7 +156,7 @@ let List = class List extends Fetcher(Subscriber(TemplatesContainer(LitElement))
|
|
|
164
156
|
<sonic-subscriber
|
|
165
157
|
?debug=${this.defferedDebug === true}
|
|
166
158
|
.bindPublisher=${function () {
|
|
167
|
-
return
|
|
159
|
+
return childPublisher;
|
|
168
160
|
}}
|
|
169
161
|
.propertyMap?=${this.itemPropertyMap}
|
|
170
162
|
dataProvider="${this.dataProvider}/list-item/${key}"
|
|
@@ -173,7 +165,7 @@ let List = class List extends Fetcher(Subscriber(TemplatesContainer(LitElement))
|
|
|
173
165
|
? templateContent(templatePart)
|
|
174
166
|
: templateContent(this.templateList[counter % templateCount])}
|
|
175
167
|
</sonic-subscriber>
|
|
176
|
-
${separator &&
|
|
168
|
+
${separator && !isLastChild ? templateContent(separator) : nothing}
|
|
177
169
|
`);
|
|
178
170
|
})}
|
|
179
171
|
`;
|
|
@@ -27,19 +27,24 @@ export default class Queue extends Queue_base {
|
|
|
27
27
|
/**
|
|
28
28
|
* Durée cible en ms d'une requête pour afficher 1 lot.
|
|
29
29
|
*/
|
|
30
|
+
cache: RequestCache;
|
|
30
31
|
targetRequestDuration: number;
|
|
31
32
|
limit: number;
|
|
33
|
+
lazyBoundsRatio: number;
|
|
32
34
|
offset: number;
|
|
33
35
|
resultCount: number;
|
|
36
|
+
noLazyload: boolean;
|
|
34
37
|
filteredFields: string;
|
|
35
38
|
disconnectedCallback(): void;
|
|
36
39
|
static instanceCounter: number;
|
|
37
|
-
|
|
40
|
+
localStorage: string;
|
|
41
|
+
connectedCallback(): Promise<void>;
|
|
38
42
|
filterPublisher: PublisherProxy | null;
|
|
39
43
|
configFilter(): void;
|
|
40
44
|
filterTimeoutId?: ReturnType<typeof setTimeout>;
|
|
41
45
|
searchHash: string;
|
|
42
46
|
requestId: number;
|
|
47
|
+
isFirstRequest: boolean;
|
|
43
48
|
updateFilteredContent(): void;
|
|
44
49
|
/**
|
|
45
50
|
* Cette expression est utilisée comme modèle par le composant Queue pour renseigngner le dataProvider de la [liste](./?path=/docs/core-components-functional-list-list--basic) créée.
|
|
@@ -4,11 +4,20 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
8
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
9
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
10
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
11
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
12
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
13
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
14
|
+
});
|
|
15
|
+
};
|
|
7
16
|
var Queue_1;
|
|
8
17
|
import { html, LitElement, nothing } from "lit";
|
|
9
18
|
import { customElement, property } from "lit/decorators.js";
|
|
10
19
|
import Subscriber from "@supersoniks/concorde/core/mixins/Subscriber";
|
|
11
|
-
import {
|
|
20
|
+
import { map } from "lit/directives/map.js";
|
|
12
21
|
import { PublisherManager } from "@supersoniks/concorde/core/utils/PublisherProxy";
|
|
13
22
|
import "@supersoniks/concorde/core/components/functional/list/list";
|
|
14
23
|
import { HTML } from "@supersoniks/concorde/utils";
|
|
@@ -31,18 +40,23 @@ let Queue = Queue_1 = class Queue extends Subscriber(LitElement, {}) {
|
|
|
31
40
|
/**
|
|
32
41
|
* Durée cible en ms d'une requête pour afficher 1 lot.
|
|
33
42
|
*/
|
|
43
|
+
this.cache = "default";
|
|
34
44
|
this.targetRequestDuration = 500;
|
|
35
45
|
/*
|
|
36
46
|
* Quantité d'éléments devant être chargés dans le premier lot.
|
|
37
47
|
* Cette valeur est mise à jour ensuite par Queue pour chauq lot pour se rapprocher tanque possible de *targetRequestDuration*
|
|
38
48
|
*/
|
|
39
49
|
this.limit = 5;
|
|
50
|
+
this.lazyBoundsRatio = 1;
|
|
40
51
|
this.offset = 0;
|
|
41
52
|
this.resultCount = 0;
|
|
53
|
+
this.noLazyload = false;
|
|
42
54
|
this.filteredFields = "";
|
|
55
|
+
this.localStorage = "disabled";
|
|
43
56
|
this.filterPublisher = null;
|
|
44
57
|
this.searchHash = "";
|
|
45
58
|
this.requestId = 0;
|
|
59
|
+
this.isFirstRequest = true;
|
|
46
60
|
/**
|
|
47
61
|
* Cette expression est utilisée comme modèle par le composant Queue pour renseigngner le dataProvider de la [liste](./?path=/docs/core-components-functional-list-list--basic) créée.
|
|
48
62
|
* * l'expression *$offset* est alors remplacée par le numéro de l'élément à partir duquel démarrer
|
|
@@ -63,33 +77,40 @@ let Queue = Queue_1 = class Queue extends Subscriber(LitElement, {}) {
|
|
|
63
77
|
return;
|
|
64
78
|
}
|
|
65
79
|
connectedCallback() {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
this.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
this.
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
const _super = Object.create(null, {
|
|
81
|
+
connectedCallback: { get: () => super.connectedCallback }
|
|
82
|
+
});
|
|
83
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
84
|
+
this.localStorage = this.getAttribute("localStorage") || this.localStorage;
|
|
85
|
+
this.removeAttribute("localStorage");
|
|
86
|
+
this.noShadowDom = "";
|
|
87
|
+
this.defferedDebug = this.hasAttribute("debug") || null;
|
|
88
|
+
/**Compat avec states et routing **/
|
|
89
|
+
if (!this.dataProvider)
|
|
90
|
+
this.dataProvider =
|
|
91
|
+
this.dataProviderExpression ||
|
|
92
|
+
"sonic-queue-" + Queue_1.instanceCounter++ + "-" + Math.random().toString(36).substring(7);
|
|
93
|
+
if (!this.dataProviderExpression) {
|
|
94
|
+
this.dataProviderExpression = HTML.getAncestorAttributeValue(this.parentElement, "dataProvider") || "";
|
|
95
|
+
}
|
|
96
|
+
_super.connectedCallback.call(this);
|
|
97
|
+
this.key = this.getAttribute("key");
|
|
98
|
+
if (!this.templates)
|
|
99
|
+
this.templates = Array.from(this.querySelectorAll("template"));
|
|
100
|
+
this.lastRequestTime = new Date().getTime();
|
|
101
|
+
yield PublisherManager.getInstance().isLocalStrorageReady;
|
|
102
|
+
this.configFilter();
|
|
103
|
+
});
|
|
82
104
|
}
|
|
83
105
|
configFilter() {
|
|
84
106
|
var _a;
|
|
85
107
|
const dataFilterProvider = this.getAncestorAttributeValue("dataFilterProvider");
|
|
86
|
-
if (!dataFilterProvider)
|
|
108
|
+
if (!dataFilterProvider) {
|
|
109
|
+
this.next();
|
|
87
110
|
return;
|
|
111
|
+
}
|
|
88
112
|
this.filterPublisher = PublisherManager.getInstance().get(dataFilterProvider);
|
|
89
113
|
(_a = this.filterPublisher) === null || _a === void 0 ? void 0 : _a.onInternalMutation(() => {
|
|
90
|
-
var _a;
|
|
91
|
-
if (Object.keys((_a = this.filterPublisher) === null || _a === void 0 ? void 0 : _a.get()).length == 0)
|
|
92
|
-
return;
|
|
93
114
|
this.updateFilteredContent();
|
|
94
115
|
});
|
|
95
116
|
}
|
|
@@ -113,7 +134,7 @@ let Queue = Queue_1 = class Queue extends Subscriber(LitElement, {}) {
|
|
|
113
134
|
searchParams.set(f, filterData[f].toString());
|
|
114
135
|
}
|
|
115
136
|
const searchHash = searchParams.toString();
|
|
116
|
-
if (searchHash == this.searchHash)
|
|
137
|
+
if (searchHash == this.searchHash && !this.isFirstRequest)
|
|
117
138
|
return;
|
|
118
139
|
this.searchHash = searchHash;
|
|
119
140
|
/**
|
|
@@ -124,20 +145,22 @@ let Queue = Queue_1 = class Queue extends Subscriber(LitElement, {}) {
|
|
|
124
145
|
}
|
|
125
146
|
this.listDataProviders = [];
|
|
126
147
|
clearTimeout(this.filterTimeoutId);
|
|
127
|
-
this.filterTimeoutId = setTimeout(() => {
|
|
148
|
+
this.filterTimeoutId = setTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
128
149
|
const count = this.resultCount;
|
|
129
150
|
this.props = null;
|
|
130
151
|
//On garde le décompte au cas ou il n'y aurait pas rechargement
|
|
131
|
-
this.resultCount = count;
|
|
132
152
|
this.requestId++;
|
|
133
|
-
this.
|
|
134
|
-
|
|
153
|
+
this.resultCount = count;
|
|
154
|
+
yield PublisherManager.getInstance().isLocalStrorageReady;
|
|
155
|
+
window.requestAnimationFrame(() => this.next());
|
|
156
|
+
}), this.isFirstRequest ? 0 : 400);
|
|
157
|
+
this.isFirstRequest = false;
|
|
135
158
|
}
|
|
136
159
|
resetDuration() {
|
|
137
160
|
this.lastRequestTime = new Date().getTime();
|
|
138
161
|
}
|
|
139
162
|
next(e) {
|
|
140
|
-
var _a
|
|
163
|
+
var _a;
|
|
141
164
|
let offset = this.offset;
|
|
142
165
|
const newTime = new Date().getTime();
|
|
143
166
|
const requestDuration = newTime - this.lastRequestTime;
|
|
@@ -150,7 +173,7 @@ let Queue = Queue_1 = class Queue extends Subscriber(LitElement, {}) {
|
|
|
150
173
|
}
|
|
151
174
|
this.nextHadEvent = !!e;
|
|
152
175
|
if (e) {
|
|
153
|
-
if (e.detail.requestId
|
|
176
|
+
if (e.detail.requestId < this.requestId)
|
|
154
177
|
return;
|
|
155
178
|
this.resultCount += e.detail.props.length;
|
|
156
179
|
if (!e.detail.isFirstLoad || !e.detail.props.length || this.dataProviderExpression.indexOf("$offset") == -1) {
|
|
@@ -168,7 +191,7 @@ let Queue = Queue_1 = class Queue extends Subscriber(LitElement, {}) {
|
|
|
168
191
|
const item = props[props.length - 1];
|
|
169
192
|
offset = parseInt(item.offset.toString()) + parseInt(item.limit.toString());
|
|
170
193
|
}
|
|
171
|
-
if (requestDuration > 0 && e)
|
|
194
|
+
if (requestDuration > 0 && e && !this.localStorage)
|
|
172
195
|
this.limit = Math.round((this.limit / requestDuration) * this.targetRequestDuration);
|
|
173
196
|
if (this.limit < 1)
|
|
174
197
|
this.limit = 1;
|
|
@@ -189,7 +212,7 @@ let Queue = Queue_1 = class Queue extends Subscriber(LitElement, {}) {
|
|
|
189
212
|
this.searchHash = searchParams.toString();
|
|
190
213
|
dataProvider = endpoint + "?" + searchParams.toString();
|
|
191
214
|
this.listDataProviders.push(dataProvider);
|
|
192
|
-
this.currentScrollPosition =
|
|
215
|
+
// this.currentScrollPosition = document.scrollingElement?.scrollTop;
|
|
193
216
|
const newProps = [
|
|
194
217
|
...this.props,
|
|
195
218
|
{
|
|
@@ -204,36 +227,42 @@ let Queue = Queue_1 = class Queue extends Subscriber(LitElement, {}) {
|
|
|
204
227
|
this.lastRequestTime = new Date().getTime();
|
|
205
228
|
}
|
|
206
229
|
render() {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
230
|
+
/**
|
|
231
|
+
* supression du retablisment de la scroll pos.
|
|
232
|
+
**/
|
|
233
|
+
// if (this.currentScrollPosition) {
|
|
234
|
+
// window.requestAnimationFrame(() => {
|
|
235
|
+
// if (document.scrollingElement && this.currentScrollPosition != undefined)
|
|
236
|
+
// document.scrollingElement.scrollTop = this.currentScrollPosition;
|
|
237
|
+
// this.currentScrollPosition = undefined;
|
|
238
|
+
// });
|
|
239
|
+
// }
|
|
214
240
|
if (!Array.isArray(this.props))
|
|
215
241
|
return nothing;
|
|
216
242
|
return html `
|
|
217
|
-
${
|
|
243
|
+
${map(this.props, (item, index) => {
|
|
218
244
|
var _a;
|
|
219
245
|
const templates = index == 0 ? this.templates : (_a = this.templates) === null || _a === void 0 ? void 0 : _a.filter((elt) => elt.getAttribute("data-value") != "no-item");
|
|
220
246
|
return html `
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
247
|
+
<sonic-list
|
|
248
|
+
fetch
|
|
249
|
+
cache=${this.cache}
|
|
250
|
+
displayContents
|
|
251
|
+
lazyBoundsRatio=${this.lazyBoundsRatio}
|
|
252
|
+
?lazyload=${!this.noLazyload}
|
|
253
|
+
localStorage=${this.localStorage}
|
|
254
|
+
requestId=${this.requestId}
|
|
255
|
+
.itemPropertyMap=${this.itemPropertyMap}
|
|
256
|
+
?debug=${this.defferedDebug === true}
|
|
257
|
+
@load=${this.next}
|
|
258
|
+
key=${this.key}
|
|
259
|
+
@loading=${this.resetDuration}
|
|
260
|
+
dataProvider="${item.dataProvider}"
|
|
261
|
+
idKey=${this.idKey}
|
|
262
|
+
.templates=${templates}
|
|
263
|
+
>
|
|
264
|
+
</sonic-list>
|
|
265
|
+
`;
|
|
237
266
|
})}
|
|
238
267
|
`;
|
|
239
268
|
}
|
|
@@ -245,18 +274,27 @@ __decorate([
|
|
|
245
274
|
__decorate([
|
|
246
275
|
property({ type: Object })
|
|
247
276
|
], Queue.prototype, "itemPropertyMap", void 0);
|
|
277
|
+
__decorate([
|
|
278
|
+
property()
|
|
279
|
+
], Queue.prototype, "cache", void 0);
|
|
248
280
|
__decorate([
|
|
249
281
|
property()
|
|
250
282
|
], Queue.prototype, "targetRequestDuration", void 0);
|
|
251
283
|
__decorate([
|
|
252
284
|
property()
|
|
253
285
|
], Queue.prototype, "limit", void 0);
|
|
286
|
+
__decorate([
|
|
287
|
+
property()
|
|
288
|
+
], Queue.prototype, "lazyBoundsRatio", void 0);
|
|
254
289
|
__decorate([
|
|
255
290
|
property()
|
|
256
291
|
], Queue.prototype, "offset", void 0);
|
|
257
292
|
__decorate([
|
|
258
293
|
property()
|
|
259
294
|
], Queue.prototype, "resultCount", void 0);
|
|
295
|
+
__decorate([
|
|
296
|
+
property({ type: Boolean })
|
|
297
|
+
], Queue.prototype, "noLazyload", void 0);
|
|
260
298
|
__decorate([
|
|
261
299
|
property()
|
|
262
300
|
], Queue.prototype, "filteredFields", void 0);
|
|
@@ -19,7 +19,8 @@ declare const SonicSDUI_base: {
|
|
|
19
19
|
onInvalidate?: (() => void) | undefined;
|
|
20
20
|
disconnectedCallback(): void;
|
|
21
21
|
connectedCallback(): void;
|
|
22
|
-
|
|
22
|
+
lazyLoadSpan?: HTMLSpanElement | undefined;
|
|
23
|
+
handleLazyLoad(): void;
|
|
23
24
|
onIntersection(entries: IntersectionObserverEntry[]): void;
|
|
24
25
|
propertyMap: object;
|
|
25
26
|
isConnected: boolean;
|
|
@@ -45,6 +46,7 @@ declare const SonicSDUI_base: {
|
|
|
45
46
|
requestUpdate(): void;
|
|
46
47
|
getAttribute(name: string): string;
|
|
47
48
|
hasAttribute(attributeName: string): boolean;
|
|
49
|
+
getBoundingClientRect(): DOMRect;
|
|
48
50
|
};
|
|
49
51
|
} & (new (...args: any[]) => import("../../../mixins/Subscriber").SubscriberInterface<import("../../../_types/types").CoreJSType>) & typeof LitElement;
|
|
50
52
|
/**
|
|
@@ -59,9 +61,6 @@ declare const SonicSDUI_base: {
|
|
|
59
61
|
* Son format est décrit par le type SDUITransformDescription
|
|
60
62
|
*
|
|
61
63
|
* * Si le résultat de la requête est un objet, il est imbriqué dans un tableau pour garantir le fonctionnement.<br>
|
|
62
|
-
* Cependant, si l'attribut `extractValues` est présent, les valeurs des propriétés de l'objet sont mises dans dans un tableau pour le rendu.
|
|
63
|
-
* * La propriété _key_ est ajoutés à la donnée de chaque item. Elle contient l'index dans le cas d'un liste simple ou la clés associée à la valeur si `extractValues` est définit.
|
|
64
|
-
* * On peut appler la methode invalidate() sur son publishe pour declencher le rechargement des données
|
|
65
64
|
* *
|
|
66
65
|
*/
|
|
67
66
|
export declare class SonicSDUI extends SonicSDUI_base {
|
|
@@ -32,9 +32,6 @@ const tagName = "sonic-sdui"; // For Astro.build
|
|
|
32
32
|
* Son format est décrit par le type SDUITransformDescription
|
|
33
33
|
*
|
|
34
34
|
* * Si le résultat de la requête est un objet, il est imbriqué dans un tableau pour garantir le fonctionnement.<br>
|
|
35
|
-
* Cependant, si l'attribut `extractValues` est présent, les valeurs des propriétés de l'objet sont mises dans dans un tableau pour le rendu.
|
|
36
|
-
* * La propriété _key_ est ajoutés à la donnée de chaque item. Elle contient l'index dans le cas d'un liste simple ou la clés associée à la valeur si `extractValues` est définit.
|
|
37
|
-
* * On peut appler la methode invalidate() sur son publishe pour declencher le rechargement des données
|
|
38
35
|
* *
|
|
39
36
|
*/
|
|
40
37
|
let SonicSDUI = class SonicSDUI extends Fetcher(Subscriber(LitElement)) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { css } from "lit";
|
|
2
2
|
export const typeColor = css `
|
|
3
|
-
:host{
|
|
4
|
-
--sc-color:inherit;
|
|
5
|
-
color:var(--sc-color);
|
|
3
|
+
:host {
|
|
4
|
+
--sc-color: inherit;
|
|
5
|
+
color: var(--sc-color);
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
:host([type="primary"]) {
|
|
@@ -21,16 +21,16 @@ export const typeColor = css `
|
|
|
21
21
|
--sc-color: var(--sc-success);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
.inherit-color{
|
|
25
|
-
color:var(--sc-color);
|
|
24
|
+
.inherit-color {
|
|
25
|
+
color: var(--sc-color);
|
|
26
26
|
}
|
|
27
27
|
`;
|
|
28
28
|
export const typesBg = css `
|
|
29
|
-
:host{
|
|
30
|
-
--sc-color:inherit;
|
|
31
|
-
--sc-bg:inherit;
|
|
32
|
-
color:var(--sc-color);
|
|
33
|
-
background:var(--sc-bg);
|
|
29
|
+
:host {
|
|
30
|
+
--sc-color: inherit;
|
|
31
|
+
--sc-bg: inherit;
|
|
32
|
+
color: var(--sc-color);
|
|
33
|
+
background: var(--sc-bg);
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
:host([type="primary"]) {
|
|
@@ -54,7 +54,7 @@ export const typesBg = css `
|
|
|
54
54
|
--sc-bg: var(--sc-success);
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
.inherit-bg{
|
|
58
|
-
color:inherit;
|
|
57
|
+
.inherit-bg {
|
|
58
|
+
color: inherit;
|
|
59
59
|
}
|
|
60
60
|
`;
|
|
@@ -9,12 +9,15 @@ export declare class Alert extends LitElement {
|
|
|
9
9
|
* Titre du message d'erreur
|
|
10
10
|
*/
|
|
11
11
|
label: string;
|
|
12
|
+
noIcon: boolean;
|
|
12
13
|
/**
|
|
13
14
|
* Peut être renseigné dans le slot pour créer des messages plus complexes
|
|
14
15
|
*/
|
|
15
16
|
text: string;
|
|
16
17
|
size?: "2xs" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl";
|
|
18
|
+
dismissible: boolean;
|
|
17
19
|
background: boolean;
|
|
18
20
|
status: "default" | "error" | "warning" | "primary" | "info";
|
|
19
21
|
render(): import("lit-html").TemplateResult<1>;
|
|
22
|
+
close(): void;
|
|
20
23
|
}
|