allaw-ui 0.0.53 → 0.0.56

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.
@@ -55,3 +55,27 @@
55
55
  .primary-button-full-width {
56
56
  width: 100%;
57
57
  }
58
+
59
+ .primary-button-loading {
60
+ animation: pulse-background 1.5s infinite alternate;
61
+ pointer-events: none;
62
+ }
63
+
64
+ @keyframes pulse-background {
65
+ 0% {
66
+ background-color: #171e25;
67
+ }
68
+ 50% {
69
+ background-color: #171e25;
70
+ }
71
+ 100% {
72
+ background-color: #1985e8;
73
+ }
74
+ }
75
+
76
+ .primary-button-loading-dots {
77
+ width: 1.25rem;
78
+ display: inline-block;
79
+ text-align: left;
80
+ font-size: 0.9rem;
81
+ }
@@ -8,9 +8,10 @@ export interface PrimaryButtonProps extends ButtonHTMLAttributes<HTMLButtonEleme
8
8
  endIconName?: string;
9
9
  label: string;
10
10
  disabled?: boolean;
11
- onClick?: () => void;
11
+ onClick?: () => Promise<void> | void;
12
12
  fullWidth?: boolean;
13
13
  type?: "button" | "submit" | "reset";
14
+ isLoading?: boolean;
14
15
  }
15
16
  declare const PrimaryButton: React.ForwardRefExoticComponent<PrimaryButtonProps & React.RefAttributes<HTMLButtonElement>>;
16
17
  export default PrimaryButton;
@@ -9,6 +9,42 @@ var __assign = (this && this.__assign) || function () {
9
9
  };
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
12
48
  var __rest = (this && this.__rest) || function (s, e) {
13
49
  var t = {};
14
50
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
@@ -20,17 +56,61 @@ var __rest = (this && this.__rest) || function (s, e) {
20
56
  }
21
57
  return t;
22
58
  };
23
- import React, { forwardRef, useImperativeHandle, } from "react";
59
+ import React, { forwardRef, useImperativeHandle, useState, useEffect, } from "react";
24
60
  import "./PrimaryButton.css";
25
61
  import "../../../styles/global.css";
26
62
  var PrimaryButton = forwardRef(function (_a, ref) {
27
- var startIcon = _a.startIcon, endIcon = _a.endIcon, startIconName = _a.startIconName, endIconName = _a.endIconName, label = _a.label, _b = _a.disabled, disabled = _b === void 0 ? false : _b, onClick = _a.onClick, _c = _a.fullWidth, fullWidth = _c === void 0 ? false : _c, _d = _a.type, type = _d === void 0 ? "button" : _d, props = __rest(_a, ["startIcon", "endIcon", "startIconName", "endIconName", "label", "disabled", "onClick", "fullWidth", "type"]);
63
+ var startIcon = _a.startIcon, endIcon = _a.endIcon, startIconName = _a.startIconName, endIconName = _a.endIconName, label = _a.label, _b = _a.disabled, disabled = _b === void 0 ? false : _b, onClick = _a.onClick, _c = _a.fullWidth, fullWidth = _c === void 0 ? false : _c, _d = _a.type, type = _d === void 0 ? "button" : _d, _e = _a.isLoading, isLoading = _e === void 0 ? false : _e, props = __rest(_a, ["startIcon", "endIcon", "startIconName", "endIconName", "label", "disabled", "onClick", "fullWidth", "type", "isLoading"]);
28
64
  var buttonRef = React.useRef(null);
65
+ var _f = useState(false), internalIsLoading = _f[0], setInternalIsLoading = _f[1];
66
+ var _g = useState(""), loadingDots = _g[0], setLoadingDots = _g[1];
29
67
  useImperativeHandle(ref, function () { return buttonRef.current; });
30
- return (React.createElement("button", __assign({ ref: buttonRef, className: "primary-button ".concat(disabled ? "primary-button-disabled" : "primary-button-enabled", " ").concat(fullWidth ? "primary-button-full-width" : ""), disabled: disabled, onClick: onClick, type: type }, props),
68
+ var isButtonLoading = isLoading || internalIsLoading;
69
+ useEffect(function () {
70
+ var interval = null;
71
+ if (isButtonLoading) {
72
+ interval = setInterval(function () {
73
+ setLoadingDots(function (prev) {
74
+ if (prev.length >= 3)
75
+ return "";
76
+ return prev + ".";
77
+ });
78
+ }, 500);
79
+ }
80
+ return function () {
81
+ if (interval) {
82
+ clearInterval(interval);
83
+ }
84
+ };
85
+ }, [isButtonLoading]);
86
+ var handleClick = function (event) { return __awaiter(void 0, void 0, void 0, function () {
87
+ return __generator(this, function (_a) {
88
+ switch (_a.label) {
89
+ case 0:
90
+ if (isButtonLoading) {
91
+ event.preventDefault();
92
+ return [2 /*return*/];
93
+ }
94
+ if (!onClick) return [3 /*break*/, 4];
95
+ setInternalIsLoading(true);
96
+ _a.label = 1;
97
+ case 1:
98
+ _a.trys.push([1, , 3, 4]);
99
+ return [4 /*yield*/, onClick()];
100
+ case 2:
101
+ _a.sent();
102
+ return [3 /*break*/, 4];
103
+ case 3:
104
+ setInternalIsLoading(false);
105
+ return [7 /*endfinally*/];
106
+ case 4: return [2 /*return*/];
107
+ }
108
+ });
109
+ }); };
110
+ return (React.createElement("button", __assign({ ref: buttonRef, className: "primary-button ".concat(disabled ? "primary-button-disabled" : "primary-button-enabled", " ").concat(fullWidth ? "primary-button-full-width" : "", " ").concat(isButtonLoading ? "primary-button-loading" : ""), disabled: disabled, onClick: handleClick, type: type }, props),
31
111
  startIcon && (React.createElement("span", { className: "primary-button-icon ".concat(startIconName) })),
32
112
  React.createElement("span", { className: "primary-button-label" }, label),
33
- endIcon && React.createElement("span", { className: "primary-button-icon ".concat(endIconName) })));
113
+ isButtonLoading ? (React.createElement("span", { className: "primary-button-loading-dots" }, loadingDots)) : (endIcon && React.createElement("span", { className: "primary-button-icon ".concat(endIconName) }))));
34
114
  });
