@iress-oss/ids-mcp-server 0.0.1 → 5.14.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/LICENSE.txt +201 -0
- package/README.md +29 -159
- package/dist/componentHandlers.js +241 -0
- package/dist/componentHandlers.test.js +380 -0
- package/{build → dist}/config.js +5 -5
- package/dist/index.js +53 -0
- package/{build → dist}/iressHandlers.js +52 -46
- package/dist/iressHandlers.test.js +316 -0
- package/{build → dist}/resourceHandlers.js +23 -22
- package/dist/resourceHandlers.test.js +352 -0
- package/{build → dist}/searchHandlers.js +107 -92
- package/dist/searchHandlers.test.js +524 -0
- package/{build → dist}/toolHandler.js +13 -13
- package/dist/toolHandler.test.js +369 -0
- package/dist/tools.js +165 -0
- package/{build → dist}/utils.js +11 -15
- package/dist/utils.test.js +286 -0
- package/{docs/ids → generated/docs}/components-autocomplete-docs.md +3 -3
- package/{docs/ids → generated/docs}/components-autocomplete-recipes-docs.md +17 -51
- package/{docs/ids → generated/docs}/components-card-recipes-docs.md +1 -1
- package/{docs/ids → generated/docs}/components-checkbox-docs.md +6 -19
- package/{docs/ids → generated/docs}/components-checkboxgroup-docs.md +18 -18
- package/{docs/ids → generated/docs}/components-checkboxgroup-recipes-docs.md +9 -9
- package/{docs/ids → generated/docs}/components-col-docs.md +1 -1
- package/{docs/ids → generated/docs}/components-combobox-docs.md +4 -4
- package/{docs/ids → generated/docs}/components-container-docs.md +8 -42
- package/{docs/ids → generated/docs}/components-filter-docs.md +14 -67
- package/{docs/ids → generated/docs}/components-form-docs.md +341 -335
- package/{docs/ids → generated/docs}/components-form-recipes-docs.md +198 -1
- package/{docs/ids → generated/docs}/components-hide-docs.md +16 -70
- package/{docs/ids → generated/docs}/components-icon-docs.md +4 -4
- package/{docs/ids → generated/docs}/components-input-recipes-docs.md +2 -2
- package/{docs/ids → generated/docs}/components-inputcurrency-recipes-docs.md +6 -40
- package/{docs/ids → generated/docs}/components-modal-docs.md +3 -113
- package/generated/docs/components-popover-docs.md +464 -0
- package/{docs/ids → generated/docs}/components-radiogroup-docs.md +21 -21
- package/{docs/ids → generated/docs}/components-richselect-docs.md +149 -111
- package/{docs/ids → generated/docs}/components-row-docs.md +4 -4
- package/{docs/ids → generated/docs}/components-skeleton-docs.md +3 -3
- package/{docs/ids → generated/docs}/components-skeleton-recipes-docs.md +1 -1
- package/{docs/ids → generated/docs}/components-skiplink-docs.md +1 -1
- package/{docs/ids → generated/docs}/components-slideout-docs.md +3 -113
- package/{docs/ids → generated/docs}/components-table-ag-grid-docs.md +109 -137
- package/{docs/ids → generated/docs}/components-table-docs.md +92 -597
- package/{docs/ids → generated/docs}/components-tabset-docs.md +2 -2
- package/{docs/ids → generated/docs}/components-tag-docs.md +1 -1
- package/{docs/ids → generated/docs}/components-toaster-docs.md +5 -5
- package/{docs/ids → generated/docs}/extensions-editor-docs.md +4 -4
- package/generated/docs/foundations-accessibility-docs.md +62 -0
- package/{docs/ids → generated/docs}/foundations-colours-docs.md +1 -1
- package/generated/docs/foundations-consistency-docs.md +52 -0
- package/generated/docs/foundations-content-docs.md +23 -0
- package/generated/docs/foundations-introduction-docs.md +17 -0
- package/generated/docs/foundations-principles-docs.md +70 -0
- package/{docs/ids → generated/docs}/foundations-typography-docs.md +7 -2
- package/generated/docs/foundations-user-experience-docs.md +63 -0
- package/generated/docs/foundations-visual-design-docs.md +46 -0
- package/{docs/ids → generated/docs}/get-started-develop-docs.md +3 -3
- package/generated/docs/guidelines.md +812 -0
- package/{docs/ids → generated/docs}/introduction-docs.md +4 -4
- package/{docs/ids → generated/docs}/patterns-loading-docs.md +332 -2
- package/generated/docs/resources-migration-guides-from-v4-to-v5-docs.md +437 -0
- package/generated/docs/themes-available-themes-docs.md +66 -0
- package/generated/docs/themes-tokens-docs.md +1200 -0
- package/generated/docs/versions-docs.md +17 -0
- package/package.json +42 -14
- package/LICENSE +0 -193
- package/build/componentHandlers.js +0 -205
- package/build/index.js +0 -51
- package/build/tools.js +0 -165
- package/docs/api-reference.md +0 -0
- package/docs/best-practices.md +0 -0
- package/docs/configuration.md +0 -0
- package/docs/examples.md +0 -0
- package/docs/guidelines.md +0 -269
- package/docs/ids/components-popover-docs.md +0 -4
- package/docs/ids/resources-migration-guides-from-v4-to-v5-docs.md +0 -639
- package/docs/ids/themes-available-themes-docs.md +0 -74
- package/docs/ids/themes-tokens-docs.md +0 -4580
- package/docs/ids/versions-docs.md +0 -27
- package/docs/tutorials/basic-integration.md +0 -0
- /package/{build → dist}/types.js +0 -0
- /package/{docs/ids → generated/docs}/components-alert-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-badge-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-button-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-button-recipes-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-buttongroup-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-card-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-divider-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-expander-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-field-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-inline-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-input-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-inputcurrency-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-label-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-menu-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-menu-menuitem-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-navbar-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-navbar-recipes-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-panel-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-placeholder-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-popover-recipes-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-progress-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-radio-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-readonly-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-select-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-slider-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-spinner-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-stack-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-tabset-tab-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-text-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-toaster-toast-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-toggle-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-tooltip-docs.md +0 -0
- /package/{docs/ids → generated/docs}/components-validationmessage-docs.md +0 -0
- /package/{docs/ids → generated/docs}/contact-us-docs.md +0 -0
- /package/{docs/ids → generated/docs}/extensions-editor-recipes-docs.md +0 -0
- /package/{docs/ids → generated/docs}/frequently-asked-questions-docs.md +0 -0
- /package/{docs/ids → generated/docs}/get-started-using-storybook-docs.md +0 -0
- /package/{docs/ids → generated/docs}/resources-changelog-docs.md +0 -0
- /package/{docs/ids → generated/docs}/resources-code-katas-docs.md +0 -0
- /package/{docs/ids → generated/docs}/themes-introduction-docs.md +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
[](#iress-design-system
|
|
2
|
-
|
|
1
|
+
[](#iress-design-system)Iress Design System
|
|
2
|
+
===========================================
|
|
3
3
|
|
|
4
|
-
5.
|
|
4
|
+
5.14.2
|
|
5
5
|
|
|
6
6
|
* * *
|
|
7
7
|
|
|
8
|
-
IDS
|
|
8
|
+
The Iress Design System (IDS) serves as a shared visual language, working code, design tools and resources, human interface guidelines, and a community of contributors. It supports designers and developers building digital products for both B2B (Financial Advisors, Paraplanners) and B2B2C (client customers) segments.
|
|
9
9
|
|
|
10
10
|
[](#whats-new)What's new?
|
|
11
11
|
-------------------------
|
|
@@ -206,7 +206,7 @@ Apart from using the `IressLoading` component, there are a few things you need t
|
|
|
206
206
|
|
|
207
207
|
The `IressLoading` component is designed to create a seamless experience for users when loading content. They have been designed to meet best practices and improve user perception of loading times.
|
|
208
208
|
|
|
209
|
-
, use a loading indicator. Long wait times (3-10 seconds), use a loading indicator and provide feedback. Wait times longer than 10 seconds should be a background process.](/@fs/Users/mellisa.hankins/projects/design-system/packages/components/src/patterns/Loading/assets/ux-collective-loading-time-matrix.webp)
|
|
210
210
|
|
|
211
211
|
Image © [UX Collective](https://uxdesign.cc/loading-progress-indicators-ui-components-series-f4b1fc35339a)
|
|
212
212
|
|
|
@@ -254,7 +254,7 @@ New component
|
|
|
254
254
|
|
|
255
255
|
This component is new, please provide feedback to the IDS team if you encounter any issues.
|
|
256
256
|
|
|
257
|
-

|
|
258
258
|
|
|
259
259
|
Update
|
|
260
260
|
|
|
@@ -607,6 +607,289 @@ Hide codeRefresh
|
|
|
607
607
|
|
|
608
608
|
Copy
|
|
609
609
|
|
|
610
|
+
[](#suspense)Suspense
|
|
611
|
+
---------------------
|
|
612
|
+
|
|
613
|
+
Since React 18, React has introduced a new way to handle loading states using `Suspense`, allowing you to lazy load components in an efficient manner.
|
|
614
|
+
|
|
615
|
+
The `IressLoadingSuspense` component is a wrapper around the `IressLoading` component that uses `Suspense` to handle loading states. It is used in the same way as the `IressLoading` component, however you do not need to pass the `loaded` prop or use the `IressLoading.shouldRender` hook. The `IressLoadingSuspense` component will automatically handle the loading state for you.
|
|
616
|
+
|
|
617
|
+
The wizard example can be translated to use `IressLoadingSuspense` as follows (it includes the slow and fast examples).
|
|
618
|
+
|
|
619
|
+
**Differences in behaviour**
|
|
620
|
+
|
|
621
|
+
* The `IressLoadingSuspense` component will automatically handle the loading state for you, so you do not need to pass the `loaded` prop or use the `IressLoading.shouldRender` hook.
|
|
622
|
+
* Nested suspense components will be handled by the highest `IressLoadingSuspense` component. This means that if you have multiple nested `IressLoadingSuspense` components, only the top most one will display a loading state. You can see this in the example when you click the Next button, you no longer see the component loading pattern due to it being nested under the page loading pattern.
|
|
623
|
+
|
|
624
|
+
Hide codeRefresh
|
|
625
|
+
|
|
626
|
+
\[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
|
|
627
|
+
|
|
628
|
+
interface PageProps {
|
|
629
|
+
setPage: (page: number) \=> void;
|
|
630
|
+
}
|
|
631
|
+
interface ChartProps {
|
|
632
|
+
money: number | null;
|
|
633
|
+
}
|
|
634
|
+
const API \= {
|
|
635
|
+
getHomePage: async () \=> {
|
|
636
|
+
await new Promise((resolve) \=> {
|
|
637
|
+
setTimeout(resolve, 3000);
|
|
638
|
+
});
|
|
639
|
+
return 1;
|
|
640
|
+
},
|
|
641
|
+
getRetirementIncomeProjection: async () \=> {
|
|
642
|
+
await new Promise((resolve) \=> {
|
|
643
|
+
setTimeout(resolve, 2000);
|
|
644
|
+
});
|
|
645
|
+
return true;
|
|
646
|
+
},
|
|
647
|
+
getChart: async () \=> {
|
|
648
|
+
await new Promise((resolve) \=> {
|
|
649
|
+
const chartImage \= new Image();
|
|
650
|
+
chartImage.src \= retirementGraph;
|
|
651
|
+
setTimeout(resolve, 1000);
|
|
652
|
+
});
|
|
653
|
+
return true;
|
|
654
|
+
},
|
|
655
|
+
chartUpdate: async () \=>
|
|
656
|
+
new Promise<boolean\>((resolve) \=> {
|
|
657
|
+
// Simulate a slow network request.
|
|
658
|
+
setTimeout(() \=> {
|
|
659
|
+
resolve(true);
|
|
660
|
+
}, 2000);
|
|
661
|
+
}),
|
|
662
|
+
};
|
|
663
|
+
const Graph \= () \=> (
|
|
664
|
+
<img
|
|
665
|
+
src\={retirementGraph}
|
|
666
|
+
alt\=""
|
|
667
|
+
style\={{ maxWidth: '100%', height: 'auto' }}
|
|
668
|
+
/>
|
|
669
|
+
);
|
|
670
|
+
const Chart \= () \=> {
|
|
671
|
+
const initialChart \= IressLoadingSuspense.use(API.getChart);
|
|
672
|
+
const \[updatedChart, setUpdatedChart\] \= useState<boolean | undefined\>();
|
|
673
|
+
const \[money, setMoney\] \= useState<number | null\>(null);
|
|
674
|
+
const \[updating, setUpdating\] \= useState(false);
|
|
675
|
+
const deferredMoney \= useDeferredValue(money);
|
|
676
|
+
const chart \= updatedChart ?? initialChart;
|
|
677
|
+
useEffect(() \=> {
|
|
678
|
+
if (deferredMoney \=== null) {
|
|
679
|
+
return;
|
|
680
|
+
}
|
|
681
|
+
setUpdating(() \=> true);
|
|
682
|
+
const update \= async () \=> {
|
|
683
|
+
const newChart \= await API.chartUpdate();
|
|
684
|
+
setUpdatedChart(newChart);
|
|
685
|
+
setUpdating(() \=> false);
|
|
686
|
+
};
|
|
687
|
+
void update();
|
|
688
|
+
}, \[deferredMoney\]);
|
|
689
|
+
return (
|
|
690
|
+
<IressLoadingSuspense pattern\="component" update\={updating}\>
|
|
691
|
+
{chart && <Graph />}
|
|
692
|
+
<IressPanel\>
|
|
693
|
+
<IressForm<ChartProps> onSubmit={(projectionData) \=> setMoney(projectionData.money)}
|
|
694
|
+
> <IressStack gutter\="md"\>
|
|
695
|
+
<h3\>Update projection</h3\>
|
|
696
|
+
<IressFormField
|
|
697
|
+
name\="money"
|
|
698
|
+
label\="My money"
|
|
699
|
+
render\={(controlledProps) \=> (
|
|
700
|
+
<IressInputCurrency {...controlledProps} />
|
|
701
|
+
)}
|
|
702
|
+
/>
|
|
703
|
+
<IressButton type\="submit"\>Update projection</IressButton\>
|
|
704
|
+
</IressStack\>
|
|
705
|
+
</IressForm\>
|
|
706
|
+
</IressPanel\>
|
|
707
|
+
</IressLoadingSuspense\>
|
|
708
|
+
);
|
|
709
|
+
};
|
|
710
|
+
const StartPage \= ({ setPage }: PageProps) \=> (
|
|
711
|
+
<IressText\>
|
|
712
|
+
<h2\>Maximise your retirement</h2\>
|
|
713
|
+
<p\>
|
|
714
|
+
Maximize your retirement in Australia by contributing to your super early and making voluntary top-ups to benefit from compounding. Take advantage of employer contributions, government co-contributions, and tax benefits. Diversify your investments and review your strategy regularly to stay on track. Consider additional income streams and seek professional advice for a secure future. </p\>
|
|
715
|
+
<hr />
|
|
716
|
+
<IressButton onClick\={() \=> setPage(2)}\>Next</IressButton\>
|
|
717
|
+
</IressText\>
|
|
718
|
+
);
|
|
719
|
+
const RetirementIncomeProjectionPage \= () \=> {
|
|
720
|
+
const promise \= API.getRetirementIncomeProjection;
|
|
721
|
+
IressLoadingSuspense.use(promise);
|
|
722
|
+
IressLoadingSuspense.uncache(promise);
|
|
723
|
+
return (
|
|
724
|
+
<IressText\>
|
|
725
|
+
<h2\>Retirement Income Projection</h2\>
|
|
726
|
+
<p\>
|
|
727
|
+
We've got enough information to provide you with a retirement income projection. This will help you understand how much you can expect to receive in retirement based on your current super balance, your contributions, and your investment strategy. </p\>
|
|
728
|
+
<Chart />
|
|
729
|
+
</IressText\>
|
|
730
|
+
);
|
|
731
|
+
};
|
|
732
|
+
const HomePage \= () \=> {
|
|
733
|
+
const promise \= API.getHomePage;
|
|
734
|
+
const startPage \= IressLoadingSuspense.use(promise);
|
|
735
|
+
IressLoadingSuspense.uncache(promise);
|
|
736
|
+
const \[movedPage, setMovedPage\] \= useState<number | undefined\>();
|
|
737
|
+
const page \= movedPage ?? startPage;
|
|
738
|
+
return (
|
|
739
|
+
<IressContainer style\={{ maxWidth: '600px', paddingBlock: '3rem' }}\>
|
|
740
|
+
{page \=== 1 && (
|
|
741
|
+
<IressLoadingSuspense pattern\="page" template\="form"\>
|
|
742
|
+
{page \=== 1 && <StartPage setPage\={setMovedPage} />}
|
|
743
|
+
</IressLoadingSuspense\>
|
|
744
|
+
)}
|
|
745
|
+
{page \=== 2 && (
|
|
746
|
+
<IressLoadingSuspense pattern\="page" template\="form"\>
|
|
747
|
+
<RetirementIncomeProjectionPage />
|
|
748
|
+
</IressLoadingSuspense\>
|
|
749
|
+
)}
|
|
750
|
+
</IressContainer\>
|
|
751
|
+
);
|
|
752
|
+
};
|
|
753
|
+
export const LoadingSuspenseWizard \= () \=> (
|
|
754
|
+
<IressLoadingSuspense pattern\="start-up"\>
|
|
755
|
+
<HomePage />
|
|
756
|
+
</IressLoadingSuspense\>
|
|
757
|
+
);
|
|
758
|
+
|
|
759
|
+
Copy
|
|
760
|
+
|
|
761
|
+
Hide codeRefresh
|
|
762
|
+
|
|
763
|
+
\[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
|
|
764
|
+
|
|
765
|
+
interface PageProps {
|
|
766
|
+
setPage: (page: number) \=> void;
|
|
767
|
+
}
|
|
768
|
+
interface ChartProps {
|
|
769
|
+
money: number | null;
|
|
770
|
+
}
|
|
771
|
+
const API \= {
|
|
772
|
+
getHomePage: async () \=> {
|
|
773
|
+
await new Promise((resolve) \=> {
|
|
774
|
+
setTimeout(resolve, 500);
|
|
775
|
+
});
|
|
776
|
+
return 1;
|
|
777
|
+
},
|
|
778
|
+
getRetirementIncomeProjection: async () \=> {
|
|
779
|
+
await new Promise((resolve) \=> {
|
|
780
|
+
setTimeout(resolve, 200);
|
|
781
|
+
});
|
|
782
|
+
return true;
|
|
783
|
+
},
|
|
784
|
+
getChart: async () \=> {
|
|
785
|
+
await new Promise((resolve) \=> {
|
|
786
|
+
const chartImage \= new Image();
|
|
787
|
+
chartImage.onload \= resolve;
|
|
788
|
+
chartImage.src \= retirementGraph;
|
|
789
|
+
});
|
|
790
|
+
return true;
|
|
791
|
+
},
|
|
792
|
+
chartUpdate: async () \=>
|
|
793
|
+
new Promise<boolean\>((resolve) \=> {
|
|
794
|
+
setTimeout(() \=> {
|
|
795
|
+
resolve(true);
|
|
796
|
+
}, 200);
|
|
797
|
+
}),
|
|
798
|
+
};
|
|
799
|
+
const Graph \= () \=> (
|
|
800
|
+
<img
|
|
801
|
+
src\={retirementGraph}
|
|
802
|
+
alt\=""
|
|
803
|
+
style\={{ maxWidth: '100%', height: 'auto' }}
|
|
804
|
+
/>
|
|
805
|
+
);
|
|
806
|
+
const Chart \= () \=> {
|
|
807
|
+
const initialChart \= IressLoadingSuspense.use(API.getChart);
|
|
808
|
+
const \[updatedChart, setUpdatedChart\] \= useState<boolean | undefined\>();
|
|
809
|
+
const \[money, setMoney\] \= useState<number | null\>(null);
|
|
810
|
+
const \[updating, setUpdating\] \= useState(false);
|
|
811
|
+
const deferredMoney \= useDeferredValue(money);
|
|
812
|
+
const chart \= updatedChart ?? initialChart;
|
|
813
|
+
useEffect(() \=> {
|
|
814
|
+
if (deferredMoney \=== null) {
|
|
815
|
+
return;
|
|
816
|
+
}
|
|
817
|
+
setUpdating(() \=> true);
|
|
818
|
+
const update \= async () \=> {
|
|
819
|
+
const newChart \= await API.chartUpdate();
|
|
820
|
+
setUpdatedChart(newChart);
|
|
821
|
+
setUpdating(() \=> false);
|
|
822
|
+
};
|
|
823
|
+
void update();
|
|
824
|
+
}, \[deferredMoney\]);
|
|
825
|
+
return (
|
|
826
|
+
<IressLoadingSuspense pattern\="component" update\={updating}\>
|
|
827
|
+
{chart && <Graph />}
|
|
828
|
+
<IressPanel\>
|
|
829
|
+
<IressForm<ChartProps> onSubmit={(projectionData) \=> setMoney(projectionData.money)}
|
|
830
|
+
> <IressStack gutter\="md"\>
|
|
831
|
+
<h3\>Update projection</h3\>
|
|
832
|
+
<IressFormField
|
|
833
|
+
name\="money"
|
|
834
|
+
label\="My money"
|
|
835
|
+
render\={(controlledProps) \=> (
|
|
836
|
+
<IressInputCurrency {...controlledProps} />
|
|
837
|
+
)}
|
|
838
|
+
/>
|
|
839
|
+
<IressButton type\="submit"\>Update projection</IressButton\>
|
|
840
|
+
</IressStack\>
|
|
841
|
+
</IressForm\>
|
|
842
|
+
</IressPanel\>
|
|
843
|
+
</IressLoadingSuspense\>
|
|
844
|
+
);
|
|
845
|
+
};
|
|
846
|
+
const StartPage \= ({ setPage }: PageProps) \=> (
|
|
847
|
+
<IressText\>
|
|
848
|
+
<h2\>Maximise your retirement</h2\>
|
|
849
|
+
<p\>
|
|
850
|
+
Maximize your retirement in Australia by contributing to your super early and making voluntary top-ups to benefit from compounding. Take advantage of employer contributions, government co-contributions, and tax benefits. Diversify your investments and review your strategy regularly to stay on track. Consider additional income streams and seek professional advice for a secure future. </p\>
|
|
851
|
+
<hr />
|
|
852
|
+
<IressButton onClick\={() \=> setPage(2)}\>Next</IressButton\>
|
|
853
|
+
</IressText\>
|
|
854
|
+
);
|
|
855
|
+
const RetirementIncomeProjectionPage \= () \=> {
|
|
856
|
+
IressLoadingSuspense.use(API.getRetirementIncomeProjection);
|
|
857
|
+
return (
|
|
858
|
+
<IressText\>
|
|
859
|
+
<h2\>Retirement Income Projection</h2\>
|
|
860
|
+
<p\>
|
|
861
|
+
We've got enough information to provide you with a retirement income projection. This will help you understand how much you can expect to receive in retirement based on your current super balance, your contributions, and your investment strategy. </p\>
|
|
862
|
+
<Chart />
|
|
863
|
+
</IressText\>
|
|
864
|
+
);
|
|
865
|
+
};
|
|
866
|
+
const HomePage \= () \=> {
|
|
867
|
+
const startPage \= IressLoadingSuspense.use(API.getHomePage);
|
|
868
|
+
const \[movedPage, setMovedPage\] \= useState<number | undefined\>();
|
|
869
|
+
const page \= movedPage ?? startPage;
|
|
870
|
+
return (
|
|
871
|
+
<IressContainer style\={{ maxWidth: '600px', paddingBlock: '3rem' }}\>
|
|
872
|
+
{page \=== 1 && (
|
|
873
|
+
<IressLoadingSuspense pattern\="page" template\="form"\>
|
|
874
|
+
{page \=== 1 && <StartPage setPage\={setMovedPage} />}
|
|
875
|
+
</IressLoadingSuspense\>
|
|
876
|
+
)}
|
|
877
|
+
{page \=== 2 && (
|
|
878
|
+
<IressLoadingSuspense pattern\="page" template\="form"\>
|
|
879
|
+
<RetirementIncomeProjectionPage />
|
|
880
|
+
</IressLoadingSuspense\>
|
|
881
|
+
)}
|
|
882
|
+
</IressContainer\>
|
|
883
|
+
);
|
|
884
|
+
};
|
|
885
|
+
export const LoadingSuspenseWizardFast \= () \=> (
|
|
886
|
+
<IressLoadingSuspense pattern\="start-up"\>
|
|
887
|
+
<HomePage />
|
|
888
|
+
</IressLoadingSuspense\>
|
|
889
|
+
);
|
|
890
|
+
|
|
891
|
+
Copy
|
|
892
|
+
|
|
610
893
|
[](#hooks)Hooks
|
|
611
894
|
---------------
|
|
612
895
|
|
|
@@ -641,6 +924,51 @@ else return <IressText\>Content is loaded</IressText\>;
|
|
|
641
924
|
|
|
642
925
|
Copy
|
|
643
926
|
|
|
927
|
+
### [](#iressloadingsuspenseuse)`IressLoadingSuspense.use`
|
|
928
|
+
|
|
929
|
+
The `IressLoadingSuspense.use` hook is a polyfill for the React 19 `use` hook, allowing you to have similar functionality in React 18. It is used to handle loading states when using `IressLoadingSuspense`.
|
|
930
|
+
|
|
931
|
+
It is not as smart as the `use` hook in React 19, it will cache the result of the promise and will not re-fetch the data if the component is re-mounted. You can clear a function's results in the cache by using the `IressLoadingSuspense.uncache` function.
|
|
932
|
+
|
|
933
|
+
Avoid in React 19
|
|
934
|
+
-----------------
|
|
935
|
+
|
|
936
|
+
If you are using React 19, it is recommended to use the built-in `use` hook instead of this one. In future releases, this hook will be deprecated and removed from the library.
|
|
937
|
+
|
|
938
|
+
\[data-radix-scroll-area-viewport\] {
|
|
939
|
+
scrollbar-width: none;
|
|
940
|
+
-ms-overflow-style: none;
|
|
941
|
+
-webkit-overflow-scrolling: touch;
|
|
942
|
+
}
|
|
943
|
+
\[data-radix-scroll-area-viewport\]::-webkit-scrollbar {
|
|
944
|
+
display: none;
|
|
945
|
+
}
|
|
946
|
+
:where(\[data-radix-scroll-area-viewport\]) {
|
|
947
|
+
display: flex;
|
|
948
|
+
flex-direction: column;
|
|
949
|
+
align-items: stretch;
|
|
950
|
+
}
|
|
951
|
+
:where(\[data-radix-scroll-area-content\]) {
|
|
952
|
+
flex-grow: 1;
|
|
953
|
+
}
|
|
954
|
+
|
|
955
|
+
const HomePage \= () \=> {
|
|
956
|
+
const pageData \= IressLoadingSuspense.use(API.fetchPage('home'));
|
|
957
|
+
return (
|
|
958
|
+
<IressText\>
|
|
959
|
+
<h2\>{pageData.title}</h2\>
|
|
960
|
+
<p\>{pageData.description}</p\>
|
|
961
|
+
</IressText\>
|
|
962
|
+
);
|
|
963
|
+
};
|
|
964
|
+
export const App \= () \=> (
|
|
965
|
+
<IressLoadingSuspense pattern\="start-up"\>
|
|
966
|
+
<HomePage />
|
|
967
|
+
</IressLoadingSuspense\>
|
|
968
|
+
);
|
|
969
|
+
|
|
970
|
+
Copy
|
|
971
|
+
|
|
644
972
|
[](#examples)Examples
|
|
645
973
|
---------------------
|
|
646
974
|
|
|
@@ -968,7 +1296,9 @@ On this page
|
|
|
968
1296
|
* [page](#page)
|
|
969
1297
|
* [start-up](#start-up)
|
|
970
1298
|
* [validate](#validate)
|
|
1299
|
+
* [Suspense](#suspense)
|
|
971
1300
|
* [Hooks](#hooks)
|
|
972
1301
|
* [IressLoading.shouldRender](#iressloadingshouldrender)
|
|
1302
|
+
* [IressLoadingSuspense.use](#iressloadingsuspenseuse)
|
|
973
1303
|
* [Examples](#examples)
|
|
974
1304
|
* [Wizard](#wizard)
|