@comet/brevo-admin 3.0.0-canary-20240920122446 → 3.0.0-canary-20241017075628

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.
@@ -1 +1 @@
1
- {"version":3,"file":"useContactImportFromCsv.d.ts","sourceRoot":"","sources":["../../../src/common/contactImport/useContactImportFromCsv.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAIlE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,iCAAiC,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAGrE,UAAU,qBAAqB;IAC3B,KAAK,EAAE,iCAAiC,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,qBAAqB,CAAC;CAC1C;AAED,eAAO,MAAM,uBAAuB,6CAA8C,qBAAqB,KAAG,CAAC,mBAAmB,EAAE,MAAM,SAAS,CA0B9I,CAAC"}
1
+ {"version":3,"file":"useContactImportFromCsv.d.ts","sourceRoot":"","sources":["../../../src/common/contactImport/useContactImportFromCsv.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAMlE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,iCAAiC,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAGrE,UAAU,qBAAqB;IAC3B,KAAK,EAAE,iCAAiC,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,qBAAqB,CAAC;CAC1C;AAED,eAAO,MAAM,uBAAuB,6CAA8C,qBAAqB,KAAG,CAAC,mBAAmB,EAAE,MAAM,SAAS,CA0B9I,CAAC"}
@@ -9,16 +9,22 @@ var _client = require("@apollo/client");
9
9
  var _admin = require("@comet/admin");
10
10
  var _adminIcons = require("@comet/admin-icons");
11
11
  var _material = require("@mui/material");
12
+ var _Button = _interopRequireDefault(require("@mui/material/Button"));
13
+ var _fileSaver = _interopRequireDefault(require("file-saver"));
12
14
  var React = _interopRequireWildcard(require("react"));
13
15
  var _reactDropzone = require("react-dropzone");
14
16
  var _reactIntl = require("react-intl");
15
17
  var _BrevoConfigProvider = require("../BrevoConfigProvider");
18
+ var _templateObject;
16
19
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
17
20
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
21
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
22
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
18
23
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
19
24
  function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
20
25
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
21
26
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
27
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
22
28
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
23
29
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
24
30
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
@@ -64,13 +70,14 @@ var ContactImportComponent = function ContactImportComponent(_ref2) {
64
70
  _React$useState2 = _slicedToArray(_React$useState, 2),
65
71
  importingCsv = _React$useState2[0],
66
72
  setImportingCsv = _React$useState2[1];
67
- var _React$useState3 = React.useState(false),
73
+ var _React$useState3 = React.useState(null),
68
74
  _React$useState4 = _slicedToArray(_React$useState3, 2),
69
- importSuccessful = _React$useState4[0],
70
- setImportSuccessful = _React$useState4[1];
71
- var dialogOpen = importingCsv || importSuccessful;
75
+ importInformation = _React$useState4[0],
76
+ setImportInformation = _React$useState4[1];
77
+ var dialogOpen = importingCsv || !!importInformation;
72
78
  var errorDialog = (0, _admin.useErrorDialog)();
73
79
  var config = (0, _BrevoConfigProvider.useBrevoConfig)();
80
+ var intl = (0, _reactIntl.useIntl)();
74
81
  function upload(file, scope, listIds) {
75
82
  var formData = new FormData();
76
83
  formData.append("file", file);
@@ -81,6 +88,46 @@ var ContactImportComponent = function ContactImportComponent(_ref2) {
81
88
  body: formData
82
89
  });
83
90
  }
91
+ var saveErrorFile = function saveErrorFile() {
92
+ var failedColumns = importInformation === null || importInformation === void 0 ? void 0 : importInformation.failedColumns;
93
+ if (!failedColumns || failedColumns.length === 0) {
94
+ throw new Error(intl.formatMessage({
95
+ id: "export",
96
+ defaultMessage: "No failed columns to save"
97
+ }));
98
+ }
99
+ var errorData = "";
100
+
101
+ // Add headers to the file without trailing semicolon
102
+ var headers = Object.keys(failedColumns[0]);
103
+ var headerStr = headers.join(";");
104
+ errorData = "".concat(headerStr.replace(/;+$/, ""), "\n"); // Remove trailing semicolon from the header
105
+
106
+ // Add each row of failed columns data
107
+ var _iterator = _createForOfIteratorHelper(failedColumns),
108
+ _step;
109
+ try {
110
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
111
+ var column = _step.value;
112
+ // Use Object.values to get the values of each column
113
+ var row = Object.values(column); // No need to check for undefined/null
114
+
115
+ // Join row values and remove the trailing semicolon if not needed
116
+ var rowStr = row.join(";");
117
+ errorData += "".concat(rowStr.replace(/;+$/, ""), "\n");
118
+ }
119
+
120
+ // Create and download the file
121
+ } catch (err) {
122
+ _iterator.e(err);
123
+ } finally {
124
+ _iterator.f();
125
+ }
126
+ var file = new Blob([errorData], {
127
+ type: "text/csv;charset=utf-8"
128
+ });
129
+ (0, _fileSaver["default"])(file, "error-log-".concat(new Date().toISOString(), ".csv"));
130
+ };
84
131
  var _useDropzone = (0, _reactDropzone.useDropzone)({
85
132
  accept: {
86
133
  "text/csv": []
@@ -88,7 +135,7 @@ var ContactImportComponent = function ContactImportComponent(_ref2) {
88
135
  multiple: false,
89
136
  onDrop: function () {
90
137
  var _onDrop = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(acceptedFiles) {
91
- var file, response, errorResponse, userMessage;
138
+ var file, response, data, userMessage;
92
139
  return _regeneratorRuntime().wrap(function _callee$(_context) {
93
140
  while (1) switch (_context.prev = _context.next) {
94
141
  case 0:
@@ -102,22 +149,30 @@ var ContactImportComponent = function ContactImportComponent(_ref2) {
102
149
  apolloClient.refetchQueries({
103
150
  include: refetchQueries
104
151
  });
152
+ _context.next = 9;
153
+ return response.json();
154
+ case 9:
155
+ data = _context.sent;
105
156
  if (!response.ok) {
106
- _context.next = 12;
157
+ _context.next = 15;
107
158
  break;
108
159
  }
109
160
  setImportingCsv(false);
110
- setImportSuccessful(true);
161
+ if (data.errorMessage) {
162
+ errorDialog === null || errorDialog === void 0 || errorDialog.showError({
163
+ title: /*#__PURE__*/React.createElement(_reactIntl.FormattedMessage, _admin.messages.error),
164
+ userMessage: data.errorMessage,
165
+ error: data.errorMessage
166
+ });
167
+ } else {
168
+ setImportInformation(data);
169
+ }
111
170
  _context.next = 16;
112
171
  break;
113
- case 12:
114
- _context.next = 14;
115
- return response.json();
116
- case 14:
117
- errorResponse = _context.sent;
118
- throw new Error(JSON.stringify(errorResponse));
172
+ case 15:
173
+ throw new Error(JSON.stringify(data));
119
174
  case 16:
120
- _context.next = 24;
175
+ _context.next = 23;
121
176
  break;
122
177
  case 18:
123
178
  _context.prev = 18;
@@ -127,18 +182,12 @@ var ContactImportComponent = function ContactImportComponent(_ref2) {
127
182
  id: "cometBrevoModule.useContactImport.error.defaultMessage",
128
183
  defaultMessage: "An error occured during the import. Please try again in a while or contact your administrator if the error persists."
129
184
  });
130
- if (_context.t0 !== null && _context.t0 !== void 0 && _context.t0.message && typeof _context.t0.message === "string" && _context.t0.message.includes("Too many contacts")) {
131
- userMessage = /*#__PURE__*/React.createElement(_reactIntl.FormattedMessage, {
132
- id: "cometBrevoModule.useContactImport.error.tooManyContactsMessage",
133
- defaultMessage: "Too many contacts in file. Currently we only support 100 contacts at once."
134
- });
135
- }
136
185
  errorDialog === null || errorDialog === void 0 || errorDialog.showError({
137
186
  title: /*#__PURE__*/React.createElement(_reactIntl.FormattedMessage, _admin.messages.error),
138
187
  userMessage: userMessage,
139
188
  error: String(_context.t0)
140
189
  });
141
- case 24:
190
+ case 23:
142
191
  case "end":
143
192
  return _context.stop();
144
193
  }
@@ -161,23 +210,51 @@ var ContactImportComponent = function ContactImportComponent(_ref2) {
161
210
  }, /*#__PURE__*/React.createElement(_material.DialogTitle, null, importingCsv && /*#__PURE__*/React.createElement(_reactIntl.FormattedMessage, {
162
211
  id: "cometBrevoModule.useContactImport.importing.title",
163
212
  defaultMessage: "Importing contacts from CSV..."
164
- }), importSuccessful && /*#__PURE__*/React.createElement(_reactIntl.FormattedMessage, {
213
+ }), importInformation && /*#__PURE__*/React.createElement(_reactIntl.FormattedMessage, {
165
214
  id: "cometBrevoModule.useContactImport.importSuccessful.title",
166
215
  defaultMessage: "Import successful"
167
- })), /*#__PURE__*/React.createElement(_material.DialogContent, null, importingCsv && /*#__PURE__*/React.createElement(_admin.Loading, null), importSuccessful && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_reactIntl.FormattedMessage, {
168
- id: "cometBrevoModule.useContactImport.importSuccessful.message",
169
- defaultMessage: "The contacts have been imported successfully"
170
- }), /*#__PURE__*/React.createElement(_material.Box, {
216
+ })), /*#__PURE__*/React.createElement(_material.DialogContent, null, importingCsv && /*#__PURE__*/React.createElement(_admin.Loading, null), importInformation && /*#__PURE__*/React.createElement(React.Fragment, null, importInformation.created > 0 && /*#__PURE__*/React.createElement(_reactIntl.FormattedMessage, {
217
+ id: "cometBrevoModule.useContactImport.importSuccessful.contactsImported",
218
+ defaultMessage: "{amount} contact(s) have been created successfully.",
219
+ values: {
220
+ amount: importInformation.created
221
+ }
222
+ }), importInformation.updated > 0 && /*#__PURE__*/React.createElement(_reactIntl.FormattedMessage, {
223
+ id: "cometBrevoModule.useContactImport.importSuccessful.contactsUpdated",
224
+ defaultMessage: "{amount} contact(s) have been updated.",
225
+ values: {
226
+ amount: importInformation.updated
227
+ }
228
+ }), importInformation.failed > 0 && /*#__PURE__*/React.createElement(_material.Box, {
229
+ mt: 2
230
+ }, /*#__PURE__*/React.createElement(_admin.Alert, {
231
+ severity: "error"
232
+ }, /*#__PURE__*/React.createElement(_reactIntl.FormattedMessage, {
233
+ id: "cometBrevoModule.useContactImport.error.contactsCouldNotBeImported",
234
+ defaultMessage: "{amount} contact(s) could not be imported. <link>Download this file</link> to get the failing row(s).",
235
+ values: {
236
+ amount: importInformation.failed,
237
+ link: function link(chunks) {
238
+ return /*#__PURE__*/React.createElement(CsvDownloadLink, {
239
+ onClick: saveErrorFile
240
+ }, chunks);
241
+ }
242
+ }
243
+ }))), (importInformation.created > 0 || importInformation.updated > 0) && /*#__PURE__*/React.createElement(_material.Box, {
171
244
  mt: 2
172
245
  }, /*#__PURE__*/React.createElement(_admin.Alert, {
173
246
  severity: "warning"
174
247
  }, /*#__PURE__*/React.createElement(_reactIntl.FormattedMessage, {
175
248
  id: "cometBrevoModule.useContactImport.importSuccessful.doiNotice",
176
249
  defaultMessage: "Contacts who have not yet confirmed their subscription will receive a double opt-in email to complete the process. These contacts will not appear in this list until they confirm their subscription. Once confirmed, they will automatically be added to the appropriate target group(s)."
177
- }))))), /*#__PURE__*/React.createElement(_material.DialogActions, null, importSuccessful && /*#__PURE__*/React.createElement(_material.Button, {
250
+ }))))), /*#__PURE__*/React.createElement(_material.DialogActions, null, importInformation && /*#__PURE__*/React.createElement(_Button["default"], {
178
251
  onClick: function onClick() {
179
- return setImportSuccessful(false);
252
+ return setImportInformation(null);
180
253
  },
181
254
  variant: "contained"
182
255
  }, /*#__PURE__*/React.createElement(_reactIntl.FormattedMessage, _admin.messages.ok)))));
183
- };
256
+ };
257
+ var CsvDownloadLink = (0, _material.styled)("span")(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n color: ", ";\n text-decoration: underline;\n cursor: pointer;\n"])), function (_ref3) {
258
+ var theme = _ref3.theme;
259
+ return theme.palette.info.main;
260
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@comet/brevo-admin",
3
- "version": "3.0.0-canary-20240920122446",
3
+ "version": "3.0.0-canary-20241017075628",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/vivid-planet/comet-brevo-module/",