35
115
  PrimaryButton.displayName = "PrimaryButton";
36
116
  export default PrimaryButton;
@@ -23,28 +23,37 @@ var __rest = (this && this.__rest) || function (s, e) {
23
23
  import "./SingleFilter.css";
24
24
  import { FilterButtonPrimary, PrimaryButton } from "../buttons";
25
25
  import { TinyInfo } from "../typography";
26
- import React, { useState } from "react";
26
+ import React, { useState, useEffect } from "react";
27
27
  var SingleFilter = function (_a) {
28
28
  var _b = _a.showNumIndic, showNumIndic = _b === void 0 ? false : _b, _c = _a.required, required = _c === void 0 ? true : _c, defaultSelectedValue = _a.defaultSelectedValue, filterData = _a.filterData, setFilter = _a.setFilter, _d = _a.showBackdrop, showBackdrop = _d === void 0 ? false : _d, children = _a.children, props = __rest(_a, ["showNumIndic", "required", "defaultSelectedValue", "filterData", "setFilter", "showBackdrop", "children"]);
29
29
  var _e = useState(false), isOpen = _e[0], setIsOpen = _e[1];
30
30
  var _f = useState(defaultSelectedValue || ""), selectedValue = _f[0], setSelectedValue = _f[1];
31
+ useEffect(function () {
32
+ if (selectedValue) {
33
+ setFilter(selectedValue);
34
+ }
35
+ }, [selectedValue, setFilter]);
31
36
  var handleClose = function () {
32
- setFilter(selectedValue);
33
37
  setIsOpen(false);
34
38
  };
35
39
  var handleButtonTap = function () {
36
- isOpen ? handleClose() : setIsOpen(true);
40
+ setIsOpen(!isOpen);
37
41
  };
38
42
  var Item = function (_a) {
39
43
  var name = _a.name, value = _a.value;
40
- return (React.createElement("button", { className: "item", onClick: function () { setFilter(value); setSelectedValue(value); handleClose(); } },
44
+ return (React.createElement("button", { className: "item", onClick: function () {
45
+ setSelectedValue(value);
46
+ handleClose();
47
+ } },
41
48
  React.createElement("div", { className: "round" },
42
49
  React.createElement("div", { className: selectedValue === value ? "selected" : "notSelected" })),
43
50
  React.createElement("span", null, name)));
44
51
  };
45
52
  var SmallItem = function (_a) {
46
53
  var name = _a.name, value = _a.value;
47
- return (React.createElement("button", { className: "smallItem", onClick: function () { setFilter(value); setSelectedValue(value); } },
54
+ return (React.createElement("button", { className: "smallItem", onClick: function () {
55
+ setSelectedValue(value);
56
+ } },
48
57
  React.createElement("div", { className: "round" },
49
58
  React.createElement("div", { className: selectedValue === value ? "selected" : "notSelected" })),
50
59
  React.createElement("span", null, name)));
@@ -54,7 +63,8 @@ var SingleFilter = function (_a) {
54
63
  React.createElement(FilterButtonPrimary, { onClick: handleButtonTap },
55
64
  children,
56
65
  React.createElement("p", { style: { color: "#25BEEB", fontWeight: "600" } }, showNumIndic && "(".concat(selectedValue.length, ")"))),
57
- isOpen && (React.createElement("div", { className: "options" }, filterData && filterData.length > 0 &&
66
+ isOpen && (React.createElement("div", { className: "options" }, filterData &&
67
+ filterData.length > 0 &&
58
68
  filterData.map(function (item, idx) { return (React.createElement(Item, { name: item.name, value: item.value, key: idx })); }))),
59
69
  React.createElement("div", { className: "optionsSmall", style: { bottom: isOpen ? "0" : "-100%" } },
60
70
  React.createElement("div", { className: "row" },
@@ -62,9 +72,10 @@ var SingleFilter = function (_a) {
62
72
  React.createElement(TinyInfo, { text: children, variant: "bold14", color: "noir" }),
63
73
  React.createElement("button", { className: "closeButton", onClick: handleClose },
64
74
  React.createElement("i", { className: "allaw-icon-close" }))),
65
- React.createElement("div", { className: "choices" }, filterData && filterData.length > 0 &&
75
+ React.createElement("div", { className: "choices" }, filterData &&
76
+ filterData.length > 0 &&
66
77
  filterData.map(function (item, idx) { return (React.createElement(SmallItem, { name: item.name, value: item.value, key: idx })); })),
67
78
  React.createElement(PrimaryButton, { label: "Voir les r\u00E9sultats", onClick: handleClose }))),
68
- isOpen && (React.createElement("div", { className: "backdrop", onClick: handleClose }))));
79
+ isOpen && React.createElement("div", { className: "backdrop", onClick: handleClose })));
69
80
  };
70
81
  export default SingleFilter;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "allaw-ui",
3
- "version": "0.0.53",
3
+ "version": "0.0.56",
4
4
  "description": "Composants UI pour l'application Allaw",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",