cx 26.0.9 → 26.0.10

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 (235) hide show
  1. package/build/ui/Controller.d.ts +2 -2
  2. package/build/ui/index.d.ts +2 -1
  3. package/build/ui/index.js +2 -1
  4. package/build.js +133 -133
  5. package/dist/manifest.js +818 -921
  6. package/dist/ui.js +1 -1
  7. package/package.json +2 -2
  8. package/src/ui/Controller.ts +2 -2
  9. package/src/ui/index.ts +2 -1
  10. package/src/widgets/HtmlElement.spec.tsx +8 -6
  11. package/build/charts/Bar.scss +0 -29
  12. package/build/charts/BarGraph.scss +0 -29
  13. package/build/charts/BubbleGraph.scss +0 -32
  14. package/build/charts/Column.scss +0 -29
  15. package/build/charts/ColumnGraph.scss +0 -30
  16. package/build/charts/Gridlines.scss +0 -25
  17. package/build/charts/Legend.scss +0 -50
  18. package/build/charts/LegendEntry.scss +0 -29
  19. package/build/charts/LineGraph.scss +0 -25
  20. package/build/charts/Marker.scss +0 -44
  21. package/build/charts/MarkerLine.scss +0 -20
  22. package/build/charts/PieChart.scss +0 -29
  23. package/build/charts/Range.scss +0 -20
  24. package/build/charts/RangeMarker.scss +0 -17
  25. package/build/charts/ScatterGraph.scss +0 -24
  26. package/build/charts/Swimlane.scss +0 -16
  27. package/build/charts/Swimlanes.scss +0 -16
  28. package/build/charts/axis/Axis.scss +0 -23
  29. package/build/charts/axis/CategoryAxis.scss +0 -35
  30. package/build/charts/axis/NumericAxis.scss +0 -35
  31. package/build/charts/axis/TimeAxis.scss +0 -34
  32. package/build/charts/axis/index.scss +0 -5
  33. package/build/charts/axis/variables.scss +0 -3
  34. package/build/charts/index.scss +0 -22
  35. package/build/charts/palette.scss +0 -97
  36. package/build/charts/variables.scss +0 -22
  37. package/build/data/ArrayElementView.spec.d.ts +0 -1
  38. package/build/data/ArrayElementView.spec.js +0 -81
  39. package/build/data/Binding.spec.d.ts +0 -1
  40. package/build/data/Binding.spec.js +0 -61
  41. package/build/data/Expression.spec.d.ts +0 -1
  42. package/build/data/Expression.spec.js +0 -196
  43. package/build/data/Grouper.spec.d.ts +0 -1
  44. package/build/data/Grouper.spec.js +0 -48
  45. package/build/data/Ref.spec.d.ts +0 -1
  46. package/build/data/Ref.spec.js +0 -72
  47. package/build/data/Store.spec.d.ts +0 -1
  48. package/build/data/Store.spec.js +0 -19
  49. package/build/data/StoreRef.spec.d.ts +0 -1
  50. package/build/data/StoreRef.spec.js +0 -22
  51. package/build/data/StringTemplate.spec.d.ts +0 -1
  52. package/build/data/StringTemplate.spec.js +0 -112
  53. package/build/data/StructuredSelector.spec.d.ts +0 -1
  54. package/build/data/StructuredSelector.spec.js +0 -102
  55. package/build/data/View.spec.d.ts +0 -1
  56. package/build/data/View.spec.js +0 -44
  57. package/build/data/ZoomIntoPropertyView.spec.d.ts +0 -1
  58. package/build/data/ZoomIntoPropertyView.spec.js +0 -54
  59. package/build/data/comparer.spec.d.ts +0 -1
  60. package/build/data/comparer.spec.js +0 -50
  61. package/build/data/computable.spec.d.ts +0 -1
  62. package/build/data/computable.spec.js +0 -56
  63. package/build/data/createAccessorModelProxy.spec.d.ts +0 -1
  64. package/build/data/createAccessorModelProxy.spec.js +0 -30
  65. package/build/data/createStructuredSelector.spec.d.ts +0 -1
  66. package/build/data/createStructuredSelector.spec.js +0 -42
  67. package/build/data/diff/diffs.spec.d.ts +0 -1
  68. package/build/data/diff/diffs.spec.js +0 -45
  69. package/build/data/getAccessor.spec.d.ts +0 -1
  70. package/build/data/getAccessor.spec.js +0 -10
  71. package/build/data/getSelector.spec.d.ts +0 -1
  72. package/build/data/getSelector.spec.js +0 -36
  73. package/build/data/ops/append.spec.d.ts +0 -1
  74. package/build/data/ops/append.spec.js +0 -24
  75. package/build/data/ops/filter.spec.d.ts +0 -1
  76. package/build/data/ops/filter.spec.js +0 -25
  77. package/build/data/ops/findTreeNode.spec.d.ts +0 -1
  78. package/build/data/ops/findTreeNode.spec.js +0 -20
  79. package/build/data/ops/merge.spec.d.ts +0 -1
  80. package/build/data/ops/merge.spec.js +0 -23
  81. package/build/data/ops/removeTreeNodes.spec.d.ts +0 -1
  82. package/build/data/ops/removeTreeNodes.spec.js +0 -35
  83. package/build/data/ops/updateArray.spec.d.ts +0 -1
  84. package/build/data/ops/updateArray.spec.js +0 -33
  85. package/build/data/ops/updateTree.spec.d.ts +0 -1
  86. package/build/data/ops/updateTree.spec.js +0 -44
  87. package/build/global.scss +0 -14
  88. package/build/hooks/invokeCallback.spec.d.ts +0 -1
  89. package/build/hooks/invokeCallback.spec.js +0 -44
  90. package/build/hooks/resolveCallback.spec.d.ts +0 -1
  91. package/build/hooks/resolveCallback.spec.js +0 -35
  92. package/build/hooks/store.spec.d.ts +0 -1
  93. package/build/hooks/store.spec.js +0 -48
  94. package/build/hooks/useTrigger.spec.d.ts +0 -1
  95. package/build/hooks/useTrigger.spec.js +0 -59
  96. package/build/index.scss +0 -6
  97. package/build/svg/Svg.scss +0 -28
  98. package/build/svg/index.scss +0 -9
  99. package/build/ui/Controller.spec.d.ts +0 -1
  100. package/build/ui/Controller.spec.js +0 -251
  101. package/build/ui/Cx.spec.d.ts +0 -1
  102. package/build/ui/Cx.spec.js +0 -153
  103. package/build/ui/DataProxy.spec.d.ts +0 -1
  104. package/build/ui/DataProxy.spec.js +0 -208
  105. package/build/ui/IsolatedScope.spec.d.ts +0 -1
  106. package/build/ui/IsolatedScope.spec.js +0 -42
  107. package/build/ui/Repeater.spec.d.ts +0 -1
  108. package/build/ui/Repeater.spec.js +0 -109
  109. package/build/ui/Rescope.spec.d.ts +0 -1
  110. package/build/ui/Rescope.spec.js +0 -134
  111. package/build/ui/Restate.spec.d.ts +0 -1
  112. package/build/ui/Restate.spec.js +0 -257
  113. package/build/ui/adapter/ArrayAdapter.spec.d.ts +0 -1
  114. package/build/ui/adapter/ArrayAdapter.spec.js +0 -44
  115. package/build/ui/adapter/TreeAdapter.spec.d.ts +0 -1
  116. package/build/ui/adapter/TreeAdapter.spec.js +0 -71
  117. package/build/ui/app/Url.spec.d.ts +0 -1
  118. package/build/ui/app/Url.spec.js +0 -43
  119. package/build/ui/createFunctionalComponent.spec.d.ts +0 -1
  120. package/build/ui/createFunctionalComponent.spec.js +0 -272
  121. package/build/ui/index.scss +0 -2
  122. package/build/ui/layout/ContentPlaceholder.spec.d.ts +0 -1
  123. package/build/ui/layout/ContentPlaceholder.spec.js +0 -333
  124. package/build/ui/layout/FirstVisibleChildLayout.spec.d.ts +0 -1
  125. package/build/ui/layout/FirstVisibleChildLayout.spec.js +0 -101
  126. package/build/ui/layout/LabelsLeftLayout.scss +0 -47
  127. package/build/ui/layout/LabelsTopLayout.scss +0 -65
  128. package/build/ui/layout/index.scss +0 -3
  129. package/build/ui/layout/variables.scss +0 -2
  130. package/build/ui/variables.scss +0 -2
  131. package/build/util/Format.spec.d.ts +0 -1
  132. package/build/util/Format.spec.js +0 -58
  133. package/build/util/TraversalStack.spec.d.ts +0 -1
  134. package/build/util/TraversalStack.spec.js +0 -43
  135. package/build/util/call-once.scss +0 -7
  136. package/build/util/date/upperBoundCheck.spec.d.ts +0 -1
  137. package/build/util/date/upperBoundCheck.spec.js +0 -22
  138. package/build/util/getSearchQueryPredicate.spec.d.ts +0 -1
  139. package/build/util/getSearchQueryPredicate.spec.js +0 -33
  140. package/build/util/index.scss +0 -11
  141. package/build/util/isValidIdentifierName.spec.d.ts +0 -1
  142. package/build/util/isValidIdentifierName.spec.js +0 -28
  143. package/build/util/routeAppend.spec.d.ts +0 -1
  144. package/build/util/routeAppend.spec.js +0 -14
  145. package/build/util/scss/add-rules.scss +0 -40
  146. package/build/util/scss/calc.scss +0 -45
  147. package/build/util/scss/call-once.scss +0 -13
  148. package/build/util/scss/clockwise.scss +0 -49
  149. package/build/util/scss/colors.scss +0 -10
  150. package/build/util/scss/deep-get.scss +0 -12
  151. package/build/util/scss/deep-merge.scss +0 -21
  152. package/build/util/scss/divide.scss +0 -3
  153. package/build/util/scss/include.scss +0 -48
  154. package/build/util/scss/index.scss +0 -9
  155. package/build/variables.scss +0 -217
  156. package/build/widgets/AccessorBindings.spec.d.ts +0 -1
  157. package/build/widgets/AccessorBindings.spec.js +0 -40
  158. package/build/widgets/Button.scss +0 -119
  159. package/build/widgets/Button.variables.scss +0 -117
  160. package/build/widgets/CxCredit.scss +0 -39
  161. package/build/widgets/FlexBox.scss +0 -148
  162. package/build/widgets/Heading.scss +0 -40
  163. package/build/widgets/HighlightedSearchText.scss +0 -20
  164. package/build/widgets/HtmlElement.spec.d.ts +0 -1
  165. package/build/widgets/HtmlElement.spec.js +0 -38
  166. package/build/widgets/Icon.scss +0 -22
  167. package/build/widgets/List.scss +0 -93
  168. package/build/widgets/ProgressBar.scss +0 -51
  169. package/build/widgets/Resizer.scss +0 -44
  170. package/build/widgets/Section.scss +0 -56
  171. package/build/widgets/animations.scss +0 -11
  172. package/build/widgets/drag-drop/DragClone.scss +0 -36
  173. package/build/widgets/drag-drop/DragHandle.scss +0 -19
  174. package/build/widgets/drag-drop/DragSource.scss +0 -27
  175. package/build/widgets/drag-drop/DropZone.scss +0 -77
  176. package/build/widgets/drag-drop/index.scss +0 -4
  177. package/build/widgets/drag-drop/variables.scss +0 -15
  178. package/build/widgets/form/Calendar.scss +0 -199
  179. package/build/widgets/form/Calendar.variables.scss +0 -64
  180. package/build/widgets/form/Checkbox.scss +0 -129
  181. package/build/widgets/form/Checkbox.variables.scss +0 -40
  182. package/build/widgets/form/ColorField.scss +0 -98
  183. package/build/widgets/form/ColorPicker.scss +0 -285
  184. package/build/widgets/form/ColorPicker.variables.scss +0 -22
  185. package/build/widgets/form/DateTimeField.scss +0 -92
  186. package/build/widgets/form/DateTimePicker.scss +0 -47
  187. package/build/widgets/form/Field.scss +0 -164
  188. package/build/widgets/form/HelpText.scss +0 -24
  189. package/build/widgets/form/Label.scss +0 -38
  190. package/build/widgets/form/LookupField.scss +0 -221
  191. package/build/widgets/form/MonthField.scss +0 -100
  192. package/build/widgets/form/MonthPicker.scss +0 -125
  193. package/build/widgets/form/NumberField.scss +0 -63
  194. package/build/widgets/form/Radio.scss +0 -123
  195. package/build/widgets/form/Radio.variables.scss +0 -46
  196. package/build/widgets/form/Select.scss +0 -101
  197. package/build/widgets/form/Slider.scss +0 -121
  198. package/build/widgets/form/Switch.scss +0 -142
  199. package/build/widgets/form/TextArea.scss +0 -45
  200. package/build/widgets/form/TextField.scss +0 -57
  201. package/build/widgets/form/UploadButton.scss +0 -49
  202. package/build/widgets/form/ValidationError.scss +0 -23
  203. package/build/widgets/form/ValidationGroup.spec.d.ts +0 -1
  204. package/build/widgets/form/ValidationGroup.spec.js +0 -62
  205. package/build/widgets/form/Wheel.scss +0 -152
  206. package/build/widgets/form/index.scss +0 -24
  207. package/build/widgets/form/variables.scss +0 -355
  208. package/build/widgets/grid/Grid.scss +0 -640
  209. package/build/widgets/grid/Pagination.scss +0 -115
  210. package/build/widgets/grid/TreeNode.scss +0 -90
  211. package/build/widgets/grid/index.scss +0 -4
  212. package/build/widgets/grid/variables.scss +0 -137
  213. package/build/widgets/index.scss +0 -16
  214. package/build/widgets/nav/Link.scss +0 -20
  215. package/build/widgets/nav/Menu.scss +0 -76
  216. package/build/widgets/nav/Menu.variables.scss +0 -25
  217. package/build/widgets/nav/MenuItem.scss +0 -130
  218. package/build/widgets/nav/Route.spec.d.ts +0 -1
  219. package/build/widgets/nav/Route.spec.js +0 -15
  220. package/build/widgets/nav/Scroller.scss +0 -148
  221. package/build/widgets/nav/Tab.scss +0 -82
  222. package/build/widgets/nav/Tab.variables.scss +0 -84
  223. package/build/widgets/nav/cover.scss +0 -22
  224. package/build/widgets/nav/index.scss +0 -6
  225. package/build/widgets/nav/variables.scss +0 -27
  226. package/build/widgets/overlay/Dropdown.scss +0 -186
  227. package/build/widgets/overlay/Overlay.scss +0 -68
  228. package/build/widgets/overlay/Toast.scss +0 -164
  229. package/build/widgets/overlay/Tooltip.scss +0 -177
  230. package/build/widgets/overlay/Window.scss +0 -129
  231. package/build/widgets/overlay/Window.variables.scss +0 -62
  232. package/build/widgets/overlay/captureMouse.scss +0 -13
  233. package/build/widgets/overlay/index.scss +0 -15
  234. package/build/widgets/overlay/variables.scss +0 -85
  235. 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 {};