cx 26.0.9 → 26.0.11

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.
Files changed (238) hide show
  1. package/build/jsx-dev-runtime.d.ts +3 -0
  2. package/build/jsx-dev-runtime.js +3 -0
  3. package/build/ui/Controller.d.ts +2 -2
  4. package/build/ui/index.d.ts +2 -1
  5. package/build/ui/index.js +2 -1
  6. package/build.js +133 -133
  7. package/dist/manifest.js +887 -990
  8. package/dist/ui.js +1 -1
  9. package/package.json +4 -4
  10. package/src/jsx-dev-runtime.ts +4 -0
  11. package/src/ui/Controller.ts +2 -2
  12. package/src/ui/index.ts +2 -1
  13. package/src/widgets/HtmlElement.spec.tsx +8 -6
  14. package/build/charts/Bar.scss +0 -29
  15. package/build/charts/BarGraph.scss +0 -29
  16. package/build/charts/BubbleGraph.scss +0 -32
  17. package/build/charts/Column.scss +0 -29
  18. package/build/charts/ColumnGraph.scss +0 -30
  19. package/build/charts/Gridlines.scss +0 -25
  20. package/build/charts/Legend.scss +0 -50
  21. package/build/charts/LegendEntry.scss +0 -29
  22. package/build/charts/LineGraph.scss +0 -25
  23. package/build/charts/Marker.scss +0 -44
  24. package/build/charts/MarkerLine.scss +0 -20
  25. package/build/charts/PieChart.scss +0 -29
  26. package/build/charts/Range.scss +0 -20
  27. package/build/charts/RangeMarker.scss +0 -17
  28. package/build/charts/ScatterGraph.scss +0 -24
  29. package/build/charts/Swimlane.scss +0 -16
  30. package/build/charts/Swimlanes.scss +0 -16
  31. package/build/charts/axis/Axis.scss +0 -23
  32. package/build/charts/axis/CategoryAxis.scss +0 -35
  33. package/build/charts/axis/NumericAxis.scss +0 -35
  34. package/build/charts/axis/TimeAxis.scss +0 -34
  35. package/build/charts/axis/index.scss +0 -5
  36. package/build/charts/axis/variables.scss +0 -3
  37. package/build/charts/index.scss +0 -22
  38. package/build/charts/palette.scss +0 -97
  39. package/build/charts/variables.scss +0 -22
  40. package/build/data/ArrayElementView.spec.d.ts +0 -1
  41. package/build/data/ArrayElementView.spec.js +0 -81
  42. package/build/data/Binding.spec.d.ts +0 -1
  43. package/build/data/Binding.spec.js +0 -61
  44. package/build/data/Expression.spec.d.ts +0 -1
  45. package/build/data/Expression.spec.js +0 -196
  46. package/build/data/Grouper.spec.d.ts +0 -1
  47. package/build/data/Grouper.spec.js +0 -48
  48. package/build/data/Ref.spec.d.ts +0 -1
  49. package/build/data/Ref.spec.js +0 -72
  50. package/build/data/Store.spec.d.ts +0 -1
  51. package/build/data/Store.spec.js +0 -19
  52. package/build/data/StoreRef.spec.d.ts +0 -1
  53. package/build/data/StoreRef.spec.js +0 -22
  54. package/build/data/StringTemplate.spec.d.ts +0 -1
  55. package/build/data/StringTemplate.spec.js +0 -112
  56. package/build/data/StructuredSelector.spec.d.ts +0 -1
  57. package/build/data/StructuredSelector.spec.js +0 -102
  58. package/build/data/View.spec.d.ts +0 -1
  59. package/build/data/View.spec.js +0 -44
  60. package/build/data/ZoomIntoPropertyView.spec.d.ts +0 -1
  61. package/build/data/ZoomIntoPropertyView.spec.js +0 -54
  62. package/build/data/comparer.spec.d.ts +0 -1
  63. package/build/data/comparer.spec.js +0 -50
  64. package/build/data/computable.spec.d.ts +0 -1
  65. package/build/data/computable.spec.js +0 -56
  66. package/build/data/createAccessorModelProxy.spec.d.ts +0 -1
  67. package/build/data/createAccessorModelProxy.spec.js +0 -30
  68. package/build/data/createStructuredSelector.spec.d.ts +0 -1
  69. package/build/data/createStructuredSelector.spec.js +0 -42
  70. package/build/data/diff/diffs.spec.d.ts +0 -1
  71. package/build/data/diff/diffs.spec.js +0 -45
  72. package/build/data/getAccessor.spec.d.ts +0 -1
  73. package/build/data/getAccessor.spec.js +0 -10
  74. package/build/data/getSelector.spec.d.ts +0 -1
  75. package/build/data/getSelector.spec.js +0 -36
  76. package/build/data/ops/append.spec.d.ts +0 -1
  77. package/build/data/ops/append.spec.js +0 -24
  78. package/build/data/ops/filter.spec.d.ts +0 -1
  79. package/build/data/ops/filter.spec.js +0 -25
  80. package/build/data/ops/findTreeNode.spec.d.ts +0 -1
  81. package/build/data/ops/findTreeNode.spec.js +0 -20
  82. package/build/data/ops/merge.spec.d.ts +0 -1
  83. package/build/data/ops/merge.spec.js +0 -23
  84. package/build/data/ops/removeTreeNodes.spec.d.ts +0 -1
  85. package/build/data/ops/removeTreeNodes.spec.js +0 -35
  86. package/build/data/ops/updateArray.spec.d.ts +0 -1
  87. package/build/data/ops/updateArray.spec.js +0 -33
  88. package/build/data/ops/updateTree.spec.d.ts +0 -1
  89. package/build/data/ops/updateTree.spec.js +0 -44
  90. package/build/global.scss +0 -14
  91. package/build/hooks/invokeCallback.spec.d.ts +0 -1
  92. package/build/hooks/invokeCallback.spec.js +0 -44
  93. package/build/hooks/resolveCallback.spec.d.ts +0 -1
  94. package/build/hooks/resolveCallback.spec.js +0 -35
  95. package/build/hooks/store.spec.d.ts +0 -1
  96. package/build/hooks/store.spec.js +0 -48
  97. package/build/hooks/useTrigger.spec.d.ts +0 -1
  98. package/build/hooks/useTrigger.spec.js +0 -59
  99. package/build/index.scss +0 -6
  100. package/build/svg/Svg.scss +0 -28
  101. package/build/svg/index.scss +0 -9
  102. package/build/ui/Controller.spec.d.ts +0 -1
  103. package/build/ui/Controller.spec.js +0 -251
  104. package/build/ui/Cx.spec.d.ts +0 -1
  105. package/build/ui/Cx.spec.js +0 -153
  106. package/build/ui/DataProxy.spec.d.ts +0 -1
  107. package/build/ui/DataProxy.spec.js +0 -208
  108. package/build/ui/IsolatedScope.spec.d.ts +0 -1
  109. package/build/ui/IsolatedScope.spec.js +0 -42
  110. package/build/ui/Repeater.spec.d.ts +0 -1
  111. package/build/ui/Repeater.spec.js +0 -109
  112. package/build/ui/Rescope.spec.d.ts +0 -1
  113. package/build/ui/Rescope.spec.js +0 -134
  114. package/build/ui/Restate.spec.d.ts +0 -1
  115. package/build/ui/Restate.spec.js +0 -257
  116. package/build/ui/adapter/ArrayAdapter.spec.d.ts +0 -1
  117. package/build/ui/adapter/ArrayAdapter.spec.js +0 -44
  118. package/build/ui/adapter/TreeAdapter.spec.d.ts +0 -1
  119. package/build/ui/adapter/TreeAdapter.spec.js +0 -71
  120. package/build/ui/app/Url.spec.d.ts +0 -1
  121. package/build/ui/app/Url.spec.js +0 -43
  122. package/build/ui/createFunctionalComponent.spec.d.ts +0 -1
  123. package/build/ui/createFunctionalComponent.spec.js +0 -272
  124. package/build/ui/index.scss +0 -2
  125. package/build/ui/layout/ContentPlaceholder.spec.d.ts +0 -1
  126. package/build/ui/layout/ContentPlaceholder.spec.js +0 -333
  127. package/build/ui/layout/FirstVisibleChildLayout.spec.d.ts +0 -1
  128. package/build/ui/layout/FirstVisibleChildLayout.spec.js +0 -101
  129. package/build/ui/layout/LabelsLeftLayout.scss +0 -47
  130. package/build/ui/layout/LabelsTopLayout.scss +0 -65
  131. package/build/ui/layout/index.scss +0 -3
  132. package/build/ui/layout/variables.scss +0 -2
  133. package/build/ui/variables.scss +0 -2
  134. package/build/util/Format.spec.d.ts +0 -1
  135. package/build/util/Format.spec.js +0 -58
  136. package/build/util/TraversalStack.spec.d.ts +0 -1
  137. package/build/util/TraversalStack.spec.js +0 -43
  138. package/build/util/call-once.scss +0 -7
  139. package/build/util/date/upperBoundCheck.spec.d.ts +0 -1
  140. package/build/util/date/upperBoundCheck.spec.js +0 -22
  141. package/build/util/getSearchQueryPredicate.spec.d.ts +0 -1
  142. package/build/util/getSearchQueryPredicate.spec.js +0 -33
  143. package/build/util/index.scss +0 -11
  144. package/build/util/isValidIdentifierName.spec.d.ts +0 -1
  145. package/build/util/isValidIdentifierName.spec.js +0 -28
  146. package/build/util/routeAppend.spec.d.ts +0 -1
  147. package/build/util/routeAppend.spec.js +0 -14
  148. package/build/util/scss/add-rules.scss +0 -40
  149. package/build/util/scss/calc.scss +0 -45
  150. package/build/util/scss/call-once.scss +0 -13
  151. package/build/util/scss/clockwise.scss +0 -49
  152. package/build/util/scss/colors.scss +0 -10
  153. package/build/util/scss/deep-get.scss +0 -12
  154. package/build/util/scss/deep-merge.scss +0 -21
  155. package/build/util/scss/divide.scss +0 -3
  156. package/build/util/scss/include.scss +0 -48
  157. package/build/util/scss/index.scss +0 -9
  158. package/build/variables.scss +0 -217
  159. package/build/widgets/AccessorBindings.spec.d.ts +0 -1
  160. package/build/widgets/AccessorBindings.spec.js +0 -40
  161. package/build/widgets/Button.scss +0 -119
  162. package/build/widgets/Button.variables.scss +0 -117
  163. package/build/widgets/CxCredit.scss +0 -39
  164. package/build/widgets/FlexBox.scss +0 -148
  165. package/build/widgets/Heading.scss +0 -40
  166. package/build/widgets/HighlightedSearchText.scss +0 -20
  167. package/build/widgets/HtmlElement.spec.d.ts +0 -1
  168. package/build/widgets/HtmlElement.spec.js +0 -38
  169. package/build/widgets/Icon.scss +0 -22
  170. package/build/widgets/List.scss +0 -93
  171. package/build/widgets/ProgressBar.scss +0 -51
  172. package/build/widgets/Resizer.scss +0 -44
  173. package/build/widgets/Section.scss +0 -56
  174. package/build/widgets/animations.scss +0 -11
  175. package/build/widgets/drag-drop/DragClone.scss +0 -36
  176. package/build/widgets/drag-drop/DragHandle.scss +0 -19
  177. package/build/widgets/drag-drop/DragSource.scss +0 -27
  178. package/build/widgets/drag-drop/DropZone.scss +0 -77
  179. package/build/widgets/drag-drop/index.scss +0 -4
  180. package/build/widgets/drag-drop/variables.scss +0 -15
  181. package/build/widgets/form/Calendar.scss +0 -199
  182. package/build/widgets/form/Calendar.variables.scss +0 -64
  183. package/build/widgets/form/Checkbox.scss +0 -129
  184. package/build/widgets/form/Checkbox.variables.scss +0 -40
  185. package/build/widgets/form/ColorField.scss +0 -98
  186. package/build/widgets/form/ColorPicker.scss +0 -285
  187. package/build/widgets/form/ColorPicker.variables.scss +0 -22
  188. package/build/widgets/form/DateTimeField.scss +0 -92
  189. package/build/widgets/form/DateTimePicker.scss +0 -47
  190. package/build/widgets/form/Field.scss +0 -164
  191. package/build/widgets/form/HelpText.scss +0 -24
  192. package/build/widgets/form/Label.scss +0 -38
  193. package/build/widgets/form/LookupField.scss +0 -221
  194. package/build/widgets/form/MonthField.scss +0 -100
  195. package/build/widgets/form/MonthPicker.scss +0 -125
  196. package/build/widgets/form/NumberField.scss +0 -63
  197. package/build/widgets/form/Radio.scss +0 -123
  198. package/build/widgets/form/Radio.variables.scss +0 -46
  199. package/build/widgets/form/Select.scss +0 -101
  200. package/build/widgets/form/Slider.scss +0 -121
  201. package/build/widgets/form/Switch.scss +0 -142
  202. package/build/widgets/form/TextArea.scss +0 -45
  203. package/build/widgets/form/TextField.scss +0 -57
  204. package/build/widgets/form/UploadButton.scss +0 -49
  205. package/build/widgets/form/ValidationError.scss +0 -23
  206. package/build/widgets/form/ValidationGroup.spec.d.ts +0 -1
  207. package/build/widgets/form/ValidationGroup.spec.js +0 -62
  208. package/build/widgets/form/Wheel.scss +0 -152
  209. package/build/widgets/form/index.scss +0 -24
  210. package/build/widgets/form/variables.scss +0 -355
  211. package/build/widgets/grid/Grid.scss +0 -640
  212. package/build/widgets/grid/Pagination.scss +0 -115
  213. package/build/widgets/grid/TreeNode.scss +0 -90
  214. package/build/widgets/grid/index.scss +0 -4
  215. package/build/widgets/grid/variables.scss +0 -137
  216. package/build/widgets/index.scss +0 -16
  217. package/build/widgets/nav/Link.scss +0 -20
  218. package/build/widgets/nav/Menu.scss +0 -76
  219. package/build/widgets/nav/Menu.variables.scss +0 -25
  220. package/build/widgets/nav/MenuItem.scss +0 -130
  221. package/build/widgets/nav/Route.spec.d.ts +0 -1
  222. package/build/widgets/nav/Route.spec.js +0 -15
  223. package/build/widgets/nav/Scroller.scss +0 -148
  224. package/build/widgets/nav/Tab.scss +0 -82
  225. package/build/widgets/nav/Tab.variables.scss +0 -84
  226. package/build/widgets/nav/cover.scss +0 -22
  227. package/build/widgets/nav/index.scss +0 -6
  228. package/build/widgets/nav/variables.scss +0 -27
  229. package/build/widgets/overlay/Dropdown.scss +0 -186
  230. package/build/widgets/overlay/Overlay.scss +0 -68
  231. package/build/widgets/overlay/Toast.scss +0 -164
  232. package/build/widgets/overlay/Tooltip.scss +0 -177
  233. package/build/widgets/overlay/Window.scss +0 -129
  234. package/build/widgets/overlay/Window.variables.scss +0 -62
  235. package/build/widgets/overlay/captureMouse.scss +0 -13
  236. package/build/widgets/overlay/index.scss +0 -15
  237. package/build/widgets/overlay/variables.scss +0 -85
  238. package/build/widgets/variables.scss +0 -146
