@hellotext/hellotext 1.8.1 → 1.8.3
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 +10 -3
- package/__tests__/hellotext_test.js +0 -17
- package/__tests__/models/form_test.js +1 -1
- package/dist/hellotext.js +1 -1
- package/docs/forms.md +9 -5
- package/jest.config.js +3 -0
- package/jest.setup.js +7 -0
- package/lib/api/index.js +0 -6
- package/lib/api/response.js +26 -0
- package/lib/controllers/form_controller.js +0 -3
- package/lib/hellotext.js +6 -38
- package/lib/models/form.js +12 -7
- package/lib/models/index.js +8 -1
- package/lib/models/session.js +55 -0
- package/package.json +1 -1
- package/src/api/index.js +0 -5
- package/src/api/response.js +24 -0
- package/src/controllers/form_controller.js +0 -4
- package/src/hellotext.js +5 -32
- package/src/models/form.js +14 -3
- package/src/models/index.js +1 -0
- package/src/models/session.js +30 -0
- package/__tests__/api/sessions_test.js +0 -12
- package/lib/api/sessions.js +0 -46
- package/src/api/sessions.js +0 -23
package/jest.config.js
ADDED
package/jest.setup.js
ADDED
package/lib/api/index.js
CHANGED
|
@@ -10,7 +10,6 @@ Object.defineProperty(exports, "Response", {
|
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
12
|
exports.default = void 0;
|
|
13
|
-
var _sessions = _interopRequireDefault(require("./sessions"));
|
|
14
13
|
var _businesses = _interopRequireDefault(require("./businesses"));
|
|
15
14
|
var _events = _interopRequireDefault(require("./events"));
|
|
16
15
|
var _forms = _interopRequireDefault(require("./forms"));
|
|
@@ -26,11 +25,6 @@ var API = /*#__PURE__*/function () {
|
|
|
26
25
|
_classCallCheck(this, API);
|
|
27
26
|
}
|
|
28
27
|
_createClass(API, null, [{
|
|
29
|
-
key: "sessions",
|
|
30
|
-
value: function sessions(businessId) {
|
|
31
|
-
return new _sessions.default(businessId);
|
|
32
|
-
}
|
|
33
|
-
}, {
|
|
34
28
|
key: "businesses",
|
|
35
29
|
get: function get() {
|
|
36
30
|
return _businesses.default;
|
package/lib/api/response.js
CHANGED
|
@@ -15,6 +15,13 @@ function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototy
|
|
|
15
15
|
var id = 0;
|
|
16
16
|
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
|
17
17
|
var _success = /*#__PURE__*/_classPrivateFieldLooseKey("success");
|
|
18
|
+
/**
|
|
19
|
+
* Response class
|
|
20
|
+
* @class
|
|
21
|
+
* @classdesc Represents a response from the API
|
|
22
|
+
* @property {Boolean} succeeded
|
|
23
|
+
* @property {Object} data
|
|
24
|
+
*/
|
|
18
25
|
var Response = /*#__PURE__*/function () {
|
|
19
26
|
function Response(success, response) {
|
|
20
27
|
_classCallCheck(this, Response);
|
|
@@ -25,11 +32,21 @@ var Response = /*#__PURE__*/function () {
|
|
|
25
32
|
this.response = response;
|
|
26
33
|
_classPrivateFieldLooseBase(this, _success)[_success] = success;
|
|
27
34
|
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Get the response data
|
|
38
|
+
* @returns {*}
|
|
39
|
+
*/
|
|
28
40
|
_createClass(Response, [{
|
|
29
41
|
key: "data",
|
|
30
42
|
get: function get() {
|
|
31
43
|
return this.response;
|
|
32
44
|
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Parse the response as JSON
|
|
48
|
+
* @returns {Promise<*>}
|
|
49
|
+
*/
|
|
33
50
|
}, {
|
|
34
51
|
key: "json",
|
|
35
52
|
value: function () {
|
|
@@ -41,11 +58,20 @@ var Response = /*#__PURE__*/function () {
|
|
|
41
58
|
}
|
|
42
59
|
return json;
|
|
43
60
|
}()
|
|
61
|
+
/**
|
|
62
|
+
* Has the request failed?
|
|
63
|
+
* @returns {boolean}
|
|
64
|
+
*/
|
|
44
65
|
}, {
|
|
45
66
|
key: "failed",
|
|
46
67
|
get: function get() {
|
|
47
68
|
return _classPrivateFieldLooseBase(this, _success)[_success] === false;
|
|
48
69
|
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Has the request succeeded?
|
|
73
|
+
* @returns {boolean}
|
|
74
|
+
*/
|
|
49
75
|
}, {
|
|
50
76
|
key: "succeeded",
|
|
51
77
|
get: function get() {
|
|
@@ -79,9 +79,6 @@ var _default = /*#__PURE__*/function (_Controller) {
|
|
|
79
79
|
}
|
|
80
80
|
this.buttonTarget.style.display = 'none';
|
|
81
81
|
this.element.querySelectorAll('input').forEach(input => input.disabled = true);
|
|
82
|
-
if (!data.identified) {
|
|
83
|
-
_hellotext.default.setSession(data.session);
|
|
84
|
-
}
|
|
85
82
|
this.completed();
|
|
86
83
|
});
|
|
87
84
|
function submit(_x) {
|
package/lib/hellotext.js
CHANGED
|
@@ -5,10 +5,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _core = require("./core");
|
|
8
|
-
var _api =
|
|
8
|
+
var _api = _interopRequireWildcard(require("./api"));
|
|
9
9
|
var _models = require("./models");
|
|
10
10
|
var _errors = require("./errors");
|
|
11
|
-
function
|
|
11
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
12
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
12
13
|
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; }
|
|
13
14
|
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; }
|
|
14
15
|
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; }
|
|
@@ -24,7 +25,6 @@ var id = 0;
|
|
|
24
25
|
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
|
25
26
|
var _session = /*#__PURE__*/_classPrivateFieldLooseKey("session");
|
|
26
27
|
var _query = /*#__PURE__*/_classPrivateFieldLooseKey("query");
|
|
27
|
-
var _mintAnonymousSession = /*#__PURE__*/_classPrivateFieldLooseKey("mintAnonymousSession");
|
|
28
28
|
var Hellotext = /*#__PURE__*/function () {
|
|
29
29
|
function Hellotext() {
|
|
30
30
|
_classCallCheck(this, Hellotext);
|
|
@@ -39,24 +39,10 @@ var Hellotext = /*#__PURE__*/function () {
|
|
|
39
39
|
*/
|
|
40
40
|
function initialize(business, config) {
|
|
41
41
|
_core.Configuration.assign(config);
|
|
42
|
+
_models.Session.initialize();
|
|
42
43
|
_classPrivateFieldLooseBase(this, _query)[_query] = new _models.Query();
|
|
43
44
|
this.business = new _models.Business(business);
|
|
44
45
|
this.forms = new _models.FormCollection();
|
|
45
|
-
if (_classPrivateFieldLooseBase(this, _query)[_query].inPreviewMode) return;
|
|
46
|
-
if (_core.Configuration.session) {
|
|
47
|
-
_classPrivateFieldLooseBase(this, _session)[_session] = _core.Configuration.session;
|
|
48
|
-
} else if (_classPrivateFieldLooseBase(this, _query)[_query].session) {
|
|
49
|
-
_classPrivateFieldLooseBase(this, _session)[_session] = _models.Cookies.set('hello_session', _classPrivateFieldLooseBase(this, _query)[_query].session);
|
|
50
|
-
} else if (_core.Configuration.autoGenerateSession) {
|
|
51
|
-
_classPrivateFieldLooseBase(this, _mintAnonymousSession)[_mintAnonymousSession]().then(response => {
|
|
52
|
-
_classPrivateFieldLooseBase(this, _session)[_session] = _models.Cookies.set('hello_session', response.id);
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}, {
|
|
57
|
-
key: "setSession",
|
|
58
|
-
value: function setSession(value) {
|
|
59
|
-
_classPrivateFieldLooseBase(this, _session)[_session] = _models.Cookies.set('hello_session', value);
|
|
60
46
|
}
|
|
61
47
|
|
|
62
48
|
/**
|
|
@@ -121,10 +107,7 @@ var Hellotext = /*#__PURE__*/function () {
|
|
|
121
107
|
}, {
|
|
122
108
|
key: "session",
|
|
123
109
|
get: function get() {
|
|
124
|
-
|
|
125
|
-
throw new _errors.NotInitializedError();
|
|
126
|
-
}
|
|
127
|
-
return _classPrivateFieldLooseBase(this, _session)[_session];
|
|
110
|
+
return _models.Session.session;
|
|
128
111
|
}
|
|
129
112
|
|
|
130
113
|
/**
|
|
@@ -134,7 +117,7 @@ var Hellotext = /*#__PURE__*/function () {
|
|
|
134
117
|
}, {
|
|
135
118
|
key: "isInitialized",
|
|
136
119
|
get: function get() {
|
|
137
|
-
return
|
|
120
|
+
return _models.Session.session !== undefined;
|
|
138
121
|
}
|
|
139
122
|
|
|
140
123
|
// private
|
|
@@ -158,21 +141,6 @@ var Hellotext = /*#__PURE__*/function () {
|
|
|
158
141
|
}]);
|
|
159
142
|
return Hellotext;
|
|
160
143
|
}();
|
|
161
|
-
function _mintAnonymousSession2() {
|
|
162
|
-
return _mintAnonymousSession3.apply(this, arguments);
|
|
163
|
-
}
|
|
164
|
-
function _mintAnonymousSession3() {
|
|
165
|
-
_mintAnonymousSession3 = _asyncToGenerator(function* () {
|
|
166
|
-
if (this.notInitialized) {
|
|
167
|
-
throw new _errors.NotInitializedError();
|
|
168
|
-
}
|
|
169
|
-
return _api.default.sessions(this.business.id).create();
|
|
170
|
-
});
|
|
171
|
-
return _mintAnonymousSession3.apply(this, arguments);
|
|
172
|
-
}
|
|
173
|
-
Object.defineProperty(Hellotext, _mintAnonymousSession, {
|
|
174
|
-
value: _mintAnonymousSession2
|
|
175
|
-
});
|
|
176
144
|
Object.defineProperty(Hellotext, _session, {
|
|
177
145
|
writable: true,
|
|
178
146
|
value: void 0
|
package/lib/models/form.js
CHANGED
|
@@ -40,7 +40,11 @@ var Form = /*#__PURE__*/function () {
|
|
|
40
40
|
ifCompleted = true
|
|
41
41
|
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
42
42
|
if (ifCompleted && this.hasBeenCompleted) {
|
|
43
|
-
|
|
43
|
+
var _this$element;
|
|
44
|
+
(_this$element = this.element) === null || _this$element === void 0 ? void 0 : _this$element.remove();
|
|
45
|
+
return _hellotext.default.eventEmitter.dispatch('form:completed', _objectSpread({
|
|
46
|
+
id: this.id
|
|
47
|
+
}, JSON.parse(localStorage.getItem("hello-form-".concat(this.id)))));
|
|
44
48
|
}
|
|
45
49
|
var firstStep = this.data.steps[0];
|
|
46
50
|
this.buildHeader(firstStep.header);
|
|
@@ -112,13 +116,14 @@ var Form = /*#__PURE__*/function () {
|
|
|
112
116
|
}, {
|
|
113
117
|
key: "markAsCompleted",
|
|
114
118
|
value: function markAsCompleted(data) {
|
|
115
|
-
|
|
119
|
+
var payload = {
|
|
116
120
|
state: 'completed',
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
121
|
+
id: this.id,
|
|
122
|
+
data,
|
|
123
|
+
completedAt: new Date().getTime()
|
|
124
|
+
};
|
|
125
|
+
localStorage.setItem("hello-form-".concat(this.id), JSON.stringify(payload));
|
|
126
|
+
_hellotext.default.eventEmitter.dispatch('form:completed', payload);
|
|
122
127
|
}
|
|
123
128
|
}, {
|
|
124
129
|
key: "hasBeenCompleted",
|
package/lib/models/index.js
CHANGED
|
@@ -33,8 +33,15 @@ Object.defineProperty(exports, "Query", {
|
|
|
33
33
|
return _query.Query;
|
|
34
34
|
}
|
|
35
35
|
});
|
|
36
|
+
Object.defineProperty(exports, "Session", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
get: function get() {
|
|
39
|
+
return _session.Session;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
36
42
|
var _business = require("./business");
|
|
37
43
|
var _form = require("./form");
|
|
38
44
|
var _query = require("./query");
|
|
39
45
|
var _cookies = require("./cookies");
|
|
40
|
-
var _form_collection = require("./form_collection");
|
|
46
|
+
var _form_collection = require("./form_collection");
|
|
47
|
+
var _session = require("./session");
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Session = void 0;
|
|
7
|
+
var _core = require("../core");
|
|
8
|
+
var _index = require("./index");
|
|
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
|
+
function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
|
|
15
|
+
var id = 0;
|
|
16
|
+
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
|
17
|
+
var _session = /*#__PURE__*/_classPrivateFieldLooseKey("session");
|
|
18
|
+
var _query = /*#__PURE__*/_classPrivateFieldLooseKey("query");
|
|
19
|
+
var Session = /*#__PURE__*/function () {
|
|
20
|
+
function Session() {
|
|
21
|
+
_classCallCheck(this, Session);
|
|
22
|
+
}
|
|
23
|
+
_createClass(Session, null, [{
|
|
24
|
+
key: "session",
|
|
25
|
+
get: function get() {
|
|
26
|
+
return _classPrivateFieldLooseBase(this, _session)[_session];
|
|
27
|
+
},
|
|
28
|
+
set: function set(value) {
|
|
29
|
+
_classPrivateFieldLooseBase(this, _session)[_session] = value;
|
|
30
|
+
_index.Cookies.set('hello_session', value);
|
|
31
|
+
}
|
|
32
|
+
}, {
|
|
33
|
+
key: "initialize",
|
|
34
|
+
value: function initialize() {
|
|
35
|
+
_classPrivateFieldLooseBase(this, _query)[_query] = new _index.Query();
|
|
36
|
+
if (_core.Configuration.session) {
|
|
37
|
+
this.session = _core.Configuration.session;
|
|
38
|
+
} else if (_classPrivateFieldLooseBase(this, _query)[_query].session) {
|
|
39
|
+
this.session = _classPrivateFieldLooseBase(this, _query)[_query].session;
|
|
40
|
+
} else if (_core.Configuration.autoGenerateSession) {
|
|
41
|
+
this.session = crypto.randomUUID();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}]);
|
|
45
|
+
return Session;
|
|
46
|
+
}();
|
|
47
|
+
exports.Session = Session;
|
|
48
|
+
Object.defineProperty(Session, _session, {
|
|
49
|
+
writable: true,
|
|
50
|
+
value: void 0
|
|
51
|
+
});
|
|
52
|
+
Object.defineProperty(Session, _query, {
|
|
53
|
+
writable: true,
|
|
54
|
+
value: void 0
|
|
55
|
+
});
|
package/package.json
CHANGED
package/src/api/index.js
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
|
-
import SessionsAPI from './sessions'
|
|
2
1
|
import BusinessesAPI from './businesses'
|
|
3
2
|
import EventsAPI from './events'
|
|
4
3
|
import FormsAPI from './forms'
|
|
5
4
|
|
|
6
5
|
export default class API {
|
|
7
|
-
static sessions(businessId) {
|
|
8
|
-
return new SessionsAPI(businessId)
|
|
9
|
-
}
|
|
10
|
-
|
|
11
6
|
static get businesses() {
|
|
12
7
|
return BusinessesAPI
|
|
13
8
|
}
|
package/src/api/response.js
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Response class
|
|
3
|
+
* @class
|
|
4
|
+
* @classdesc Represents a response from the API
|
|
5
|
+
* @property {Boolean} succeeded
|
|
6
|
+
* @property {Object} data
|
|
7
|
+
*/
|
|
8
|
+
|
|
1
9
|
class Response {
|
|
2
10
|
#success
|
|
3
11
|
|
|
@@ -6,18 +14,34 @@ class Response {
|
|
|
6
14
|
this.#success = success
|
|
7
15
|
}
|
|
8
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Get the response data
|
|
19
|
+
* @returns {*}
|
|
20
|
+
*/
|
|
9
21
|
get data() {
|
|
10
22
|
return this.response
|
|
11
23
|
}
|
|
12
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Parse the response as JSON
|
|
27
|
+
* @returns {Promise<*>}
|
|
28
|
+
*/
|
|
13
29
|
async json() {
|
|
14
30
|
return await this.response.json()
|
|
15
31
|
}
|
|
16
32
|
|
|
33
|
+
/**
|
|
34
|
+
* Has the request failed?
|
|
35
|
+
* @returns {boolean}
|
|
36
|
+
*/
|
|
17
37
|
get failed() {
|
|
18
38
|
return this.#success === false
|
|
19
39
|
}
|
|
20
40
|
|
|
41
|
+
/**
|
|
42
|
+
* Has the request succeeded?
|
|
43
|
+
* @returns {boolean}
|
|
44
|
+
*/
|
|
21
45
|
get succeeded() {
|
|
22
46
|
return this.#success === true
|
|
23
47
|
}
|
|
@@ -66,10 +66,6 @@ export default class extends Controller {
|
|
|
66
66
|
this.buttonTarget.style.display = 'none'
|
|
67
67
|
this.element.querySelectorAll('input').forEach(input => (input.disabled = true))
|
|
68
68
|
|
|
69
|
-
if (!data.identified) {
|
|
70
|
-
Hellotext.setSession(data.session)
|
|
71
|
-
}
|
|
72
|
-
|
|
73
69
|
this.completed()
|
|
74
70
|
}
|
|
75
71
|
|
package/src/hellotext.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Event, Configuration } from './core'
|
|
2
2
|
|
|
3
|
-
import API from './api'
|
|
4
|
-
import { Business, Query,
|
|
3
|
+
import API, { Response } from './api'
|
|
4
|
+
import { Business, Query, FormCollection, Session } from './models'
|
|
5
5
|
|
|
6
6
|
import { NotInitializedError } from './errors'
|
|
7
7
|
|
|
@@ -21,27 +21,12 @@ class Hellotext {
|
|
|
21
21
|
*/
|
|
22
22
|
static initialize(business, config) {
|
|
23
23
|
Configuration.assign(config)
|
|
24
|
+
Session.initialize()
|
|
24
25
|
|
|
25
26
|
this.#query = new Query()
|
|
26
27
|
|
|
27
28
|
this.business = new Business(business)
|
|
28
29
|
this.forms = new FormCollection()
|
|
29
|
-
|
|
30
|
-
if (this.#query.inPreviewMode) return
|
|
31
|
-
|
|
32
|
-
if(Configuration.session) {
|
|
33
|
-
this.#session = Configuration.session
|
|
34
|
-
} else if (this.#query.session) {
|
|
35
|
-
this.#session = Cookies.set('hello_session', this.#query.session)
|
|
36
|
-
} else if (Configuration.autoGenerateSession) {
|
|
37
|
-
this.#mintAnonymousSession().then(response => {
|
|
38
|
-
this.#session = Cookies.set('hello_session', response.id)
|
|
39
|
-
})
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
static setSession(value) {
|
|
44
|
-
this.#session = Cookies.set('hello_session', value)
|
|
45
30
|
}
|
|
46
31
|
|
|
47
32
|
/**
|
|
@@ -99,11 +84,7 @@ class Hellotext {
|
|
|
99
84
|
* @returns {String}
|
|
100
85
|
*/
|
|
101
86
|
static get session() {
|
|
102
|
-
|
|
103
|
-
throw new NotInitializedError()
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
return this.#session
|
|
87
|
+
return Session.session
|
|
107
88
|
}
|
|
108
89
|
|
|
109
90
|
/**
|
|
@@ -111,7 +92,7 @@ class Hellotext {
|
|
|
111
92
|
* @returns {boolean}
|
|
112
93
|
*/
|
|
113
94
|
static get isInitialized() {
|
|
114
|
-
return
|
|
95
|
+
return Session.session !== undefined
|
|
115
96
|
}
|
|
116
97
|
|
|
117
98
|
// private
|
|
@@ -120,14 +101,6 @@ class Hellotext {
|
|
|
120
101
|
return this.business.id === undefined
|
|
121
102
|
}
|
|
122
103
|
|
|
123
|
-
static async #mintAnonymousSession() {
|
|
124
|
-
if (this.notInitialized) {
|
|
125
|
-
throw new NotInitializedError()
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
return API.sessions(this.business.id).create()
|
|
129
|
-
}
|
|
130
|
-
|
|
131
104
|
static get headers() {
|
|
132
105
|
if (this.notInitialized) {
|
|
133
106
|
throw new NotInitializedError()
|
package/src/models/form.js
CHANGED
|
@@ -14,7 +14,12 @@ class Form {
|
|
|
14
14
|
|
|
15
15
|
async mount({ ifCompleted = true } = {}) {
|
|
16
16
|
if(ifCompleted && this.hasBeenCompleted) {
|
|
17
|
-
|
|
17
|
+
this.element?.remove()
|
|
18
|
+
|
|
19
|
+
return Hellotext.eventEmitter.dispatch('form:completed', {
|
|
20
|
+
id: this.id,
|
|
21
|
+
...JSON.parse(localStorage.getItem(`hello-form-${this.id}`)),
|
|
22
|
+
})
|
|
18
23
|
}
|
|
19
24
|
|
|
20
25
|
const firstStep = this.data.steps[0]
|
|
@@ -91,9 +96,15 @@ class Form {
|
|
|
91
96
|
}
|
|
92
97
|
|
|
93
98
|
markAsCompleted(data) {
|
|
94
|
-
|
|
99
|
+
const payload = {
|
|
100
|
+
state: 'completed',
|
|
101
|
+
id: this.id,
|
|
102
|
+
data,
|
|
103
|
+
completedAt: new Date().getTime(),
|
|
104
|
+
}
|
|
95
105
|
|
|
96
|
-
|
|
106
|
+
localStorage.setItem(`hello-form-${this.id}`, JSON.stringify(payload))
|
|
107
|
+
Hellotext.eventEmitter.dispatch('form:completed', payload)
|
|
97
108
|
}
|
|
98
109
|
|
|
99
110
|
get hasBeenCompleted() {
|
package/src/models/index.js
CHANGED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Configuration } from '../core';
|
|
2
|
+
import { Cookies, Query } from './index'
|
|
3
|
+
|
|
4
|
+
class Session {
|
|
5
|
+
static #session
|
|
6
|
+
static #query
|
|
7
|
+
|
|
8
|
+
static get session() {
|
|
9
|
+
return this.#session
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
static set session(value) {
|
|
13
|
+
this.#session = value
|
|
14
|
+
Cookies.set('hello_session', value)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
static initialize() {
|
|
18
|
+
this.#query = new Query()
|
|
19
|
+
|
|
20
|
+
if(Configuration.session) {
|
|
21
|
+
this.session = Configuration.session
|
|
22
|
+
} else if (this.#query.session) {
|
|
23
|
+
this.session = this.#query.session
|
|
24
|
+
} else if (Configuration.autoGenerateSession) {
|
|
25
|
+
this.session = crypto.randomUUID()
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { Session }
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import API from '../../src/api/sessions'
|
|
2
|
-
|
|
3
|
-
beforeEach(() => {
|
|
4
|
-
global.fetch = jest.fn().mockResolvedValue({ json: jest.fn().mockResolvedValue({ id: 1 }) })
|
|
5
|
-
})
|
|
6
|
-
|
|
7
|
-
describe('create', () => {
|
|
8
|
-
it('creates a session object', async () => {
|
|
9
|
-
const response = await new API('M01az53K').create()
|
|
10
|
-
expect(response.id).toEqual(1)
|
|
11
|
-
})
|
|
12
|
-
})
|
package/lib/api/sessions.js
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
var _core = require("../core");
|
|
8
|
-
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); } }
|
|
9
|
-
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
|
-
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 SessionsAPI = /*#__PURE__*/function () {
|
|
16
|
-
function SessionsAPI(businessId) {
|
|
17
|
-
_classCallCheck(this, SessionsAPI);
|
|
18
|
-
this.businessId = businessId;
|
|
19
|
-
}
|
|
20
|
-
_createClass(SessionsAPI, [{
|
|
21
|
-
key: "create",
|
|
22
|
-
value: function () {
|
|
23
|
-
var _create = _asyncToGenerator(function* () {
|
|
24
|
-
var response = yield fetch(SessionsAPI.endpoint, {
|
|
25
|
-
method: 'POST',
|
|
26
|
-
headers: {
|
|
27
|
-
Authorization: "Bearer ".concat(this.businessId),
|
|
28
|
-
Accept: 'application/json'
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
return response.json();
|
|
32
|
-
});
|
|
33
|
-
function create() {
|
|
34
|
-
return _create.apply(this, arguments);
|
|
35
|
-
}
|
|
36
|
-
return create;
|
|
37
|
-
}()
|
|
38
|
-
}], [{
|
|
39
|
-
key: "endpoint",
|
|
40
|
-
get: function get() {
|
|
41
|
-
return _core.Configuration.endpoint('track/sessions');
|
|
42
|
-
}
|
|
43
|
-
}]);
|
|
44
|
-
return SessionsAPI;
|
|
45
|
-
}();
|
|
46
|
-
exports.default = SessionsAPI;
|
package/src/api/sessions.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { Configuration } from '../core'
|
|
2
|
-
|
|
3
|
-
export default class SessionsAPI {
|
|
4
|
-
static get endpoint() {
|
|
5
|
-
return Configuration.endpoint('track/sessions')
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
constructor(businessId) {
|
|
9
|
-
this.businessId = businessId
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
async create() {
|
|
13
|
-
const response = await fetch(SessionsAPI.endpoint, {
|
|
14
|
-
method: 'POST',
|
|
15
|
-
headers: {
|
|
16
|
-
Authorization: `Bearer ${this.businessId}`,
|
|
17
|
-
Accept: 'application/json',
|
|
18
|
-
},
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
return response.json()
|
|
22
|
-
}
|
|
23
|
-
}
|