@hellotext/hellotext 1.8.7 → 2.0.1
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 +27 -2
- package/dist/hellotext.js +1 -1
- package/index.d.ts +61 -0
- package/lib/api/businesses.cjs +37 -0
- package/lib/api/businesses.js +3 -9
- package/lib/api/events.cjs +45 -0
- package/lib/api/events.js +8 -14
- package/lib/api/forms.cjs +51 -0
- package/lib/api/forms.js +10 -17
- package/lib/api/index.cjs +51 -0
- package/lib/api/index.js +10 -23
- package/lib/api/response.cjs +76 -0
- package/lib/api/response.js +1 -7
- package/lib/api/submissions.cjs +47 -0
- package/lib/api/submissions.js +9 -17
- package/lib/api/webchat/messages.cjs +70 -0
- package/lib/api/webchat/messages.js +10 -18
- package/lib/api/webchats.cjs +44 -0
- package/lib/api/webchats.js +8 -16
- package/lib/builders/input_builder.cjs +61 -0
- package/lib/builders/input_builder.js +4 -11
- package/lib/builders/logo_builder.cjs +50 -0
- package/lib/builders/logo_builder.js +5 -12
- package/lib/channels/application_channel.cjs +67 -0
- package/lib/channels/application_channel.js +1 -8
- package/lib/channels/{web_chat_channel.js → webchat_channel.cjs} +35 -20
- package/lib/channels/webchat_channel.js +3 -11
- package/lib/controllers/form_controller.cjs +141 -0
- package/lib/controllers/form_controller.js +15 -22
- package/lib/controllers/mixins/usePopover.cjs +59 -0
- package/lib/controllers/mixins/usePopover.js +6 -14
- package/lib/controllers/{web_chat/pagination_controller.js → webchat/emoji_picker_controller.cjs} +74 -29
- package/lib/controllers/webchat/emoji_picker_controller.js +11 -17
- package/lib/controllers/webchat_controller.cjs +433 -0
- package/lib/controllers/webchat_controller.js +49 -51
- package/lib/core/configuration/forms.cjs +49 -0
- package/lib/core/configuration/forms.js +2 -8
- package/lib/core/configuration/{web_chat.js → webchat.cjs} +53 -38
- package/lib/core/configuration/webchat.js +2 -9
- package/lib/core/configuration.cjs +65 -0
- package/lib/core/configuration.js +8 -13
- package/lib/core/event.cjs +71 -0
- package/lib/core/event.js +5 -11
- package/lib/core/index.cjs +20 -0
- package/lib/core/index.js +2 -20
- package/lib/errors/index.cjs +19 -0
- package/lib/errors/index.js +2 -19
- package/lib/errors/invalid_event.cjs +34 -0
- package/lib/errors/invalid_event.js +1 -7
- package/lib/errors/not_initialized_error.cjs +34 -0
- package/lib/errors/not_initialized_error.js +1 -7
- package/lib/hellotext.cjs +153 -0
- package/lib/hellotext.js +19 -27
- package/lib/index.cjs +19 -0
- package/lib/index.js +11 -20
- package/lib/locales/en.cjs +22 -0
- package/lib/locales/en.js +2 -9
- package/lib/locales/es.cjs +22 -0
- package/lib/locales/es.js +2 -9
- package/lib/locales/index.cjs +14 -0
- package/lib/locales/index.js +6 -14
- package/lib/models/business.cjs +62 -0
- package/lib/models/business.js +22 -24
- package/lib/models/cookies.cjs +40 -0
- package/lib/models/cookies.js +3 -10
- package/lib/models/form.cjs +166 -0
- package/lib/models/form.js +10 -17
- package/lib/models/form_collection.cjs +122 -0
- package/lib/models/form_collection.js +18 -22
- package/lib/models/index.cjs +54 -0
- package/lib/models/index.js +7 -54
- package/lib/models/query.cjs +51 -0
- package/lib/models/query.js +3 -9
- package/lib/models/session.cjs +58 -0
- package/lib/models/session.js +12 -17
- package/lib/models/{web_chat.js → webchat.cjs} +14 -22
- package/lib/models/webchat.js +6 -13
- package/lib/vanilla.cjs +13 -0
- package/lib/vanilla.js +1 -13
- package/package.json +41 -7
- package/src/controllers/webchat_controller.js +72 -47
- package/src/hellotext.js +5 -4
- package/src/index.bundle.js +5 -0
- package/src/index.js +1 -3
- package/src/models/business.js +3 -6
- package/src/models/form_collection.js +10 -4
- package/src/models/session.js +4 -3
- package/styles/index.css +22 -30
- package/.babelrc +0 -24
- package/.github/workflows/ci.yml +0 -24
- package/.prettierignore +0 -3
- package/.prettierrc.json +0 -18
- package/MIT-LICENSE +0 -20
- package/__tests__/builders/input_builder_test.js +0 -117
- package/__tests__/core/configuration/forms_test.js +0 -30
- package/__tests__/core/configuration/webchat_test.js +0 -163
- package/__tests__/core/configuration_test.js +0 -28
- package/__tests__/core/event_test.js +0 -56
- package/__tests__/hellotext_test.js +0 -197
- package/__tests__/models/business_test.js +0 -26
- package/__tests__/models/cookies_test.js +0 -25
- package/__tests__/models/form_collection_test.js +0 -103
- package/__tests__/models/form_test.js +0 -131
- package/__tests__/models/query_test.js +0 -97
- package/docs/forms.md +0 -176
- package/docs/tracking.md +0 -203
- package/docs/webchat.md +0 -101
- package/jest.config.js +0 -4
- package/jest.setup.js +0 -16
- package/lib/api/web_chat/messages.js +0 -74
- package/lib/api/web_chats.js +0 -53
- package/webpack.config.js +0 -24
package/lib/index.js
CHANGED
|
@@ -1,20 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
require("../styles/index.css");
|
|
13
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
|
-
var application = _stimulus.Application.start();
|
|
15
|
-
application.register('hellotext--form', _form_controller.default);
|
|
16
|
-
application.register('hellotext--webchat', _webchat_controller.default);
|
|
17
|
-
application.register('hellotext--webchat--emoji', _emoji_picker_controller.default);
|
|
18
|
-
window.Hellotext = _hellotext.default;
|
|
19
|
-
var _default = _hellotext.default;
|
|
20
|
-
exports.default = _default;
|
|
1
|
+
import { Application } from '@hotwired/stimulus';
|
|
2
|
+
import Hellotext from './hellotext';
|
|
3
|
+
import FormController from './controllers/form_controller';
|
|
4
|
+
import WebChatEmojiController from './controllers/webchat/emoji_picker_controller';
|
|
5
|
+
import WebchatController from './controllers/webchat_controller';
|
|
6
|
+
var application = Application.start();
|
|
7
|
+
application.register('hellotext--form', FormController);
|
|
8
|
+
application.register('hellotext--webchat', WebchatController);
|
|
9
|
+
application.register('hellotext--webchat--emoji', WebChatEmojiController);
|
|
10
|
+
window.Hellotext = Hellotext;
|
|
11
|
+
export default Hellotext;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _default = {
|
|
8
|
+
white_label: {
|
|
9
|
+
powered_by: 'Powered by'
|
|
10
|
+
},
|
|
11
|
+
errors: {
|
|
12
|
+
parameter_not_unique: 'This value is taken.',
|
|
13
|
+
blank: 'This field is required.'
|
|
14
|
+
},
|
|
15
|
+
forms: {
|
|
16
|
+
phone: 'Click the link sent via SMS to verify your submission.',
|
|
17
|
+
email: 'Click the link sent via email to verify your submission.',
|
|
18
|
+
phone_and_email: 'Click the links sent via SMS and email to verify your submission.',
|
|
19
|
+
none: 'Your submission has been received.'
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
exports.default = _default;
|
package/lib/locales/en.js
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
var _default = {
|
|
1
|
+
export default {
|
|
8
2
|
white_label: {
|
|
9
3
|
powered_by: 'Powered by'
|
|
10
4
|
},
|
|
@@ -18,5 +12,4 @@ var _default = {
|
|
|
18
12
|
phone_and_email: 'Click the links sent via SMS and email to verify your submission.',
|
|
19
13
|
none: 'Your submission has been received.'
|
|
20
14
|
}
|
|
21
|
-
};
|
|
22
|
-
exports.default = _default;
|
|
15
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _default = {
|
|
8
|
+
white_label: {
|
|
9
|
+
powered_by: 'Desarrollado por'
|
|
10
|
+
},
|
|
11
|
+
errors: {
|
|
12
|
+
parameter_not_unique: 'Este valor ya está en uso.',
|
|
13
|
+
blank: 'Este campo es obligatorio.'
|
|
14
|
+
},
|
|
15
|
+
forms: {
|
|
16
|
+
phone: 'Haga clic en el enlace enviado por SMS para verificar su envío.',
|
|
17
|
+
email: 'Haga clic en el enlace enviado por e-mail para verificar su envío.',
|
|
18
|
+
phone_and_email: 'Haga clic en los enlaces enviados por SMS y e-mail para verificar su envío.',
|
|
19
|
+
none: 'Su envío ha sido recibido.'
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
exports.default = _default;
|
package/lib/locales/es.js
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
var _default = {
|
|
1
|
+
export default {
|
|
8
2
|
white_label: {
|
|
9
3
|
powered_by: 'Desarrollado por'
|
|
10
4
|
},
|
|
@@ -18,5 +12,4 @@ var _default = {
|
|
|
18
12
|
phone_and_email: 'Haga clic en los enlaces enviados por SMS y e-mail para verificar su envío.',
|
|
19
13
|
none: 'Su envío ha sido recibido.'
|
|
20
14
|
}
|
|
21
|
-
};
|
|
22
|
-
exports.default = _default;
|
|
15
|
+
};
|
|
@@ -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;
|
package/lib/locales/index.js
CHANGED
|
@@ -1,14 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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;
|
|
1
|
+
import en from './en';
|
|
2
|
+
import es from './es';
|
|
3
|
+
export default {
|
|
4
|
+
en,
|
|
5
|
+
es
|
|
6
|
+
};
|
|
@@ -0,0 +1,62 @@
|
|
|
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
|
+
let Business = /*#__PURE__*/function () {
|
|
16
|
+
function Business(id) {
|
|
17
|
+
_classCallCheck(this, Business);
|
|
18
|
+
this.id = id;
|
|
19
|
+
this.data = {};
|
|
20
|
+
}
|
|
21
|
+
_createClass(Business, [{
|
|
22
|
+
key: "subscription",
|
|
23
|
+
get: function () {
|
|
24
|
+
return this.data.subscription;
|
|
25
|
+
}
|
|
26
|
+
}, {
|
|
27
|
+
key: "country",
|
|
28
|
+
get: function () {
|
|
29
|
+
return this.data.country;
|
|
30
|
+
}
|
|
31
|
+
}, {
|
|
32
|
+
key: "enabledWhitelist",
|
|
33
|
+
get: function () {
|
|
34
|
+
return this.data.whitelist !== 'disabled';
|
|
35
|
+
}
|
|
36
|
+
}, {
|
|
37
|
+
key: "locale",
|
|
38
|
+
get: function () {
|
|
39
|
+
return _locales.default[this.data.locale];
|
|
40
|
+
}
|
|
41
|
+
}, {
|
|
42
|
+
key: "features",
|
|
43
|
+
get: function () {
|
|
44
|
+
return this.data.features;
|
|
45
|
+
}
|
|
46
|
+
}, {
|
|
47
|
+
key: "fetchPublicData",
|
|
48
|
+
value: async function fetchPublicData() {
|
|
49
|
+
return _businesses.default.get(this.id).then(response => response.json()).then(data => {
|
|
50
|
+
this.data = data;
|
|
51
|
+
if (typeof document !== 'undefined') {
|
|
52
|
+
const linkTag = document.createElement('link');
|
|
53
|
+
linkTag.rel = 'stylesheet';
|
|
54
|
+
linkTag.href = data.style_url;
|
|
55
|
+
document.head.append(linkTag);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}]);
|
|
60
|
+
return Business;
|
|
61
|
+
}();
|
|
62
|
+
exports.Business = Business;
|
package/lib/models/business.js
CHANGED
|
@@ -1,23 +1,17 @@
|
|
|
1
|
-
|
|
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 }; }
|
|
1
|
+
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); } }
|
|
2
|
+
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); }); }; }
|
|
10
3
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
11
4
|
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
5
|
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
6
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
14
7
|
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); }
|
|
8
|
+
import API from '../api/businesses';
|
|
9
|
+
import locales from '../locales';
|
|
15
10
|
var Business = /*#__PURE__*/function () {
|
|
16
11
|
function Business(id) {
|
|
17
12
|
_classCallCheck(this, Business);
|
|
18
13
|
this.id = id;
|
|
19
14
|
this.data = {};
|
|
20
|
-
this.fetchPublicData();
|
|
21
15
|
}
|
|
22
16
|
_createClass(Business, [{
|
|
23
17
|
key: "subscription",
|
|
@@ -37,29 +31,33 @@ var Business = /*#__PURE__*/function () {
|
|
|
37
31
|
}, {
|
|
38
32
|
key: "locale",
|
|
39
33
|
get: function get() {
|
|
40
|
-
return
|
|
34
|
+
return locales[this.data.locale];
|
|
41
35
|
}
|
|
42
36
|
}, {
|
|
43
37
|
key: "features",
|
|
44
38
|
get: function get() {
|
|
45
39
|
return this.data.features;
|
|
46
40
|
}
|
|
47
|
-
|
|
48
|
-
// private
|
|
49
41
|
}, {
|
|
50
42
|
key: "fetchPublicData",
|
|
51
|
-
value: function
|
|
52
|
-
|
|
53
|
-
this.data
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
43
|
+
value: function () {
|
|
44
|
+
var _fetchPublicData = _asyncToGenerator(function* () {
|
|
45
|
+
return API.get(this.id).then(response => response.json()).then(data => {
|
|
46
|
+
this.data = data;
|
|
47
|
+
if (typeof document !== 'undefined') {
|
|
48
|
+
var linkTag = document.createElement('link');
|
|
49
|
+
linkTag.rel = 'stylesheet';
|
|
50
|
+
linkTag.href = data.style_url;
|
|
51
|
+
document.head.append(linkTag);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
60
54
|
});
|
|
61
|
-
|
|
55
|
+
function fetchPublicData() {
|
|
56
|
+
return _fetchPublicData.apply(this, arguments);
|
|
57
|
+
}
|
|
58
|
+
return fetchPublicData;
|
|
59
|
+
}()
|
|
62
60
|
}]);
|
|
63
61
|
return Business;
|
|
64
62
|
}();
|
|
65
|
-
|
|
63
|
+
export { Business };
|
|
@@ -0,0 +1,40 @@
|
|
|
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
|
+
let 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
|
+
if (typeof document !== 'undefined') {
|
|
22
|
+
document.cookie = `${name}=${value}; path=/;`;
|
|
23
|
+
}
|
|
24
|
+
_hellotext.default.eventEmitter.dispatch('session-set', value);
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
}, {
|
|
28
|
+
key: "get",
|
|
29
|
+
value: function get(name) {
|
|
30
|
+
if (typeof document !== 'undefined') {
|
|
31
|
+
var _document$cookie$matc;
|
|
32
|
+
return (_document$cookie$matc = document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]+)')) === null || _document$cookie$matc === void 0 ? void 0 : _document$cookie$matc.pop();
|
|
33
|
+
} else {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}]);
|
|
38
|
+
return Cookies;
|
|
39
|
+
}();
|
|
40
|
+
exports.Cookies = Cookies;
|
package/lib/models/cookies.js
CHANGED
|
@@ -1,16 +1,9 @@
|
|
|
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
1
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
10
2
|
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
3
|
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
4
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
13
5
|
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); }
|
|
6
|
+
import Hellotext from '../hellotext';
|
|
14
7
|
var Cookies = /*#__PURE__*/function () {
|
|
15
8
|
function Cookies() {
|
|
16
9
|
_classCallCheck(this, Cookies);
|
|
@@ -21,7 +14,7 @@ var Cookies = /*#__PURE__*/function () {
|
|
|
21
14
|
if (typeof document !== 'undefined') {
|
|
22
15
|
document.cookie = "".concat(name, "=").concat(value, "; path=/;");
|
|
23
16
|
}
|
|
24
|
-
|
|
17
|
+
Hellotext.eventEmitter.dispatch('session-set', value);
|
|
25
18
|
return value;
|
|
26
19
|
}
|
|
27
20
|
}, {
|
|
@@ -37,4 +30,4 @@ var Cookies = /*#__PURE__*/function () {
|
|
|
37
30
|
}]);
|
|
38
31
|
return Cookies;
|
|
39
32
|
}();
|
|
40
|
-
|
|
33
|
+
export { Cookies };
|
|
@@ -0,0 +1,166 @@
|
|
|
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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
12
|
+
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); } }
|
|
13
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
14
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
15
|
+
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); }
|
|
16
|
+
function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
|
|
17
|
+
var id = 0;
|
|
18
|
+
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
|
19
|
+
var _findOrCreateComponent = /*#__PURE__*/_classPrivateFieldLooseKey("findOrCreateComponent");
|
|
20
|
+
let Form = /*#__PURE__*/function () {
|
|
21
|
+
function Form(data, element = null) {
|
|
22
|
+
_classCallCheck(this, Form);
|
|
23
|
+
Object.defineProperty(this, _findOrCreateComponent, {
|
|
24
|
+
value: _findOrCreateComponent2
|
|
25
|
+
});
|
|
26
|
+
this.data = data;
|
|
27
|
+
this.element = element || document.querySelector(`[data-hello-form="${this.id}"]`) || document.createElement('form');
|
|
28
|
+
}
|
|
29
|
+
_createClass(Form, [{
|
|
30
|
+
key: "mount",
|
|
31
|
+
value: async function mount({
|
|
32
|
+
ifCompleted = true
|
|
33
|
+
} = {}) {
|
|
34
|
+
if (ifCompleted && this.hasBeenCompleted) {
|
|
35
|
+
var _this$element;
|
|
36
|
+
(_this$element = this.element) === null || _this$element === void 0 ? void 0 : _this$element.remove();
|
|
37
|
+
return _hellotext.default.eventEmitter.dispatch('form:completed', {
|
|
38
|
+
id: this.id,
|
|
39
|
+
...JSON.parse(localStorage.getItem(`hello-form-${this.id}`))
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
const firstStep = this.data.steps[0];
|
|
43
|
+
this.buildHeader(firstStep.header);
|
|
44
|
+
this.buildInputs(firstStep.inputs);
|
|
45
|
+
this.buildButton(firstStep.button);
|
|
46
|
+
this.buildFooter(firstStep.footer);
|
|
47
|
+
this.elementAttributes.forEach(attribute => {
|
|
48
|
+
this.element.setAttribute(attribute.name, attribute.value);
|
|
49
|
+
});
|
|
50
|
+
if (!document.contains(this.element)) {
|
|
51
|
+
document.body.appendChild(this.element);
|
|
52
|
+
}
|
|
53
|
+
if (!_hellotext.default.business.features.white_label) {
|
|
54
|
+
this.element.prepend(_logo_builder.LogoBuilder.build());
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}, {
|
|
58
|
+
key: "buildHeader",
|
|
59
|
+
value: function buildHeader(header) {
|
|
60
|
+
const headerElement = _classPrivateFieldLooseBase(this, _findOrCreateComponent)[_findOrCreateComponent]('[data-form-header]', 'header');
|
|
61
|
+
headerElement.innerHTML = header.content;
|
|
62
|
+
if (this.element.querySelector('[data-form-header]')) {
|
|
63
|
+
this.element.querySelector('[data-form-header]').replaceWith(headerElement);
|
|
64
|
+
} else {
|
|
65
|
+
this.element.prepend(headerElement);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}, {
|
|
69
|
+
key: "buildInputs",
|
|
70
|
+
value: function buildInputs(inputs) {
|
|
71
|
+
const inputsContainerElement = _classPrivateFieldLooseBase(this, _findOrCreateComponent)[_findOrCreateComponent]('[data-form-inputs]', 'main');
|
|
72
|
+
const inputElements = inputs.map(input => _input_builder.InputBuilder.build(input));
|
|
73
|
+
inputElements.forEach(inputElement => inputsContainerElement.appendChild(inputElement));
|
|
74
|
+
if (this.element.querySelector('[data-form-inputs]')) {
|
|
75
|
+
this.element.querySelector('[data-form-inputs]').replaceWith(inputsContainerElement);
|
|
76
|
+
} else {
|
|
77
|
+
this.element.querySelector('[data-form-header]').insertAdjacentHTML('afterend', inputsContainerElement.outerHTML);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}, {
|
|
81
|
+
key: "buildButton",
|
|
82
|
+
value: function buildButton(button) {
|
|
83
|
+
const buttonElement = _classPrivateFieldLooseBase(this, _findOrCreateComponent)[_findOrCreateComponent]('[data-form-button]', 'button');
|
|
84
|
+
buttonElement.innerText = button.text;
|
|
85
|
+
buttonElement.setAttribute('data-action', 'click->hellotext--form#submit');
|
|
86
|
+
buttonElement.setAttribute('data-hellotext--form-target', 'button');
|
|
87
|
+
if (this.element.querySelector('[data-form-button]')) {
|
|
88
|
+
this.element.querySelector('[data-form-button]').replaceWith(buttonElement);
|
|
89
|
+
} else {
|
|
90
|
+
this.element.querySelector('[data-form-inputs]').insertAdjacentHTML('afterend', buttonElement.outerHTML);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}, {
|
|
94
|
+
key: "buildFooter",
|
|
95
|
+
value: function buildFooter(footer) {
|
|
96
|
+
const element = _classPrivateFieldLooseBase(this, _findOrCreateComponent)[_findOrCreateComponent]('[data-form-footer]', 'footer');
|
|
97
|
+
element.innerHTML = footer.content;
|
|
98
|
+
if (this.element.querySelector('[data-form-footer]')) {
|
|
99
|
+
this.element.querySelector('[data-form-footer]').replaceWith(element);
|
|
100
|
+
} else {
|
|
101
|
+
this.element.appendChild(element);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}, {
|
|
105
|
+
key: "markAsCompleted",
|
|
106
|
+
value: function markAsCompleted(data) {
|
|
107
|
+
const payload = {
|
|
108
|
+
state: 'completed',
|
|
109
|
+
id: this.id,
|
|
110
|
+
data,
|
|
111
|
+
completedAt: new Date().getTime()
|
|
112
|
+
};
|
|
113
|
+
localStorage.setItem(`hello-form-${this.id}`, JSON.stringify(payload));
|
|
114
|
+
_hellotext.default.eventEmitter.dispatch('form:completed', payload);
|
|
115
|
+
}
|
|
116
|
+
}, {
|
|
117
|
+
key: "hasBeenCompleted",
|
|
118
|
+
get: function () {
|
|
119
|
+
return localStorage.getItem(`hello-form-${this.id}`) !== null;
|
|
120
|
+
}
|
|
121
|
+
}, {
|
|
122
|
+
key: "id",
|
|
123
|
+
get: function () {
|
|
124
|
+
return this.data.id;
|
|
125
|
+
}
|
|
126
|
+
}, {
|
|
127
|
+
key: "localeAuthKey",
|
|
128
|
+
get: function () {
|
|
129
|
+
const firstStep = this.data.steps[0];
|
|
130
|
+
if (firstStep.inputs.some(input => input.kind === 'email') && firstStep.inputs.some(input => input.kind === 'phone')) {
|
|
131
|
+
return 'phone_and_email';
|
|
132
|
+
} else if (firstStep.inputs.some(input => input.kind === 'email')) {
|
|
133
|
+
return 'email';
|
|
134
|
+
} else if (firstStep.inputs.some(input => input.kind === 'phone')) {
|
|
135
|
+
return 'phone';
|
|
136
|
+
} else {
|
|
137
|
+
return 'none';
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}, {
|
|
141
|
+
key: "elementAttributes",
|
|
142
|
+
get: function () {
|
|
143
|
+
return [{
|
|
144
|
+
name: 'data-controller',
|
|
145
|
+
value: 'hellotext--form'
|
|
146
|
+
}, {
|
|
147
|
+
name: 'data-hello-form',
|
|
148
|
+
value: this.id
|
|
149
|
+
}, {
|
|
150
|
+
name: 'data-hellotext--form-data-value',
|
|
151
|
+
value: JSON.stringify(this.data)
|
|
152
|
+
}];
|
|
153
|
+
}
|
|
154
|
+
}]);
|
|
155
|
+
return Form;
|
|
156
|
+
}();
|
|
157
|
+
exports.Form = Form;
|
|
158
|
+
function _findOrCreateComponent2(selector, tag) {
|
|
159
|
+
const existingElement = this.element.querySelector(selector);
|
|
160
|
+
if (existingElement) {
|
|
161
|
+
return existingElement.cloneNode(true);
|
|
162
|
+
}
|
|
163
|
+
const createdElement = document.createElement(tag);
|
|
164
|
+
createdElement.setAttribute(selector.replace('[', '').replace(']', ''), '');
|
|
165
|
+
return createdElement;
|
|
166
|
+
}
|
package/lib/models/form.js
CHANGED
|
@@ -1,13 +1,3 @@
|
|
|
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
1
|
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
2
|
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
3
|
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; }
|
|
@@ -21,6 +11,9 @@ function _toPrimitive(input, hint) { if (typeof input !== "object" || input ===
|
|
|
21
11
|
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
12
|
var id = 0;
|
|
23
13
|
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
|
14
|
+
import Hellotext from '../hellotext';
|
|
15
|
+
import { InputBuilder } from '../builders/input_builder';
|
|
16
|
+
import { LogoBuilder } from '../builders/logo_builder';
|
|
24
17
|
var _findOrCreateComponent = /*#__PURE__*/_classPrivateFieldLooseKey("findOrCreateComponent");
|
|
25
18
|
var Form = /*#__PURE__*/function () {
|
|
26
19
|
function Form(data) {
|
|
@@ -42,7 +35,7 @@ var Form = /*#__PURE__*/function () {
|
|
|
42
35
|
if (ifCompleted && this.hasBeenCompleted) {
|
|
43
36
|
var _this$element;
|
|
44
37
|
(_this$element = this.element) === null || _this$element === void 0 ? void 0 : _this$element.remove();
|
|
45
|
-
return
|
|
38
|
+
return Hellotext.eventEmitter.dispatch('form:completed', _objectSpread({
|
|
46
39
|
id: this.id
|
|
47
40
|
}, JSON.parse(localStorage.getItem("hello-form-".concat(this.id)))));
|
|
48
41
|
}
|
|
@@ -57,8 +50,8 @@ var Form = /*#__PURE__*/function () {
|
|
|
57
50
|
if (!document.contains(this.element)) {
|
|
58
51
|
document.body.appendChild(this.element);
|
|
59
52
|
}
|
|
60
|
-
if (!
|
|
61
|
-
this.element.prepend(
|
|
53
|
+
if (!Hellotext.business.features.white_label) {
|
|
54
|
+
this.element.prepend(LogoBuilder.build());
|
|
62
55
|
}
|
|
63
56
|
});
|
|
64
57
|
function mount() {
|
|
@@ -81,7 +74,7 @@ var Form = /*#__PURE__*/function () {
|
|
|
81
74
|
key: "buildInputs",
|
|
82
75
|
value: function buildInputs(inputs) {
|
|
83
76
|
var inputsContainerElement = _classPrivateFieldLooseBase(this, _findOrCreateComponent)[_findOrCreateComponent]('[data-form-inputs]', 'main');
|
|
84
|
-
var inputElements = inputs.map(input =>
|
|
77
|
+
var inputElements = inputs.map(input => InputBuilder.build(input));
|
|
85
78
|
inputElements.forEach(inputElement => inputsContainerElement.appendChild(inputElement));
|
|
86
79
|
if (this.element.querySelector('[data-form-inputs]')) {
|
|
87
80
|
this.element.querySelector('[data-form-inputs]').replaceWith(inputsContainerElement);
|
|
@@ -123,7 +116,7 @@ var Form = /*#__PURE__*/function () {
|
|
|
123
116
|
completedAt: new Date().getTime()
|
|
124
117
|
};
|
|
125
118
|
localStorage.setItem("hello-form-".concat(this.id), JSON.stringify(payload));
|
|
126
|
-
|
|
119
|
+
Hellotext.eventEmitter.dispatch('form:completed', payload);
|
|
127
120
|
}
|
|
128
121
|
}, {
|
|
129
122
|
key: "hasBeenCompleted",
|
|
@@ -166,7 +159,6 @@ var Form = /*#__PURE__*/function () {
|
|
|
166
159
|
}]);
|
|
167
160
|
return Form;
|
|
168
161
|
}();
|
|
169
|
-
exports.Form = Form;
|
|
170
162
|
function _findOrCreateComponent2(selector, tag) {
|
|
171
163
|
var existingElement = this.element.querySelector(selector);
|
|
172
164
|
if (existingElement) {
|
|
@@ -175,4 +167,5 @@ function _findOrCreateComponent2(selector, tag) {
|
|
|
175
167
|
var createdElement = document.createElement(tag);
|
|
176
168
|
createdElement.setAttribute(selector.replace('[', '').replace(']', ''), '');
|
|
177
169
|
return createdElement;
|
|
178
|
-
}
|
|
170
|
+
}
|
|
171
|
+
export { Form };
|