@hellotext/hellotext 1.4.0 → 1.5.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/.babelrc +6 -3
- package/.github/workflows/ci.yml +1 -1
- package/.prettierignore +2 -0
- package/README.md +30 -170
- package/__tests__/api/sessions_test.js +12 -0
- package/__tests__/builders/input_builder_test.js +117 -0
- package/__tests__/{event_emitter_test.js → core/event_test.js} +26 -6
- package/__tests__/hellotext_test.js +12 -0
- package/__tests__/models/business_test.js +26 -0
- package/__tests__/models/cookies_test.js +25 -0
- package/__tests__/models/form_collection_test.js +100 -0
- package/__tests__/models/form_test.js +29 -0
- package/__tests__/models/query_test.js +97 -0
- package/dist/hellotext.js +1 -1
- package/docs/forms.md +127 -0
- package/docs/tracking.md +155 -0
- package/lib/api/businesses.js +45 -0
- package/lib/api/events.js +54 -0
- package/lib/api/forms.js +65 -0
- package/lib/api/index.js +51 -0
- package/lib/api/response.js +57 -0
- package/lib/api/sessions.js +46 -0
- package/lib/api/submissions.js +61 -0
- package/lib/api.js +73 -0
- package/lib/builders/inputBuilder.js +97 -0
- package/lib/builders/input_builder.js +61 -0
- package/lib/builders/logo_builder.js +38 -0
- package/lib/builders/otp_builder.js +39 -0
- package/lib/controllers/form_controller.js +139 -0
- package/lib/controllers/otp_controller.js +114 -0
- package/lib/core/configuration.js +37 -0
- package/lib/core/event.js +73 -0
- package/lib/core/index.js +20 -0
- package/lib/errors/index.js +19 -0
- package/lib/errors/invalid_event.js +34 -0
- package/lib/errors/not_initialized_error.js +34 -0
- package/lib/event.js +159 -32
- package/lib/eventEmitter.js +139 -46
- package/lib/forms.js +133 -0
- package/lib/hellotext.js +64 -102
- package/lib/index.js +7 -0
- package/lib/locales/en.js +20 -0
- package/lib/locales/es.js +20 -0
- package/lib/locales/index.js +14 -0
- package/lib/models/business.js +57 -0
- package/lib/models/configuration.js +66 -0
- package/lib/models/cookies.js +34 -0
- package/lib/models/form.js +148 -0
- package/lib/models/form_collection.js +96 -0
- package/lib/models/index.js +40 -0
- package/lib/models/query.js +51 -0
- package/lib/models/step.js +45 -0
- package/lib/query.js +65 -32
- package/lib/response.js +82 -42
- package/package.json +7 -3
- package/src/api/businesses.js +18 -0
- package/src/api/events.js +24 -0
- package/src/api/forms.js +30 -0
- package/src/api/index.js +24 -0
- package/src/{response.js → api/response.js} +9 -4
- package/src/api/sessions.js +23 -0
- package/src/api/submissions.js +30 -0
- package/src/builders/input_builder.js +55 -0
- package/src/builders/logo_builder.js +25 -0
- package/src/builders/otp_builder.js +42 -0
- package/src/controllers/form_controller.js +105 -0
- package/src/controllers/otp_controller.js +77 -0
- package/src/core/configuration.js +16 -0
- package/src/core/event.js +54 -0
- package/src/core/index.js +2 -0
- package/src/errors/index.js +2 -0
- package/src/hellotext.js +50 -72
- package/src/index.js +10 -0
- package/src/locales/en.js +13 -0
- package/src/locales/es.js +13 -0
- package/src/locales/index.js +7 -0
- package/src/models/business.js +41 -0
- package/src/models/cookies.js +16 -0
- package/src/models/form.js +133 -0
- package/src/models/form_collection.js +81 -0
- package/src/models/index.js +5 -0
- package/src/models/query.js +33 -0
- package/styles/index.css +32 -0
- package/webpack.config.js +15 -9
- package/__tests__/event_test.js +0 -21
- package/__tests__/query_test.js +0 -13
- package/src/event.js +0 -15
- package/src/eventEmitter.js +0 -28
- package/src/query.js +0 -21
- /package/src/errors/{invalidEvent.js → invalid_event.js} +0 -0
- /package/src/errors/{notInitializedError.js → not_initialized_error.js} +0 -0
package/lib/hellotext.js
CHANGED
|
@@ -4,12 +4,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var _notInitializedError = require("./errors/notInitializedError");
|
|
12
|
-
var _invalidEvent = require("./errors/invalidEvent");
|
|
7
|
+
var _core = require("./core");
|
|
8
|
+
var _api = _interopRequireDefault(require("./api"));
|
|
9
|
+
var _models = require("./models");
|
|
10
|
+
var _errors = require("./errors");
|
|
13
11
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
12
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
15
13
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
@@ -25,14 +23,13 @@ function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototy
|
|
|
25
23
|
var id = 0;
|
|
26
24
|
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
|
27
25
|
var _session = /*#__PURE__*/_classPrivateFieldLooseKey("session");
|
|
28
|
-
var
|
|
29
|
-
var _eventEmitter = /*#__PURE__*/_classPrivateFieldLooseKey("eventEmitter");
|
|
26
|
+
var _config = /*#__PURE__*/_classPrivateFieldLooseKey("config");
|
|
30
27
|
var _query = /*#__PURE__*/_classPrivateFieldLooseKey("query");
|
|
31
|
-
var _notInitialized = /*#__PURE__*/_classPrivateFieldLooseKey("notInitialized");
|
|
32
28
|
var _mintAnonymousSession = /*#__PURE__*/_classPrivateFieldLooseKey("mintAnonymousSession");
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
29
|
+
/**
|
|
30
|
+
* @typedef {Object} Config
|
|
31
|
+
* @property {Boolean} autogenerateSession
|
|
32
|
+
*/
|
|
36
33
|
var Hellotext = /*#__PURE__*/function () {
|
|
37
34
|
function Hellotext() {
|
|
38
35
|
_classCallCheck(this, Hellotext);
|
|
@@ -43,22 +40,33 @@ var Hellotext = /*#__PURE__*/function () {
|
|
|
43
40
|
/**
|
|
44
41
|
* initialize the module.
|
|
45
42
|
* @param business public business id
|
|
43
|
+
* @param { Config } config
|
|
46
44
|
*/
|
|
47
45
|
function initialize(business) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
46
|
+
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
|
|
47
|
+
autogenerateSession: true
|
|
48
|
+
};
|
|
49
|
+
this.business = new _models.Business(business);
|
|
50
|
+
this.forms = new _models.FormCollection();
|
|
51
|
+
_classPrivateFieldLooseBase(this, _config)[_config] = _core.Configuration.assign(config);
|
|
52
|
+
_classPrivateFieldLooseBase(this, _query)[_query] = new _models.Query();
|
|
53
|
+
addEventListener('load', () => {
|
|
54
|
+
this.forms.collect();
|
|
55
|
+
});
|
|
56
|
+
if (_classPrivateFieldLooseBase(this, _query)[_query].inPreviewMode) return;
|
|
57
|
+
if (_classPrivateFieldLooseBase(this, _query)[_query].session) {
|
|
58
|
+
_classPrivateFieldLooseBase(this, _session)[_session] = _models.Cookies.set('hello_session', _classPrivateFieldLooseBase(this, _query)[_query].session);
|
|
59
|
+
} else if (config.autogenerateSession) {
|
|
56
60
|
_classPrivateFieldLooseBase(this, _mintAnonymousSession)[_mintAnonymousSession]().then(response => {
|
|
57
|
-
_classPrivateFieldLooseBase(this, _session)[_session] = response.id;
|
|
58
|
-
_classPrivateFieldLooseBase(this, _setSessionCookie)[_setSessionCookie]();
|
|
61
|
+
_classPrivateFieldLooseBase(this, _session)[_session] = _models.Cookies.set('hello_session', response.id);
|
|
59
62
|
});
|
|
60
63
|
}
|
|
61
64
|
}
|
|
65
|
+
}, {
|
|
66
|
+
key: "setSession",
|
|
67
|
+
value: function setSession(value) {
|
|
68
|
+
_classPrivateFieldLooseBase(this, _session)[_session] = _models.Cookies.set('hello_session', value);
|
|
69
|
+
}
|
|
62
70
|
|
|
63
71
|
/**
|
|
64
72
|
* Tracks an action that has happened on the page
|
|
@@ -72,25 +80,18 @@ var Hellotext = /*#__PURE__*/function () {
|
|
|
72
80
|
value: function () {
|
|
73
81
|
var _track = _asyncToGenerator(function* (action) {
|
|
74
82
|
var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
75
|
-
if (
|
|
76
|
-
throw new
|
|
77
|
-
}
|
|
78
|
-
if (_classPrivateFieldLooseBase(this, _query)[_query].has("preview")) {
|
|
79
|
-
return new _response.default(true, {
|
|
80
|
-
received: true
|
|
81
|
-
});
|
|
83
|
+
if (this.notInitialized) {
|
|
84
|
+
throw new _errors.NotInitializedError();
|
|
82
85
|
}
|
|
83
|
-
|
|
84
|
-
headers:
|
|
85
|
-
|
|
86
|
-
body: JSON.stringify(_objectSpread(_objectSpread({
|
|
86
|
+
return yield _api.default.events.create({
|
|
87
|
+
headers: this.headers,
|
|
88
|
+
body: _objectSpread(_objectSpread({
|
|
87
89
|
session: this.session,
|
|
88
90
|
action
|
|
89
91
|
}, params), {}, {
|
|
90
92
|
url: params && params.url || window.location.href
|
|
91
|
-
})
|
|
93
|
+
})
|
|
92
94
|
});
|
|
93
|
-
return new _response.default(response.status === 200, yield response.json());
|
|
94
95
|
});
|
|
95
96
|
function track(_x) {
|
|
96
97
|
return _track.apply(this, arguments);
|
|
@@ -105,10 +106,7 @@ var Hellotext = /*#__PURE__*/function () {
|
|
|
105
106
|
}, {
|
|
106
107
|
key: "on",
|
|
107
108
|
value: function on(event, callback) {
|
|
108
|
-
|
|
109
|
-
throw new _invalidEvent.InvalidEvent(event);
|
|
110
|
-
}
|
|
111
|
-
_classPrivateFieldLooseBase(this, _eventEmitter)[_eventEmitter].addSubscriber(event, callback);
|
|
109
|
+
this.eventEmitter.addSubscriber(event, callback);
|
|
112
110
|
}
|
|
113
111
|
|
|
114
112
|
/**
|
|
@@ -119,10 +117,7 @@ var Hellotext = /*#__PURE__*/function () {
|
|
|
119
117
|
}, {
|
|
120
118
|
key: "removeEventListener",
|
|
121
119
|
value: function removeEventListener(event, callback) {
|
|
122
|
-
|
|
123
|
-
throw new _invalidEvent.InvalidEvent(event);
|
|
124
|
-
}
|
|
125
|
-
_classPrivateFieldLooseBase(this, _eventEmitter)[_eventEmitter].removeSubscriber(event, callback);
|
|
120
|
+
this.eventEmitter.removeSubscriber(event, callback);
|
|
126
121
|
}
|
|
127
122
|
|
|
128
123
|
/**
|
|
@@ -132,8 +127,8 @@ var Hellotext = /*#__PURE__*/function () {
|
|
|
132
127
|
}, {
|
|
133
128
|
key: "session",
|
|
134
129
|
get: function get() {
|
|
135
|
-
if (
|
|
136
|
-
throw new
|
|
130
|
+
if (this.notInitialized) {
|
|
131
|
+
throw new _errors.NotInitializedError();
|
|
137
132
|
}
|
|
138
133
|
return _classPrivateFieldLooseBase(this, _session)[_session];
|
|
139
134
|
}
|
|
@@ -149,88 +144,55 @@ var Hellotext = /*#__PURE__*/function () {
|
|
|
149
144
|
}
|
|
150
145
|
|
|
151
146
|
// private
|
|
147
|
+
}, {
|
|
148
|
+
key: "notInitialized",
|
|
149
|
+
get: function get() {
|
|
150
|
+
return this.business.id === undefined;
|
|
151
|
+
}
|
|
152
|
+
}, {
|
|
153
|
+
key: "headers",
|
|
154
|
+
get: function get() {
|
|
155
|
+
if (this.notInitialized) {
|
|
156
|
+
throw new _errors.NotInitializedError();
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
Authorization: "Bearer ".concat(this.business.id),
|
|
160
|
+
Accept: 'application.json',
|
|
161
|
+
'Content-Type': 'application/json'
|
|
162
|
+
};
|
|
163
|
+
}
|
|
152
164
|
}]);
|
|
153
165
|
return Hellotext;
|
|
154
166
|
}();
|
|
155
|
-
function _get_notInitialized() {
|
|
156
|
-
return _classPrivateFieldLooseBase(this, _business)[_business] === undefined;
|
|
157
|
-
}
|
|
158
167
|
function _mintAnonymousSession2() {
|
|
159
168
|
return _mintAnonymousSession3.apply(this, arguments);
|
|
160
169
|
}
|
|
161
170
|
function _mintAnonymousSession3() {
|
|
162
171
|
_mintAnonymousSession3 = _asyncToGenerator(function* () {
|
|
163
|
-
if (
|
|
164
|
-
throw new
|
|
172
|
+
if (this.notInitialized) {
|
|
173
|
+
throw new _errors.NotInitializedError();
|
|
165
174
|
}
|
|
166
|
-
|
|
167
|
-
this.mintingPromise = yield fetch(trackingUrl, {
|
|
168
|
-
method: 'post',
|
|
169
|
-
headers: {
|
|
170
|
-
Authorization: "Bearer ".concat(_classPrivateFieldLooseBase(this, _business)[_business])
|
|
171
|
-
}
|
|
172
|
-
});
|
|
173
|
-
return this.mintingPromise.json();
|
|
175
|
+
return _api.default.sessions(this.business.id).create();
|
|
174
176
|
});
|
|
175
177
|
return _mintAnonymousSession3.apply(this, arguments);
|
|
176
178
|
}
|
|
177
|
-
function _get_headers() {
|
|
178
|
-
if (_classPrivateFieldLooseBase(this, _notInitialized)[_notInitialized]) {
|
|
179
|
-
throw new _notInitializedError.NotInitializedError();
|
|
180
|
-
}
|
|
181
|
-
return {
|
|
182
|
-
Authorization: "Bearer ".concat(_classPrivateFieldLooseBase(this, _business)[_business]),
|
|
183
|
-
Accept: 'application.json',
|
|
184
|
-
'Content-Type': 'application/json'
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
function _setSessionCookie2() {
|
|
188
|
-
if (_classPrivateFieldLooseBase(this, _notInitialized)[_notInitialized]) {
|
|
189
|
-
throw new _notInitializedError.NotInitializedError();
|
|
190
|
-
}
|
|
191
|
-
if (_classPrivateFieldLooseBase(this, _eventEmitter)[_eventEmitter].listeners) {
|
|
192
|
-
_classPrivateFieldLooseBase(this, _eventEmitter)[_eventEmitter].emit("session-set", _classPrivateFieldLooseBase(this, _session)[_session]);
|
|
193
|
-
}
|
|
194
|
-
document.cookie = "hello_session=".concat(_classPrivateFieldLooseBase(this, _session)[_session]);
|
|
195
|
-
}
|
|
196
|
-
function _get_cookie() {
|
|
197
|
-
var _document$cookie$matc;
|
|
198
|
-
return (_document$cookie$matc = document.cookie.match('(^|;)\\s*' + 'hello_session' + '\\s*=\\s*([^;]+)')) === null || _document$cookie$matc === void 0 ? void 0 : _document$cookie$matc.pop();
|
|
199
|
-
}
|
|
200
|
-
Object.defineProperty(Hellotext, _cookie, {
|
|
201
|
-
get: _get_cookie,
|
|
202
|
-
set: void 0
|
|
203
|
-
});
|
|
204
|
-
Object.defineProperty(Hellotext, _setSessionCookie, {
|
|
205
|
-
value: _setSessionCookie2
|
|
206
|
-
});
|
|
207
|
-
Object.defineProperty(Hellotext, _headers, {
|
|
208
|
-
get: _get_headers,
|
|
209
|
-
set: void 0
|
|
210
|
-
});
|
|
211
179
|
Object.defineProperty(Hellotext, _mintAnonymousSession, {
|
|
212
180
|
value: _mintAnonymousSession2
|
|
213
181
|
});
|
|
214
|
-
Object.defineProperty(Hellotext, _notInitialized, {
|
|
215
|
-
get: _get_notInitialized,
|
|
216
|
-
set: void 0
|
|
217
|
-
});
|
|
218
|
-
Hellotext.__apiURL = 'https://api.hellotext.com/v1/';
|
|
219
182
|
Object.defineProperty(Hellotext, _session, {
|
|
220
183
|
writable: true,
|
|
221
184
|
value: void 0
|
|
222
185
|
});
|
|
223
|
-
Object.defineProperty(Hellotext,
|
|
186
|
+
Object.defineProperty(Hellotext, _config, {
|
|
224
187
|
writable: true,
|
|
225
188
|
value: void 0
|
|
226
189
|
});
|
|
227
|
-
Object.defineProperty(Hellotext, _eventEmitter, {
|
|
228
|
-
writable: true,
|
|
229
|
-
value: new _eventEmitter2.default()
|
|
230
|
-
});
|
|
231
190
|
Object.defineProperty(Hellotext, _query, {
|
|
232
191
|
writable: true,
|
|
233
192
|
value: void 0
|
|
234
193
|
});
|
|
194
|
+
Hellotext.eventEmitter = new _core.Event();
|
|
195
|
+
Hellotext.forms = void 0;
|
|
196
|
+
Hellotext.business = void 0;
|
|
235
197
|
var _default = Hellotext;
|
|
236
198
|
exports.default = _default;
|
package/lib/index.js
CHANGED
|
@@ -4,7 +4,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
+
var _stimulus = require("@hotwired/stimulus");
|
|
7
8
|
var _hellotext = _interopRequireDefault(require("./hellotext"));
|
|
9
|
+
var _form_controller = _interopRequireDefault(require("./controllers/form_controller"));
|
|
10
|
+
var _otp_controller = _interopRequireDefault(require("./controllers/otp_controller"));
|
|
11
|
+
require("../styles/index.css");
|
|
8
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
var application = _stimulus.Application.start();
|
|
14
|
+
application.register('hellotext--form', _form_controller.default);
|
|
15
|
+
application.register('hellotext--otp', _otp_controller.default);
|
|
9
16
|
var _default = _hellotext.default;
|
|
10
17
|
exports.default = _default;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _default = {
|
|
8
|
+
otp: {
|
|
9
|
+
sent_to_email: 'A One-Time Password has been sent to your email address',
|
|
10
|
+
sent_to_phone: 'An One-Time Password has been sent to your phone number',
|
|
11
|
+
resend_successful: 'The One-Time Password has been resent successfully',
|
|
12
|
+
invalid: 'Invalid One-Time Password',
|
|
13
|
+
resend: 'Resend OTP',
|
|
14
|
+
throttled: 'You have reached the maximum number of attempts. Please try again in 1 minute.'
|
|
15
|
+
},
|
|
16
|
+
white_label: {
|
|
17
|
+
powered_by: "Powered by"
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
exports.default = _default;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _default = {
|
|
8
|
+
otp: {
|
|
9
|
+
sent_to_email: 'Un código de un solo uso ha sido enviado a tu correo electrónico',
|
|
10
|
+
sent_to_phone: 'Un código de un solo uso ha sido enviado a tu número de teléfono',
|
|
11
|
+
resend_successful: 'El código de un solo uso ha sido reenviado exitosamente',
|
|
12
|
+
invalid: 'Código de un solo uso inválido',
|
|
13
|
+
resend: 'Reenviar OTP',
|
|
14
|
+
throttled: 'Has alcanzado el número máximo de intentos. Por favor intenta de nuevo en 1 minuto.'
|
|
15
|
+
},
|
|
16
|
+
white_label: {
|
|
17
|
+
powered_by: "Desarrollado por"
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
exports.default = _default;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _en = _interopRequireDefault(require("./en"));
|
|
8
|
+
var _es = _interopRequireDefault(require("./es"));
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
var _default = {
|
|
11
|
+
en: _en.default,
|
|
12
|
+
es: _es.default
|
|
13
|
+
};
|
|
14
|
+
exports.default = _default;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Business = void 0;
|
|
7
|
+
var _businesses = _interopRequireDefault(require("../api/businesses"));
|
|
8
|
+
var _locales = _interopRequireDefault(require("../locales"));
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
11
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
12
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
13
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
14
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
15
|
+
var Business = /*#__PURE__*/function () {
|
|
16
|
+
function Business(id) {
|
|
17
|
+
_classCallCheck(this, Business);
|
|
18
|
+
this.id = id;
|
|
19
|
+
this.data = {};
|
|
20
|
+
this.fetchPublicData();
|
|
21
|
+
}
|
|
22
|
+
_createClass(Business, [{
|
|
23
|
+
key: "subscription",
|
|
24
|
+
get: function get() {
|
|
25
|
+
return this.data.subscription;
|
|
26
|
+
}
|
|
27
|
+
}, {
|
|
28
|
+
key: "country",
|
|
29
|
+
get: function get() {
|
|
30
|
+
return this.data.country;
|
|
31
|
+
}
|
|
32
|
+
}, {
|
|
33
|
+
key: "enabledWhitelist",
|
|
34
|
+
get: function get() {
|
|
35
|
+
return this.data.whitelist !== 'disabled';
|
|
36
|
+
}
|
|
37
|
+
}, {
|
|
38
|
+
key: "locale",
|
|
39
|
+
get: function get() {
|
|
40
|
+
return _locales.default[this.data.locale];
|
|
41
|
+
}
|
|
42
|
+
}, {
|
|
43
|
+
key: "features",
|
|
44
|
+
get: function get() {
|
|
45
|
+
return this.data.features;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// private
|
|
49
|
+
}, {
|
|
50
|
+
key: "fetchPublicData",
|
|
51
|
+
value: function fetchPublicData() {
|
|
52
|
+
_businesses.default.get(this.id).then(response => response.json()).then(data => this.data = data);
|
|
53
|
+
}
|
|
54
|
+
}]);
|
|
55
|
+
return Business;
|
|
56
|
+
}();
|
|
57
|
+
exports.Business = Business;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true,
|
|
5
|
+
})
|
|
6
|
+
exports.Configuration = void 0
|
|
7
|
+
function _classCallCheck(instance, Constructor) {
|
|
8
|
+
if (!(instance instanceof Constructor)) {
|
|
9
|
+
throw new TypeError('Cannot call a class as a function')
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function _defineProperties(target, props) {
|
|
13
|
+
for (var i = 0; i < props.length; i++) {
|
|
14
|
+
var descriptor = props[i]
|
|
15
|
+
descriptor.enumerable = descriptor.enumerable || false
|
|
16
|
+
descriptor.configurable = true
|
|
17
|
+
if ('value' in descriptor) descriptor.writable = true
|
|
18
|
+
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor)
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function _createClass(Constructor, protoProps, staticProps) {
|
|
22
|
+
if (protoProps) _defineProperties(Constructor.prototype, protoProps)
|
|
23
|
+
if (staticProps) _defineProperties(Constructor, staticProps)
|
|
24
|
+
Object.defineProperty(Constructor, 'prototype', { writable: false })
|
|
25
|
+
return Constructor
|
|
26
|
+
}
|
|
27
|
+
function _toPropertyKey(arg) {
|
|
28
|
+
var key = _toPrimitive(arg, 'string')
|
|
29
|
+
return typeof key === 'symbol' ? key : String(key)
|
|
30
|
+
}
|
|
31
|
+
function _toPrimitive(input, hint) {
|
|
32
|
+
if (typeof input !== 'object' || input === null) return input
|
|
33
|
+
var prim = input[Symbol.toPrimitive]
|
|
34
|
+
if (prim !== undefined) {
|
|
35
|
+
var res = prim.call(input, hint || 'default')
|
|
36
|
+
if (typeof res !== 'object') return res
|
|
37
|
+
throw new TypeError('@@toPrimitive must return a primitive value.')
|
|
38
|
+
}
|
|
39
|
+
return (hint === 'string' ? String : Number)(input)
|
|
40
|
+
}
|
|
41
|
+
var Configuration = /*#__PURE__*/ (function () {
|
|
42
|
+
function Configuration() {
|
|
43
|
+
_classCallCheck(this, Configuration)
|
|
44
|
+
}
|
|
45
|
+
_createClass(Configuration, null, [
|
|
46
|
+
{
|
|
47
|
+
key: 'assign',
|
|
48
|
+
value: function assign(_ref) {
|
|
49
|
+
var { apiRoot, autoGenerateSession } = _ref
|
|
50
|
+
this.apiRoot = apiRoot
|
|
51
|
+
this.autoGenerateSession = autoGenerateSession
|
|
52
|
+
return this
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
key: 'endpoint',
|
|
57
|
+
value: function endpoint(path) {
|
|
58
|
+
return ''.concat(this.apiRoot, '/').concat(path)
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
])
|
|
62
|
+
return Configuration
|
|
63
|
+
})()
|
|
64
|
+
exports.Configuration = Configuration
|
|
65
|
+
Configuration.apiRoot = 'http://api.lvh.me:3000/v1/'
|
|
66
|
+
Configuration.autoGenerateSession = true
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Cookies = void 0;
|
|
7
|
+
var _hellotext = _interopRequireDefault(require("../hellotext"));
|
|
8
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
10
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
11
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
12
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
13
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
14
|
+
var Cookies = /*#__PURE__*/function () {
|
|
15
|
+
function Cookies() {
|
|
16
|
+
_classCallCheck(this, Cookies);
|
|
17
|
+
}
|
|
18
|
+
_createClass(Cookies, null, [{
|
|
19
|
+
key: "set",
|
|
20
|
+
value: function set(name, value) {
|
|
21
|
+
document.cookie = "".concat(name, "=").concat(value);
|
|
22
|
+
_hellotext.default.eventEmitter.dispatch('session-set', value);
|
|
23
|
+
return value;
|
|
24
|
+
}
|
|
25
|
+
}, {
|
|
26
|
+
key: "get",
|
|
27
|
+
value: function get(name) {
|
|
28
|
+
var _document$cookie$matc;
|
|
29
|
+
return (_document$cookie$matc = document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]+)')) === null || _document$cookie$matc === void 0 ? void 0 : _document$cookie$matc.pop();
|
|
30
|
+
}
|
|
31
|
+
}]);
|
|
32
|
+
return Cookies;
|
|
33
|
+
}();
|
|
34
|
+
exports.Cookies = Cookies;
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Form = void 0;
|
|
7
|
+
var _hellotext = _interopRequireDefault(require("../hellotext"));
|
|
8
|
+
var _input_builder = require("../builders/input_builder");
|
|
9
|
+
var _logo_builder = require("../builders/logo_builder");
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
12
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
13
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
14
|
+
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); } }
|
|
15
|
+
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); }); }; }
|
|
16
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
17
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
18
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
19
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
20
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
21
|
+
function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
|
|
22
|
+
var id = 0;
|
|
23
|
+
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
|
24
|
+
var _findOrCreateComponent = /*#__PURE__*/_classPrivateFieldLooseKey("findOrCreateComponent");
|
|
25
|
+
var Form = /*#__PURE__*/function () {
|
|
26
|
+
function Form(data) {
|
|
27
|
+
var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
28
|
+
_classCallCheck(this, Form);
|
|
29
|
+
Object.defineProperty(this, _findOrCreateComponent, {
|
|
30
|
+
value: _findOrCreateComponent2
|
|
31
|
+
});
|
|
32
|
+
this.data = data;
|
|
33
|
+
this.element = element || document.querySelector("[data-hello-form=\"".concat(this.id, "\"]")) || document.createElement('form');
|
|
34
|
+
}
|
|
35
|
+
_createClass(Form, [{
|
|
36
|
+
key: "mount",
|
|
37
|
+
value: function () {
|
|
38
|
+
var _mount = _asyncToGenerator(function* () {
|
|
39
|
+
var firstStep = this.data.steps[0];
|
|
40
|
+
this.buildHeader(firstStep.header);
|
|
41
|
+
this.buildInputs(firstStep.inputs);
|
|
42
|
+
this.buildButton(firstStep.button);
|
|
43
|
+
this.buildFooter(firstStep.footer);
|
|
44
|
+
this.elementAttributes.forEach(attribute => {
|
|
45
|
+
this.element.setAttribute(attribute.name, attribute.value);
|
|
46
|
+
});
|
|
47
|
+
if (!document.contains(this.element)) {
|
|
48
|
+
document.body.appendChild(this.element);
|
|
49
|
+
}
|
|
50
|
+
if (!_hellotext.default.business.features.white_label) {
|
|
51
|
+
this.element.prepend(_logo_builder.LogoBuilder.build());
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
function mount() {
|
|
55
|
+
return _mount.apply(this, arguments);
|
|
56
|
+
}
|
|
57
|
+
return mount;
|
|
58
|
+
}()
|
|
59
|
+
}, {
|
|
60
|
+
key: "buildHeader",
|
|
61
|
+
value: function buildHeader(header) {
|
|
62
|
+
var headerElement = _classPrivateFieldLooseBase(this, _findOrCreateComponent)[_findOrCreateComponent]('[data-form-header]', 'header');
|
|
63
|
+
headerElement.innerHTML = header.content;
|
|
64
|
+
if (this.element.querySelector('[data-form-header]')) {
|
|
65
|
+
this.element.querySelector('[data-form-header]').replaceWith(headerElement);
|
|
66
|
+
} else {
|
|
67
|
+
this.element.prepend(headerElement);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}, {
|
|
71
|
+
key: "buildInputs",
|
|
72
|
+
value: function buildInputs(inputs) {
|
|
73
|
+
var inputsContainerElement = _classPrivateFieldLooseBase(this, _findOrCreateComponent)[_findOrCreateComponent]('[data-form-inputs]', 'main');
|
|
74
|
+
var inputElements = inputs.map(input => _input_builder.InputBuilder.build(input));
|
|
75
|
+
inputElements.forEach(inputElement => inputsContainerElement.appendChild(inputElement));
|
|
76
|
+
if (this.element.querySelector('[data-form-inputs]')) {
|
|
77
|
+
this.element.querySelector('[data-form-inputs]').replaceWith(inputsContainerElement);
|
|
78
|
+
} else {
|
|
79
|
+
this.element.querySelector('[data-form-header]').insertAdjacentHTML('afterend', inputsContainerElement.outerHTML);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}, {
|
|
83
|
+
key: "buildButton",
|
|
84
|
+
value: function buildButton(button) {
|
|
85
|
+
var buttonElement = _classPrivateFieldLooseBase(this, _findOrCreateComponent)[_findOrCreateComponent]('[data-form-button]', 'button');
|
|
86
|
+
buttonElement.innerText = button.text;
|
|
87
|
+
buttonElement.setAttribute('data-action', 'click->hellotext--form#submit');
|
|
88
|
+
buttonElement.setAttribute('data-hellotext--form-target', 'button');
|
|
89
|
+
if (this.element.querySelector('[data-form-button]')) {
|
|
90
|
+
this.element.querySelector('[data-form-button]').replaceWith(buttonElement);
|
|
91
|
+
} else {
|
|
92
|
+
this.element.querySelector('[data-form-inputs]').insertAdjacentHTML('afterend', buttonElement.outerHTML);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}, {
|
|
96
|
+
key: "buildFooter",
|
|
97
|
+
value: function buildFooter(footer) {
|
|
98
|
+
var element = _classPrivateFieldLooseBase(this, _findOrCreateComponent)[_findOrCreateComponent]('[data-form-footer]', 'footer');
|
|
99
|
+
element.innerHTML = footer.content;
|
|
100
|
+
if (this.element.querySelector('[data-form-footer]')) {
|
|
101
|
+
this.element.querySelector('[data-form-footer]').replaceWith(element);
|
|
102
|
+
} else {
|
|
103
|
+
this.element.appendChild(element);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}, {
|
|
107
|
+
key: "markAsCompleted",
|
|
108
|
+
value: function markAsCompleted(data) {
|
|
109
|
+
localStorage.setItem("hello-form-".concat(this.id), 'completed');
|
|
110
|
+
_hellotext.default.eventEmitter.dispatch('form:completed', _objectSpread({
|
|
111
|
+
id: this.id
|
|
112
|
+
}, data));
|
|
113
|
+
}
|
|
114
|
+
}, {
|
|
115
|
+
key: "id",
|
|
116
|
+
get: function get() {
|
|
117
|
+
return this.data.id;
|
|
118
|
+
}
|
|
119
|
+
}, {
|
|
120
|
+
key: "elementAttributes",
|
|
121
|
+
get: function get() {
|
|
122
|
+
return [{
|
|
123
|
+
name: 'data-controller',
|
|
124
|
+
value: 'hellotext--form'
|
|
125
|
+
}, {
|
|
126
|
+
name: 'data-hello-form',
|
|
127
|
+
value: this.id
|
|
128
|
+
}, {
|
|
129
|
+
name: 'data-hellotext--form-data-value',
|
|
130
|
+
value: JSON.stringify(this.data)
|
|
131
|
+
}, {
|
|
132
|
+
name: 'data-action',
|
|
133
|
+
value: 'hellotext--otp:verified->hellotext--form#completed'
|
|
134
|
+
}];
|
|
135
|
+
}
|
|
136
|
+
}]);
|
|
137
|
+
return Form;
|
|
138
|
+
}();
|
|
139
|
+
exports.Form = Form;
|
|
140
|
+
function _findOrCreateComponent2(selector, tag) {
|
|
141
|
+
var existingElement = this.element.querySelector(selector);
|
|
142
|
+
if (existingElement) {
|
|
143
|
+
return existingElement.cloneNode(true);
|
|
144
|
+
}
|
|
145
|
+
var createdElement = document.createElement(tag);
|
|
146
|
+
createdElement.setAttribute(selector.replace('[', '').replace(']', ''), '');
|
|
147
|
+
return createdElement;
|
|
148
|
+
}
|