);
};
async function createBuildInBoard() {
const view = await createTestDatabaseView(ViewLayoutTypePB.Board);
const databaseController = await openTestDatabase(view.id);
databaseController.subscribe({
onGroupByField: (groups) => {
console.log(groups);
if (groups.length !== 4) {
throw Error('The build-in board should have 4 groups');
}
assert(groups[0].rows.length === 0, 'The no status group should have 0 rows');
assert(groups[1].rows.length === 3, 'The first group should have 3 rows');
assert(groups[2].rows.length === 0, 'The second group should have 0 rows');
assert(groups[3].rows.length === 0, 'The third group should have 0 rows');
},
});
await databaseController.open().then((result) => result.unwrap());
await databaseController.dispose();
}
async function createKanbanBoardRow() {
const view = await createTestDatabaseView(ViewLayoutTypePB.Board);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
// Create row in no status group
const noStatusGroup = databaseController.groups.getValue()[0];
await noStatusGroup.createRow().then((result) => result.unwrap());
await assertNumberOfRowsInGroup(view.id, noStatusGroup.groupId, 1);
await databaseController.dispose();
}
async function moveKanbanBoardRow() {
const view = await createTestDatabaseView(ViewLayoutTypePB.Board);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
// Create row in no status group
const firstGroup = databaseController.groups.getValue()[1];
const secondGroup = databaseController.groups.getValue()[2];
// subscribe the group changes
firstGroup.subscribe({
onRemoveRow: (groupId, deleteRowId) => {
console.log(groupId + 'did remove:' + deleteRowId);
},
onInsertRow: (groupId, rowPB) => {
console.log(groupId + 'did insert:' + rowPB.id);
},
onUpdateRow: (groupId, rowPB) => {
console.log(groupId + 'did update:' + rowPB.id);
},
onCreateRow: (groupId, rowPB) => {
console.log(groupId + 'did create:' + rowPB.id);
},
});
secondGroup.subscribe({
onRemoveRow: (groupId, deleteRowId) => {
console.log(groupId + 'did remove:' + deleteRowId);
},
onInsertRow: (groupId, rowPB) => {
console.log(groupId + 'did insert:' + rowPB.id);
},
onUpdateRow: (groupId, rowPB) => {
console.log(groupId + 'did update:' + rowPB.id);
},
onCreateRow: (groupId, rowPB) => {
console.log(groupId + 'did create:' + rowPB.id);
},
});
const row = firstGroup.rowAtIndex(0).unwrap();
await databaseController.moveRow(row.id, secondGroup.groupId);
assert(firstGroup.rows.length === 2);
await assertNumberOfRowsInGroup(view.id, firstGroup.groupId, 2);
assert(secondGroup.rows.length === 1);
await assertNumberOfRowsInGroup(view.id, secondGroup.groupId, 1);
await databaseController.dispose();
}
async function createKanbanBoardColumn() {
const view = await createTestDatabaseView(ViewLayoutTypePB.Board);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
// Create row in no status group
const firstGroup = databaseController.groups.getValue()[1];
const secondGroup = databaseController.groups.getValue()[2];
await databaseController.moveGroup(firstGroup.groupId, secondGroup.groupId);
assert(databaseController.groups.getValue()[1].groupId === secondGroup.groupId);
assert(databaseController.groups.getValue()[2].groupId === firstGroup.groupId);
await databaseController.dispose();
}
async function createColumnInBoard() {
const view = await createTestDatabaseView(ViewLayoutTypePB.Board);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const singleSelect = databaseController.fieldController.fieldInfos.find(
(fieldInfo) => fieldInfo.field.field_type === FieldType.SingleSelect
)!;
// Create a option which will cause creating a new group
const name = 'New column';
await createSingleSelectOptions(view.id, singleSelect, [name]);
// Wait the backend posting the notification to update the groups
await new Promise((resolve) => setTimeout(resolve, 200));
assert(databaseController.groups.value.length === 5, 'expect number of groups is 5');
assert(databaseController.groups.value[4].name === name, 'expect the last group name is ' + name);
await databaseController.dispose();
}
export const TestCreateKanbanBoard = () => {
return TestButton('Test create build-in board', createBuildInBoard);
};
export const TestCreateKanbanBoardRowInNoStatusGroup = () => {
return TestButton('Test create row in build-in kanban board', createKanbanBoardRow);
};
export const TestMoveKanbanBoardRow = () => {
return TestButton('Test move row in build-in kanban board', moveKanbanBoardRow);
};
export const TestMoveKanbanBoardColumn = () => {
return TestButton('Test move column in build-in kanban board', createKanbanBoardColumn);
};
export const TestCreateKanbanBoardColumn = () => {
return TestButton('Test create column in build-in kanban board', createColumnInBoard);
};
export const TestButton = (title: string, onClick: () => void) => {
return (