@builttocreate/engine-utils 2.6.0-beta.2 → 2.6.0-beta.21

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.
@@ -5,7 +5,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.sortPages = exports.getPageOrder = exports.getDocumentFromTemplate = exports.getDefaultTemplate = exports.getDefaultJoyDocPage = exports.getDefaultJoyDocFile = exports.getDefaultJoyDoc = exports.getDefaultDocument = exports.getCleanedJoyDocPages = exports.getCleanedJoyDoc = exports.duplicateDocumentPage = exports.duplicate = exports["default"] = exports.cleanPageOrder = void 0;
8
+ exports.sortPages = exports.sortFieldPositionsByXAndYCoordinates = exports.mergeAssoicatedFieldPositionsForMobileView = exports.getPageOrder = exports.getMobileViewFromFile = exports.getDocumentFromTemplate = exports.getDefaultTemplate = exports.getDefaultJoyDocPage = exports.getDefaultJoyDocFile = exports.getDefaultJoyDoc = exports.getDefaultDocument = exports.getCleanedJoyDocPages = exports.getCleanedJoyDoc = exports.generateMobileViewPageFieldPositions = exports.generateMobileViewPage = exports.generateMobileViewFile = exports.duplicateDocumentPage = exports.duplicate = exports["default"] = exports.cleanPageOrder = void 0;
9
+
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
11
 
10
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
13
 
@@ -21,6 +23,10 @@ var _DocumentTypes = _interopRequireDefault(require("./constants/DocumentTypes")
21
23
 
22
24
  var _FieldTypes = _interopRequireDefault(require("./constants/FieldTypes"));
23
25
 
26
+ var _FieldDisplayTypes = _interopRequireDefault(require("./constants/FieldDisplayTypes"));
27
+
28
+ var _FileViews = _interopRequireDefault(require("./constants/FileViews"));
29
+
24
30
  var _tableHelper = require("./tableHelper");
25
31
 
26
32
  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; }
@@ -41,10 +47,11 @@ var getDefaultJoyDocPage = function getDefaultJoyDocPage() {
41
47
  width: 816,
42
48
  height: 1056,
43
49
  rowHeight: 8,
44
- cols: 24,
50
+ cols: 8,
45
51
  fieldPositions: [],
46
52
  layout: _PageLayoutModes["default"].grid,
47
- presentation: _FieldPresentationModes["default"].normal
53
+ presentation: _FieldPresentationModes["default"].normal,
54
+ padding: 24
48
55
  }, defaults);
49
56
  };
50
57
  /**
@@ -66,7 +73,10 @@ var getDefaultJoyDocFile = function getDefaultJoyDocFile() {
66
73
  _id: (0, _generateObjectId["default"])(),
67
74
  name: 'New File',
68
75
  pageOrder: [page._id],
69
- pages: [page]
76
+ pages: [page],
77
+ styles: {
78
+ margin: 4
79
+ }
70
80
  }, defaults);
71
81
  };
72
82
  /**
@@ -606,8 +616,194 @@ var duplicateDocumentPage = function duplicateDocumentPage(doc, fileId, pageId)
606
616
  doc: nextDoc
607
617
  };
608
618
  };
619
+ /**
620
+ * Generate the mobile view and add specific mobile view properties
621
+ *
622
+ * @param {Object} file //Full file object
623
+ * @returns {Object}
624
+ */
625
+
609
626
 
610
627
  exports.duplicateDocumentPage = duplicateDocumentPage;
