mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2025-11-01 02:24:37 +00:00
chore: release version 0.7.6 (#6910)
* chore: update changelog * feat: support displaying text color, background color and font item in table cell * fix: integration test and unit test
This commit is contained in:
parent
ca195887e0
commit
64e4416f54
@ -1,4 +1,13 @@
|
||||
# Release Notes
|
||||
## Version 0.7.6 - 03/12/2024
|
||||
### New Features
|
||||
- Revamped the simple table UI
|
||||
- Added support for capturing images from camera on mobile
|
||||
### Bug Fixes
|
||||
- Improved markdown rendering capabilities in AI writer
|
||||
- Fixed an issue where pressing Enter on a collapsed toggle list would add an unnecessary new line
|
||||
- Fixed an issue where creating a document from slash menu could insert content at incorrect position
|
||||
|
||||
## Version 0.7.5 - 25/11/2024
|
||||
### Bug Fixes
|
||||
- Improved chat response parsing
|
||||
|
||||
@ -115,19 +115,41 @@ void main() {
|
||||
await tester.editor.tapLineOfEditorAt(0);
|
||||
await tester.insertTableInDocument();
|
||||
|
||||
// hover on the table
|
||||
final tableBlock = find.byType(SimpleTableBlockWidget).first;
|
||||
// add a new row
|
||||
final row = find.byWidgetPredicate((w) {
|
||||
return w is SimpleTableRowBlockWidget && w.node.rowIndex == 1;
|
||||
});
|
||||
await tester.hoverOnWidget(
|
||||
tableBlock,
|
||||
row,
|
||||
onHover: () async {
|
||||
// click the add row button
|
||||
final addRowButton = find.byType(SimpleTableAddRowButton).first;
|
||||
await tester.tap(addRowButton);
|
||||
},
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// click the add column button
|
||||
// add a new column
|
||||
final column = find.byWidgetPredicate((w) {
|
||||
return w is SimpleTableCellBlockWidget && w.node.columnIndex == 1;
|
||||
}).first;
|
||||
await tester.hoverOnWidget(
|
||||
column,
|
||||
onHover: () async {
|
||||
final addColumnButton = find.byType(SimpleTableAddColumnButton).first;
|
||||
await tester.tap(addColumnButton);
|
||||
},
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// add a new row and a new column
|
||||
final row2 = find.byWidgetPredicate((w) {
|
||||
return w is SimpleTableCellBlockWidget &&
|
||||
w.node.rowIndex == 2 &&
|
||||
w.node.columnIndex == 2;
|
||||
}).first;
|
||||
await tester.hoverOnWidget(
|
||||
row2,
|
||||
onHover: () async {
|
||||
// click the add row and column button
|
||||
final addRowAndColumnButton =
|
||||
find.byType(SimpleTableAddColumnAndRowButton).first;
|
||||
|
||||
@ -92,9 +92,9 @@ class _AppFlowyEditorPageState extends State<AppFlowyEditorPage>
|
||||
inlineMathEquationItem,
|
||||
linkItem,
|
||||
alignToolbarItem,
|
||||
buildTextColorItem(),
|
||||
buildHighlightColorItem(),
|
||||
customizeFontToolbarItem,
|
||||
buildTextColorItem()..isActive = showInAnyTextType,
|
||||
buildHighlightColorItem()..isActive = showInAnyTextType,
|
||||
customizeFontToolbarItem..isActive = showInAnyTextType,
|
||||
];
|
||||
|
||||
late List<SelectionMenuItem> slashMenuItems;
|
||||
@ -164,6 +164,9 @@ class _AppFlowyEditorPageState extends State<AppFlowyEditorPage>
|
||||
ToggleListBlockKeys.type,
|
||||
CalloutBlockKeys.type,
|
||||
TableBlockKeys.type,
|
||||
SimpleTableBlockKeys.type,
|
||||
SimpleTableCellBlockKeys.type,
|
||||
SimpleTableRowBlockKeys.type,
|
||||
]);
|
||||
AppFlowyRichTextKeys.supportSliced.add(AppFlowyRichTextKeys.fontFamily);
|
||||
|
||||
|
||||
@ -202,7 +202,11 @@ class _SimpleTableBlockWidgetState extends State<SimpleTableBlockWidget>
|
||||
onExit: (event) {
|
||||
simpleTableContext.isHoveringOnTableBlock.value = false;
|
||||
},
|
||||
child: child,
|
||||
child: Container(
|
||||
alignment: Alignment.topLeft,
|
||||
padding: padding,
|
||||
child: child,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
@ -16,6 +16,17 @@ enum TableAlign {
|
||||
right;
|
||||
|
||||
String get name => switch (this) {
|
||||
TableAlign.left => 'Left',
|
||||
TableAlign.center => 'Center',
|
||||
TableAlign.right => 'Right',
|
||||
};
|
||||
|
||||
// The key used in the attributes of the table node.
|
||||
//
|
||||
// Example:
|
||||
//
|
||||
// attributes[SimpleTableBlockKeys.columnAligns] = {0: 'left', 1: 'center', 2: 'right'}
|
||||
String get key => switch (this) {
|
||||
TableAlign.left => 'left',
|
||||
TableAlign.center => 'center',
|
||||
TableAlign.right => 'right',
|
||||
@ -130,7 +141,7 @@ extension TableNodeExtension on Node {
|
||||
parentTableNode.attributes[SimpleTableBlockKeys.rowAligns];
|
||||
final align = rowAligns?[rowIndex.toString()];
|
||||
return TableAlign.values.firstWhere(
|
||||
(e) => e.name == align,
|
||||
(e) => e.key == align,
|
||||
orElse: () => TableAlign.left,
|
||||
);
|
||||
} catch (e) {
|
||||
@ -151,7 +162,7 @@ extension TableNodeExtension on Node {
|
||||
parentTableNode.attributes[SimpleTableBlockKeys.columnAligns];
|
||||
final align = columnAligns?[columnIndex.toString()];
|
||||
return TableAlign.values.firstWhere(
|
||||
(e) => e.name == align,
|
||||
(e) => e.key == align,
|
||||
orElse: () => TableAlign.left,
|
||||
);
|
||||
} catch (e) {
|
||||
|
||||
@ -129,7 +129,7 @@ extension TableOptionOperation on EditorState {
|
||||
final attributes = parentTableNode.attributes.mergeValues(
|
||||
SimpleTableBlockKeys.columnAligns,
|
||||
parentTableNode.columnAligns,
|
||||
duplicatedEntry: MapEntry(columnIndex.toString(), align.name),
|
||||
duplicatedEntry: MapEntry(columnIndex.toString(), align.key),
|
||||
);
|
||||
transaction.updateNode(parentTableNode, attributes);
|
||||
await apply(transaction);
|
||||
@ -167,7 +167,7 @@ extension TableOptionOperation on EditorState {
|
||||
final attributes = parentTableNode.attributes.mergeValues(
|
||||
SimpleTableBlockKeys.rowAligns,
|
||||
parentTableNode.rowAligns,
|
||||
duplicatedEntry: MapEntry(rowIndex.toString(), align.name),
|
||||
duplicatedEntry: MapEntry(rowIndex.toString(), align.key),
|
||||
);
|
||||
transaction.updateNode(parentTableNode, attributes);
|
||||
await apply(transaction);
|
||||
|
||||
@ -67,7 +67,7 @@ void main() {
|
||||
align: TableAlign.center,
|
||||
);
|
||||
expect(tableNode.rowAligns, {
|
||||
'1': TableAlign.center.name,
|
||||
'1': TableAlign.center.key,
|
||||
});
|
||||
await editorState.deleteRowInTable(tableNode, 1);
|
||||
expect(tableNode.rowLength, 2);
|
||||
@ -96,7 +96,7 @@ void main() {
|
||||
align: TableAlign.center,
|
||||
);
|
||||
expect(tableNode.rowAligns, {
|
||||
'1': TableAlign.center.name,
|
||||
'1': TableAlign.center.key,
|
||||
});
|
||||
await editorState.deleteRowInTable(tableNode, 0);
|
||||
expect(tableNode.rowLength, 2);
|
||||
@ -105,7 +105,7 @@ void main() {
|
||||
'0': '0xFF0000FF',
|
||||
});
|
||||
expect(tableNode.rowAligns, {
|
||||
'0': TableAlign.center.name,
|
||||
'0': TableAlign.center.key,
|
||||
});
|
||||
});
|
||||
|
||||
@ -129,7 +129,7 @@ void main() {
|
||||
align: TableAlign.center,
|
||||
);
|
||||
expect(tableNode.columnAligns, {
|
||||
'1': TableAlign.center.name,
|
||||
'1': TableAlign.center.key,
|
||||
});
|
||||
await editorState.deleteColumnInTable(tableNode, 1);
|
||||
expect(tableNode.rowLength, 3);
|
||||
@ -158,7 +158,7 @@ void main() {
|
||||
align: TableAlign.center,
|
||||
);
|
||||
expect(tableNode.columnAligns, {
|
||||
'1': TableAlign.center.name,
|
||||
'1': TableAlign.center.key,
|
||||
});
|
||||
await editorState.deleteColumnInTable(tableNode, 0);
|
||||
expect(tableNode.rowLength, 3);
|
||||
@ -167,7 +167,7 @@ void main() {
|
||||
'0': '0xFF0000FF',
|
||||
});
|
||||
expect(tableNode.columnAligns, {
|
||||
'0': TableAlign.center.name,
|
||||
'0': TableAlign.center.key,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -54,7 +54,7 @@ void main() {
|
||||
align: TableAlign.center,
|
||||
);
|
||||
expect(tableNode.rowAligns, {
|
||||
'1': TableAlign.center.name,
|
||||
'1': TableAlign.center.key,
|
||||
});
|
||||
await editorState.duplicateRowInTable(tableNode, 1);
|
||||
expect(tableCellNode.rowColors, {
|
||||
@ -62,8 +62,8 @@ void main() {
|
||||
'2': '0xFF0000FF',
|
||||
});
|
||||
expect(tableNode.rowAligns, {
|
||||
'1': TableAlign.center.name,
|
||||
'2': TableAlign.center.name,
|
||||
'1': TableAlign.center.key,
|
||||
'2': TableAlign.center.key,
|
||||
});
|
||||
});
|
||||
|
||||
@ -87,14 +87,14 @@ void main() {
|
||||
align: TableAlign.center,
|
||||
);
|
||||
expect(tableNode.rowAligns, {
|
||||
'1': TableAlign.center.name,
|
||||
'1': TableAlign.center.key,
|
||||
});
|
||||
await editorState.duplicateRowInTable(tableNode, 2);
|
||||
expect(tableCellNode.rowColors, {
|
||||
'1': '0xFF0000FF',
|
||||
});
|
||||
expect(tableNode.rowAligns, {
|
||||
'1': TableAlign.center.name,
|
||||
'1': TableAlign.center.key,
|
||||
});
|
||||
});
|
||||
|
||||
@ -118,7 +118,7 @@ void main() {
|
||||
'1': '0xFF0000FF',
|
||||
});
|
||||
expect(tableNode.columnAligns, {
|
||||
'1': TableAlign.center.name,
|
||||
'1': TableAlign.center.key,
|
||||
});
|
||||
await editorState.duplicateColumnInTable(tableNode, 1);
|
||||
expect(tableCellNode.columnColors, {
|
||||
@ -126,8 +126,8 @@ void main() {
|
||||
'2': '0xFF0000FF',
|
||||
});
|
||||
expect(tableNode.columnAligns, {
|
||||
'1': TableAlign.center.name,
|
||||
'2': TableAlign.center.name,
|
||||
'1': TableAlign.center.key,
|
||||
'2': TableAlign.center.key,
|
||||
});
|
||||
});
|
||||
|
||||
@ -151,14 +151,14 @@ void main() {
|
||||
'1': '0xFF0000FF',
|
||||
});
|
||||
expect(tableNode.columnAligns, {
|
||||
'1': TableAlign.center.name,
|
||||
'1': TableAlign.center.key,
|
||||
});
|
||||
await editorState.duplicateColumnInTable(tableNode, 2);
|
||||
expect(tableCellNode.columnColors, {
|
||||
'1': '0xFF0000FF',
|
||||
});
|
||||
expect(tableNode.columnAligns, {
|
||||
'1': TableAlign.center.name,
|
||||
'1': TableAlign.center.key,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -87,14 +87,14 @@ void main() {
|
||||
align: TableAlign.center,
|
||||
);
|
||||
expect(tableNode.rowAligns, {
|
||||
'0': TableAlign.center.name,
|
||||
'0': TableAlign.center.key,
|
||||
});
|
||||
await editorState.insertRowInTable(tableNode, 0);
|
||||
expect(tableNode.rowColors, {
|
||||
'1': '0xFF0000FF',
|
||||
});
|
||||
expect(tableNode.rowAligns, {
|
||||
'1': TableAlign.center.name,
|
||||
'1': TableAlign.center.key,
|
||||
});
|
||||
});
|
||||
|
||||
@ -118,14 +118,14 @@ void main() {
|
||||
align: TableAlign.center,
|
||||
);
|
||||
expect(tableNode.rowAligns, {
|
||||
'0': TableAlign.center.name,
|
||||
'0': TableAlign.center.key,
|
||||
});
|
||||
await editorState.insertRowInTable(tableNode, 1);
|
||||
expect(tableNode.rowColors, {
|
||||
'0': '0xFF0000FF',
|
||||
});
|
||||
expect(tableNode.rowAligns, {
|
||||
'0': TableAlign.center.name,
|
||||
'0': TableAlign.center.key,
|
||||
});
|
||||
});
|
||||
|
||||
@ -149,14 +149,14 @@ void main() {
|
||||
'0': '0xFF0000FF',
|
||||
});
|
||||
expect(tableNode.columnAligns, {
|
||||
'0': TableAlign.center.name,
|
||||
'0': TableAlign.center.key,
|
||||
});
|
||||
await editorState.insertColumnInTable(tableNode, 0);
|
||||
expect(tableNode.columnColors, {
|
||||
'1': '0xFF0000FF',
|
||||
});
|
||||
expect(tableNode.columnAligns, {
|
||||
'1': TableAlign.center.name,
|
||||
'1': TableAlign.center.key,
|
||||
});
|
||||
});
|
||||
|
||||
@ -180,14 +180,14 @@ void main() {
|
||||
'0': '0xFF0000FF',
|
||||
});
|
||||
expect(tableNode.columnAligns, {
|
||||
'0': TableAlign.center.name,
|
||||
'0': TableAlign.center.key,
|
||||
});
|
||||
await editorState.insertColumnInTable(tableNode, 1);
|
||||
expect(tableNode.columnColors, {
|
||||
'0': '0xFF0000FF',
|
||||
});
|
||||
expect(tableNode.columnAligns, {
|
||||
'0': TableAlign.center.name,
|
||||
'0': TableAlign.center.key,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -100,9 +100,9 @@ void main() {
|
||||
);
|
||||
}
|
||||
expect(tableNode.columnAligns, {
|
||||
'0': TableAlign.center.name,
|
||||
'1': TableAlign.center.name,
|
||||
'2': TableAlign.center.name,
|
||||
'0': TableAlign.center.key,
|
||||
'1': TableAlign.center.key,
|
||||
'2': TableAlign.center.key,
|
||||
});
|
||||
});
|
||||
|
||||
@ -124,8 +124,8 @@ void main() {
|
||||
}
|
||||
|
||||
expect(tableNode.rowAligns, {
|
||||
'0': TableAlign.center.name,
|
||||
'1': TableAlign.center.name,
|
||||
'0': TableAlign.center.key,
|
||||
'1': TableAlign.center.key,
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user