@onehat/ui 0.3.104 → 0.3.106

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onehat/ui",
3
- "version": "0.3.104",
3
+ "version": "0.3.106",
4
4
  "description": "Base UI for OneHat apps",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
@@ -1,4 +1,4 @@
1
- import React, { useState, useEffect, useId, } from 'react';
1
+ import React, { useState, useEffect, } from 'react';
2
2
  import {
3
3
  Column,
4
4
  Row,
@@ -35,7 +35,7 @@ function Container(props) {
35
35
  isWestCollapsed,
36
36
  setIsWestCollapsed,
37
37
  } = props,
38
- id = useId(),
38
+ id = props.id || props.self?.path,
39
39
  canResize = CURRENT_MODE === UI_MODE_WEB,
40
40
  [isReady, setIsReady] = useState(false),
41
41
  [localIsNorthCollapsed, setLocalIsNorthCollapsedRaw] = useState(north ? north.props.startsCollapsed : false),
@@ -48,35 +48,52 @@ function Container(props) {
48
48
  [westWidth, setWestWidthRaw] = useState(west ? west.props.w : 0),
49
49
  setLocalIsNorthCollapsed = (bool) => {
50
50
  setLocalIsNorthCollapsedRaw(bool);
51
- setSaved(id + '-localIsNorthCollapsed', bool);
51
+
52
+ if (id) {
53
+ setSaved(id + '-localIsNorthCollapsed', bool);
54
+ }
52
55
  },
53
56
  setLocalIsSouthCollapsed = (bool) => {
54
57
  setLocalIsSouthCollapsedRaw(bool);
55
- setSaved(id + '-localIsSouthCollapsed', bool);
58
+ if (id) {
59
+ setSaved(id + '-localIsSouthCollapsed', bool);
60
+ }
56
61
  },
57
62
  setLocalIsEastCollapsed = (bool) => {
58
63
  setLocalIsEastCollapsedRaw(bool);
59
- setSaved(id + '-localIsEastCollapsed', bool);
64
+ if (id) {
65
+ setSaved(id + '-localIsEastCollapsed', bool);
66
+ }
60
67
  },
61
68
  setLocalIsWestCollapsed = (bool) => {
62
69
  setLocalIsWestCollapsedRaw(bool);
63
- setSaved(id + '-localIsWestCollapsed', bool);
70
+ if (id) {
71
+ setSaved(id + '-localIsWestCollapsed', bool);
72
+ }
64
73
  },
65
74
  setNorthHeight = (height) => {
66
75
  setNorthHeightRaw(height);
67
- setSaved(id + '-northHeight', height);
76
+ if (id) {
77
+ setSaved(id + '-northHeight', height);
78
+ }
68
79
  },
69
80
  setSouthHeight = (height) => {
70
81
  setSouthHeightRaw(height);
71
- setSaved(id + '-southHeight', height);
82
+ if (id) {
83
+ setSaved(id + '-southHeight', height);
84
+ }
72
85
  },
73
86
  setEastWidth = (width) => {
74
87
  setEastWidthRaw(width);
75
- setSaved(id + '-eastWidth', width);
88
+ if (id) {
89
+ setSaved(id + '-eastWidth', width);
90
+ }
76
91
  },
77
92
  setWestWidth = (width) => {
78
93
  setWestWidthRaw(width);
79
- setSaved(id + '-westWidth', width);
94
+ if (id) {
95
+ setSaved(id + '-westWidth', width);
96
+ }
80
97
  },
81
98
  onNorthResize = (delta) => {
82
99
  const newHeight = northHeight + delta;
@@ -98,53 +115,56 @@ function Container(props) {
98
115
  useEffect(() => {
99
116
  // Restore saved settings
100
117
  (async () => {
101
- let key, val;
102
- key = id + '-localIsNorthCollapsed';
103
- val = await getSaved(key);
104
- if (!_.isNil(val)) {
105
- setLocalIsNorthCollapsedRaw(val);
106
- }
107
118
 
108
- key = id + '-localIsSouthCollapsed';
109
- val = await getSaved(key);
110
- if (!_.isNil(val)) {
111
- setLocalIsSouthCollapsedRaw(val);
112
- }
119
+ if (id) {
120
+ let key, val;
121
+ key = id + '-localIsNorthCollapsed';
122
+ val = await getSaved(key);
123
+ if (!_.isNil(val)) {
124
+ setLocalIsNorthCollapsedRaw(val);
125
+ }
113
126
 
114
- key = id + '-localIsEastCollapsed';
115
- val = await getSaved(key);
116
- if (!_.isNil(val)) {
117
- setLocalIsEastCollapsedRaw(val);
118
- }
127
+ key = id + '-localIsSouthCollapsed';
128
+ val = await getSaved(key);
129
+ if (!_.isNil(val)) {
130
+ setLocalIsSouthCollapsedRaw(val);
131
+ }
119
132
 
120
- key = id + '-localIsWestCollapsed';
121
- val = await getSaved(key);
122
- if (!_.isNil(val)) {
123
- setLocalIsWestCollapsedRaw(val);
124
- }
133
+ key = id + '-localIsEastCollapsed';
134
+ val = await getSaved(key);
135
+ if (!_.isNil(val)) {
136
+ setLocalIsEastCollapsedRaw(val);
137
+ }
125
138
 
126
- key = id + '-northHeight';
127
- val = await getSaved(key);
128
- if (!_.isNil(val)) {
129
- setNorthHeightRaw(val);
130
- }
139
+ key = id + '-localIsWestCollapsed';
140
+ val = await getSaved(key);
141
+ if (!_.isNil(val)) {
142
+ setLocalIsWestCollapsedRaw(val);
143
+ }
131
144
 
132
- key = id + '-southHeight';
133
- val = await getSaved(key);
134
- if (!_.isNil(val)) {
135
- setSouthHeightRaw(val);
136
- }
145
+ key = id + '-northHeight';
146
+ val = await getSaved(key);
147
+ if (!_.isNil(val)) {
148
+ setNorthHeightRaw(val);
149
+ }
137
150
 
138
- key = id + '-eastWidth';
139
- val = await getSaved(key);
140
- if (!_.isNil(val)) {
141
- setEastWidthRaw(val);
142
- }
151
+ key = id + '-southHeight';
152
+ val = await getSaved(key);
153
+ if (!_.isNil(val)) {
154
+ setSouthHeightRaw(val);
155
+ }
143
156
 
144
- key = id + '-westWidth';
145
- val = await getSaved(key);
146
- if (!_.isNil(val)) {
147
- setWestWidthRaw(val);
157
+ key = id + '-eastWidth';
158
+ val = await getSaved(key);
159
+ if (!_.isNil(val)) {
160
+ setEastWidthRaw(val);
161
+ }
162
+
163
+ key = id + '-westWidth';
164
+ val = await getSaved(key);
165
+ if (!_.isNil(val)) {
166
+ setWestWidthRaw(val);
167
+ }
148
168
  }
149
169
 
150
170
  if (!isReady) {
@@ -20,7 +20,7 @@ export default function withComponent(WrappedComponent) {
20
20
  selfRef = useRef({
21
21
  parent,
22
22
  reference,
23
- path: (parent?.path || '' ) + '/' + reference,
23
+ path: reference ? (parent?.path || '' ) + '/' + reference : null,
24
24
  hasChild: (childRef) => {
25
25
  const {
26
26
  reference,
@@ -87,7 +87,7 @@ export default function withEditor(WrappedComponent, isTree = false) {
87
87
  getNewEntityDisplayValue = () => {
88
88
  return newEntityDisplayValueRef.current;
89
89
  },
90
- onAdd = async (values) => {
90
+ onAdd = async (e, values) => {
91
91
  const defaultValues = Repository.getSchema().getDefaultValues();
92
92
  let addValues = values || _.clone(defaultValues);
93
93
 
@@ -1,8 +1,9 @@
1
- import { useState, useEffect, useId, useRef, } from 'react';
1
+ import { useState, useEffect, useRef, } from 'react';
2
2
  import {
3
3
  Column,
4
4
  Modal,
5
5
  Row,
6
+ ScrollView,
6
7
  Text,
7
8
  } from 'native-base';
8
9
  import {
@@ -62,7 +63,7 @@ export default function withFilters(WrappedComponent) {
62
63
  defaultFilters: modelDefaultFilters,
63
64
  ancillaryFilters: modelAncillaryFilters,
64
65
  } = Repository.getSchema().model,
65
- id = props.id || props.path || useId(),
66
+ id = props.id || props.self?.path,
66
67
 
67
68
  // determine the starting filters
68
69
  startingFilters = !_.isEmpty(customFilters) ? customFilters : // custom filters override component filters
@@ -188,7 +189,7 @@ export default function withFilters(WrappedComponent) {
188
189
  }
189
190
  setSlots(newSlots);
190
191
  }
191
- if (save) {
192
+ if (save && id) {
192
193
  setSaved(id + '-filters', filters);
193
194
  }
194
195
  },
@@ -325,9 +326,9 @@ export default function withFilters(WrappedComponent) {
325
326
  const newRepoFilters = [];
326
327
  let filtersToUse = filters
327
328
 
328
- if (!isReady) {
329
+ if (!isReady && id && !isUsingCustomFilters) { // can't save custom filters bc we can't save JS fns in Repository (e.g. getRepoFilters)
329
330
  const savedFilters = await getSaved(id + '-filters');
330
- if (!_.isEmpty(savedFilters) && !isUsingCustomFilters) {
331
+ if (!_.isEmpty(savedFilters)) {
331
332
  // load saved filters
332
333
  filtersToUse = savedFilters;
333
334
  setFilters(savedFilters, true, false); // false to skip save
@@ -411,8 +412,10 @@ export default function withFilters(WrappedComponent) {
411
412
  hasFilters = !!renderedFilters.length;
412
413
  topToolbar = <Toolbar>
413
414
  <Row flex={1} alignItems="center">
414
- <Text pr={2} userSelect="none">Filters:{hasFilters ? '' : ' None'}</Text>
415
- {renderedFilters}
415
+ <ScrollView horizontal={true} contentContainerStyle={{ alignItems: 'center' }}>
416
+ <Text fontStyle="italic" pr={2} userSelect="none">Filters:{hasFilters ? '' : ' None'}</Text>
417
+ {renderedFilters}
418
+ </ScrollView>
416
419
  </Row>
417
420
  <Row flex={hasFilters ? null : 1} alignItems="center" alignSelf="flex-end">
418
421
  <IconButton
@@ -1,4 +1,4 @@
1
- import React, { useState, useEffect, useMemo, useId, } from 'react';
1
+ import React, { useState, useEffect, useMemo, } from 'react';
2
2
  import {
3
3
  HORIZONTAL,
4
4
  VERTICAL,
@@ -42,7 +42,7 @@ export default function DataMgt(props) {
42
42
  } = props;
43
43
 
44
44
  const
45
- id = useId(),
45
+ id = props.id || props.self?.path,
46
46
  // westRef = useRef(),
47
47
  [isReady, setIsReady] = useState(false),
48
48
  [isWestCollapsed, setIsWestCollapsedRaw] = useState(westStartsCollapsed),
@@ -52,15 +52,21 @@ export default function DataMgt(props) {
52
52
  [centerSelected, setCenterSelected] = useState(),
53
53
  setIsWestCollapsed = (bool) => {
54
54
  setIsWestCollapsedRaw(bool);
55
- setSaved(id + '-isWestCollapsed', bool);
55
+ if (id) {
56
+ setSaved(id + '-isWestCollapsed', bool);
57
+ }
56
58
  },
57
59
  setIsEastCollapsed = (bool) => {
58
60
  setIsEastCollapsedRaw(bool);
59
- setSaved(id + '-isEastCollapsed', bool);
61
+ if (id) {
62
+ setSaved(id + '-isEastCollapsed', bool);
63
+ }
60
64
  },
61
65
  setIsFullscreen = (bool) => {
62
66
  setIsFullscreenRaw(bool);
63
- setSaved(id + '-isFullscreen', isFullscreen);
67
+ if (id) {
68
+ setSaved(id + '-isFullscreen', isFullscreen);
69
+ }
64
70
  },
65
71
  setWestSelected = (selected) => {
66
72
  setWestSelectedRaw(selected);
@@ -110,35 +116,37 @@ export default function DataMgt(props) {
110
116
  // Restore saved settings
111
117
  (async () => {
112
118
 
113
- let key, val;
114
- key = id + '-isWestCollapsed';
115
- val = await getSaved(key);
116
- if (!_.isNil(val)) {
117
- setIsWestCollapsedRaw(val);
118
- }
119
+ if (id) {
120
+ let key, val;
121
+ key = id + '-isWestCollapsed';
122
+ val = await getSaved(key);
123
+ if (!_.isNil(val)) {
124
+ setIsWestCollapsedRaw(val);
125
+ }
119
126
 
120
- key = id + '-isEastCollapsed';
121
- val = await getSaved(key);
122
- if (!_.isNil(val)) {
123
- setIsEastCollapsedRaw(val);
124
- }
127
+ key = id + '-isEastCollapsed';
128
+ val = await getSaved(key);
129
+ if (!_.isNil(val)) {
130
+ setIsEastCollapsedRaw(val);
131
+ }
125
132
 
126
- key = id + '-isFullscreen';
127
- val = await getSaved(key);
128
- if (!_.isNil(val)) {
129
- setIsFullscreenRaw(val);
130
- }
133
+ key = id + '-isFullscreen';
134
+ val = await getSaved(key);
135
+ if (!_.isNil(val)) {
136
+ setIsFullscreenRaw(val);
137
+ }
131
138
 
132
- key = id + '-westSelected';
133
- val = await getSaved(key);
134
- if (!_.isNil(val)) {
135
- setWestSelectedRaw(val);
136
- }
139
+ key = id + '-westSelected';
140
+ val = await getSaved(key);
141
+ if (!_.isNil(val)) {
142
+ setWestSelectedRaw(val);
143
+ }
137
144
 
138
- key = id + '-centerSelected';
139
- val = await getSaved(key);
140
- if (!_.isNil(val)) {
141
- setCenterSelectedRaw(val);
145
+ key = id + '-centerSelected';
146
+ val = await getSaved(key);
147
+ if (!_.isNil(val)) {
148
+ setCenterSelectedRaw(val);
149
+ }
142
150
  }
143
151
 
144
152
  if (!isReady) {
@@ -22,9 +22,9 @@ function ManagerScreen(props) {
22
22
  title,
23
23
  sideModeComponent,
24
24
  fullModeComponent,
25
- reference,
26
25
  } = props,
27
26
  styles = UiGlobals.styles,
27
+ id = props.id || props.self?.path,
28
28
  [isReady, setIsReady] = useState(false),
29
29
  [mode, setModeRaw] = useState(MODE_FULL),
30
30
  setMode = (newMode) => {
@@ -32,8 +32,8 @@ function ManagerScreen(props) {
32
32
  return; // no change
33
33
  }
34
34
  setModeRaw(newMode);
35
- if (reference) {
36
- setSaved(reference + '-mode', newMode);
35
+ if (id) {
36
+ setSaved(id + '-mode', newMode);
37
37
  }
38
38
  };
39
39
 
@@ -41,9 +41,9 @@ function ManagerScreen(props) {
41
41
  // Restore saved settings
42
42
  (async () => {
43
43
 
44
- if (reference) {
44
+ if (id) {
45
45
  const
46
- key = reference + '-mode',
46
+ key = id + '-mode',
47
47
  val = await getSaved(key);
48
48
  if (!_.isNil(val)) {
49
49
  setMode(val);
@@ -1,4 +1,4 @@
1
- import React, { useState, useEffect, useId, } from 'react';
1
+ import React, { useState, useEffect, } from 'react';
2
2
  import {
3
3
  Button,
4
4
  Column,
@@ -43,7 +43,7 @@ function TabBar(props) {
43
43
  ...propsToPass
44
44
  } = props,
45
45
  styles = UiGlobals.styles,
46
- id = useId(),
46
+ id = props.id || props.self?.path,
47
47
  useLocal = _.isNil(currentTabIx),
48
48
  [isReady, setIsReady] = useState(false),
49
49
  [currentTabIxLocal, setCurrentTabIxLocal] = useState(initialTabIx),
@@ -53,7 +53,9 @@ function TabBar(props) {
53
53
  if (onChangeIsCollapsed) {
54
54
  onChangeIsCollapsed(isCollapsed);
55
55
  }
56
- setSaved(id + '-isCollapsed', isCollapsed);
56
+ if (id) {
57
+ setSaved(id + '-isCollapsed', isCollapsed);
58
+ }
57
59
  },
58
60
  getCurrentTab = () => {
59
61
  if (useLocal) {
@@ -70,7 +72,10 @@ function TabBar(props) {
70
72
  }
71
73
  if (useLocal) {
72
74
  setCurrentTabIxLocal(ix);
73
- setSaved(id + '-currentTabIx', ix);
75
+
76
+ if (id) {
77
+ setSaved(id + '-currentTabIx', ix);
78
+ }
74
79
  }
75
80
  if (onChangeCurrentTab) {
76
81
  onChangeCurrentTab(ix);
@@ -361,18 +366,21 @@ function TabBar(props) {
361
366
  useEffect(() => {
362
367
  // Restore saved settings
363
368
  (async () => {
364
- let key, val;
365
- key = id + '-isCollapsed';
366
- val = await getSaved(key);
367
- if (!_.isNil(val)) {
368
- setIsCollapsed(val);
369
- }
370
369
 
371
- if (useLocal) {
372
- key = id + '-currentTabIx';
370
+ if (id) {
371
+ let key, val;
372
+ key = id + '-isCollapsed';
373
373
  val = await getSaved(key);
374
374
  if (!_.isNil(val)) {
375
- setCurrentTab(val);
375
+ setIsCollapsed(val);
376
+ }
377
+
378
+ if (useLocal) {
379
+ key = id + '-currentTabIx';
380
+ val = await getSaved(key);
381
+ if (!_.isNil(val)) {
382
+ setCurrentTab(val);
383
+ }
376
384
  }
377
385
  }
378
386