@aehrc/smart-forms-renderer 0.21.1 → 0.21.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.
- package/lib/components/FormComponents/GroupItem/GroupItem.d.ts +1 -2
- package/lib/components/FormComponents/GroupItem/GroupItem.js +2 -2
- package/lib/components/FormComponents/GroupItem/GroupItem.js.map +1 -1
- package/lib/components/FormComponents/GroupItem/NextTabButtonWrapper.js +3 -1
- package/lib/components/FormComponents/GroupItem/NextTabButtonWrapper.js.map +1 -1
- package/lib/components/FormComponents/GroupItem/PreviousTabButton.d.ts +7 -0
- package/lib/components/FormComponents/GroupItem/PreviousTabButton.js +25 -0
- package/lib/components/FormComponents/GroupItem/PreviousTabButton.js.map +1 -0
- package/lib/components/FormComponents/GroupItem/TabButtonsWrapper.d.ts +8 -0
- package/lib/components/FormComponents/GroupItem/TabButtonsWrapper.js +58 -0
- package/lib/components/FormComponents/GroupItem/TabButtonsWrapper.js.map +1 -0
- package/lib/utils/tabs.d.ts +3 -2
- package/lib/utils/tabs.js +22 -9
- package/lib/utils/tabs.js.map +1 -1
- package/package.json +1 -1
- package/src/components/FormComponents/GroupItem/GroupItem.tsx +3 -3
- package/src/components/FormComponents/GroupItem/PreviousTabButton.tsx +43 -0
- package/src/components/FormComponents/GroupItem/{NextTabButtonWrapper.tsx → TabButtonsWrapper.tsx} +25 -12
- package/src/utils/tabs.ts +30 -11
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
3
|
-
import type { PropsWithIsRepeatedAttribute, PropsWithParentIsReadOnlyAttribute, PropsWithQrItemChangeHandler } from '../../../interfaces/renderProps.interface';
|
|
4
|
-
import type { PropsWithParentIsRepeatGroupAttribute } from '../../../interfaces/renderProps.interface';
|
|
3
|
+
import type { PropsWithIsRepeatedAttribute, PropsWithParentIsReadOnlyAttribute, PropsWithParentIsRepeatGroupAttribute, PropsWithQrItemChangeHandler } from '../../../interfaces/renderProps.interface';
|
|
5
4
|
import type { Tabs } from '../../../interfaces/tab.interface';
|
|
6
5
|
interface GroupItemProps extends PropsWithQrItemChangeHandler, PropsWithIsRepeatedAttribute, PropsWithParentIsReadOnlyAttribute, PropsWithParentIsRepeatGroupAttribute {
|
|
7
6
|
qItem: QuestionnaireItem;
|
|
@@ -21,7 +21,7 @@ import { QGroupContainerBox } from '../../Box.styles';
|
|
|
21
21
|
import useHidden from '../../../hooks/useHidden';
|
|
22
22
|
import GroupHeading from './GroupHeading';
|
|
23
23
|
import { GroupCard } from './GroupItem.styles';
|
|
24
|
-
import
|
|
24
|
+
import TabButtonsWrapper from './TabButtonsWrapper';
|
|
25
25
|
import GroupItemSwitcher from './GroupItemSwitcher';
|
|
26
26
|
import useReadOnly from '../../../hooks/useReadOnly';
|
|
27
27
|
function GroupItem(props) {
|
|
@@ -58,7 +58,7 @@ function GroupItem(props) {
|
|
|
58
58
|
const qrItemOrItems = qrItemsByIndex[i];
|
|
59
59
|
return (React.createElement(GroupItemSwitcher, { key: qItem.linkId, qItem: qItem, qrItemOrItems: qrItemOrItems, groupCardElevation: groupCardElevation, parentIsReadOnly: readOnly, parentIsRepeatGroup: parentIsRepeatGroup, parentRepeatGroupIndex: parentRepeatGroupIndex, onQrItemChange: handleQrItemChange, onQrRepeatGroupChange: handleQrRepeatGroupChange }));
|
|
60
60
|
}),
|
|
61
|
-
React.createElement(
|
|
61
|
+
React.createElement(TabButtonsWrapper, { currentTabIndex: currentTabIndex, tabs: tabs }))));
|
|
62
62
|
}
|
|
63
63
|
export default GroupItem;
|
|
64
64
|
//# sourceMappingURL=GroupItem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupItem.js","sourceRoot":"","sources":["../../../../src/components/FormComponents/GroupItem/GroupItem.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAEzE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAQtD,OAAO,SAAS,MAAM,0BAA0B,CAAC;AAEjD,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"GroupItem.js","sourceRoot":"","sources":["../../../../src/components/FormComponents/GroupItem/GroupItem.tsx"],"names":[],"mappings":"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"}
|
|
@@ -48,7 +48,9 @@ const NextTabButtonWrapper = memo(function NextTabWrapper(props) {
|
|
|
48
48
|
return null;
|
|
49
49
|
}
|
|
50
50
|
const buttonIsDisabled = findNumOfVisibleTabs(tabs, enableWhenIsActivated, enableWhenItems, enableWhenExpressions) <= 1;
|
|
51
|
-
return (React.createElement(Box, { display: "flex",
|
|
51
|
+
return (React.createElement(Box, { display: "flex", mt: 3 },
|
|
52
|
+
React.createElement(NextTabButton, { isDisabled: buttonIsDisabled, onNextTabClick: handleNextTabClick }),
|
|
53
|
+
React.createElement(Box, { flexGrow: 1 }),
|
|
52
54
|
React.createElement(NextTabButton, { isDisabled: buttonIsDisabled, onNextTabClick: handleNextTabClick })));
|
|
53
55
|
});
|
|
54
56
|
export default NextTabButtonWrapper;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NextTabButtonWrapper.js","sourceRoot":"","sources":["../../../../src/components/FormComponents/GroupItem/NextTabButtonWrapper.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,GAAG,MAAM,mBAAmB,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAEnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAO5C,MAAM,oBAAoB,GAAG,IAAI,CAAC,SAAS,cAAc,CAAC,KAAgC;IACxF,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAExC,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;IAChF,MAAM,eAAe,GAAG,qBAAqB,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;IACpE,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;IAChF,MAAM,SAAS,GAAG,qBAAqB,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;IAExD,MAAM,cAAc,GAAG,eAAe,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,CAAC;IAE3E,SAAS,kBAAkB;QACzB,IAAI,cAAc,EAAE;YAClB,OAAO;SACR;QAED,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;YACjD,IAAI;YACJ,eAAe;YACf,qBAAqB;YACrB,eAAe;YACf,qBAAqB;SACtB,CAAC,CAAC;QACH,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAE/B,wBAAwB;QACxB,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,cAAc,EAAE;QAClB,OAAO,IAAI,CAAC;KACb;IAED,IAAI,eAAe,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QACpD,OAAO,IAAI,CAAC;KACb;IAED,MAAM,gBAAgB,GACpB,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,EAAE,eAAe,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAEjG,OAAO,CACL,oBAAC,GAAG,IAAC,OAAO,EAAC,MAAM,EAAC,
|
|
1
|
+
{"version":3,"file":"NextTabButtonWrapper.js","sourceRoot":"","sources":["../../../../src/components/FormComponents/GroupItem/NextTabButtonWrapper.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,GAAG,MAAM,mBAAmB,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAEnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAO5C,MAAM,oBAAoB,GAAG,IAAI,CAAC,SAAS,cAAc,CAAC,KAAgC;IACxF,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAExC,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;IAChF,MAAM,eAAe,GAAG,qBAAqB,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;IACpE,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;IAChF,MAAM,SAAS,GAAG,qBAAqB,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;IAExD,MAAM,cAAc,GAAG,eAAe,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,CAAC;IAE3E,SAAS,kBAAkB;QACzB,IAAI,cAAc,EAAE;YAClB,OAAO;SACR;QAED,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;YACjD,IAAI;YACJ,eAAe;YACf,qBAAqB;YACrB,eAAe;YACf,qBAAqB;SACtB,CAAC,CAAC;QACH,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAE/B,wBAAwB;QACxB,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,cAAc,EAAE;QAClB,OAAO,IAAI,CAAC;KACb;IAED,IAAI,eAAe,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QACpD,OAAO,IAAI,CAAC;KACb;IAED,MAAM,gBAAgB,GACpB,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,EAAE,eAAe,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAEjG,OAAO,CACL,oBAAC,GAAG,IAAC,OAAO,EAAC,MAAM,EAAC,EAAE,EAAE,CAAC;QACvB,oBAAC,aAAa,IAAC,UAAU,EAAE,gBAAgB,EAAE,cAAc,EAAE,kBAAkB,GAAI;QACnF,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,GAAI;QACpB,oBAAC,aAAa,IAAC,UAAU,EAAE,gBAAgB,EAAE,cAAc,EAAE,kBAAkB,GAAI,CAC/E,CACP,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,eAAe,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 Commonwealth Scientific and Industrial Research
|
|
3
|
+
* Organisation (CSIRO) ABN 41 687 119 230.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import React from 'react';
|
|
18
|
+
import Button from '@mui/material/Button';
|
|
19
|
+
import Iconify from '../../Iconify/Iconify';
|
|
20
|
+
function PreviousTabButton(props) {
|
|
21
|
+
const { isDisabled, onPreviousTabClick } = props;
|
|
22
|
+
return (React.createElement(Button, { variant: "contained", size: "small", endIcon: React.createElement(Iconify, { icon: "material-symbols:arrow-back" }), disabled: isDisabled, color: "secondary", onClick: onPreviousTabClick }, "Previous tab"));
|
|
23
|
+
}
|
|
24
|
+
export default PreviousTabButton;
|
|
25
|
+
//# sourceMappingURL=PreviousTabButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviousTabButton.js","sourceRoot":"","sources":["../../../../src/components/FormComponents/GroupItem/PreviousTabButton.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAO5C,SAAS,iBAAiB,CAAC,KAA6B;IACtD,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAC;IAEjD,OAAO,CACL,oBAAC,MAAM,IACL,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,OAAO,EACZ,OAAO,EAAE,oBAAC,OAAO,IAAC,IAAI,EAAC,6BAA6B,GAAG,EACvD,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAC,WAAW,EACjB,OAAO,EAAE,kBAAkB,mBAEpB,CACV,CAAC;AACJ,CAAC;AAED,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { Tabs } from '../../../interfaces/tab.interface';
|
|
3
|
+
interface TabButtonsWrapperProps {
|
|
4
|
+
currentTabIndex?: number;
|
|
5
|
+
tabs?: Tabs;
|
|
6
|
+
}
|
|
7
|
+
declare const TabButtonsWrapper: React.NamedExoticComponent<TabButtonsWrapperProps>;
|
|
8
|
+
export default TabButtonsWrapper;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 Commonwealth Scientific and Industrial Research
|
|
3
|
+
* Organisation (CSIRO) ABN 41 687 119 230.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import React, { memo } from 'react';
|
|
18
|
+
import Box from '@mui/material/Box';
|
|
19
|
+
import { findNumOfVisibleTabs, getVisibleTabIndex } from '../../../utils/tabs';
|
|
20
|
+
import { useQuestionnaireStore } from '../../../stores';
|
|
21
|
+
import NextTabButton from './NextTabButton';
|
|
22
|
+
import PreviousTabButton from './PreviousTabButton';
|
|
23
|
+
const TabButtonsWrapper = memo(function TabButtonsWrapper(props) {
|
|
24
|
+
const { currentTabIndex, tabs } = props;
|
|
25
|
+
const enableWhenIsActivated = useQuestionnaireStore.use.enableWhenIsActivated();
|
|
26
|
+
const enableWhenItems = useQuestionnaireStore.use.enableWhenItems();
|
|
27
|
+
const enableWhenExpressions = useQuestionnaireStore.use.enableWhenExpressions();
|
|
28
|
+
const switchTab = useQuestionnaireStore.use.switchTab();
|
|
29
|
+
const tabsNotDefined = currentTabIndex === undefined || tabs === undefined;
|
|
30
|
+
function handleButtonClick(direction) {
|
|
31
|
+
if (tabsNotDefined) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const visibleTabIndex = getVisibleTabIndex({
|
|
35
|
+
direction,
|
|
36
|
+
tabs,
|
|
37
|
+
currentTabIndex,
|
|
38
|
+
enableWhenIsActivated,
|
|
39
|
+
enableWhenItems,
|
|
40
|
+
enableWhenExpressions
|
|
41
|
+
});
|
|
42
|
+
switchTab(visibleTabIndex);
|
|
43
|
+
// Scroll to top of page
|
|
44
|
+
window.scrollTo(0, 0);
|
|
45
|
+
}
|
|
46
|
+
if (tabsNotDefined) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
const previousTabButtonHidden = currentTabIndex === 0;
|
|
50
|
+
const nextTabButtonHidden = currentTabIndex === Object.keys(tabs).length - 1;
|
|
51
|
+
const buttonIsDisabled = findNumOfVisibleTabs(tabs, enableWhenIsActivated, enableWhenItems, enableWhenExpressions) <= 1;
|
|
52
|
+
return (React.createElement(Box, { display: "flex", mt: 3 },
|
|
53
|
+
previousTabButtonHidden ? null : (React.createElement(PreviousTabButton, { isDisabled: buttonIsDisabled, onPreviousTabClick: () => handleButtonClick('previous') })),
|
|
54
|
+
React.createElement(Box, { flexGrow: 1 }),
|
|
55
|
+
nextTabButtonHidden ? null : (React.createElement(NextTabButton, { isDisabled: buttonIsDisabled, onNextTabClick: () => handleButtonClick('next') }))));
|
|
56
|
+
});
|
|
57
|
+
export default TabButtonsWrapper;
|
|
58
|
+
//# sourceMappingURL=TabButtonsWrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabButtonsWrapper.js","sourceRoot":"","sources":["../../../../src/components/FormComponents/GroupItem/TabButtonsWrapper.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,GAAG,MAAM,mBAAmB,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AAOpD,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,iBAAiB,CAAC,KAA6B;IACrF,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAExC,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;IAChF,MAAM,eAAe,GAAG,qBAAqB,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;IACpE,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;IAChF,MAAM,SAAS,GAAG,qBAAqB,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;IAExD,MAAM,cAAc,GAAG,eAAe,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,CAAC;IAE3E,SAAS,iBAAiB,CAAC,SAA8B;QACvD,IAAI,cAAc,EAAE;YAClB,OAAO;SACR;QAED,MAAM,eAAe,GAAG,kBAAkB,CAAC;YACzC,SAAS;YACT,IAAI;YACJ,eAAe;YACf,qBAAqB;YACrB,eAAe;YACf,qBAAqB;SACtB,CAAC,CAAC;QACH,SAAS,CAAC,eAAe,CAAC,CAAC;QAE3B,wBAAwB;QACxB,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,cAAc,EAAE;QAClB,OAAO,IAAI,CAAC;KACb;IAED,MAAM,uBAAuB,GAAG,eAAe,KAAK,CAAC,CAAC;IACtD,MAAM,mBAAmB,GAAG,eAAe,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAE7E,MAAM,gBAAgB,GACpB,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,EAAE,eAAe,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAEjG,OAAO,CACL,oBAAC,GAAG,IAAC,OAAO,EAAC,MAAM,EAAC,EAAE,EAAE,CAAC;QACtB,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAChC,oBAAC,iBAAiB,IAChB,UAAU,EAAE,gBAAgB,EAC5B,kBAAkB,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,UAAU,CAAC,GACvD,CACH;QACD,oBAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,GAAI;QACnB,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC5B,oBAAC,aAAa,IACZ,UAAU,EAAE,gBAAgB,EAC5B,cAAc,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAC/C,CACH,CACG,CACP,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,eAAe,iBAAiB,CAAC"}
|
package/lib/utils/tabs.d.ts
CHANGED
|
@@ -44,7 +44,8 @@ export declare function constructTabsWithVisibility(params: constructTabsWithVis
|
|
|
44
44
|
linkId: string;
|
|
45
45
|
isVisible: boolean;
|
|
46
46
|
}[];
|
|
47
|
-
interface
|
|
47
|
+
interface getVisibleTabIndexParams {
|
|
48
|
+
direction: 'next' | 'previous';
|
|
48
49
|
tabs: Tabs;
|
|
49
50
|
currentTabIndex: number;
|
|
50
51
|
enableWhenIsActivated: boolean;
|
|
@@ -56,7 +57,7 @@ interface getNextVisibleTabIndexParams {
|
|
|
56
57
|
*
|
|
57
58
|
* @author Sean Fong
|
|
58
59
|
*/
|
|
59
|
-
export declare function
|
|
60
|
+
export declare function getVisibleTabIndex(params: getVisibleTabIndexParams): number;
|
|
60
61
|
/**
|
|
61
62
|
*
|
|
62
63
|
* Find number of visible tabs
|
package/lib/utils/tabs.js
CHANGED
|
@@ -122,23 +122,36 @@ export function constructTabsWithVisibility(params) {
|
|
|
122
122
|
*
|
|
123
123
|
* @author Sean Fong
|
|
124
124
|
*/
|
|
125
|
-
export function
|
|
126
|
-
const { tabs, currentTabIndex, enableWhenIsActivated, enableWhenItems, enableWhenExpressions } = params;
|
|
125
|
+
export function getVisibleTabIndex(params) {
|
|
126
|
+
const { direction, tabs, currentTabIndex, enableWhenIsActivated, enableWhenItems, enableWhenExpressions } = params;
|
|
127
127
|
const tabsWithVisibility = constructTabsWithVisibility({
|
|
128
128
|
tabs,
|
|
129
129
|
enableWhenIsActivated,
|
|
130
130
|
enableWhenItems,
|
|
131
131
|
enableWhenExpressions
|
|
132
132
|
});
|
|
133
|
-
let
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
133
|
+
let visibleTabIndex;
|
|
134
|
+
if (direction === 'next') {
|
|
135
|
+
visibleTabIndex = currentTabIndex + 1;
|
|
136
|
+
const nextTabIndexIsVisible = false;
|
|
137
|
+
while (!nextTabIndexIsVisible) {
|
|
138
|
+
if (tabsWithVisibility[visibleTabIndex].isVisible) {
|
|
139
|
+
return visibleTabIndex;
|
|
140
|
+
}
|
|
141
|
+
visibleTabIndex++;
|
|
138
142
|
}
|
|
139
|
-
nextTabIndex++;
|
|
140
143
|
}
|
|
141
|
-
|
|
144
|
+
else {
|
|
145
|
+
visibleTabIndex = currentTabIndex - 1;
|
|
146
|
+
const previousTabIndexIsVisible = false;
|
|
147
|
+
while (!previousTabIndexIsVisible) {
|
|
148
|
+
if (tabsWithVisibility[visibleTabIndex].isVisible) {
|
|
149
|
+
return visibleTabIndex;
|
|
150
|
+
}
|
|
151
|
+
visibleTabIndex--;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return visibleTabIndex;
|
|
142
155
|
}
|
|
143
156
|
/**
|
|
144
157
|
*
|
package/lib/utils/tabs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../src/utils/tabs.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../src/utils/tabs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,UAAU,kBAAkB,CAChC,IAAU,EACV,eAAgC,EAChC,qBAA4C;IAE5C,6DAA6D;IAC7D,MAAM,EAAE,WAAW,EAAE,GAAG,eAAe,CAAC;IACxC,MAAM,EAAE,iBAAiB,EAAE,GAAG,qBAAqB,CAAC;IAEpD,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;SACxB,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;SAC3D,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE;QAC9B,IAAI,GAAG,CAAC,QAAQ,EAAE;YAChB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE;YAC1B,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC;SACzC;QAED,IAAI,iBAAiB,CAAC,SAAS,CAAC,EAAE;YAChC,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC;SAC/C;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,aAAgC;IAC3D,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;QACvB,OAAO,KAAK,CAAC;KACd;IAED,MAAM,IAAI,GAAG,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,aAAgC;IAC7D,OAAO,qBAAqB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;AAC/D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAoB,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,IAAuB;;IAC3C,MAAM,WAAW,GAAG,MAAA,IAAI,CAAC,SAAS,0CAAE,IAAI,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,mEAAmE,CACrF,CAAC;IAEF,IAAI,WAAW,EAAE;QACf,MAAM,SAAS,GAAG,MAAA,MAAA,WAAW,CAAC,oBAAoB,0CAAE,MAAM,0CAAE,IAAI,CAC9D,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAChC,CAAC;QACF,IAAI,SAAS,EAAE;YACb,OAAO,IAAI,CAAC;SACb;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CACzC,MAAuC,EACvC,eAAwB;;IAExB,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEvB,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAElE,MAAM,IAAI,GAAS,EAAE,CAAC;IACtB,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE;QAC5C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG;YACnB,QAAQ,EAAE,CAAC;YACX,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,MAAA,qBAAqB,CAAC,SAAS,CAAC,KAAK,CAAC,mCAAI,KAAK;SAC1D,CAAC;KACH;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AASD,MAAM,UAAU,2BAA2B,CACzC,MAAyC;IAEzC,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,eAAe,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAAC;IAEvF,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE;QAC3C,MAAM,SAAS,GAAG,CAAC,oBAAoB,CAAC;YACtC,MAAM;YACN,qBAAqB;YACrB,eAAe;YACf,qBAAqB;SACtB,CAAC,CAAC;QAEH,OAAO;YACL,MAAM;YACN,SAAS;SACV,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAUD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAgC;IACjE,MAAM,EACJ,SAAS,EACT,IAAI,EACJ,eAAe,EACf,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACtB,GAAG,MAAM,CAAC;IAEX,MAAM,kBAAkB,GAAG,2BAA2B,CAAC;QACrD,IAAI;QACJ,qBAAqB;QACrB,eAAe;QACf,qBAAqB;KACtB,CAAC,CAAC;IAEH,IAAI,eAAe,CAAC;IACpB,IAAI,SAAS,KAAK,MAAM,EAAE;QACxB,eAAe,GAAG,eAAe,GAAG,CAAC,CAAC;QACtC,MAAM,qBAAqB,GAAG,KAAK,CAAC;QACpC,OAAO,CAAC,qBAAqB,EAAE;YAC7B,IAAI,kBAAkB,CAAC,eAAe,CAAC,CAAC,SAAS,EAAE;gBACjD,OAAO,eAAe,CAAC;aACxB;YACD,eAAe,EAAE,CAAC;SACnB;KACF;SAAM;QACL,eAAe,GAAG,eAAe,GAAG,CAAC,CAAC;QACtC,MAAM,yBAAyB,GAAG,KAAK,CAAC;QACxC,OAAO,CAAC,yBAAyB,EAAE;YACjC,IAAI,kBAAkB,CAAC,eAAe,CAAC,CAAC,SAAS,EAAE;gBACjD,OAAO,eAAe,CAAC;aACxB;YACD,eAAe,EAAE,CAAC;SACnB;KACF;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAU,EACV,qBAA8B,EAC9B,eAAgC,EAChC,qBAA4C;IAE5C,MAAM,kBAAkB,GAAG,2BAA2B,CAAC;QACrD,IAAI;QACJ,qBAAqB;QACrB,eAAe;QACf,qBAAqB;KACtB,CAAC,CAAC;IACH,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAuB;IACxD,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACxC,OAAO,EAAE,CAAC;KACX;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CACrB,CAAC,SAAS,EAAE,EAAE,CACZ,qBAAqB,CAAC,SAAS,EAAE,iBAAiB,CAAC,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,CACtF,CAAC;AACJ,CAAC;AAYD,MAAM,UAAU,WAAW,CAAC,MAAyB;IACnD,MAAM,EACJ,KAAK,EACL,mBAAmB,EACnB,KAAK,EACL,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACvB,GAAG,MAAM,CAAC;IAEX,IACE,CAAC,KAAK;QACN,oBAAoB,CAAC;YACnB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,qBAAqB;YACrB,eAAe;YACf,qBAAqB;SACtB,CAAC;QACF,qBAAqB,CAAC,SAAS,CAAC,KAAK,CAAC,EACtC;QACA,OAAO,IAAI,CAAC;KACb;IAED,IAAI,sBAAsB,EAAE;QAC1B,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,IAAI,CACnD,CAAC,kBAAkB,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,KAAK,UAAU,CAC/D,CAAC;QACF,MAAM,QAAQ,GACZ,CAAC,oBAAoB;YACnB,oBAAoB,CAAC;gBACnB,MAAM,EAAE,oBAAoB,CAAC,MAAM;gBACnC,qBAAqB;gBACrB,eAAe;gBACf,qBAAqB;aACtB,CAAC,CAAC;YACL,qBAAqB,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAExD,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO,IAAI,CAAC;SACb;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -23,15 +23,15 @@ import { QGroupContainerBox } from '../../Box.styles';
|
|
|
23
23
|
import type {
|
|
24
24
|
PropsWithIsRepeatedAttribute,
|
|
25
25
|
PropsWithParentIsReadOnlyAttribute,
|
|
26
|
+
PropsWithParentIsRepeatGroupAttribute,
|
|
26
27
|
PropsWithQrItemChangeHandler
|
|
27
28
|
} from '../../../interfaces/renderProps.interface';
|
|
28
|
-
import type { PropsWithParentIsRepeatGroupAttribute } from '../../../interfaces/renderProps.interface';
|
|
29
29
|
import type { QrRepeatGroup } from '../../../interfaces/repeatGroup.interface';
|
|
30
30
|
import useHidden from '../../../hooks/useHidden';
|
|
31
31
|
import type { Tabs } from '../../../interfaces/tab.interface';
|
|
32
32
|
import GroupHeading from './GroupHeading';
|
|
33
33
|
import { GroupCard } from './GroupItem.styles';
|
|
34
|
-
import
|
|
34
|
+
import TabButtonsWrapper from './TabButtonsWrapper';
|
|
35
35
|
import GroupItemSwitcher from './GroupItemSwitcher';
|
|
36
36
|
import useReadOnly from '../../../hooks/useReadOnly';
|
|
37
37
|
|
|
@@ -126,7 +126,7 @@ function GroupItem(props: GroupItemProps) {
|
|
|
126
126
|
})}
|
|
127
127
|
|
|
128
128
|
{/* Next tab button at the end of each tab group */}
|
|
129
|
-
<
|
|
129
|
+
<TabButtonsWrapper currentTabIndex={currentTabIndex} tabs={tabs} />
|
|
130
130
|
</GroupCard>
|
|
131
131
|
</QGroupContainerBox>
|
|
132
132
|
);
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 Commonwealth Scientific and Industrial Research
|
|
3
|
+
* Organisation (CSIRO) ABN 41 687 119 230.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import React from 'react';
|
|
19
|
+
import Button from '@mui/material/Button';
|
|
20
|
+
import Iconify from '../../Iconify/Iconify';
|
|
21
|
+
|
|
22
|
+
interface PreviousTabButtonProps {
|
|
23
|
+
isDisabled: boolean;
|
|
24
|
+
onPreviousTabClick: () => void;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function PreviousTabButton(props: PreviousTabButtonProps) {
|
|
28
|
+
const { isDisabled, onPreviousTabClick } = props;
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<Button
|
|
32
|
+
variant="contained"
|
|
33
|
+
size="small"
|
|
34
|
+
endIcon={<Iconify icon="material-symbols:arrow-back" />}
|
|
35
|
+
disabled={isDisabled}
|
|
36
|
+
color="secondary"
|
|
37
|
+
onClick={onPreviousTabClick}>
|
|
38
|
+
Previous tab
|
|
39
|
+
</Button>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export default PreviousTabButton;
|
package/src/components/FormComponents/GroupItem/{NextTabButtonWrapper.tsx → TabButtonsWrapper.tsx}
RENAMED
|
@@ -17,17 +17,18 @@
|
|
|
17
17
|
|
|
18
18
|
import React, { memo } from 'react';
|
|
19
19
|
import Box from '@mui/material/Box';
|
|
20
|
-
import { findNumOfVisibleTabs,
|
|
20
|
+
import { findNumOfVisibleTabs, getVisibleTabIndex } from '../../../utils/tabs';
|
|
21
21
|
import type { Tabs } from '../../../interfaces/tab.interface';
|
|
22
22
|
import { useQuestionnaireStore } from '../../../stores';
|
|
23
23
|
import NextTabButton from './NextTabButton';
|
|
24
|
+
import PreviousTabButton from './PreviousTabButton';
|
|
24
25
|
|
|
25
|
-
interface
|
|
26
|
+
interface TabButtonsWrapperProps {
|
|
26
27
|
currentTabIndex?: number;
|
|
27
28
|
tabs?: Tabs;
|
|
28
29
|
}
|
|
29
30
|
|
|
30
|
-
const
|
|
31
|
+
const TabButtonsWrapper = memo(function TabButtonsWrapper(props: TabButtonsWrapperProps) {
|
|
31
32
|
const { currentTabIndex, tabs } = props;
|
|
32
33
|
|
|
33
34
|
const enableWhenIsActivated = useQuestionnaireStore.use.enableWhenIsActivated();
|
|
@@ -37,19 +38,20 @@ const NextTabButtonWrapper = memo(function NextTabWrapper(props: NextTabButtonWr
|
|
|
37
38
|
|
|
38
39
|
const tabsNotDefined = currentTabIndex === undefined || tabs === undefined;
|
|
39
40
|
|
|
40
|
-
function
|
|
41
|
+
function handleButtonClick(direction: 'next' | 'previous') {
|
|
41
42
|
if (tabsNotDefined) {
|
|
42
43
|
return;
|
|
43
44
|
}
|
|
44
45
|
|
|
45
|
-
const
|
|
46
|
+
const visibleTabIndex = getVisibleTabIndex({
|
|
47
|
+
direction,
|
|
46
48
|
tabs,
|
|
47
49
|
currentTabIndex,
|
|
48
50
|
enableWhenIsActivated,
|
|
49
51
|
enableWhenItems,
|
|
50
52
|
enableWhenExpressions
|
|
51
53
|
});
|
|
52
|
-
switchTab(
|
|
54
|
+
switchTab(visibleTabIndex);
|
|
53
55
|
|
|
54
56
|
// Scroll to top of page
|
|
55
57
|
window.scrollTo(0, 0);
|
|
@@ -59,18 +61,29 @@ const NextTabButtonWrapper = memo(function NextTabWrapper(props: NextTabButtonWr
|
|
|
59
61
|
return null;
|
|
60
62
|
}
|
|
61
63
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
64
|
+
const previousTabButtonHidden = currentTabIndex === 0;
|
|
65
|
+
const nextTabButtonHidden = currentTabIndex === Object.keys(tabs).length - 1;
|
|
65
66
|
|
|
66
67
|
const buttonIsDisabled =
|
|
67
68
|
findNumOfVisibleTabs(tabs, enableWhenIsActivated, enableWhenItems, enableWhenExpressions) <= 1;
|
|
68
69
|
|
|
69
70
|
return (
|
|
70
|
-
<Box display="flex"
|
|
71
|
-
|
|
71
|
+
<Box display="flex" mt={3}>
|
|
72
|
+
{previousTabButtonHidden ? null : (
|
|
73
|
+
<PreviousTabButton
|
|
74
|
+
isDisabled={buttonIsDisabled}
|
|
75
|
+
onPreviousTabClick={() => handleButtonClick('previous')}
|
|
76
|
+
/>
|
|
77
|
+
)}
|
|
78
|
+
<Box flexGrow={1} />
|
|
79
|
+
{nextTabButtonHidden ? null : (
|
|
80
|
+
<NextTabButton
|
|
81
|
+
isDisabled={buttonIsDisabled}
|
|
82
|
+
onNextTabClick={() => handleButtonClick('next')}
|
|
83
|
+
/>
|
|
84
|
+
)}
|
|
72
85
|
</Box>
|
|
73
86
|
);
|
|
74
87
|
});
|
|
75
88
|
|
|
76
|
-
export default
|
|
89
|
+
export default TabButtonsWrapper;
|
package/src/utils/tabs.ts
CHANGED
|
@@ -156,7 +156,8 @@ export function constructTabsWithVisibility(
|
|
|
156
156
|
});
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
-
interface
|
|
159
|
+
interface getVisibleTabIndexParams {
|
|
160
|
+
direction: 'next' | 'previous';
|
|
160
161
|
tabs: Tabs;
|
|
161
162
|
currentTabIndex: number;
|
|
162
163
|
enableWhenIsActivated: boolean;
|
|
@@ -168,9 +169,15 @@ interface getNextVisibleTabIndexParams {
|
|
|
168
169
|
*
|
|
169
170
|
* @author Sean Fong
|
|
170
171
|
*/
|
|
171
|
-
export function
|
|
172
|
-
const {
|
|
173
|
-
|
|
172
|
+
export function getVisibleTabIndex(params: getVisibleTabIndexParams): number {
|
|
173
|
+
const {
|
|
174
|
+
direction,
|
|
175
|
+
tabs,
|
|
176
|
+
currentTabIndex,
|
|
177
|
+
enableWhenIsActivated,
|
|
178
|
+
enableWhenItems,
|
|
179
|
+
enableWhenExpressions
|
|
180
|
+
} = params;
|
|
174
181
|
|
|
175
182
|
const tabsWithVisibility = constructTabsWithVisibility({
|
|
176
183
|
tabs,
|
|
@@ -179,16 +186,28 @@ export function getNextVisibleTabIndex(params: getNextVisibleTabIndexParams): nu
|
|
|
179
186
|
enableWhenExpressions
|
|
180
187
|
});
|
|
181
188
|
|
|
182
|
-
let
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
189
|
+
let visibleTabIndex;
|
|
190
|
+
if (direction === 'next') {
|
|
191
|
+
visibleTabIndex = currentTabIndex + 1;
|
|
192
|
+
const nextTabIndexIsVisible = false;
|
|
193
|
+
while (!nextTabIndexIsVisible) {
|
|
194
|
+
if (tabsWithVisibility[visibleTabIndex].isVisible) {
|
|
195
|
+
return visibleTabIndex;
|
|
196
|
+
}
|
|
197
|
+
visibleTabIndex++;
|
|
198
|
+
}
|
|
199
|
+
} else {
|
|
200
|
+
visibleTabIndex = currentTabIndex - 1;
|
|
201
|
+
const previousTabIndexIsVisible = false;
|
|
202
|
+
while (!previousTabIndexIsVisible) {
|
|
203
|
+
if (tabsWithVisibility[visibleTabIndex].isVisible) {
|
|
204
|
+
return visibleTabIndex;
|
|
205
|
+
}
|
|
206
|
+
visibleTabIndex--;
|
|
187
207
|
}
|
|
188
|
-
nextTabIndex++;
|
|
189
208
|
}
|
|
190
209
|
|
|
191
|
-
return
|
|
210
|
+
return visibleTabIndex;
|
|
192
211
|
}
|
|
193
212
|
|
|
194
213
|
/**
|