@@ -1,109 +0,0 @@
1
- import { jsx as _jsx } from "cx/jsx-runtime";
2
- import { Store } from "../data/Store";
3
- import { Repeater } from "./Repeater";
4
- import { bind } from "./bind";
5
- import { createTestRenderer } from "../util/test/createTestRenderer";
6
- import assert from "assert";
7
- describe("Repeater", () => {
8
- it("allows sorting", () => {
9
- let data = [
10
- {
11
- value: "C",
12
- },
13
- {
14
- value: "B",
15
- },
16
- {
17
- value: "A",
18
- },
19
- ];
20
- let widget = (_jsx("cx", { children: _jsx("div", { children: _jsx(Repeater, { records: data, sorters: [{ field: "value", direction: "ASC" }], recordAlias: "$item", children: _jsx("div", { text: bind("$item.value") }) }) }) }));
21
- let store = new Store();
22
- const component = createTestRenderer(store, widget);
23
- let tree = component.toJSON();
24
- assert.deepEqual(tree, {
25
- type: "div",
26
- props: {},
27
- children: [
28
- {
29
- type: "div",
30
- props: {},
31
- children: ["A"],
32
- },
33
- {
34
- type: "div",
35
- props: {},
36
- children: ["B"],
37
- },
38
- {
39
- type: "div",
40
- props: {},
41
- children: ["C"],
42
- },
43
- ],
44
- });
45
- });
46
- it("changes are properly updated", () => {
47
- let divInstances = [];
48
- let widget = (_jsx("cx", { children: _jsx("div", { children: _jsx(Repeater, { records: bind("data"), sorters: [{ field: "value", direction: "ASC" }], recordAlias: "$item", children: _jsx("div", { text: bind("$item.value"), onExplore: (context, instance) => {
49
- divInstances.push(instance);
50
- } }) }) }) }));
51
- let store = new Store({
52
- data: {
53
- data: [
54
- {
55
- value: "C",
56
- },
57
- {
58
- value: "B",
59
- },
60
- ],
61
- },
62
- });
63
- const component = createTestRenderer(store, widget);
64
- let tree = component.toJSON();
65
- assert.deepEqual(tree, {
66
- type: "div",
67
- props: {},
68
- children: [
69
- {
70
- type: "div",
71
- props: {},
72
- children: ["B"],
73
- },
74
- {
75
- type: "div",
76
- props: {},
77
- children: ["C"],
78
- },
79
- ],
80
- });
81
- divInstances = [];
82
- store.update("data", (data) => [{ value: "A" }, ...data]);
83
- assert.deepEqual(component.toJSON(), {
84
- type: "div",
85
- props: {},
86
- children: [
87
- {
88
- type: "div",
89
- props: {},
90
- children: ["A"],
91
- },
92
- {
93
- type: "div",
94
- props: {},
95
- children: ["B"],
96
- },
97
- {
98
- type: "div",
99
- props: {},
100
- children: ["C"],
101
- },
102
- ],
103
- });
104
- assert.equal(divInstances.length, 3);
105
- assert.equal(divInstances[0].store.get("$item.value"), "A");
106
- assert.equal(divInstances[1].store.get("$item.value"), "B");
107
- assert.equal(divInstances[2].store.get("$item.value"), "C");
108
- });
109
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,134 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "cx/jsx-runtime";
2
- import { Store } from "../data/Store";
3
- import { Rescope } from "./Rescope";
4
- import { bind } from "./bind";
5
- import { createTestRenderer } from "../util/test/createTestRenderer";
6
- import { Controller } from "./Controller";
7
- import assert from "assert";
8
- import { PureContainer } from "./PureContainer";
9
- describe("Rescope", () => {
10
- it("allows simple access to nested data", () => {
11
- let store = new Store({
12
- data: {
13
- $page: {
14
- data: {
15
- name: "John",
16
- },
17
- },
18
- },
19
- });
20
- let widget = (_jsx("cx", { children: _jsx(Rescope, { bind: "$page.data", children: _jsx("div", { text: bind("name") }) }) }));
21
- const component = createTestRenderer(store, widget);
22
- let tree = component.toJSON();
23
- assert.deepEqual(tree, {
24
- type: "div",
25
- props: {},
26
- children: ["John"],
27
- });
28
- });
29
- it("allows parent access through $root", () => {
30
- let store = new Store({
31
- data: {
32
- layout: {
33
- title: "Title",
34
- },
35
- $page: {
36
- data: {
37
- name: "John",
38
- },
39
- },
40
- },
41
- });
42
- let widget = (_jsx("cx", { children: _jsx(Rescope, { bind: "$page.data", children: _jsx("div", { text: bind("$root.layout.title") }) }) }));
43
- const component = createTestRenderer(store, widget);
44
- let tree = component.toJSON();
45
- assert.deepEqual(tree, {
46
- type: "div",
47
- props: {},
48
- children: ["Title"],
49
- });
50
- });
51
- it("allows nested data access through data", () => {
52
- let store = new Store({
53
- data: {
54
- layout: {
55
- title: "Title",
56
- },
57
- },
58
- });
59
- let widget = (_jsx("cx", { children: _jsx(Rescope, { bind: "$page", data: { $title: { bind: "layout.title" } }, children: _jsx("div", { text: bind("$title") }) }) }));
60
- const component = createTestRenderer(store, widget);
61
- let tree = component.toJSON();
62
- assert.deepEqual(tree, {
63
- type: "div",
64
- props: {},
65
- children: ["Title"],
66
- });
67
- });
68
- it("nested data mutations are correctly propagated to the parent store", () => {
69
- let store = new Store({
70
- data: {
71
- item: {
72
- value: 0,
73
- },
74
- },
75
- });
76
- let widget = (_jsxs("cx", { children: [_jsx(Rescope, { bind: "$page", data: { $value: { bind: "item.value" } }, children: _jsx(PureContainer, { controller: {
77
- onInit() {
78
- this.store.set("$value", 2);
79
- },
80
- } }) }), _jsx("div", { text: bind("item.value") })] }));
81
- const component = createTestRenderer(store, widget);
82
- let tree = component.toJSON();
83
- assert.deepEqual(tree, {
84
- type: "div",
85
- props: {},
86
- children: ["2"],
87
- });
88
- });
89
- it("visible is calculated based on the inner scope", () => {
90
- let store = new Store({
91
- data: {
92
- layout: {
93
- title: "Title",
94
- },
95
- $page: {
96
- data: {
97
- visible: true,
98
- name: "John",
99
- },
100
- },
101
- },
102
- });
103
- let widget = (_jsx("cx", { children: _jsx(Rescope, { bind: "$page.data", visible: bind("visible"), children: _jsx("div", { text: bind("name") }) }) }));
104
- const component = createTestRenderer(store, widget);
105
- let tree = component.toJSON();
106
- assert.deepEqual(tree, {
107
- type: "div",
108
- props: {},
109
- children: ["John"],
110
- });
111
- });
112
- it("controllers see inner scope", () => {
113
- let store = new Store({
114
- data: {
115
- $page: {
116
- data: {
117
- visible: true,
118
- name: "John",
119
- },
120
- },
121
- },
122
- });
123
- let testName = null;
124
- class TestController extends Controller {
125
- onInit() {
126
- testName = this.store.get("name");
127
- }
128
- }
129
- let widget = (_jsx("cx", { children: _jsx(Rescope, { bind: "$page.data", controller: TestController, children: _jsx("div", { text: bind("name") }) }) }));
130
- const component = createTestRenderer(store, widget);
131
- component.toJSON();
132
- assert.equal(testName, "John");
133
- });
134
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,257 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "cx/jsx-runtime";
2
- import { Restate } from "./Restate";
3
- import { Store } from "../data/Store";
4
- import { createTestRenderer } from "../util/test/createTestRenderer";
5
- import assert from "assert";
6
- import { Controller } from "./Controller";
7
- import { bind } from "./bind";
8
- import { FirstVisibleChildLayout } from "./layout/FirstVisibleChildLayout";
9
- describe("Restate", () => {
10
- it("provides a blank slate", () => {
11
- let widget = (_jsx("cx", { children: _jsx("div", { children: _jsxs(Restate, { data: {
12
- value: "good",
13
- }, children: [_jsx("span", { text: bind("value") }), _jsx("span", { text: bind("value2") })] }) }) }));
14
- let store = new Store({
15
- data: {
16
- value: "bad",
17
- value2: "also bad",
18
- },
19
- });
20
- const component = createTestRenderer(store, widget);
21
- let tree = component.toJSON();
22
- assert.deepEqual(tree, {
23
- type: "div",
24
- props: {},
25
- children: [
26
- {
27
- type: "span",
28
- props: {},
29
- children: ["good"],
30
- },
31
- {
32
- type: "span",
33
- props: {},
34
- children: null,
35
- },
36
- ],
37
- });
38
- });
39
- it("wires declared data", () => {
40
- let widget = (_jsx("cx", { children: _jsx("div", { children: _jsx(Restate, { data: {
41
- name: { bind: "person.name" },
42
- }, children: _jsx("div", { controller: {
43
- onInit() {
44
- this.store.init("name", "Sasa");
45
- this.store.init("nickname", "Sale");
46
- },
47
- } }) }) }) }));
48
- let changed = false;
49
- let store = new Store();
50
- store.subscribe(() => {
51
- //console.log(store.getData());
52
- changed = true;
53
- });
54
- const component = createTestRenderer(store, widget);
55
- let tree = component.toJSON();
56
- assert.equal(store.get("person.name"), "Sasa");
57
- assert(store.get("person.nickname") === undefined);
58
- assert(changed);
59
- });
60
- it("causes a global update if internal data changes", () => {
61
- let controller;
62
- class TestController extends Controller {
63
- onInit() {
64
- controller = this;
65
- }
66
- setNickname(nname) {
67
- this.store.set("nickname", nname);
68
- }
69
- }
70
- let widget = (_jsx("cx", { children: _jsx("div", { children: _jsx(Restate, { data: {
71
- name: { bind: "person.name" },
72
- }, children: _jsx("div", { controller: TestController, text: bind("nickname") }) }) }) }));
73
- let changed = false;
74
- let store = new Store();
75
- store.subscribe(() => {
76
- changed = true;
77
- });
78
- const component = createTestRenderer(store, widget);
79
- let tree = component.toJSON();
80
- assert.deepEqual(tree, {
81
- type: "div",
82
- props: {},
83
- children: [
84
- {
85
- type: "div",
86
- props: {},
87
- children: null,
88
- },
89
- ],
90
- });
91
- controller.setNickname("Sale");
92
- let tree2 = component.toJSON();
93
- assert.deepEqual(tree2, {
94
- type: "div",
95
- props: {},
96
- children: [
97
- {
98
- type: "div",
99
- props: {},
100
- children: ["Sale"],
101
- },
102
- ],
103
- });
104
- });
105
- it("doesn't notify parent if not necessary in detached mode", () => {
106
- class TestController extends Controller {
107
- onInit() {
108
- this.store.init("nickname", "Sale");
109
- }
110
- }
111
- let widget = (_jsx("cx", { children: _jsx("div", { children: _jsx(Restate, { detached: true, data: {
112
- name: { bind: "person.name" },
113
- }, children: _jsx("div", { controller: TestController }) }) }) }));
114
- let changed = false;
115
- let store = new Store();
116
- store.subscribe(() => {
117
- changed = true;
118
- });
119
- const component = createTestRenderer(store, widget);
120
- let tree = component.toJSON();
121
- assert(!changed);
122
- });
123
- it("shared state can be used across components inside and outside Restate", () => {
124
- let widget = (_jsx("cx", { children: _jsxs("div", { children: [_jsx("div", { text: bind("person.gender", "Male") }), _jsxs(Restate, { detached: true, data: {
125
- person: { bind: "person" },
126
- }, children: [_jsx("div", { text: bind("person.firstName", "John") }), _jsx("div", { text: bind("person.lastName", "Doe") })] }), _jsx("div", { text: bind("person.address", "Unknown") })] }) }));
127
- let changed = false;
128
- let store = new Store();
129
- store.subscribe(() => {
130
- changed = true;
131
- //console.log(store.getData());
132
- });
133
- const component = createTestRenderer(store, widget);
134
- let tree = component.toJSON();
135
- assert.deepEqual(store.getData(), {
136
- person: {
137
- firstName: "John",
138
- lastName: "Doe",
139
- address: "Unknown",
140
- gender: "Male",
141
- },
142
- });
143
- });
144
- it("updates if shared state is changed from outside", () => {
145
- [true, false].forEach((detached) => {
146
- let widget = (_jsx("cx", { children: _jsxs("div", { children: [_jsx(Restate, { detached: detached, data: {
147
- person: { bind: "person" },
148
- }, children: _jsx("div", { text: bind("person.firstName") }) }), _jsx("div", { text: bind("person.firstName", "John") })] }) }));
149
- let store = new Store();
150
- const component = createTestRenderer(store, widget);
151
- let tree = component.toJSON();
152
- assert.deepEqual(tree, {
153
- type: "div",
154
- props: {},
155
- children: [
156
- {
157
- type: "div",
158
- props: {},
159
- children: ["John"],
160
- },
161
- {
162
- type: "div",
163
- props: {},
164
- children: ["John"],
165
- },
166
- ],
167
- });
168
- store.set("person.firstName", "Jack");
169
- tree = component.toJSON();
170
- assert.deepEqual(tree, {
171
- type: "div",
172
- props: {},
173
- children: [
174
- {
175
- type: "div",
176
- props: {},
177
- children: ["Jack"],
178
- },
179
- {
180
- type: "div",
181
- props: {},
182
- children: ["Jack"],
183
- },
184
- ],
185
- });
186
- });
187
- });
188
- it("allows field initialization in data declaration", () => {
189
- [true, false].forEach((detached) => {
190
- let widget = (_jsx("cx", { children: _jsx("div", { children: _jsx(Restate, { detached: detached, data: {
191
- name: bind("name", "Cx"),
192
- }, children: _jsx("div", { text: bind("name") }) }) }) }));
193
- let store = new Store();
194
- const component = createTestRenderer(store, widget);
195
- let tree = component.toJSON();
196
- assert.deepEqual(tree, {
197
- type: "div",
198
- props: {},
199
- children: [
200
- {
201
- type: "div",
202
- props: {},
203
- children: ["Cx"],
204
- },
205
- ],
206
- });
207
- });
208
- });
209
- it("updates if internal data changes", () => {
210
- class TestController extends Controller {
211
- onInit() {
212
- this.store.init("nickname", "Sale");
213
- }
214
- }
215
- let widget = (_jsx("cx", { children: _jsx("div", { children: _jsx(Restate, { children: _jsx(Restate, { children: _jsx("div", { controller: TestController, text: bind("nickname") }) }) }) }) }));
216
- let changed = false;
217
- let store = new Store();
218
- store.subscribe(() => {
219
- changed = true;
220
- });
221
- const component = createTestRenderer(store, widget);
222
- let tree = component.toJSON();
223
- assert.deepEqual(tree, {
224
- type: "div",
225
- props: {},
226
- children: [
227
- {
228
- type: "div",
229
- props: {},
230
- children: ["Sale"],
231
- },
232
- ],
233
- });
234
- });
235
- it("works with FirstVisibleChildLayout", () => {
236
- let widget = (_jsx("cx", { children: _jsx("div", { children: _jsxs(FirstVisibleChildLayout, { children: [_jsx(Restate, { children: _jsx("div", { children: "First" }) }), _jsx("div", { children: "Second" })] }) }) }));
237
- let store = new Store();
238
- const component = createTestRenderer(store, widget);
239
- let tree = component.toJSON();
240
- assert.deepEqual(tree, {
241
- type: "div",
242
- props: {},
243
- children: [{ type: "div", props: {}, children: ["First"] }],
244
- });
245
- });
246
- it("is transparent to FirstVisibleChildLayout", () => {
247
- let widget = (_jsx("cx", { children: _jsx("div", { children: _jsxs(FirstVisibleChildLayout, { children: [_jsx(Restate, { children: _jsx("div", { visible: false, children: "First" }) }), _jsx("div", { children: "Second" })] }) }) }));
248
- let store = new Store();
249
- const component = createTestRenderer(store, widget);
250
- let tree = component.toJSON();
251
- assert.deepEqual(tree, {
252
- type: "div",
253
- props: {},
254
- children: [{ type: "div", props: {}, children: ["Second"] }],
255
- });
256
- });
257
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,44 +0,0 @@
1
- import { RenderingContext } from "../RenderingContext";
2
- import { Instance } from "../Instance";
3
- import assert from "assert";
4
- import { Store } from "../../data";
5
- import { ArrayAdapter } from "./ArrayAdapter";
6
- describe("ArrayAdapter", () => {
7
- it("maps data into records", () => {
8
- let adapter = new ArrayAdapter();
9
- let data = [
10
- {
11
- id: 1,
12
- text: "1",
13
- },
14
- {
15
- id: 2,
16
- text: "2",
17
- },
18
- ];
19
- let store = new Store();
20
- let records = adapter.mapRecords(new RenderingContext(), new Instance(null, "1", null, store), data, store);
21
- assert.equal(records.length, 2);
22
- assert.equal(records[0].data, records[0].store.get("$record"));
23
- assert.equal(records[1].data, records[1].store.get("$record"));
24
- });
25
- it("can sort data", () => {
26
- let adapter = new ArrayAdapter();
27
- adapter.sort([{ field: "id", direction: "DESC" }]);
28
- let data = [
29
- {
30
- id: 1,
31
- text: "1",
32
- },
33
- {
34
- id: 2,
35
- text: "2",
36
- },
37
- ];
38
- let store = new Store();
39
- let records = adapter.mapRecords(new RenderingContext(), new Instance(null, "1", null, store), data, store);
40
- assert.equal(records.length, 2);
41
- assert.equal(data[1], records[0].store.get("$record"));
42
- assert.equal(data[0], records[1].store.get("$record"));
43
- });
44
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,71 +0,0 @@
1
- import { RenderingContext } from "../RenderingContext";
2
- import { Instance } from "../Instance";
3
- import { TreeAdapter } from "./TreeAdapter";
4
- import assert from "assert";
5
- import { Store } from "../../data";
6
- describe("TreeAdapter", () => {
7
- it("properly expands records", () => {
8
- let tree = new TreeAdapter({
9
- childrenField: "children",
10
- expandedField: "expanded",
11
- });
12
- let data = [
13
- {
14
- id: 1,
15
- text: "1",
16
- expanded: false,
17
- children: [
18
- {
19
- id: 4,
20
- text: "4",
21
- },
22
- ],
23
- },
24
- {
25
- id: 2,
26
- text: "2",
27
- expanded: true,
28
- children: [
29
- {
30
- id: 3,
31
- text: "3",
32
- expanded: true,
33
- children: [
34
- {
35
- id: 5,
36
- text: "5",
37
- expanded: true,
38
- children: [
39
- {
40
- id: 6,
41
- text: "6",
42
- },
43
- ],
44
- },
45
- ],
46
- },
47
- ],
48
- },
49
- {
50
- id: 7,
51
- text: "7",
52
- expanded: false,
53
- },
54
- ];
55
- let store = new Store();
56
- let records = tree.mapRecords(new RenderingContext(), new Instance(null, "1", null, store), data, store);
57
- assert.equal(records.length, 6);
58
- assert.equal(records[0].data.id, 1);
59
- assert.equal(records[1].data.id, 2);
60
- assert.equal(records[2].data.id, 3);
61
- assert.equal(records[3].data.id, 5);
62
- assert.equal(records[4].data.id, 6);
63
- assert.equal(records[5].data.id, 7);
64
- assert.equal(records[5].store.get("$record.id"), 7);
65
- assert.equal(records[2].store.get("$record.id"), 3);
66
- assert.equal(records[3].store.get("$record.id"), 5);
67
- assert.equal(records[2].store.get("$record.id"), 3);
68
- assert.equal(records[0].store.get("$record.id"), 1);
69
- assert.equal(records[1].store.get("$record.id"), 2);
70
- });
71
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,43 +0,0 @@
1
- import { Url } from "./Url";
2
- import Route from "route-parser";
3
- import assert from "assert";
4
- describe("Url", function () {
5
- describe(".unresolve", function () {
6
- it("preserves query parameters", function () {
7
- Url.absoluteBase = "https://cxjs.io/docs/";
8
- assert.equal("~/?state=1", Url.unresolve("https://cxjs.io/docs/?state=1"));
9
- });
10
- it("doesn't touch unresolved urls", function () {
11
- assert.equal("~/test", Url.unresolve("~/test"));
12
- });
13
- });
14
- describe(".getBaseFromScriptSrc", () => {
15
- it("ignores query strings", function () {
16
- assert.equal(Url.getBaseFromScriptSrc("/vendor.js?qs=1", "~/vendor.js"), "/");
17
- });
18
- it("allows wildcards", function () {
19
- assert.equal(Url.getBaseFromScriptSrc("/vendor.123.js?qs=1", "~/vendor.*.js"), "/");
20
- });
21
- it("works for an application folder", function () {
22
- assert.equal(Url.getBaseFromScriptSrc("/datasync/vendor.124c82.js", "~/vendor.*.js"), "/datasync/");
23
- });
24
- });
25
- });
26
- describe("Route", function () {
27
- it("matches query param", function () {
28
- let route = new Route("~/?state=:state");
29
- let result = route.match("~/?state=1");
30
- assert(result !== false);
31
- assert.equal(result.state, "1");
32
- });
33
- it("matches routes with extra query params", function () {
34
- let route = new Route("~/?state=:state");
35
- let result = route.match("~/?state=1&more=2");
36
- assert(result);
37
- });
38
- it.skip("matches query params in any order", function () {
39
- let route = new Route("~/?a=:a&b=:b");
40
- let result = route.match("~/?b=1&a=2");
41
- assert(result);
42
- });
43
- });
@@ -1 +0,0 @@
1
- export {};