goblin-desktop 2.0.0 → 2.0.2

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 (130) hide show
  1. package/README.md +108 -108
  2. package/builders/wizard.js +478 -478
  3. package/contexts.js +13 -13
  4. package/desktop-manager.js +10 -10
  5. package/desktop-window.js +13 -13
  6. package/desktop.js +13 -13
  7. package/lib/service.js +135 -135
  8. package/package.json +36 -36
  9. package/password-wizard.js +13 -13
  10. package/quest-run-wizard.js +13 -13
  11. package/taskbar.js +13 -13
  12. package/widgets/audio/sfx.js +177 -177
  13. package/widgets/board/view.js +37 -37
  14. package/widgets/board/widget.js +65 -65
  15. package/widgets/contexts/logic-handlers.js +36 -36
  16. package/widgets/contexts/service.js +40 -40
  17. package/widgets/contexts/view.js +22 -22
  18. package/widgets/contexts/widget.js +147 -147
  19. package/widgets/datagrid/datagrid-entity.js +82 -82
  20. package/widgets/datagrid/datagrid-headers.js +272 -272
  21. package/widgets/datagrid/datagrid-item.js +82 -82
  22. package/widgets/datagrid/styles.js +13 -13
  23. package/widgets/datagrid/widget.js +191 -191
  24. package/widgets/datagrid-cell/styles.js +52 -52
  25. package/widgets/datagrid-cell/widget.js +41 -41
  26. package/widgets/default/view.js +91 -91
  27. package/widgets/desktop/compensator.js +9 -9
  28. package/widgets/desktop/logic-handlers.js +237 -237
  29. package/widgets/desktop/service.js +816 -816
  30. package/widgets/desktop/styles.js +28 -28
  31. package/widgets/desktop/widget.js +175 -175
  32. package/widgets/desktop-clock/styles.js +69 -69
  33. package/widgets/desktop-clock/widget.js +387 -387
  34. package/widgets/desktop-clock-clock/styles.js +56 -56
  35. package/widgets/desktop-clock-clock/widget.js +96 -96
  36. package/widgets/desktop-clock-menu/styles.js +129 -129
  37. package/widgets/desktop-clock-menu/widget.js +63 -63
  38. package/widgets/desktop-connection-status/reducer.js +15 -15
  39. package/widgets/desktop-connection-status/styles.js +44 -44
  40. package/widgets/desktop-connection-status/widget.js +129 -129
  41. package/widgets/desktop-content/widget.js +68 -68
  42. package/widgets/desktop-footer/reducer.js +31 -31
  43. package/widgets/desktop-footer/styles.js +36 -36
  44. package/widgets/desktop-footer/widget.js +52 -52
  45. package/widgets/desktop-monitors/styles.js +155 -155
  46. package/widgets/desktop-monitors/widget.js +273 -273
  47. package/widgets/desktop-notebook/styles.js +155 -155
  48. package/widgets/desktop-notebook/widget.js +253 -253
  49. package/widgets/desktop-notifications/styles.js +147 -147
  50. package/widgets/desktop-notifications/widget.js +231 -231
  51. package/widgets/desktop-scale/reducer.js +15 -15
  52. package/widgets/desktop-scale/styles.js +48 -48
  53. package/widgets/desktop-scale/widget.js +172 -172
  54. package/widgets/desktop-state-monitor/styles.js +72 -72
  55. package/widgets/desktop-state-monitor/widget.js +123 -123
  56. package/widgets/desktop-taskbar/widget.js +57 -57
  57. package/widgets/desktop-themes-menu/widget.js +121 -121
  58. package/widgets/desktop-topbar/widget.js +201 -201
  59. package/widgets/desktop-window/service.js +56 -56
  60. package/widgets/desktop-window/styles.js +22 -22
  61. package/widgets/desktop-window/widget.js +70 -70
  62. package/widgets/detail/view.js +40 -40
  63. package/widgets/detail/widget.js +125 -125
  64. package/widgets/editor/widget.js +80 -80
  65. package/widgets/entity-alerts/styles.js +77 -77
  66. package/widgets/entity-alerts/widget.js +328 -328
  67. package/widgets/entity-list/view.js +36 -36
  68. package/widgets/entity-list/widget.js +209 -209
  69. package/widgets/entity-list-item/widget.js +68 -68
  70. package/widgets/entity-row/styles.js +104 -104
  71. package/widgets/entity-row/widget.js +523 -523
  72. package/widgets/entity-row-button/styles.js +46 -46
  73. package/widgets/entity-row-button/widget.js +57 -57
  74. package/widgets/entity-view/reducer.js +20 -20
  75. package/widgets/entity-view/styles.js +90 -90
  76. package/widgets/entity-view/widget.js +516 -516
  77. package/widgets/facet-checkbox/styles.js +17 -17
  78. package/widgets/facet-checkbox/widget.js +43 -43
  79. package/widgets/facet-filter/widget.js +94 -94
  80. package/widgets/facet-filter-add/styles.js +30 -30
  81. package/widgets/facet-filter-add/widget.js +105 -105
  82. package/widgets/facet-filter-button/styles.js +74 -74
  83. package/widgets/facet-filter-button/widget.js +214 -214
  84. package/widgets/facet-filter-list-dialog/styles.js +59 -59
  85. package/widgets/facet-filter-list-dialog/widget.js +253 -253
  86. package/widgets/facet-filter-list-dialog-footer/styles.js +22 -22
  87. package/widgets/facet-filter-list-dialog-footer/widget.js +105 -105
  88. package/widgets/facet-filter-range-dialog/styles.js +82 -82
  89. package/widgets/facet-filter-range-dialog/widget.js +398 -398
  90. package/widgets/facet-filter-range-dialog-footer/styles.js +22 -22
  91. package/widgets/facet-filter-range-dialog-footer/widget.js +182 -182
  92. package/widgets/gamepad/widget.js +75 -75
  93. package/widgets/helpers/facet-helpers.js +105 -105
  94. package/widgets/hinter/reducer.js +35 -35
  95. package/widgets/hinter/styles.js +79 -79
  96. package/widgets/hinter/view.js +31 -31
  97. package/widgets/hinter/widget.js +292 -292
  98. package/widgets/junction/styles.js +22 -22
  99. package/widgets/junction/widget.js +50 -50
  100. package/widgets/main-tab-menu/widget.js +136 -136
  101. package/widgets/map/view.js +49 -49
  102. package/widgets/map/widget.js +65 -65
  103. package/widgets/monitor/widget.js +66 -66
  104. package/widgets/navigating-layer/widget.js +25 -25
  105. package/widgets/notifications-button/widget.js +44 -44
  106. package/widgets/password-wizard/service.js +53 -53
  107. package/widgets/password-wizard/ui.js +66 -66
  108. package/widgets/plugin/styles.js +294 -294
  109. package/widgets/plugin/widget.js +636 -636
  110. package/widgets/quest-run-wizard/service.js +49 -49
  111. package/widgets/quest-run-wizard/ui.js +25 -25
  112. package/widgets/search/styles.js +80 -80
  113. package/widgets/search/widget.js +286 -284
  114. package/widgets/simple/view.js +29 -29
  115. package/widgets/status-filters/widget.js +121 -121
  116. package/widgets/tab/styles.js +16 -16
  117. package/widgets/tab/widget.js +88 -88
  118. package/widgets/tab-content/widget.js +35 -35
  119. package/widgets/tabs/widget.js +48 -48
  120. package/widgets/taskbar/service.js +99 -99
  121. package/widgets/taskbar/view.js +24 -24
  122. package/widgets/taskbar/widget.js +169 -169
  123. package/widgets/widget-doc-caller/widget.js +55 -55
  124. package/widgets/wizard/widget.js +299 -299
  125. package/widgets/wizard-buttons/widget.js +107 -107
  126. package/widgets/workitem/styles.js +281 -281
  127. package/widgets/workitem/view.js +62 -62
  128. package/widgets/workitem/widget.js +967 -940
  129. package/widgets/workitem-dialog/widget.js +86 -86
  130. package/widgets/workitem-fields/widget.js +63 -63
