Skip to content

Commit daff050

Browse files
Merge pull request #619 from Workiva/todo-example-replace-expansionpanel
Boyscoutin: Replace deprecated ExpansionPanel with new Accordion from MaterialUi
2 parents d1904b8 + 4190dde commit daff050

6 files changed

Lines changed: 53 additions & 52 deletions

File tree

app/over_react_redux/todo_client/lib/src/components/shared/list_item_component_mixin.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ mixin ListItemMixin<M extends BaseModel, T extends ListItemPropsMixin, S extends
2020
..localModel = props.model
2121
);
2222

23-
Map<String, dynamic> get sharedExpansionPanelProps => {
24-
'onChange': handleExpansionPanelExpandedStateChange,
23+
Map<String, dynamic> get sharedAccordionProps => {
24+
'onChange': handleAccordionExpandedStateChange,
2525
'expanded': props.isSelected,
2626
'style': highlightedItemStyle,
2727
};
@@ -36,7 +36,7 @@ mixin ListItemMixin<M extends BaseModel, T extends ListItemPropsMixin, S extends
3636
bool get allowExpansion => hasDetails || props.isEditable;
3737

3838
@protected
39-
void handleExpansionPanelExpandedStateChange([SyntheticEvent event]) {
39+
void handleAccordionExpandedStateChange([SyntheticEvent event]) {
4040
if (!allowExpansion) return;
4141
event?.stopPropagation();
4242
toggleSelect();

app/over_react_redux/todo_client/lib/src/components/shared/list_item_expansion_panel_summary.dart

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ import 'package:todo_client/src/components/shared/material_ui.dart';
77

88
part 'list_item_expansion_panel_summary.over_react.g.dart';
99

10-
UiFactory<ListItemExpansionPanelSummaryProps> ListItemExpansionPanelSummary =
11-
_$ListItemExpansionPanelSummary; // ignore: undefined_identifier
10+
UiFactory<ListItemAccordionSummaryProps> ListItemAccordionSummary =
11+
_$ListItemAccordionSummary; // ignore: undefined_identifier
1212

13-
mixin ListItemExpansionPanelSummaryProps on UiProps {
13+
mixin ListItemAccordionSummaryProps on UiProps {
1414
@requiredProp
1515
String modelId;
1616
@requiredProp
@@ -21,17 +21,17 @@ mixin ListItemExpansionPanelSummaryProps on UiProps {
2121
Function() onToggleEditable;
2222
}
2323

24-
class ListItemExpansionPanelSummaryState = UiState with HoverableItemStateMixin;
24+
class ListItemAccordionSummaryState = UiState with HoverableItemStateMixin;
2525

26-
class ListItemExpansionPanelSummaryComponent
27-
extends UiStatefulComponent2<ListItemExpansionPanelSummaryProps, ListItemExpansionPanelSummaryState>
28-
with HoverableItemMixin<ListItemExpansionPanelSummaryProps, ListItemExpansionPanelSummaryState> {
26+
class ListItemAccordionSummaryComponent
27+
extends UiStatefulComponent2<ListItemAccordionSummaryProps, ListItemAccordionSummaryState>
28+
with HoverableItemMixin<ListItemAccordionSummaryProps, ListItemAccordionSummaryState> {
2929
@override
3030
get itemNodeRef => createRef<Element>();
3131

3232
@override
3333
render() {
34-
return ExpansionPanelSummary({
34+
return AccordionSummary({
3535
'ref': itemNodeRef,
3636
'aria-controls': 'details_${props.modelId}',
3737
'id': 'summary_${props.modelId}',

app/over_react_redux/todo_client/lib/src/components/shared/material_ui.dart

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ import 'package:todo_client/src/utils.dart';
2020
class MaterialUI {
2121
external static JsMap get colors;
2222

23+
external static ReactClass get Accordion;
24+
external static ReactClass get AccordionActions;
25+
external static ReactClass get AccordionDetails;
26+
external static ReactClass get AccordionSummary;
2327
external static ReactClass get AppBar;
2428
external static ReactClass get Avatar;
2529
external static ReactClass get Badge;
@@ -29,10 +33,7 @@ class MaterialUI {
2933
external static ReactClass get Container;
3034
external static ReactClass get CssBaseline;
3135
external static ReactClass get Divider;
32-
external static ReactClass get ExpansionPanel;
33-
external static ReactClass get ExpansionPanelActions;
34-
external static ReactClass get ExpansionPanelDetails;
35-
external static ReactClass get ExpansionPanelSummary;
36+
3637
external static ReactClass get Grid;
3738
external static ReactClass get IconButton;
3839
external static ReactClass get InputBase;
@@ -55,6 +56,18 @@ final muiColors = jsBackedMapDeepFromJs(MaterialUI.colors);
5556
// that we can use just like any other react-dart component in our app!
5657
// -----------------------------------------------------------------------
5758

59+
/// See: <https://material-ui.com/components/accordion/>
60+
final Accordion = ReactJsComponentFactoryProxy(MaterialUI.Accordion);
61+
62+
/// See: <https://material-ui.com/components/accordion/>
63+
final AccordionActions = ReactJsComponentFactoryProxy(MaterialUI.AccordionActions);
64+
65+
/// See: <https://material-ui.com/components/accordion/>
66+
final AccordionDetails = ReactJsComponentFactoryProxy(MaterialUI.AccordionDetails);
67+
68+
/// See: <https://material-ui.com/components/accordion/>
69+
final AccordionSummary = ReactJsComponentFactoryProxy(MaterialUI.AccordionSummary);
70+
5871
/// See: <https://material-ui.com/components/app-bar/>
5972
final AppBar = ReactJsComponentFactoryProxy(MaterialUI.AppBar);
6073

@@ -82,18 +95,6 @@ final CssBaseline = ReactJsComponentFactoryProxy(MaterialUI.CssBaseline);
8295
/// See: <https://material-ui.com/components/dividers/>
8396
final Divider = ReactJsComponentFactoryProxy(MaterialUI.Divider);
8497

85-
/// See: <https://material-ui.com/components/expansion-panels/>
86-
final ExpansionPanel = ReactJsComponentFactoryProxy(MaterialUI.ExpansionPanel);
87-
88-
/// See: <https://material-ui.com/components/expansion-panels/>
89-
final ExpansionPanelActions = ReactJsComponentFactoryProxy(MaterialUI.ExpansionPanelActions);
90-
91-
/// See: <https://material-ui.com/components/expansion-panels/>
92-
final ExpansionPanelDetails = ReactJsComponentFactoryProxy(MaterialUI.ExpansionPanelDetails);
93-
94-
/// See: <https://material-ui.com/components/expansion-panels/>
95-
final ExpansionPanelSummary = ReactJsComponentFactoryProxy(MaterialUI.ExpansionPanelSummary);
96-
9798
/// See: <https://material-ui.com/components/grid/>
9899
final Grid = ReactJsComponentFactoryProxy(MaterialUI.Grid);
99100

app/over_react_redux/todo_client/lib/src/components/todo_list_item.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,11 @@ class TodoListItemComponent extends UiStatefulComponent2<TodoListItemProps, Todo
6262

6363
@override
6464
render() {
65-
return ExpansionPanel({
66-
...sharedExpansionPanelProps,
65+
return Accordion({
66+
...sharedAccordionProps,
6767
'className': model.isCompleted ? 'Mui-disabled' : null,
6868
},
69-
(ListItemExpansionPanelSummary()
69+
(ListItemAccordionSummary()
7070
..modelId = model.id
7171
..allowExpansion = allowExpansion
7272
..isEditable = props.isEditable
@@ -76,7 +76,7 @@ class TodoListItemComponent extends UiStatefulComponent2<TodoListItemProps, Todo
7676
_renderTaskHeader(),
7777
_renderUserSelector(),
7878
),
79-
ExpansionPanelDetails({},
79+
AccordionDetails({},
8080
_renderTaskNotes(),
8181
),
8282
_renderEditableTaskActions(),
@@ -174,7 +174,7 @@ class TodoListItemComponent extends UiStatefulComponent2<TodoListItemProps, Todo
174174

175175
return Fragment()(
176176
Divider({}),
177-
ExpansionPanelActions({},
177+
AccordionActions({},
178178
Grid({
179179
'container': true,
180180
'direction': 'row'

app/over_react_redux/todo_client/lib/src/components/user_list_item.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ class UserListItemComponent extends UiStatefulComponent2<UserListItemProps, User
6262

6363
@override
6464
render() {
65-
return ExpansionPanel(sharedExpansionPanelProps,
66-
(ListItemExpansionPanelSummary()
65+
return Accordion(sharedAccordionProps,
66+
(ListItemAccordionSummary()
6767
..modelId = model.id
6868
..allowExpansion = allowExpansion
6969
..isEditable = props.isEditable
@@ -72,7 +72,7 @@ class UserListItemComponent extends UiStatefulComponent2<UserListItemProps, User
7272
_renderUserAvatar(),
7373
_renderUserNameHeader(),
7474
),
75-
ExpansionPanelDetails({},
75+
AccordionDetails({},
7676
_renderUserBio(),
7777
),
7878
_renderEditableUserActions(),
@@ -145,7 +145,7 @@ class UserListItemComponent extends UiStatefulComponent2<UserListItemProps, User
145145

146146
return Fragment()(
147147
Divider({}),
148-
ExpansionPanelActions({},
148+
AccordionActions({},
149149
Grid({
150150
'container': true,
151151
'direction': 'row',

app/over_react_redux/todo_client/test/unit/browser/components/material_ui_test.dart

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -74,31 +74,31 @@ main() {
7474
});
7575
});
7676

77-
group('ExpansionPanel', () {
78-
test('is a ReactJsComponentFactoryProxy of the JS MaterialUI.ExpansionPanel component', () {
79-
expect(ExpansionPanel.type.displayName, MaterialUI.ExpansionPanel.displayName);
80-
expect(ExpansionPanel({}), isA<ReactElement>());
77+
group('Accordion', () {
78+
test('is a ReactJsComponentFactoryProxy of the JS MaterialUI.Accordion component', () {
79+
expect(Accordion.type.displayName, MaterialUI.Accordion.displayName);
80+
expect(Accordion({}), isA<ReactElement>());
8181
});
8282
});
8383

84-
group('ExpansionPanelActions', () {
85-
test('is a ReactJsComponentFactoryProxy of the JS MaterialUI.ExpansionPanelActions component', () {
86-
expect(ExpansionPanelActions.type.displayName, MaterialUI.ExpansionPanelActions.displayName);
87-
expect(ExpansionPanelActions({}), isA<ReactElement>());
84+
group('AccordionActions', () {
85+
test('is a ReactJsComponentFactoryProxy of the JS MaterialUI.AccordionActions component', () {
86+
expect(AccordionActions.type.displayName, MaterialUI.AccordionActions.displayName);
87+
expect(AccordionActions({}), isA<ReactElement>());
8888
});
8989
});
9090

91-
group('ExpansionPanelDetails', () {
92-
test('is a ReactJsComponentFactoryProxy of the JS MaterialUI.ExpansionPanelDetails component', () {
93-
expect(ExpansionPanelDetails.type.displayName, MaterialUI.ExpansionPanelDetails.displayName);
94-
expect(ExpansionPanelDetails({}), isA<ReactElement>());
91+
group('AccordionDetails', () {
92+
test('is a ReactJsComponentFactoryProxy of the JS MaterialUI.AccordionDetails component', () {
93+
expect(AccordionDetails.type.displayName, MaterialUI.AccordionDetails.displayName);
94+
expect(AccordionDetails({}), isA<ReactElement>());
9595
});
9696
});
9797

98-
group('ExpansionPanelSummary', () {
99-
test('is a ReactJsComponentFactoryProxy of the JS MaterialUI.ExpansionPanelSummary component', () {
100-
expect(ExpansionPanelSummary.type.displayName, MaterialUI.ExpansionPanelSummary.displayName);
101-
expect(ExpansionPanelSummary({}), isA<ReactElement>());
98+
group('AccordionSummary', () {
99+
test('is a ReactJsComponentFactoryProxy of the JS MaterialUI.AccordionSummary component', () {
100+
expect(AccordionSummary.type.displayName, MaterialUI.AccordionSummary.displayName);
101+
expect(AccordionSummary({}), isA<ReactElement>());
102102
});
103103
});
104104

0 commit comments

Comments
 (0)