kitchen-simulator 1.1.1-test.77 → 1.1.1-test.78

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,1395 +0,0 @@
1
- import _extends from "@babel/runtime/helpers/esm/extends";
2
- import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
3
- import _typeof from "@babel/runtime/helpers/esm/typeof";
4
- import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
5
- import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
6
- import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
7
- import _createClass from "@babel/runtime/helpers/esm/createClass";
8
- import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn";
9
- import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf";
10
- import _inherits from "@babel/runtime/helpers/esm/inherits";
11
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
12
- var _excluded = ["width", "height", "state", "stateExtractor"];
13
- import _regeneratorRuntime from "@babel/runtime/regenerator";
14
- function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
15
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
16
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
17
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
18
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
19
- function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
20
- function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
21
- import axios from 'axios';
22
- import { convert } from "./utils/convert-units-lite";
23
- import PropTypes from 'prop-types';
24
- import React, { Component } from 'react';
25
- import { hotjar } from 'react-hotjar';
26
- import { connect } from 'react-redux';
27
- import { bindActionCreators } from 'redux';
28
- import SnackBar from "./components/atoms/Snackbar";
29
- import AutosavePromptPopup from "./components/toolbar/popup/autosaveprompt";
30
- import DownloadSummaryPopup from "./components/toolbar/popup/downloadsummary";
31
- import NewProjectPopup from "./components/toolbar/popup/newproject";
32
- import SaveDesignPopup from "./components/toolbar/popup/savedesign";
33
- import SubmitForQuotePopup from "./components/toolbar/popup/submitforquote";
34
- import * as constants from "./constants";
35
- import { API_SERVER_URL, CLIENTS_NAME, DEFAULT_FONT_FAMILY, LOCAL_STORAGE_CART_ACTION, LOCAL_STORAGE_ORIGINAL_TOKEN, LOCAL_STORAGE_TOKEN_NAME, LOCAL_STORAGE_TOKEN_VALUE, MODE, PRIMARY_GREEN_COLOR } from "./constants";
36
- import _ from 'lodash';
37
- import { base64Decode, getPath } from "./utils/helper";
38
- import { isEmpty } from "./components/viewer2d/utils";
39
- import actions from "./actions/export";
40
- import Catalog from "./catalog/catalog";
41
- import { Project } from "./class/export";
42
- import { Content, FooterBarComponents, HeaderComponents, MyProjectsComonents, SignComponents, ToolbarComponents, WizardStepComponents } from "./components/export";
43
- import jwtService from "./components/login/jwtService";
44
- import SubmitPromptPopup from "./components/toolbar/popup/submitprompt/index";
45
- import "./styles/export";
46
- import Translator from "./translator/translator";
47
- import { objectsMap } from "./utils/objects-utils";
48
- import { VERSION } from "./version";
49
- import ls from 'localstorage-slim';
50
- import { GA } from "./analytics/ga4";
51
- import { summarizeItems } from "./utils/summarizeCart";
52
- import { PH } from "./analytics/posthog";
53
- var Header = HeaderComponents.Header;
54
- var Toolbar = ToolbarComponents.Toolbar;
55
- var FooterBar = FooterBarComponents.FooterBar;
56
- var WizardStep = WizardStepComponents.WizardStep;
57
- var Sign = SignComponents.Sign;
58
- var MyProjects = MyProjectsComonents.MyProjects;
59
- var toolbarW = 0;
60
- var wrapperStyle = {
61
- display: 'flex',
62
- flexFlow: 'row nowrap'
63
- };
64
- var saveAlert = '';
65
- var KitchenConfigurator = /*#__PURE__*/function (_Component) {
66
- function KitchenConfigurator(props) {
67
- var _this$props$match, _this$props$match2, _this$props$match3, _utmRequestData2, _utmRequestData3, _utmRequestData4, _utmRequestData5, _utmRequestData6, _utmRequestData7, _utmRequestData8, _utmRequestData9, _utmRequestData0;
68
- var _this;
69
- _classCallCheck(this, KitchenConfigurator);
70
- _this = _callSuper(this, KitchenConfigurator, [props]);
71
- _defineProperty(_this, "debouncedSetIsSaved", _.debounce(function () {
72
- return _this.setState({
73
- isSaved: false
74
- });
75
- }, 200));
76
- _defineProperty(_this, "handleBeforeUnload", function (e) {
77
- var areas = _this.props.stateExtractor(_this.props.state).getIn(['scene', 'layers', _this.props.stateExtractor(_this.props.state).scene.selectedLayer, 'areas']);
78
- if (!_this.state.isSaved && areas.size > 0) {
79
- setTimeout(function () {
80
- _this.setState({
81
- savePromptVisible: true,
82
- isLeaving: true
83
- });
84
- }, 500);
85
- _this.saveProjectToStorage();
86
-
87
- // This line is required to trigger the browser confirmation dialog
88
- e.preventDefault();
89
- e.returnValue = '';
90
- return '';
91
- }
92
- });
93
- var utmDetailParams = new URLSearchParams(_this.props.location && _this.props.location.search);
94
- var utmStrEncoded = utmDetailParams.get('details');
95
- var utmRequestData = null;
96
- if (utmStrEncoded) {
97
- try {
98
- var _utmRequestData;
99
- utmRequestData = JSON.parse(base64Decode(utmStrEncoded));
100
- utmRequestData = JSON.parse((_utmRequestData = utmRequestData) === null || _utmRequestData === void 0 ? void 0 : _utmRequestData.utm);
101
- } catch (e) {
102
- console.error('Cannot parse utm parameter: ', error);
103
- utmRequestData = null;
104
- }
105
- }
106
- _this.state = {
107
- savePopupVisible: false,
108
- quotePopupVisible: false,
109
- assistPopupVisible: false,
110
- newProjectPopupVisible: false,
111
- isModalVisible: false,
112
- submitPromptVisible: false,
113
- stateSubmitType: constants.SUBMIT_REQUEST_ASSIST,
114
- savePromptVisible: false,
115
- isShowProperty: true,
116
- submitTosave: false,
117
- signOpen: false,
118
- myProjectsOpen: false,
119
- myProjectsToLogin: false,
120
- downloadPopupVisible: false,
121
- toolbar: '',
122
- reviewQuotePopupOpened: false,
123
- floorOpened: false,
124
- cabinetOpened: false,
125
- applianceOpened: false,
126
- finishingOpened: false,
127
- doorStyleOpen: false,
128
- wizardStepOpend: ((_this$props$match = _this.props.match) === null || _this$props$match === void 0 || (_this$props$match = _this$props$match.params) === null || _this$props$match === void 0 ? void 0 : _this$props$match.pid) === undefined || ((_this$props$match2 = _this.props.match) === null || _this$props$match2 === void 0 || (_this$props$match2 = _this$props$match2.params) === null || _this$props$match2 === void 0 ? void 0 : _this$props$match2.pid) === 'null' ? true : false,
129
- tutorialMouseEventsAdd: false,
130
- replaceCabinetFlag: false,
131
- isSnackBarOpen: false,
132
- isSnackBar1Open: false,
133
- redirectURL: '',
134
- snackBarMessage: '',
135
- isSaved: !!((_this$props$match3 = _this.props.match) !== null && _this$props$match3 !== void 0 && (_this$props$match3 = _this$props$match3.params) !== null && _this$props$match3 !== void 0 && _this$props$match3.token),
136
- isLeaving: false
137
- };
138
- _this.utm = {
139
- utm_source: ((_utmRequestData2 = utmRequestData) === null || _utmRequestData2 === void 0 ? void 0 : _utmRequestData2.source) || 'source',
140
- utm_medium: ((_utmRequestData3 = utmRequestData) === null || _utmRequestData3 === void 0 ? void 0 : _utmRequestData3.medium) || 'medium',
141
- utm_campaign: ((_utmRequestData4 = utmRequestData) === null || _utmRequestData4 === void 0 ? void 0 : _utmRequestData4.campaign) || 'campaign',
142
- utm_term: ((_utmRequestData5 = utmRequestData) === null || _utmRequestData5 === void 0 ? void 0 : _utmRequestData5.term) || 'term',
143
- utm_content: ((_utmRequestData6 = utmRequestData) === null || _utmRequestData6 === void 0 ? void 0 : _utmRequestData6.content) || 'content',
144
- gclid: ((_utmRequestData7 = utmRequestData) === null || _utmRequestData7 === void 0 ? void 0 : _utmRequestData7.gclid) || 'gclid',
145
- msclkid: ((_utmRequestData8 = utmRequestData) === null || _utmRequestData8 === void 0 ? void 0 : _utmRequestData8.msclkid) || 'msclkid',
146
- fbclid: ((_utmRequestData9 = utmRequestData) === null || _utmRequestData9 === void 0 ? void 0 : _utmRequestData9.fbclid) || 'fbclid',
147
- ttclid: ((_utmRequestData0 = utmRequestData) === null || _utmRequestData0 === void 0 ? void 0 : _utmRequestData0.ttclid) || 'ttclid'
148
- };
149
- _this.jwtCheck();
150
- _this.openFloor = _this.openFloor.bind(_this);
151
- _this.openCabinet = _this.openCabinet.bind(_this);
152
- _this.openFinishing = _this.openFinishing.bind(_this);
153
- _this.openAppliance = _this.openAppliance.bind(_this);
154
- _this.toggleDoorStyle = _this.toggleDoorStyle.bind(_this);
155
- _this.onReviewQuoteClicked = _this.onReviewQuoteClicked.bind(_this);
156
- _this.closeFloorTB = _this.closeFloorTB.bind(_this);
157
- _this.closeCabinetTB = _this.closeCabinetTB.bind(_this);
158
- _this.closeFinishingTB = _this.closeFinishingTB.bind(_this);
159
- _this.closeApplianceTB = _this.closeApplianceTB.bind(_this);
160
- _this.setToolbar = _this.setToolbar.bind(_this);
161
- _this.replaceCabinet = _this.replaceCabinet.bind(_this);
162
- _this.setSubmitToSave = _this.setSubmitToSave.bind(_this);
163
- _this.setSignOpen = _this.setSignOpen.bind(_this);
164
- _this.setMyProjectsOpen = _this.setMyProjectsOpen.bind(_this);
165
- _this.setMyProjectsToLogin = _this.setMyProjectsToLogin.bind(_this);
166
- _this.setDownloadPopupVisible = _this.setDownloadPopupVisible.bind(_this);
167
- _this.neverShowInput = /*#__PURE__*/React.createRef(null);
168
- _this.setShowProperty = _this.setShowProperty.bind(_this);
169
- return _this;
170
- }
171
- _inherits(KitchenConfigurator, _Component);
172
- return _createClass(KitchenConfigurator, [{
173
- key: "setToolbar",
174
- value: function setToolbar(toolBarKey) {
175
- this.setState({
176
- toolbar: toolBarKey
177
- });
178
- }
179
- }, {
180
- key: "setShowProperty",
181
- value: function setShowProperty(value) {
182
- this.setState({
183
- isShowProperty: value
184
- });
185
- }
186
- }, {
187
- key: "setMyProjectsOpen",
188
- value: function setMyProjectsOpen(value) {
189
- this.setState({
190
- myProjectsOpen: value
191
- });
192
- this.setState({
193
- signOpen: false
194
- });
195
- this.setState({
196
- wizardStepOpend: false
197
- });
198
- }
199
- }, {
200
- key: "setMyProjectsToLogin",
201
- value: function setMyProjectsToLogin(value) {
202
- this.setState({
203
- myProjectsToLogin: value
204
- });
205
- }
206
- }, {
207
- key: "setDownloadPopupVisible",
208
- value: function setDownloadPopupVisible(value) {
209
- this.setState({
210
- reviewQuotePopupOpened: false
211
- });
212
- this.setState({
213
- savePopupVisible: false
214
- });
215
- this.setState({
216
- quotePopupVisible: false
217
- });
218
- this.setState({
219
- submitTosave: false
220
- });
221
- this.setState({
222
- assistPopupVisible: false
223
- });
224
- this.setState({
225
- newProjectPopupVisible: false
226
- });
227
- this.setState({
228
- downloadPopupVisible: value
229
- });
230
- }
231
- }, {
232
- key: "setSubmitToSave",
233
- value: function setSubmitToSave(value) {
234
- this.setState({
235
- submitTosave: value
236
- });
237
- }
238
- }, {
239
- key: "setSignOpen",
240
- value: function setSignOpen(value) {
241
- this.setState({
242
- wizardStepOpend: false
243
- });
244
- this.setState({
245
- myProjectsOpen: false
246
- });
247
- this.setState({
248
- signOpen: value
249
- });
250
- }
251
- }, {
252
- key: "openFloor",
253
- value: function openFloor() {
254
- this.setState({
255
- floorOpened: true
256
- });
257
- document.getElementById('make_floorplan_inactive').parentElement.parentElement.style.zIndex = 999;
258
- }
259
- }, {
260
- key: "openCabinet",
261
- value: function openCabinet() {
262
- this.setState({
263
- cabinetOpened: true
264
- });
265
- document.getElementById('add_cabinets_inactive').parentElement.parentElement.style.zIndex = 999;
266
- }
267
- }, {
268
- key: "toggleDoorStyle",
269
- value: function toggleDoorStyle(visible) {
270
- this.setState({
271
- doorStyleOpen: visible
272
- });
273
- document.getElementById('select_doorstyle_inactive').parentElement.parentElement.style.zIndex = visible ? 999 : 6;
274
- }
275
- }, {
276
- key: "replaceCabinet",
277
- value: function replaceCabinet(value) {
278
- this.setState({
279
- replaceCabinetFlag: value
280
- });
281
- }
282
- }, {
283
- key: "openAppliance",
284
- value: function openAppliance() {
285
- this.setState({
286
- applianceOpened: true
287
- });
288
- document.getElementById('add_appliances_inactive').parentElement.parentElement.style.zIndex = 999;
289
- }
290
- }, {
291
- key: "openFinishing",
292
- value: function openFinishing() {
293
- this.setState({
294
- finishingOpened: true
295
- });
296
- document.getElementById('finishing_touches_inactive').parentElement.parentElement.style.zIndex = 999;
297
- }
298
- }, {
299
- key: "onReviewQuoteClicked",
300
- value: function onReviewQuoteClicked(visible) {
301
- this.setState({
302
- reviewQuotePopupOpened: visible
303
- });
304
- document.getElementById('review_quote_inactive').parentElement.parentElement.style.zIndex = visible ? 999 : 6;
305
- }
306
- }, {
307
- key: "closeFloorTB",
308
- value: function closeFloorTB() {
309
- this.setState({
310
- floorOpened: false
311
- });
312
- document.getElementById('make_floorplan_inactive') && (document.getElementById('make_floorplan_inactive').parentElement.parentElement.style.zIndex = 6);
313
- }
314
- }, {
315
- key: "closeCabinetTB",
316
- value: function closeCabinetTB() {
317
- this.setState({
318
- cabinetOpened: false
319
- });
320
- document.getElementById('add_cabinets_inactive').parentElement.parentElement.style.zIndex = 6;
321
- }
322
- }, {
323
- key: "closeFinishingTB",
324
- value: function closeFinishingTB() {
325
- this.setState({
326
- finishingOpened: false
327
- });
328
- document.getElementById('finishing_touches_inactive').parentElement.parentElement.style.zIndex = 6;
329
- }
330
- }, {
331
- key: "closeApplianceTB",
332
- value: function closeApplianceTB() {
333
- this.setState({
334
- applianceOpened: false
335
- });
336
- document.getElementById('add_appliances_inactive').parentElement.parentElement.style.zIndex = 6;
337
- }
338
- }, {
339
- key: "closeDoorstyle",
340
- value: function closeDoorstyle() {
341
- this.setState({});
342
- document.getElementById('select_doorstyle_inactive').parentElement.parentElement.style.zIndex = 6;
343
- }
344
- }, {
345
- key: "closeReviewQuote",
346
- value: function closeReviewQuote() {
347
- this.setState({});
348
- document.getElementById('review_quote_inactive').parentElement.parentElement.style.zIndex = 6;
349
- }
350
- }, {
351
- key: "jwtCheck",
352
- value: function jwtCheck() {
353
- var _this2 = this;
354
- jwtService.on('onAutoLogin', function () {
355
- /**
356
- * Sign in and retrieve user data from Api
357
- */
358
- jwtService.signInWithToken().then(function (user) {
359
- //this.props.userActions.setUserData(user);
360
- _this2.props.userActions.login(user.id, user.role, jwtService.getAccessToken(), _this2.utm);
361
- //this.props.showMessage(option)
362
- //this.props.showMessage({message: 'Logged in with token data', variant: 'success'});
363
- //alert('Logged in with token data');
364
- })["catch"](function (error) {
365
- //this.props.showMessage({message: error});
366
- _this2.setState({
367
- isSnackBarOpen: true,
368
- snackBarMessage: error
369
- });
370
- });
371
- });
372
- jwtService.on('onAutoLogout', function (message) {
373
- if (message) {
374
- //this.props.showMessage({message, variant: 'error'});
375
- }
376
- _this2.props.userActions.logout();
377
- });
378
- jwtService.init();
379
- }
380
- }, {
381
- key: "getChildContext",
382
- value: function getChildContext() {
383
- var _this3 = this;
384
- return _objectSpread(_objectSpread({}, objectsMap(actions, function (actionNamespace) {
385
- return _this3.props[actionNamespace];
386
- })), {}, {
387
- translator: this.props.translator,
388
- catalog: this.props.catalog
389
- });
390
- }
391
- }, {
392
- key: "saveProjectToStorage",
393
- value: function saveProjectToStorage() {
394
- var _this$props = this.props,
395
- state = _this$props.state,
396
- stateExtractor = _this$props.stateExtractor;
397
- var extractedState = stateExtractor(state);
398
- var projectData = JSON.stringify(extractedState.get('scene').toJS());
399
- sessionStorage.setItem(window.location.href, projectData);
400
- }
401
- }, {
402
- key: "componentDidUpdate",
403
- value: function componentDidUpdate(prevProps) {
404
- // Only strip properties if the object is not null/undefined
405
- function stripProperty(obj, properties) {
406
- if (!obj) return obj;
407
- var changed = false;
408
- var newObj = _objectSpread({}, obj);
409
- var _iterator = _createForOfIteratorHelper(properties),
410
- _step;
411
- try {
412
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
413
- var prop = _step.value;
414
- if (prop in newObj) {
415
- delete newObj[prop];
416
- changed = true;
417
- }
418
- }
419
- } catch (err) {
420
- _iterator.e(err);
421
- } finally {
422
- _iterator.f();
423
- }
424
- return changed ? newObj : obj;
425
- }
426
- var prevState = this.props.stateExtractor(prevProps.state);
427
- var currState = this.props.stateExtractor(this.props.state);
428
-
429
- // Only convert to JS once per items/areas/lines
430
- var prevLayer = prevState.scene.selectedLayer;
431
- var currLayer = currState.scene.selectedLayer;
432
- var prevItems = prevState.getIn(['scene', 'layers', prevLayer, 'items']).toJS();
433
- var currItems = currState.getIn(['scene', 'layers', currLayer, 'items']).toJS();
434
- var prevItemsProps = Object.values(prevItems).map(function (_ref) {
435
- var x = _ref.x,
436
- y = _ref.y,
437
- rotation = _ref.rotation;
438
- return {
439
- x: x,
440
- y: y,
441
- rotation: rotation
442
- };
443
- });
444
- var currItemsProps = Object.values(currItems).map(function (_ref2) {
445
- var x = _ref2.x,
446
- y = _ref2.y,
447
- rotation = _ref2.rotation;
448
- return {
449
- x: x,
450
- y: y,
451
- rotation: rotation
452
- };
453
- });
454
- var prevDoorStyleRaw = prevState.getIn(['scene', 'layers', prevLayer, 'doorStyle']);
455
- var currDoorStyleRaw = currState.getIn(['scene', 'layers', currLayer, 'doorStyle']);
456
- var prevDoorStyle = stripProperty(prevDoorStyleRaw, ['doorStyles']);
457
- var currDoorStyle = stripProperty(currDoorStyleRaw, ['doorStyles']);
458
- var prevAreasRaw = prevState.getIn(['scene', 'layers', prevLayer, 'areas']).toJS();
459
- var currAreasRaw = currState.getIn(['scene', 'layers', currLayer, 'areas']).toJS();
460
- var prevAreas = stripProperty(Object.values(prevAreasRaw)[0], ['selected']);
461
- var currAreas = stripProperty(Object.values(currAreasRaw)[0], ['selected']);
462
- var prevLinesRaw = prevState.getIn(['scene', 'layers', prevLayer, 'lines']).toJS();
463
- var currLinesRaw = currState.getIn(['scene', 'layers', currLayer, 'lines']).toJS();
464
- var prevLines = stripProperty(Object.values(prevLinesRaw)[0], ['selected']);
465
- var currLines = stripProperty(Object.values(currLinesRaw)[0], ['selected']);
466
- var prevCeilingHeight = prevState.getIn(['scene', 'layers', prevLayer, 'ceilHeight']);
467
- var currCeilingHeight = currState.getIn(['scene', 'layers', currLayer, 'ceilHeight']);
468
- var changed = !_.isEqual(prevItemsProps, currItemsProps) || !_.isEqual(prevDoorStyle, currDoorStyle) || !_.isEqual(prevAreas, currAreas) || !_.isEqual(prevLines, currLines) || prevCeilingHeight !== currCeilingHeight;
469
- if (changed) {
470
- this.debouncedSetIsSaved();
471
- var currentItemsLength = Object.keys(currItems).length;
472
- var prevItemsLength = Object.keys(prevItems).length;
473
- // make sure prompt appears only when adding cabinets
474
- var allowedItemLengths = [5, 10, 15];
475
- if (prevItemsLength === currentItemsLength - 1 && currentItemsLength === 1) {
476
- GA.events.cabinetPlaced();
477
- }
478
- if (allowedItemLengths.includes(currentItemsLength) && prevItemsLength === currentItemsLength - 1 && !this.props.match.params.token) {
479
- this.setState({
480
- savePromptVisible: true
481
- });
482
- }
483
- }
484
- }
485
- }, {
486
- key: "componentDidMount",
487
- value: function componentDidMount() {
488
- var _this4 = this;
489
- var cross = GA.deriveCrossAuthFromUrl(window.location.search);
490
- var entry = GA.deriveProjectEntry();
491
- GA.bootSessionContext({
492
- projectEntry: entry,
493
- crossAuth: cross
494
- });
495
- hotjar.event && hotjar.event("pageview:".concat(getPath()));
496
- window.addEventListener('beforeunload', this.handleBeforeUnload);
497
- window.forRedo = [];
498
- var store = this.context.store;
499
- var _this$props2 = this.props,
500
- projectActions = _this$props2.projectActions,
501
- catalog = _this$props2.catalog,
502
- stateExtractor = _this$props2.stateExtractor,
503
- state = _this$props2.state,
504
- plugins = _this$props2.plugins;
505
- projectActions.initCatalog(catalog);
506
- var match = this.props.match;
507
- if (sessionStorage.getItem(window.location.href)) {
508
- var jsonData = sessionStorage.getItem(window.location.href);
509
- projectActions.loadProject(JSON.parse(jsonData), this.props.categoryData);
510
- sessionStorage.removeItem(window.location.href);
511
- return;
512
- }
513
- if (match && match.params.pid === undefined) {
514
- var newplugins = _toConsumableArray(plugins);
515
- newplugins.forEach(function (newplugin) {
516
- return newplugin(store, stateExtractor);
517
- });
518
- projectActions.newProject();
519
- sessionStorage.setItem('projectTitle', 'Untitled');
520
- projectActions.rename('Untitled');
521
- sessionStorage.removeItem('projectId');
522
- sessionStorage.removeItem('email');
523
- sessionStorage.removeItem('firstName');
524
- sessionStorage.removeItem('lastName');
525
- sessionStorage.removeItem('usedObjects');
526
- return;
527
- }
528
- if (match && match.params.pid !== undefined) {
529
- if (match.params.pid === 'new') {
530
- projectActions.newProject();
531
- sessionStorage.setItem('projectTitle', 'Untitled');
532
- projectActions.rename('Untitled');
533
- sessionStorage.removeItem('projectId');
534
- sessionStorage.removeItem('email');
535
- sessionStorage.removeItem('firstName');
536
- sessionStorage.removeItem('lastName');
537
- sessionStorage.removeItem('usedObjects');
538
- } else {
539
- axios.post("".concat(constants.API_SERVER_URL, "/api/project/loadPidProject"), {
540
- pid: match.params.pid,
541
- visualizerName: sessionStorage.getItem('visualizerName')
542
- }).then(/*#__PURE__*/function () {
543
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(response) {
544
- var projectElement, jsonData, _t;
545
- return _regeneratorRuntime.wrap(function (_context) {
546
- while (1) switch (_context.prev = _context.next) {
547
- case 0:
548
- projectElement = response.data.projectElement;
549
- if (!(projectElement.length === 0)) {
550
- _context.next = 1;
551
- break;
552
- }
553
- return _context.abrupt("return");
554
- case 1:
555
- sessionStorage.setItem('projectTitle', projectElement[0].title);
556
- projectActions.rename(projectElement[0].title);
557
- sessionStorage.setItem('projectId', projectElement[0].id);
558
- sessionStorage.setItem('email', projectElement[0].email);
559
- sessionStorage.setItem('firstName', projectElement[0].firstName);
560
- sessionStorage.setItem('lastName', projectElement[0].lastName);
561
- sessionStorage.setItem('phone', projectElement[0].phone);
562
- if (!projectElement[0].project_data) {
563
- _context.next = 2;
564
- break;
565
- }
566
- jsonData = JSON.parse(projectElement[0].project_data);
567
- _context.next = 5;
568
- break;
569
- case 2:
570
- _context.prev = 2;
571
- _context.next = 3;
572
- return axios.post("".concat(constants.API_SERVER_URL, "/api/project/loadPidData"), {
573
- pid: match.params.pid
574
- }).data.data;
575
- case 3:
576
- jsonData = _context.sent;
577
- _context.next = 5;
578
- break;
579
- case 4:
580
- _context.prev = 4;
581
- _t = _context["catch"](2);
582
- _this4.setState({
583
- isSnackBarOpen: true,
584
- snackBarMessage: _t
585
- });
586
- case 5:
587
- jsonData.isLoadingCabinet = false;
588
- projectActions.loadProject(jsonData, _this4.props.categoryData);
589
- case 6:
590
- case "end":
591
- return _context.stop();
592
- }
593
- }, _callee, null, [[2, 4]]);
594
- }));
595
- return function (_x) {
596
- return _ref3.apply(this, arguments);
597
- };
598
- }());
599
- }
600
- sessionStorage.removeItem('user_type');
601
- sessionStorage.removeItem('project_type');
602
- sessionStorage.removeItem('project_timeline');
603
- }
604
- }
605
- }, {
606
- key: "componentWillUnmount",
607
- value: function componentWillUnmount() {
608
- window.addEventListener('beforeunload', this.handleBeforeUnload);
609
- window.onbeforeunload = null;
610
- }
611
- }, {
612
- key: "componentWillMount",
613
- value: function componentWillMount() {}
614
- }, {
615
- key: "componentWillReceiveProps",
616
- value: function componentWillReceiveProps(nextProps) {
617
- var stateExtractor = nextProps.stateExtractor,
618
- state = nextProps.state,
619
- projectActions = nextProps.projectActions,
620
- catalog = nextProps.catalog;
621
- var plannerState = stateExtractor(state);
622
- var catalogReady = plannerState.getIn(['catalog', 'ready']);
623
- if (!catalogReady) {
624
- projectActions.initCatalog(catalog);
625
- }
626
- }
627
- }, {
628
- key: "isProjectEmpty",
629
- value: function isProjectEmpty(scene) {
630
- var layers = scene.layers,
631
- selectedLayer = scene.selectedLayer;
632
- var layer = layers.get(selectedLayer);
633
- return layer.areas.size + layer.lines.size + layer.holes.size + layer.items.size === 0;
634
- }
635
- }, {
636
- key: "handleSaveDesign",
637
- value: function handleSaveDesign(value) {
638
- var _this$props3 = this.props,
639
- stateExtractor = _this$props3.stateExtractor,
640
- state = _this$props3.state;
641
- var plannerState = stateExtractor(state);
642
- var items = plannerState.getIn(['scene', 'layers', 'layer-1', 'items']);
643
- var areas = plannerState.getIn(['scene', 'layers', 'layer-1', 'areas']);
644
- if (areas.size === 0) {
645
- this.setState({
646
- isSnackBarOpen: true,
647
- snackBarMessage: 'Your project is empty.'
648
- });
649
- return;
650
- }
651
- // if (items.size === 0) {
652
- // saveAlert = <StyledAlert text={<span style={{fontSize: 16, fontFamily: DEFAULT_FONT_FAMILY}}>Add at least one item</span>} onClose={() => saveAlert = ""} />
653
- // return;
654
- // } else saveAlert = '';
655
- this.setState({
656
- reviewQuotePopupOpened: false
657
- });
658
- this.setState({
659
- savePopupVisible: value
660
- });
661
- this.setState({
662
- assistPopupVisible: false
663
- });
664
- this.setState({
665
- newProjectPopupVisible: false
666
- });
667
- this.setState({
668
- savePromptVisible: false
669
- });
670
- this.setState({
671
- submitPromptVisible: false
672
- });
673
- }
674
- }, {
675
- key: "handleNewProject",
676
- value: function handleNewProject(value) {
677
- this.setState({
678
- reviewQuotePopupOpened: false
679
- });
680
- this.setState({
681
- savePopupVisible: false
682
- });
683
- this.setState({
684
- quotePopupVisible: false
685
- });
686
- this.setState({
687
- assistPopupVisible: false
688
- });
689
- this.setState({
690
- newProjectPopupVisible: value
691
- });
692
- }
693
- }, {
694
- key: "handleSubmitForQuote",
695
- value: function handleSubmitForQuote(isVisible) {
696
- var submitType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : constants.SUBMIT_REQUEST_ASSIST;
697
- var items = this.props.stateExtractor(this.props.state).getIn(['scene', 'layers', this.props.stateExtractor(this.props.state).scene.selectedLayer, 'items']);
698
- if (submitType === constants.SUBMIT_ADD_CART) {
699
- this.setToolbar('reviewforquote');
700
- }
701
- if (submitType === constants.SUBMIT_ADD_CART && !items.size) {
702
- this.setState({
703
- isSnackBarOpen: true,
704
- snackBarMessage: 'Your project is empty. Please add at least one item.'
705
- });
706
- } else {
707
- this.setState({
708
- reviewQuotePopupOpened: false
709
- });
710
- this.setState({
711
- savePopupVisible: false
712
- });
713
- this.setState({
714
- quotePopupVisible: isVisible
715
- });
716
- this.setState({
717
- submitTosave: false
718
- });
719
- this.setState({
720
- assistPopupVisible: false
721
- });
722
- this.setState({
723
- newProjectPopupVisible: false
724
- });
725
- this.setState({
726
- stateSubmitType: submitType
727
- });
728
- }
729
- }
730
- }, {
731
- key: "findDelkeys",
732
- value: function findDelkeys(obj, deleteKeys, path) {
733
- if (_typeof(obj) === 'object') {
734
- var allkeys = Object.keys(obj);
735
- for (var i = 0; i < allkeys.length; i++) {
736
- var value = obj[allkeys[i]];
737
- if (isEmpty(value)) {
738
- deleteKeys.push({
739
- path: path,
740
- key: allkeys[i]
741
- });
742
- } else if (_typeof(value) === 'object') {
743
- var newPath = path + allkeys[i] + ',';
744
- this.findDelkeys(value, deleteKeys, newPath);
745
- }
746
- }
747
- } else if (isEmpty(obj)) {
748
- var tmpkey = path.split(',');
749
- deleteKeys.push({
750
- path: path,
751
- key: tmpkey[tmpkey.length - 1]
752
- });
753
- }
754
- }
755
- }, {
756
- key: "render",
757
- value: function render() {
758
- var _this5 = this;
759
- var _this$props4 = this.props,
760
- width = _this$props4.width,
761
- height = _this$props4.height,
762
- state = _this$props4.state,
763
- stateExtractor = _this$props4.stateExtractor,
764
- props = _objectWithoutProperties(_this$props4, _excluded);
765
- var _this$state = this.state,
766
- savePopupVisible = _this$state.savePopupVisible,
767
- quotePopupVisible = _this$state.quotePopupVisible,
768
- assistPopupVisible = _this$state.assistPopupVisible,
769
- newProjectPopupVisible = _this$state.newProjectPopupVisible,
770
- savePromptVisible = _this$state.savePromptVisible,
771
- isLeaving = _this$state.isLeaving,
772
- submitPromptVisible = _this$state.submitPromptVisible,
773
- stateSubmitType = _this$state.stateSubmitType,
774
- submitTosave = _this$state.submitTosave,
775
- signOpen = _this$state.signOpen,
776
- myProjectsOpen = _this$state.myProjectsOpen,
777
- myProjectsToLogin = _this$state.myProjectsToLogin,
778
- downloadPopupVisible = _this$state.downloadPopupVisible;
779
- var contentW = width - toolbarW;
780
- var categoryData = this.props.categoryData;
781
- var toolbarH = height;
782
- var contentH = height;
783
- var sidebarH = height;
784
- var headerW = width;
785
- var headerH = 60;
786
- var userInfo = this.props.match ? this.props.match.params : [];
787
- var extractedState = stateExtractor(state);
788
- //console.log('KC state - mode: ', extractedState.mode);
789
- var doorStyle = extractedState.get('doorStyle');
790
- if (extractedState.getIn(['scene', 'layers', extractedState.scene.selectedLayer, 'doorStyle']) !== undefined && extractedState.getIn(['scene', 'layers', extractedState.scene.selectedLayer, 'doorStyle']) !== null) {
791
- var extractedStateData = extractedState.getIn(['scene', 'layers', extractedState.scene.selectedLayer, 'doorStyle']);
792
- var doorIdAvailable = false;
793
- if (this.props.categoryData.doorStyles && this.props.categoryData.doorStyles.items) {
794
- this.props.categoryData.doorStyles.items.find(function (category) {
795
- doorIdAvailable = category.items.find(function (style) {
796
- var item = style.items.find(function (it) {
797
- return it.id === extractedStateData.id;
798
- });
799
- return !!item;
800
- });
801
- });
802
- }
803
- if (doorIdAvailable) doorStyle = extractedStateData;
804
- }
805
- var firstVisit = this.state.wizardStepOpend && this.isProjectEmpty(extractedState.scene);
806
- var allVisible = firstVisit || signOpen || myProjectsOpen;
807
- var _scene = extractedState.getIn(['scene']);
808
- var len = convert(_scene.width).from(_scene.unit).to('cm');
809
- var _viewer2D = extractedState.getIn(['viewer2D']);
810
- if (_viewer2D.size > 0) {
811
- var scaleX = width / len * 3;
812
- var scaleY = height / len * 3;
813
- var scale = scaleX > scaleY ? scaleY : scaleX;
814
- var _e = width - len * scale,
815
- _f = height - len * scale;
816
- var viewer = _viewer2D.toJS();
817
- if (viewer.e === 0 && viewer.f === 0) {
818
- _viewer2D = _viewer2D.merge({
819
- e: viewer.viewerWidth / 2 - viewer.SVGWidth / 2,
820
- f: viewer.viewerHeight / 2 - viewer.SVGHeight / 2,
821
- a: 0.99,
822
- d: 0.99
823
- });
824
- }
825
- }
826
- extractedState = extractedState.merge({
827
- viewer2D: _viewer2D
828
- });
829
- var history = this.props.history;
830
- var handleContinueQuote = function handleContinueQuote() {
831
- _this5.setToolbar('reviewforquote');
832
- _this5.setState({
833
- savePopupVisible: false,
834
- quotePopupVisible: true
835
- });
836
- };
837
- var newProject = function newProject() {
838
- _this5.props.projectActions.newProject();
839
- sessionStorage.setItem('projectTitle', 'Untitled');
840
- _this5.props.projectActions.rename('Untitled');
841
- sessionStorage.removeItem('projectId');
842
- sessionStorage.removeItem('usedObjects');
843
- var visualizerName = sessionStorage.getItem('visualizerName');
844
- var originalAccessToken = ls.get(LOCAL_STORAGE_ORIGINAL_TOKEN);
845
- var tokenName = ls.get(LOCAL_STORAGE_TOKEN_NAME);
846
- var pathname = "/".concat(visualizerName);
847
- if (tokenName && originalAccessToken) {
848
- pathname += "?".concat(tokenName).concat(originalAccessToken);
849
- }
850
- history.push({
851
- pathname: pathname
852
- });
853
- _this5.setState({
854
- wizardStepOpend: false
855
- });
856
- };
857
-
858
- /**
859
- * @description Save Projects
860
- * @param {{email,firstName,lastName,notes,projectName}} param Project information to save
861
- */
862
- var saveProject = /*#__PURE__*/function () {
863
- var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(param) {
864
- var _state2, _state3;
865
- var rlt, title, projectId, projectTitle, utm, state, _state, scene, itemData, newScene, deleteKeys, i, tmp, deletePath, j, projectData, object_count, originalAccessToken, tokenName, response, _response$data, success, message, userData, access_token, insertId, currentProjectID, _t2;
866
- return _regeneratorRuntime.wrap(function (_context2) {
867
- while (1) switch (_context2.prev = _context2.next) {
868
- case 0:
869
- rlt = {
870
- success: false
871
- }; // Get storage info
872
- title = sessionStorage.getItem('projectTitle');
873
- projectId = sessionStorage.getItem('projectId');
874
- projectTitle = param && param.projectName || title || "Project-".concat(new Date().toLocaleString());
875
- utm = _this5.utm; // State
876
- state = Project.unselectAll(extractedState).updatedState;
877
- _state = state, scene = _state.scene;
878
- state = state.merge({
879
- scene: scene.merge({
880
- title: projectTitle
881
- })
882
- });
883
-
884
- // Set storage info
885
- sessionStorage.setItem('projectTitle', projectTitle);
886
- props.projectActions.rename(projectTitle);
887
-
888
- // Filter cds
889
- itemData = state.getIn(['scene', 'layers', state.get('scene').toJS().selectedLayer, 'items']).toArray();
890
- itemData.forEach(function (it) {
891
- var _item$doorStyle;
892
- var item = it.toJS();
893
- var doorStyles = item === null || item === void 0 || (_item$doorStyle = item.doorStyle) === null || _item$doorStyle === void 0 ? void 0 : _item$doorStyle.doorStyles;
894
-
895
- // Skip if no doorStyles data at all
896
- if (!doorStyles) return;
897
- var newCDSdata = Array.isArray(doorStyles.cds) ? doorStyles.cds.filter(function (it1) {
898
- return it1.cabinet_door_style_id === doorStyles.cabinet_door_style_id;
899
- }) : [];
900
- var layerId = state.get('scene').toJS().selectedLayer;
901
- var basePath = ['scene', 'layers', layerId, 'items', it.id, 'doorStyle', 'doorStyles'];
902
- if (state.hasIn(basePath)) {
903
- state = state.setIn([].concat(basePath, ['cds']), newCDSdata);
904
- }
905
- });
906
-
907
- // Delete null values
908
- newScene = state.getIn(['scene']);
909
- deleteKeys = [];
910
- _this5.findDelkeys(newScene.toJS(), deleteKeys, '');
911
- for (i = 0; i < deleteKeys.length; i++) {
912
- tmp = newScene.toJS();
913
- deletePath = deleteKeys[i].path.split(',');
914
- for (j = 0; j < deletePath.length; j++) {
915
- if (!isEmpty(deletePath[j])) {
916
- tmp = tmp[deletePath[j]];
917
- }
918
- }
919
- if (deletePath.length >= 2) {
920
- delete tmp[deleteKeys[i].key];
921
- deletePath.pop();
922
- if (!isEmpty(newScene.getIn(deletePath))) newScene = newScene.setIn(deletePath, tmp);
923
- } else {
924
- newScene = newScene["delete"](deleteKeys[i].key);
925
- }
926
- }
927
- state = state.setIn(['scene'], newScene);
928
-
929
- // Data to save
930
- projectData = JSON.stringify(state.get('scene').toJS());
931
- object_count = Object.keys(((_state2 = state) === null || _state2 === void 0 || (_state2 = _state2.scene) === null || _state2 === void 0 || (_state2 = _state2.layers) === null || _state2 === void 0 || (_state2 = _state2.get((_state3 = state) === null || _state3 === void 0 || (_state3 = _state3.scene) === null || _state3 === void 0 ? void 0 : _state3.selectedLayer)) === null || _state2 === void 0 ? void 0 : _state2.items) || {}).length;
932
- _context2.prev = 1;
933
- originalAccessToken = ls.get(LOCAL_STORAGE_ORIGINAL_TOKEN);
934
- tokenName = ls.get(LOCAL_STORAGE_TOKEN_NAME);
935
- _context2.next = 2;
936
- return axios.post('/api/project/saveProject', _objectSpread(_objectSpread({
937
- pid: projectId,
938
- title: projectTitle,
939
- mode: MODE,
940
- access_token: userInfo.token ? userInfo.token : null,
941
- userrole: userInfo.role ? userInfo.role : null,
942
- saveData: _objectSpread(_objectSpread(_objectSpread({}, param), utm), {}, {
943
- projectData: projectData,
944
- object_count: object_count
945
- }),
946
- url: window.location.hostname,
947
- visualizerName: sessionStorage.getItem('visualizerName')
948
- }, originalAccessToken ? {
949
- original_token: originalAccessToken
950
- } : undefined), tokenName ? {
951
- query_params_token_prefix: tokenName
952
- } : undefined));
953
- case 2:
954
- response = _context2.sent;
955
- _response$data = response.data, success = _response$data.success, message = _response$data.message, userData = _response$data.userData, access_token = _response$data.access_token;
956
- if (success === true) {
957
- rlt.success = true;
958
- insertId = response.data.execResult.insertId;
959
- currentProjectID = insertId !== 0 ? insertId : state.getIn(['scene', 'currentProjectID']); // Set storage data
960
- sessionStorage.setItem('projectId', currentProjectID);
961
- sessionStorage.setItem('email', param.email);
962
- sessionStorage.setItem('phone', param.phone);
963
- sessionStorage.setItem('firstName', param.firstName);
964
- sessionStorage.setItem('lastName', param.lastName);
965
- props.projectActions.setProjectID({
966
- currentProjectID: currentProjectID
967
- });
968
- actions.userActions.login(userData[0].id, userData[0].role, access_token, utm);
969
- _this5.setState({
970
- toolbar: _this5.state.toolbar,
971
- isSaved: true,
972
- isSnackBarOpen: true,
973
- snackBarMessage: 'Your project has been saved. </br> You can now request <b>Designer Assistance</b> or <b>Add to Cart</b>'
974
- });
975
- GA.events.projectSaved(currentProjectID, 'manual');
976
- PH.projectSaved(currentProjectID);
977
- if (_this5.state.submitTosave) {
978
- handleContinueQuote();
979
- }
980
- } else {
981
- rlt.success = false;
982
- rlt.message = message;
983
- _this5.setState({
984
- isSnackBarOpen: true,
985
- snackBarMessage: "Failed to add project data: ".concat(message)
986
- });
987
- }
988
- _context2.next = 4;
989
- break;
990
- case 3:
991
- _context2.prev = 3;
992
- _t2 = _context2["catch"](1);
993
- rlt.success = false;
994
- console.error(_t2);
995
- _this5.setState({
996
- isSnackBarOpen: true,
997
- snackBarMessage: 'Failed to add project data.'
998
- });
999
- case 4:
1000
- return _context2.abrupt("return", rlt);
1001
- case 5:
1002
- case "end":
1003
- return _context2.stop();
1004
- }
1005
- }, _callee2, null, [[1, 3]]);
1006
- }));
1007
- return function saveProject(_x2) {
1008
- return _ref4.apply(this, arguments);
1009
- };
1010
- }();
1011
- var pidSplit = userInfo.pid && userInfo.pid.indexOf('?');
1012
- // If pidSplit is undefined pid is undefined
1013
- var pid = pidSplit === undefined || pidSplit === -1 ? userInfo.pid : userInfo.pid.slice(0, pidSplit);
1014
- var submitForQuote = /*#__PURE__*/function () {
1015
- var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(param) {
1016
- var rlt, apiUrl, extraFormData, originalAccessToken, tokenName, customerRequests, notes, response, _response$data2, success, message, redirect_url, _summarizeItems, totalCount, totalPrice, _t3;
1017
- return _regeneratorRuntime.wrap(function (_context3) {
1018
- while (1) switch (_context3.prev = _context3.next) {
1019
- case 0:
1020
- rlt = {
1021
- success: false
1022
- };
1023
- if (userInfo.token) {
1024
- _context3.next = 1;
1025
- break;
1026
- }
1027
- _this5.setState({
1028
- isSnackBarOpen: true,
1029
- snackBarMessage: 'You should save the project first.'
1030
- });
1031
- return _context3.abrupt("return");
1032
- case 1:
1033
- apiUrl = '';
1034
- if (param.flag === constants.SUBMIT_REQUEST_ASSIST) {
1035
- apiUrl = "".concat(API_SERVER_URL, "/api/project/submitProject");
1036
- } else if (param.flag === constants.SUBMIT_ADD_CART) {
1037
- apiUrl = "".concat(API_SERVER_URL, "/api/project/addCart");
1038
- }
1039
- _context3.prev = 2;
1040
- extraFormData = {
1041
- userType: sessionStorage.getItem('user_type') || '',
1042
- designType: sessionStorage.getItem('project_type') || '',
1043
- startTime: sessionStorage.getItem('project_timeline') || ''
1044
- };
1045
- originalAccessToken = ls.get(LOCAL_STORAGE_ORIGINAL_TOKEN);
1046
- tokenName = ls.get(LOCAL_STORAGE_TOKEN_NAME);
1047
- customerRequests = param.customer_requests;
1048
- notes = customerRequests.notes;
1049
- _context3.next = 3;
1050
- return axios.post(apiUrl, {
1051
- access_token: userInfo.token,
1052
- data: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, param), extraFormData.userType ? {
1053
- user_type: extraFormData.userType
1054
- } : undefined), extraFormData.designType ? {
1055
- project_type: extraFormData.designType
1056
- } : undefined), extraFormData.startTime ? {
1057
- project_timeline: extraFormData.startTime
1058
- } : undefined), {}, {
1059
- cart_total: parseFloat(sessionStorage.getItem('cart_total')),
1060
- client_name: sessionStorage.getItem('visualizerName'),
1061
- user_token: ls.get(LOCAL_STORAGE_TOKEN_VALUE),
1062
- cart_action_type: ls.get(LOCAL_STORAGE_CART_ACTION),
1063
- customer_requests: Object.values(customerRequests.reviewOptions).filter(Boolean).join(', ')
1064
- }, param.flag === constants.SUBMIT_ADD_CART ? {
1065
- cart_notes: notes
1066
- } : {
1067
- designer_notes: notes
1068
- }), {}, {
1069
- question_add_to_cart: param.flag === constants.SUBMIT_ADD_CART
1070
- }, originalAccessToken ? {
1071
- original_token: originalAccessToken
1072
- } : undefined), tokenName ? {
1073
- query_params_token_prefix: tokenName
1074
- } : undefined),
1075
- num: true,
1076
- projectid: pid,
1077
- search: _this5.props.location.search,
1078
- userrole: userInfo.role,
1079
- url: window.location.hostname
1080
- });
1081
- case 3:
1082
- response = _context3.sent;
1083
- _response$data2 = response.data, success = _response$data2.success, message = _response$data2.message, redirect_url = _response$data2.redirect_url;
1084
- if (success) {
1085
- rlt.success = true;
1086
- param.email && sessionStorage.setItem('email', param.email);
1087
- param.phone && sessionStorage.setItem('phone', param.phone);
1088
- _this5.setState({
1089
- redirectURL: redirect_url,
1090
- isSnackBarOpen: true,
1091
- snackBarMessage: "".concat(param.flag === constants.SUBMIT_REQUEST_ASSIST ? 'Project submitted' : 'Added to cart', " successfully.").concat(customerRequests.reviewOptions.length > 0 || customerRequests.notes ? ' <br /> A confirmation has been emailed to you and a designer will be in contact shortly' : ''),
1092
- isSnackBar1Open: param.flag === constants.SUBMIT_ADD_CART
1093
- });
1094
- try {
1095
- if (param.flag === constants.SUBMIT_REQUEST_ASSIST) {
1096
- GA.events.assistanceRequested('manual', pid);
1097
- PH.assistanceRequested('manual', pid);
1098
- } else {
1099
- _summarizeItems = summarizeItems(JSON.parse(sessionStorage.getItem('usedObjects'))), totalCount = _summarizeItems.totalCount, totalPrice = _summarizeItems.totalPrice;
1100
- GA.events.addToCart(pid, totalCount, totalPrice);
1101
- PH.addToCart(pid, totalCount, totalPrice);
1102
- }
1103
- } catch (e) {
1104
- console.log('Error logging GA event', e);
1105
- }
1106
- } else {
1107
- rlt.success = false;
1108
- rlt.message = message;
1109
- _this5.setState({
1110
- isSnackBarOpen: true,
1111
- snackBarMessage: "".concat(param.flag === constants.SUBMIT_REQUEST_ASSIST ? 'Submitting project' : 'Adding to cart', " failed: ").concat(message)
1112
- });
1113
- }
1114
- _context3.next = 5;
1115
- break;
1116
- case 4:
1117
- _context3.prev = 4;
1118
- _t3 = _context3["catch"](2);
1119
- rlt.success = false;
1120
- console.log('err', _t3);
1121
- _this5.setState({
1122
- isSnackBarOpen: true,
1123
- snackBarMessage: "".concat(param.flag === constants.SUBMIT_REQUEST_ASSIST ? 'Submitting project' : 'Adding to cart', " failed.")
1124
- });
1125
- case 5:
1126
- return _context3.abrupt("return", rlt);
1127
- case 6:
1128
- case "end":
1129
- return _context3.stop();
1130
- }
1131
- }, _callee3, null, [[2, 4]]);
1132
- }));
1133
- return function submitForQuote(_x3) {
1134
- return _ref5.apply(this, arguments);
1135
- };
1136
- }();
1137
- return /*#__PURE__*/React.createElement("section", null, /*#__PURE__*/React.createElement(SnackBar, {
1138
- isOpen: this.state.isSnackBarOpen,
1139
- message: this.state.snackBarMessage,
1140
- handleClose: function handleClose() {
1141
- return _this5.setState({
1142
- isSnackBarOpen: false,
1143
- snackBarMessage: ''
1144
- });
1145
- },
1146
- autoHideDuration: 10000
1147
- }), /*#__PURE__*/React.createElement(SnackBar, {
1148
- style: {
1149
- marginTop: this.state.isSnackBarOpen ? 75 : 'unset'
1150
- },
1151
- isOpen: this.state.isSnackBar1Open,
1152
- message: "The items in your design have been added to your shopping cart at ".concat(CLIENTS_NAME[sessionStorage.getItem('visualizerName')], ". <br />Please log in with the same email address."),
1153
- autoHideDuration: 20000,
1154
- action: /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("a", {
1155
- href: this.state.redirectURL,
1156
- target: "_blank",
1157
- style: {
1158
- fontFamily: DEFAULT_FONT_FAMILY,
1159
- color: PRIMARY_GREEN_COLOR,
1160
- fontWeight: 700,
1161
- marginRight: 10
1162
- }
1163
- }, "View Cart"), /*#__PURE__*/React.createElement("img", {
1164
- onClick: function onClick() {
1165
- return _this5.setState({
1166
- isSnackBar1Open: false
1167
- });
1168
- },
1169
- style: {
1170
- "float": 'right',
1171
- height: 24,
1172
- cursor: 'pointer'
1173
- },
1174
- src: "/assets/img/svg/close.svg"
1175
- }))
1176
- }), /*#__PURE__*/React.createElement("div", {
1177
- style: _objectSpread(_objectSpread({}, wrapperStyle), {}, {
1178
- height: height
1179
- })
1180
- }, /*#__PURE__*/React.createElement(Header, _extends({
1181
- isTokenPresent: !!this.props.match.params.token,
1182
- isSaved: this.state.isSaved,
1183
- width: headerW,
1184
- height: headerH,
1185
- state: extractedState,
1186
- reviewQuoteHandler: this.onReviewQuoteClicked.bind(this),
1187
- handleSaveDesign: this.handleSaveDesign.bind(this),
1188
- handleSubmitForQuote: this.handleSubmitForQuote.bind(this),
1189
- handleNewProject: this.handleNewProject.bind(this),
1190
- handleSubmitPrompt: function handleSubmitPrompt(submitType) {
1191
- _this5.setState({
1192
- submitPromptVisible: true
1193
- });
1194
- _this5.setState({
1195
- stateSubmitType: submitType
1196
- });
1197
- },
1198
- logoImage: this.props.logoImage,
1199
- companyURL: this.props.companyURL,
1200
- setToolbar: this.setToolbar,
1201
- saveProject: saveProject,
1202
- newProject: newProject,
1203
- isModalVisible: this.state.isModalVisible,
1204
- allVisible: allVisible,
1205
- wizardStepOpend: firstVisit
1206
- }, props)), signOpen && /*#__PURE__*/React.createElement(Sign, {
1207
- setSignOpen: this.setSignOpen.bind(this),
1208
- setMyProjectsOpen: this.setMyProjectsOpen.bind(this),
1209
- setMyProjectsToLogin: this.setMyProjectsToLogin.bind(this),
1210
- myProjectsToLogin: myProjectsToLogin
1211
- }), !allVisible &&
1212
- /*#__PURE__*/
1213
- // left side bar & top tools bar
1214
- React.createElement(Toolbar, _extends({
1215
- width: toolbarW,
1216
- content: contentW,
1217
- height: toolbarH,
1218
- headerH: headerH,
1219
- state: extractedState,
1220
- layers: extractedState.scene.layers,
1221
- selectedLayer: extractedState.scene.selectedLayer
1222
- }, props, {
1223
- handleSaveDesign: this.handleSaveDesign.bind(this),
1224
- handleSubmitForQuote: this.handleSubmitForQuote.bind(this),
1225
- handleNewProject: this.handleNewProject.bind(this),
1226
- handleSubmitPrompt: function handleSubmitPrompt(submitType) {
1227
- _this5.setState({
1228
- submitPromptVisible: true
1229
- });
1230
- _this5.setState({
1231
- stateSubmitType: submitType
1232
- });
1233
- },
1234
- toolBar: this.state.toolbar,
1235
- setToolbar: this.setToolbar,
1236
- setDownloadPopupVisible: this.setDownloadPopupVisible.bind(this),
1237
- openFloor: this.openFloor,
1238
- openCabinet: this.openCabinet,
1239
- openAppliance: this.openAppliance,
1240
- openFinishing: this.openFinishing,
1241
- closeFloorTB: this.closeFloorTB,
1242
- closeCabinetTB: this.closeCabinetTB,
1243
- closeFinishingTB: this.closeFinishingTB,
1244
- closeApplianceTB: this.closeApplianceTB,
1245
- setShowProperty: this.setShowProperty,
1246
- reviewQuotePopupOpened: this.state.reviewQuotePopupOpened,
1247
- isShowProperty: this.state.isShowProperty,
1248
- categoryData: this.props.categoryData,
1249
- floorOpened: this.state.floorOpened,
1250
- cabinetOpened: this.state.cabinetOpened,
1251
- applianceOpened: this.state.applianceOpened,
1252
- finishingOpened: this.state.finishingOpened,
1253
- doorStyleOpen: this.state.doorStyleOpen,
1254
- toggleDoorStyle: this.toggleDoorStyle,
1255
- onReviewQuoteClicked: this.onReviewQuoteClicked,
1256
- wizardStepOpend: firstVisit,
1257
- replaceCabinetFlag: this.state.replaceCabinetFlag,
1258
- replaceCabinet: this.replaceCabinet
1259
- })), /*#__PURE__*/React.createElement(Content, _extends({
1260
- width: contentW,
1261
- height: contentH,
1262
- catalog: this.props.catalog,
1263
- state: extractedState,
1264
- toolBar: this.state.toolbar,
1265
- setToolbar: this.setToolbar,
1266
- replaceCabinet: this.replaceCabinet,
1267
- keyDownEnable: !savePopupVisible && !quotePopupVisible && !assistPopupVisible
1268
- }, props, {
1269
- onWheel: function onWheel(event) {
1270
- return event.preventDefault();
1271
- }
1272
- })), !allVisible && /*#__PURE__*/React.createElement(FooterBar, _extends({
1273
- content: contentW,
1274
- setToolbar: this.setToolbar,
1275
- layers: extractedState.scene.layers,
1276
- setShowProperty: this.setShowProperty,
1277
- state: extractedState,
1278
- selectedLayer: extractedState.scene.selectedLayer
1279
- }, props)), firstVisit && /*#__PURE__*/React.createElement(WizardStep, _extends({
1280
- key: "first-setting",
1281
- content: contentW,
1282
- layers: extractedState.scene.layers,
1283
- close: function close() {
1284
- return _this5.setState({
1285
- wizardStepOpend: false
1286
- });
1287
- },
1288
- state: extractedState,
1289
- setMyProjectsToLogin: this.setMyProjectsToLogin.bind(this),
1290
- setSignOpen: this.setSignOpen.bind(this),
1291
- selectedLayer: extractedState.scene.selectedLayer,
1292
- setMyProjectsOpen: this.setMyProjectsOpen.bind(this)
1293
- }, props)), myProjectsOpen && /*#__PURE__*/React.createElement(MyProjects, _extends({
1294
- setMyProjectsOpen: this.setMyProjectsOpen.bind(this)
1295
- }, props)), /*#__PURE__*/React.createElement(SaveDesignPopup, _extends({
1296
- visible: savePopupVisible,
1297
- submitTosave: submitTosave,
1298
- handleSaveDesign: this.handleSaveDesign.bind(this),
1299
- saveProject: saveProject,
1300
- state: extractedState
1301
- }, props)), /*#__PURE__*/React.createElement(SubmitForQuotePopup, _extends({
1302
- categoryData: categoryData,
1303
- curDoorStyle: doorStyle,
1304
- handleSubmitForQuote: this.handleSubmitForQuote.bind(this),
1305
- submitForQuote: submitForQuote,
1306
- visible: quotePopupVisible,
1307
- setDoorStyle: this.props.itemsActions.setDoorStyle,
1308
- submitType: stateSubmitType
1309
- }, props)), /*#__PURE__*/React.createElement(NewProjectPopup, {
1310
- isSaved: this.state.isSaved,
1311
- visible: newProjectPopupVisible,
1312
- handleNewProject: this.handleNewProject.bind(this),
1313
- newProject: newProject,
1314
- areas: extractedState.getIn(['scene', 'layers', extractedState.scene.selectedLayer, 'areas'])
1315
- }), /*#__PURE__*/React.createElement(SubmitPromptPopup, {
1316
- visible: submitPromptVisible,
1317
- submitType: stateSubmitType,
1318
- handleOk: function handleOk(value) {
1319
- return _this5.handleSaveDesign(value) || _this5.setState({
1320
- submitTosave: true
1321
- });
1322
- },
1323
- handleClose: function handleClose() {
1324
- _this5.setState({
1325
- submitPromptVisible: false
1326
- });
1327
- }
1328
- }), /*#__PURE__*/React.createElement(AutosavePromptPopup, {
1329
- isLeaving: isLeaving,
1330
- visible: savePromptVisible,
1331
- handleOk: this.handleSaveDesign.bind(this),
1332
- handleClose: function handleClose() {
1333
- return _this5.setState({
1334
- savePromptVisible: false,
1335
- submitTosave: false
1336
- });
1337
- }
1338
- }), /*#__PURE__*/React.createElement(DownloadSummaryPopup, _extends({
1339
- visible: downloadPopupVisible,
1340
- state: extractedState,
1341
- catalog: this.props.catalog,
1342
- setDownloadPopupVisible: this.setDownloadPopupVisible.bind(this)
1343
- }, props)), saveAlert));
1344
- }
1345
- }]);
1346
- }(Component);
1347
- KitchenConfigurator.propTypes = {
1348
- translator: PropTypes.instanceOf(Translator),
1349
- catalog: PropTypes.instanceOf(Catalog),
1350
- allowProjectFileSupport: PropTypes.bool,
1351
- plugins: PropTypes.arrayOf(PropTypes.func),
1352
- autosaveKey: PropTypes.string,
1353
- autosaveDelay: PropTypes.number,
1354
- width: PropTypes.number.isRequired,
1355
- height: PropTypes.number.isRequired,
1356
- stateExtractor: PropTypes.func.isRequired,
1357
- toolbarButtons: PropTypes.array,
1358
- sidebarComponents: PropTypes.array,
1359
- footerbarComponents: PropTypes.array,
1360
- customContents: PropTypes.object,
1361
- softwareSignature: PropTypes.string,
1362
- configData: PropTypes.object
1363
- };
1364
- KitchenConfigurator.contextTypes = {
1365
- store: PropTypes.object.isRequired
1366
- };
1367
- KitchenConfigurator.childContextTypes = _objectSpread(_objectSpread({}, objectsMap(actions, function () {
1368
- return PropTypes.object;
1369
- })), {}, {
1370
- translator: PropTypes.object,
1371
- catalog: PropTypes.object
1372
- });
1373
- KitchenConfigurator.defaultProps = {
1374
- translator: new Translator(),
1375
- catalog: new Catalog(),
1376
- plugins: [],
1377
- allowProjectFileSupport: true,
1378
- softwareSignature: "KitchenConfigurator ".concat(VERSION),
1379
- toolbarButtons: [],
1380
- sidebarComponents: [],
1381
- footerbarComponents: [],
1382
- customContents: {},
1383
- configData: {}
1384
- };
1385
- function mapStateToProps(reduxState) {
1386
- return {
1387
- state: reduxState
1388
- };
1389
- }
1390
- function mapDispatchToProps(dispatch) {
1391
- return objectsMap(actions, function (actionNamespace) {
1392
- return bindActionCreators(actions[actionNamespace], dispatch);
1393
- });
1394
- }
1395
- export default connect(mapStateToProps, mapDispatchToProps)(KitchenConfigurator);