@@ -1,59 +1,59 @@
1
- /******************************************************************************/
2
-
3
- export default function styles(theme) {
4
- const facetFilterDialog = {
5
- position: 'absolute',
6
- top: '0px',
7
- bottom: '0px',
8
- left: '0px',
9
- right: '0px',
10
- display: 'flex',
11
- flexDirection: 'column',
12
- };
13
-
14
- const header = {
15
- height: '50px',
16
- minHeight: '50px',
17
- padding: '0px 10px 0px 30px',
18
- display: 'flex',
19
- flexDirection: 'row',
20
- alignItems: 'center',
21
- borderRadius: '0px 0px 3px 3px',
22
- backgroundColor: theme.palette.paneNavigatorBackground,
23
- };
24
-
25
- const buttons = {
26
- padding: '20px 30px 0px 30px',
27
- flexGrow: 1,
28
- display: 'flex',
29
- flexDirection: 'column',
30
- overflow: 'hidden',
31
- };
32
-
33
- const scrollable = {
34
- flexGrow: 1,
35
- overflowY: 'auto',
36
- };
37
-
38
- const letter = {
39
- margin: '20px 0px 5px 0px',
40
- borderBottom: `1px solid ${theme.palette.textColor}`,
41
- };
42
-
43
- const closeButton = {
44
- position: 'absolute',
45
- top: '0px',
46
- right: '0px',
47
- };
48
-
49
- return {
50
- facetFilterDialog,
51
- header,
52
- buttons,
53
- scrollable,
54
- letter,
55
- closeButton,
56
- };
57
- }
58
-
59
- /******************************************************************************/
1
+ /******************************************************************************/
2
+
3
+ export default function styles(theme) {
4
+ const facetFilterDialog = {
5
+ position: 'absolute',
6
+ top: '0px',
7
+ bottom: '0px',
8
+ left: '0px',
9
+ right: '0px',
10
+ display: 'flex',
11
+ flexDirection: 'column',
12
+ };
13
+
14
+ const header = {
15
+ height: '50px',
16
+ minHeight: '50px',
17
+ padding: '0px 10px 0px 30px',
18
+ display: 'flex',
19
+ flexDirection: 'row',
20
+ alignItems: 'center',
21
+ borderRadius: '0px 0px 3px 3px',
22
+ backgroundColor: theme.palette.paneNavigatorBackground,
23
+ };
24
+
25
+ const buttons = {
26
+ padding: '20px 30px 0px 30px',
27
+ flexGrow: 1,
28
+ display: 'flex',
29
+ flexDirection: 'column',
30
+ overflow: 'hidden',
31
+ };
32
+
33
+ const scrollable = {
34
+ flexGrow: 1,
35
+ overflowY: 'auto',
36
+ };
37
+
38
+ const letter = {
39
+ margin: '20px 0px 5px 0px',
40
+ borderBottom: `1px solid ${theme.palette.textColor}`,
41
+ };
42
+
43
+ const closeButton = {
44
+ position: 'absolute',
45
+ top: '0px',
46
+ right: '0px',
47
+ };
48
+
49
+ return {
50
+ facetFilterDialog,
51
+ header,
52
+ buttons,
53
+ scrollable,
54
+ letter,
55
+ closeButton,
56
+ };
57
+ }
58
+
59
+ /******************************************************************************/
@@ -1,253 +1,253 @@
1
- import React from 'react';
2
- import Widget from 'goblin-laboratory/widgets/widget';
3
- import DialogModal from 'goblin-gadgets/widgets/dialog-modal/widget';
4
- import Label from 'goblin-gadgets/widgets/label/widget';
5
- import Button from 'goblin-gadgets/widgets/button/widget';
6
- import TextFieldNC from 'goblin-gadgets/widgets/text-field-nc/widget';
7
- import FacetCheckbox from '../facet-checkbox/widget.js';
8
- import FacetFilterListDialogFooter from '../facet-filter-list-dialog-footer/widget.js';
9
- import FacetHelpers from '../helpers/facet-helpers';
10
- import {Unit} from 'goblin-theme';
11
- import T from 't';
12
- const px = Unit.toPx;
13
-
14
- class FacetFilterListDialog extends Widget {
15
- constructor() {
16
- super(...arguments);
17
-
18
- this.state = {
19
- filter: null,
20
- };
21
-
22
- this.changeFacet = this.changeFacet.bind(this);
23
- this.filterChange = this.filterChange.bind(this);
24
- this.onClose = this.onClose.bind(this);
25
- }
26
-
27
- //#region get/set
28
- get filter() {
29
- return this.state.filter;
30
- }
31
- set filter(value) {
32
- this.setState({
33
- filter: value,
34
- });
35
- }
36
- //#endregion
37
-
38
- getFilteredKeys(filter) {
39
- const keys = this.getState()
40
- .backend.get(this.props.id)
41
- .get('checkboxes')
42
- .get(this.props.name)
43
- .keySeq();
44
- const type = FacetHelpers.getType(keys);
45
- filter = FacetHelpers.preprocessFilter(filter);
46
-
47
- return keys.filter((key) => {
48
- const text = FacetHelpers.format(key, type);
49
- return FacetHelpers.match(text, filter);
50
- });
51
- }
52
-
53
- onClose() {
54
- this.props.onClose();
55
- }
56
-
57
- changeFacet(facet) {
58
- return () => {
59
- this.doAs('list', 'toggle-facet-filter', {
60
- filterName: this.props.name,
61
- facet: facet,
62
- });
63
- };
64
- }
65
-
66
- initAllFacets(keys) {
67
- this.doAs('list', 'init-all-facets', {
68
- filterName: this.props.name,
69
- keys,
70
- });
71
- }
72
-
73
- filterChange(text) {
74
- this.filter = text;
75
-
76
- const keys = this.getFilteredKeys(text);
77
- this.initAllFacets(keys);
78
- }
79
-
80
- /******************************************************************************/
81
-
82
- renderClose() {
83
- return null;
84
- //- return (
85
- //- <div className={this.styles.classNames.closeButton}>
86
- //- <Button
87
- //- border="none"
88
- //- glyph="solid/times"
89
- //- glyphSize="120%"
90
- //- height="32px"
91
- //- width="32px"
92
- //- onClick={this.onClose}
93
- //- />
94
- //- </div>
95
- //- );
96
- }
97
-
98
- renderHeader(keys) {
99
- if (this.props.numberOfCheckboxes <= 5) {
100
- return null;
101
- }
102
-
103
- return (
104
- <div className={this.styles.classNames.header}>
105
- <Label text={T('Filtre')} />
106
- <TextFieldNC
107
- width="300px"
108
- shape={this.filter ? 'left-rounded' : 'rounded'}
109
- value={this.filter}
110
- changeMode="throttled"
111
- throttleDelay={200}
112
- onChange={this.filterChange}
113
- />
114
- <Button
115
- kind="combo"
116
- shape="right-rounded"
117
- leftSpacing="overlap"
118
- glyph="solid/eraser"
119
- tooltip={T('Tout montrer')}
120
- show={!!this.filter}
121
- onClick={() => this.filterChange(null)}
122
- />
123
- </div>
124
- );
125
- }
126
-
127
- renderFooter(keys) {
128
- return (
129
- <FacetFilterListDialogFooter
130
- id={this.props.id}
131
- name={this.props.name}
132
- keys={keys}
133
- />
134
- );
135
- }
136
-
137
- renderButtons(keys) {
138
- const result = [];
139
- const type = FacetHelpers.getType(keys);
140
-
141
- if (this.props.numberOfCheckboxes < 20) {
142
- for (const key of keys) {
143
- result.push(
144
- <FacetCheckbox
145
- id={this.props.id}
146
- key={`${key}-val`}
147
- name={this.props.name}
148
- text={FacetHelpers.format(key, type, this.props.propInfos)}
149
- value={key}
150
- onChange={this.changeFacet(key)}
151
- />
152
- );
153
- }
154
- } else {
155
- let lastTab = null;
156
- for (const key of keys) {
157
- const tab = FacetHelpers.extractTab(key, type);
158
- if (lastTab !== tab.internal) {
159
- lastTab = tab.internal;
160
- result.push(
161
- <div
162
- key={`${key}-${tab.internal}`}
163
- className={this.styles.classNames.letter}
164
- >
165
- <Label
166
- fontSize="300%"
167
- textColor={this.context.theme.palette.mainTabBackground}
168
- text={tab.displayed}
169
- />
170
- </div>
171
- );
172
- }
173
- result.push(
174
- <FacetCheckbox
175
- id={this.props.id}
176
- key={`${key}-val`}
177
- name={this.props.name}
178
- text={FacetHelpers.format(key, type, this.props.propInfos)}
179
- value={key}
180
- onChange={this.changeFacet(key)}
181
- />
182
- );
183
- }
184
- }
185
- return result;
186
- }
187
-
188
- renderList() {
189
- const keys = this.getFilteredKeys(this.filter);
190
-
191
- return (
192
- <div className={this.styles.classNames.facetFilterDialog}>
193
- {this.renderHeader(keys)}
194
- <div className={this.styles.classNames.buttons}>
195
- <div className={this.styles.classNames.scrollable}>
196
- {this.renderButtons(keys)}
197
- </div>
198
- </div>
199
- {this.renderFooter(keys)}
200
- {this.renderClose()}
201
- </div>
202
- );
203
- }
204
-
205
- render() {
206
- if (this.props.loading) {
207
- return null;
208
- }
209
- const windowHeight = window.innerHeight;
210
- const r = this.props.parentButtonRect;
211
- let centerY = r.top + r.height / 2;
212
- let shiftY = 0;
213
- const width = 520;
214
- const count = this.props.numberOfCheckboxes;
215
- const height = Math.min(Math.max(count * 20 + 100, 200), windowHeight - 20);
216
-
217
- if (centerY - height / 2 < 10) {
218
- const offset = height / 2 - centerY + 10;
219
- centerY += offset;
220
- shiftY = -offset;
221
- }
222
- if (centerY + height / 2 > windowHeight - 10) {
223
- const offset = centerY + height / 2 - (windowHeight - 10);
224
- centerY -= offset;
225
- shiftY = offset;
226
- }
227
-
228
- return (
229
- <DialogModal
230
- width={px(width)}
231
- height={px(height)}
232
- left={px(r.right + 40)}
233
- center={px(centerY)}
234
- triangleShift={px(shiftY)}
235
- backgroundClose={true}
236
- close={this.onClose}
237
- >
238
- {this.renderList()}
239
- </DialogModal>
240
- );
241
- }
242
- }
243
-
244
- /******************************************************************************/
245
-
246
- export default Widget.connect((state, props) => {
247
- const flags = state.get(`backend.${props.id}.checkboxes.${props.name}`);
248
- if (flags) {
249
- return {numberOfCheckboxes: flags.size};
250
- } else {
251
- return {loading: true};
252
- }
253
- })(FacetFilterListDialog);
1
+ import React from 'react';
2
+ import Widget from 'goblin-laboratory/widgets/widget';
3
+ import DialogModal from 'goblin-gadgets/widgets/dialog-modal/widget';
4
+ import Label from 'goblin-gadgets/widgets/label/widget';
5
+ import Button from 'goblin-gadgets/widgets/button/widget';
6
+ import TextFieldNC from 'goblin-gadgets/widgets/text-field-nc/widget';
7
+ import FacetCheckbox from '../facet-checkbox/widget.js';
8
+ import FacetFilterListDialogFooter from '../facet-filter-list-dialog-footer/widget.js';
9
+ import FacetHelpers from '../helpers/facet-helpers';
10
+ import {Unit} from 'goblin-theme';
11
+ import T from 't';
12
+ const px = Unit.toPx;
13
+
14
+ class FacetFilterListDialog extends Widget {
15
+ constructor() {
16
+ super(...arguments);
17
+
18
+ this.state = {
19
+ filter: null,
20
+ };
21
+
22
+ this.changeFacet = this.changeFacet.bind(this);
23
+ this.filterChange = this.filterChange.bind(this);
24
+ this.onClose = this.onClose.bind(this);
25
+ }
26
+
27
+ //#region get/set
28
+ get filter() {
29
+ return this.state.filter;
30
+ }
31
+ set filter(value) {
32
+ this.setState({
33
+ filter: value,
34
+ });
35
+ }
36
+ //#endregion
37
+
38
+ getFilteredKeys(filter) {
39
+ const keys = this.getState()
40
+ .backend.get(this.props.id)
41
+ .get('checkboxes')
42
+ .get(this.props.name)
43
+ .keySeq();
44
+ const type = FacetHelpers.getType(keys);
45
+ filter = FacetHelpers.preprocessFilter(filter);
46
+
47
+ return keys.filter((key) => {
48
+ const text = FacetHelpers.format(key, type);
49
+ return FacetHelpers.match(text, filter);
50
+ });
51
+ }
52
+
53
+ onClose() {
54
+ this.props.onClose();
55
+ }
56
+
57
+ changeFacet(facet) {
58
+ return () => {
59
+ this.doAs('list', 'toggle-facet-filter', {
60
+ filterName: this.props.name,
61
+ facet: facet,
62
+ });
63
+ };
64
+ }
65
+
66
+ initAllFacets(keys) {
67
+ this.doAs('list', 'init-all-facets', {
68
+ filterName: this.props.name,
69
+ keys,
70
+ });
71
+ }
72
+
73
+ filterChange(text) {
74
+ this.filter = text;
75
+
76
+ const keys = this.getFilteredKeys(text);
77
+ this.initAllFacets(keys);
78
+ }
79
+
80
+ /******************************************************************************/
81
+
82
+ renderClose() {
83
+ return null;
84
+ //- return (
85
+ //- <div className={this.styles.classNames.closeButton}>
86
+ //- <Button
87
+ //- border="none"
88
+ //- glyph="solid/times"
89
+ //- glyphSize="120%"
90
+ //- height="32px"
91
+ //- width="32px"
92
+ //- onClick={this.onClose}
93
+ //- />
94
+ //- </div>
95
+ //- );
96
+ }
97
+
98
+ renderHeader(keys) {
99
+ if (this.props.numberOfCheckboxes <= 5) {
100
+ return null;
101
+ }
102
+
103
+ return (
104
+ <div className={this.styles.classNames.header}>
105
+ <Label text={T('Filtre')} />
106
+ <TextFieldNC
107
+ width="300px"
108
+ shape={this.filter ? 'left-rounded' : 'rounded'}
109
+ value={this.filter}
110
+ changeMode="throttled"
111
+ throttleDelay={200}
112
+ onChange={this.filterChange}
113
+ />
114
+ <Button
115
+ kind="combo"
116
+ shape="right-rounded"
117
+ leftSpacing="overlap"
118
+ glyph="solid/eraser"
119
+ tooltip={T('Tout montrer')}
120
+ show={!!this.filter}
121
+ onClick={() => this.filterChange(null)}
122
+ />
123
+ </div>
124
+ );
125
+ }
126
+
127
+ renderFooter(keys) {
128
+ return (
129
+ <FacetFilterListDialogFooter
130
+ id={this.props.id}
131
+ name={this.props.name}
132
+ keys={keys}
133
+ />
134
+ );
135
+ }
136
+
137
+ renderButtons(keys) {
138
+ const result = [];
139
+ const type = FacetHelpers.getType(keys);
140
+
141
+ if (this.props.numberOfCheckboxes < 20) {
142
+ for (const key of keys) {
143
+ result.push(
144
+ <FacetCheckbox
145
+ id={this.props.id}
146
+ key={`${key}-val`}
147
+ name={this.props.name}
148
+ text={FacetHelpers.format(key, type, this.props.propInfos)}
149
+ value={key}
150
+ onChange={this.changeFacet(key)}
151
+ />
152
+ );
153
+ }
154
+ } else {
155
+ let lastTab = null;
156
+ for (const key of keys) {
157
+ const tab = FacetHelpers.extractTab(key, type);
158
+ if (lastTab !== tab.internal) {
159
+ lastTab = tab.internal;
160
+ result.push(
161
+ <div
162
+ key={`${key}-${tab.internal}`}
163
+ className={this.styles.classNames.letter}
164
+ >
165
+ <Label
166
+ fontSize="300%"
167
+ textColor={this.context.theme.palette.mainTabBackground}
168
+ text={tab.displayed}
169
+ />
170
+ </div>
171
+ );
172
+ }
173
+ result.push(
174
+ <FacetCheckbox
175
+ id={this.props.id}
176
+ key={`${key}-val`}
177
+ name={this.props.name}
178
+ text={FacetHelpers.format(key, type, this.props.propInfos)}
179
+ value={key}
180
+ onChange={this.changeFacet(key)}
181
+ />
182
+ );
183
+ }
184
+ }
185
+ return result;
186
+ }
187
+
188
+ renderList() {
189
+ const keys = this.getFilteredKeys(this.filter);
190
+
191
+ return (
192
+ <div className={this.styles.classNames.facetFilterDialog}>
193
+ {this.renderHeader(keys)}
194
+ <div className={this.styles.classNames.buttons}>
195
+ <div className={this.styles.classNames.scrollable}>
196
+ {this.renderButtons(keys)}
197
+ </div>
198
+ </div>
199
+ {this.renderFooter(keys)}
200
+ {this.renderClose()}
201
+ </div>
202
+ );
203
+ }
204
+
205
+ render() {
206
+ if (this.props.loading) {
207
+ return null;
208
+ }
209
+ const windowHeight = window.innerHeight;
210
+ const r = this.props.parentButtonRect;
211
+ let centerY = r.top + r.height / 2;
212
+ let shiftY = 0;
213
+ const width = 520;
214
+ const count = this.props.numberOfCheckboxes;
215
+ const height = Math.min(Math.max(count * 20 + 100, 200), windowHeight - 20);
216
+
217
+ if (centerY - height / 2 < 10) {
218
+ const offset = height / 2 - centerY + 10;
219
+ centerY += offset;
220
+ shiftY = -offset;
221
+ }
222
+ if (centerY + height / 2 > windowHeight - 10) {
223
+ const offset = centerY + height / 2 - (windowHeight - 10);
224
+ centerY -= offset;
225
+ shiftY = offset;
226
+ }
227
+
228
+ return (
229
+ <DialogModal
230
+ width={px(width)}
231
+ height={px(height)}
232
+ left={px(r.right + 40)}
233
+ center={px(centerY)}
234
+ triangleShift={px(shiftY)}
235
+ backgroundClose={true}
236
+ close={this.onClose}
237
+ >
238
+ {this.renderList()}
239
+ </DialogModal>
240
+ );
241
+ }
242
+ }
243
+
244
+ /******************************************************************************/
245
+
246
+ export default Widget.connect((state, props) => {
247
+ const flags = state.get(`backend.${props.id}.checkboxes.${props.name}`);
248
+ if (flags) {
249
+ return {numberOfCheckboxes: flags.size};
250
+ } else {
251
+ return {loading: true};
252
+ }
253
+ })(FacetFilterListDialog);
@@ -1,22 +1,22 @@
1
- /******************************************************************************/
2
-
3
- export default function styles(theme) {
4
- const footer = {
5
- height: '50px',
6
- minHeight: '50px',
7
- padding: '0px 10px 0px 30px',
8
- display: 'flex',
9
- flexDirection: 'row',
10
- alignItems: 'center',
11
- borderRadius: '0px 0px 3px 3px',
12
- backgroundColor: theme.palette.paneNavigatorBackground,
13
- };
14
-
15
- const sajex = {
16
- flexGrow: 1,
17
- };
18
-
19
- return {footer, sajex};
20
- }
21
-
22
- /******************************************************************************/
1
+ /******************************************************************************/
2
+
3
+ export default function styles(theme) {
4
+ const footer = {
5
+ height: '50px',
6
+ minHeight: '50px',
7
+ padding: '0px 10px 0px 30px',
8
+ display: 'flex',
9
+ flexDirection: 'row',
10
+ alignItems: 'center',
11
+ borderRadius: '0px 0px 3px 3px',
12
+ backgroundColor: theme.palette.paneNavigatorBackground,
13
+ };
14
+
15
+ const sajex = {
16
+ flexGrow: 1,
17
+ };
18
+
19
+ return {footer, sajex};
20
+ }
21
+
22
+ /******************************************************************************/