628
+
629
+ var getMobileViewFromFile = function getMobileViewFromFile(file) {
630
+ var _file$views;
631
+
632
+ var mobileViewIndex = file !== null && file !== void 0 && file.views && (file === null || file === void 0 ? void 0 : (_file$views = file.views) === null || _file$views === void 0 ? void 0 : _file$views.length) > 0 ? file.views.findIndex(function (view) {
633
+ return view.type === _FileViews["default"].mobile;
634
+ }) : -1;
635
+
636
+ if (mobileViewIndex !== -1) {
637
+ /**
638
+ * Why do we do this? Early versions of alternative views did not contain pageOrder so
639
+ * we ensure it's populated here.
640
+ */
641
+ var mobileView = file.views[mobileViewIndex];
642
+ var mobileViewPageOrder = cleanPageOrder(getPageOrder(mobileView.pageOrder, mobileView.pages), mobileView.pages);
643
+ return _objectSpread(_objectSpread({}, mobileView), {}, {
644
+ pageOrder: mobileViewPageOrder
645
+ });
646
+ } else {
647
+ return generateMobileViewFile(file);
648
+ }
649
+ };
650
+ /**
651
+ * Generate the mobile view and add specific mobile view properties
652
+ *
653
+ * @param {Object} file //Full file object
654
+ * @returns {Object}
655
+ */
656
+
657
+
658
+ exports.getMobileViewFromFile = getMobileViewFromFile;
659
+
660
+ var generateMobileViewFile = function generateMobileViewFile(file) {
661
+ var pages = file.pages || [];
662
+ var pageOrder = cleanPageOrder(getPageOrder(file.pageOrder, file.pages), file.pages);
663
+ return {
664
+ _id: (0, _generateObjectId["default"])(),
665
+ type: _FileViews["default"].mobile,
666
+ pages: (0, _toConsumableArray2["default"])(pages).map(function (page) {
667
+ var _id = page._id,
668
+ name = page.name,
669
+ identifier = page.identifier,
670
+ fieldPositions = page.fieldPositions;
671
+ return generateMobileViewPage({
672
+ _id: _id,
673
+ identifier: identifier,
674
+ name: name,
675
+ fieldPositions: fieldPositions
676
+ });
677
+ }),
678
+ pageOrder: (0, _toConsumableArray2["default"])(pageOrder)
679
+ };
680
+ };
681
+ /**
682
+ * Apply the proper page defaults for a mobile view to existing page.
683
+ *
684
+ * @param {Object} page
685
+ * @returns {Objectg}
686
+ */
687
+
688
+
689
+ exports.generateMobileViewFile = generateMobileViewFile;
690
+
691
+ var generateMobileViewPage = function generateMobileViewPage(page) {
692
+ return _objectSpread(_objectSpread({}, page), {}, {
693
+ fieldPositions: page.fieldPositions ? generateMobileViewPageFieldPositions(page.fieldPositions, page.rowHeight) : [],
694
+ rowHeight: 1,
695
+ cols: 1,
696
+ padding: 12,
697
+ width: 816,
698
+ height: 1056,
699
+ layout: _PageLayoutModes["default"].grid,
700
+ presentation: _FieldPresentationModes["default"].normal
701
+ });
702
+ };
703
+
704
+ exports.generateMobileViewPage = generateMobileViewPage;
705
+
706
+ var generateMobileViewPageFieldPositions = function generateMobileViewPageFieldPositions(fieldPositions, originalRowHeight) {
707
+ var mobileFieldPositions = [];
708
+ /**
709
+ * Step 1: Sort fieldPositions
710
+ */
711
+
712
+ var sortedFieldPositions = sortFieldPositionsByXAndYCoordinates(fieldPositions);
713
+ sortedFieldPositions.forEach(function (joySpecFieldPosition) {
714
+ var mobileFieldPositionData = _objectSpread(_objectSpread({}, joySpecFieldPosition), {}, {
715
+ displayType: _FieldDisplayTypes["default"].original,
716
+ height: joySpecFieldPosition.height * (originalRowHeight || 1),
717
+ width: 1,
718
+ x: 0
719
+ });
720
+ /**
721
+ * Step 1.2 Hide chart lines on mobile
722
+ */
723
+
724
+
725
+ if (joySpecFieldPosition.type === _FieldTypes["default"].chart) mobileFieldPositionData.primaryDisplayOnly = true;
726
+ mobileFieldPositions.push(mobileFieldPositionData);
727
+ });
728
+ return mergeAssoicatedFieldPositionsForMobileView(mobileFieldPositions);
729
+ };
730
+ /**
731
+ * Merge Field Positions assoicated with the same Field.
732
+ *
733
+ * Why do duplicate fields get created from fieldPositions
734
+ *
735
+ * The same field can get added twice because we may have multiple fieldPositions belonging
736
+ * to the same field. This can happen with dropdown, multiSelect, and table fields.
737
+ *
738
+ * Since the fields get generated by looping over the fieldPositions and not regular fields
739
+ * we may encounter the the same field multiple times because it has multiple fieldPositions.
740
+ *
741
+ * @param {Array} fields
742
+ * @returns {Array}
743
+ */
744
+
745
+
746
+ exports.generateMobileViewPageFieldPositions = generateMobileViewPageFieldPositions;
747
+
748
+ var mergeAssoicatedFieldPositionsForMobileView = function mergeAssoicatedFieldPositionsForMobileView(fieldPositions) {
749
+ var filteredFieldPositions = [];
750
+ fieldPositions === null || fieldPositions === void 0 ? void 0 : fieldPositions.forEach(function (fieldPosition) {
751
+ var fieldPositionIndex = filteredFieldPositions.findIndex(function (filtered) {
752
+ var _filtered$field, _fieldPosition$field;
753
+
754
+ return (filtered === null || filtered === void 0 ? void 0 : (_filtered$field = filtered.field) === null || _filtered$field === void 0 ? void 0 : _filtered$field.toString()) === (fieldPosition === null || fieldPosition === void 0 ? void 0 : (_fieldPosition$field = fieldPosition.field) === null || _fieldPosition$field === void 0 ? void 0 : _fieldPosition$field.toString());
755
+ }); //Only add field to the list if it hasn't already been added
756
+
757
+ if (fieldPositionIndex === -1) filteredFieldPositions.push(fieldPosition);
758
+ });
759
+ return filteredFieldPositions;
760
+ };
761
+ /**
762
+ * Sort fields by their y and x coordinates
763
+ *
764
+ * For example:
765
+ * [
766
+ * { "y": 3, "x": 4 },
767
+ * { "y": 3, "x": 1 },
768
+ * { "y": 2, "x": 0 },
769
+ * { "y": 1, "x": 5.22 },
770
+ * { "y": 1, "x": 10 },
771
+ * { "y": 1, "x": 0 },
772
+ * ]
773
+ * will become the following after sort
774
+ * [
775
+ * { "y": 1, "x": 0 },
776
+ * { "y": 1, "x": 5.22 },
777
+ * { "y": 1, "x": 10 },
778
+ * { "y": 2, "x": 0 },
779
+ * { "y": 3, "x": 1 },
780
+ * { "y": 3, "x": 4 }
781
+ * ];
782
+ *
783
+ * @param {Array} fieldPositions
784
+ * @returns {Array}
785
+ */
786
+
787
+
788
+ exports.mergeAssoicatedFieldPositionsForMobileView = mergeAssoicatedFieldPositionsForMobileView;
789
+
790
+ var sortFieldPositionsByXAndYCoordinates = function sortFieldPositionsByXAndYCoordinates(fieldPositions) {
791
+ var sortedFieldPositions = (0, _toConsumableArray2["default"])(fieldPositions);
792
+ sortedFieldPositions.sort(function (a, b) {
793
+ if (a.y === b.y) {
794
+ return a.x - b.x;
795
+ } else if (a.y > b.y) {
796
+ return 1;
797
+ } else if (a.y < b.y) {
798
+ return -1;
799
+ } else {
800
+ return 0;
801
+ }
802
+ });
803
+ return sortedFieldPositions;
804
+ };
805
+
806
+ exports.sortFieldPositionsByXAndYCoordinates = sortFieldPositionsByXAndYCoordinates;
611
807
  var _default = {
612
808
  getDefaultJoyDocPage: getDefaultJoyDocPage,
613
809
  getDefaultJoyDocFile: getDefaultJoyDocFile,
@@ -620,6 +816,11 @@ var _default = {
620
816
  duplicate: duplicate,
621
817
  duplicateDocumentPage: duplicateDocumentPage,
622
818
  getPageOrder: getPageOrder,
623
- sortPages: sortPages
819
+ sortPages: sortPages,
820
+ sortFieldPositionsByXAndYCoordinates: sortFieldPositionsByXAndYCoordinates,
821
+ mergeAssoicatedFieldPositionsForMobileView: mergeAssoicatedFieldPositionsForMobileView,
822
+ generateMobileViewFile: generateMobileViewFile,
823
+ generateMobileViewPage: generateMobileViewPage,
824
+ generateMobileViewPageFieldPositions: generateMobileViewPageFieldPositions
624
825
  };
625
826
  exports["default"] = _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@builttocreate/engine-utils",
3
- "version": "2.6.0-beta.2",
3
+ "version": "2.6.0-beta.21",
4
4
  "description": "Utility library for common logic shared across web and mobile",
5
5
  "main": "dist/index.js",
6
6
  "files": [
@@ -11,7 +11,7 @@
11
11
  "clean": "rm -rf dist",
12
12
  "build-src": "NODE_ENV=production babel src --out-dir dist --extensions '.js,.jsx' --ignore 'src/testUtils/*','src/**/*.stories.js','src/**/*.test.js','src/lib/**/*.test.js','src/**/__snapshots__','src/**/__mocks__'",
13
13
  "build": "npm run clean && npm run build-src",
14
- "prepublish": "npm run build",
14
+ "prepare": "npm run build",
15
15
  "publish-beta": "npm publish --tag beta",
16
16
  "test": "jest",
17
17
  "test-watch": "jest --watch",
@@ -23,7 +23,7 @@
23
23
  "type": "git",
24
24
  "url": "git+https://github.com/zionlabs/engine-utils.git"
25
25
  },
26
- "author": "Docspace Team",
26
+ "author": "Joyfill Team",
27
27
  "license": "ISC",
28
28
  "bugs": {
29
29
  "url": "https://github.com/zionlabs/engine-utils/issues"