diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/tests/TestAPI.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/tests/TestAPI.tsx
index 62daf865d1..aca8ebb3c2 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/components/tests/TestAPI.tsx
+++ b/frontend/appflowy_tauri/src/appflowy_app/components/tests/TestAPI.tsx
@@ -10,7 +10,9 @@ import {
TestEditCell,
TestEditCheckboxCell,
TestEditDateCell,
+ TestEditDateFormat,
TestEditField,
+ TestEditNumberFormat,
TestEditTextCell,
TestEditURLCell,
TestGetSingleSelectFieldData,
@@ -48,6 +50,8 @@ export const TestAPI = () => {
+
+
{/*kanban board */}
diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/tests/TestGrid.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/tests/TestGrid.tsx
index e44d334861..6fc8721e3e 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/components/tests/TestGrid.tsx
+++ b/frontend/appflowy_tauri/src/appflowy_app/components/tests/TestGrid.tsx
@@ -1,5 +1,13 @@
import React from 'react';
-import { FieldType, NumberFormat, NumberTypeOptionPB, SelectOptionCellDataPB, ViewLayoutPB } from '@/services/backend';
+import {
+ DateFormat,
+ FieldType,
+ NumberFormat,
+ NumberTypeOptionPB,
+ SelectOptionCellDataPB,
+ TimeFormat,
+ ViewLayoutPB,
+} from '@/services/backend';
import { Log } from '$app/utils/log';
import {
assert,
@@ -23,9 +31,11 @@ import { SelectOptionCellBackendService } from '$app/stores/effects/database/cel
import { TypeOptionController } from '$app/stores/effects/database/field/type_option/type_option_controller';
import { None, Some } from 'ts-results';
import { RowBackendService } from '$app/stores/effects/database/row/row_bd_svc';
-import { makeNumberTypeOptionContext } from '$app/stores/effects/database/field/type_option/type_option_context';
+import {
+ makeDateTypeOptionContext,
+ makeNumberTypeOptionContext,
+} from '$app/stores/effects/database/field/type_option/type_option_context';
import { CalendarData } from '$app/stores/effects/database/cell/controller_builder';
-import { DatabaseEventMoveField } from '@/services/backend/events/flowy-database';
export const RunAllGridTests = () => {
async function run() {
@@ -162,6 +172,52 @@ async function testEditDateCell() {
await new Promise((resolve) => setTimeout(resolve, 200));
}
+async function testEditDateFormat() {
+ const view = await createTestDatabaseView(ViewLayoutPB.Grid);
+ const databaseController = await openTestDatabase(view.id);
+ await databaseController.open().then((result) => result.unwrap());
+
+ // Create date field
+ const typeOptionController = new TypeOptionController(view.id, None, FieldType.DateTime);
+ await typeOptionController.initialize();
+
+ // update date type option
+ const dateTypeOptionContext = makeDateTypeOptionContext(typeOptionController);
+ const typeOption = await dateTypeOptionContext.getTypeOption().then((a) => a.unwrap());
+ assert(typeOption.date_format === DateFormat.Friendly, 'Date format not match');
+ assert(typeOption.time_format === TimeFormat.TwentyFourHour, 'Time format not match');
+ typeOption.date_format = DateFormat.Local;
+ typeOption.time_format = TimeFormat.TwelveHour;
+ await dateTypeOptionContext.setTypeOption(typeOption);
+
+ const typeOption2 = await dateTypeOptionContext.getTypeOption().then((a) => a.unwrap());
+ assert(typeOption2.date_format === DateFormat.Local, 'Date format not match');
+ assert(typeOption2.time_format === TimeFormat.TwelveHour, 'Time format not match');
+
+ await new Promise((resolve) => setTimeout(resolve, 200));
+}
+
+async function testEditNumberFormat() {
+ const view = await createTestDatabaseView(ViewLayoutPB.Grid);
+ const databaseController = await openTestDatabase(view.id);
+ await databaseController.open().then((result) => result.unwrap());
+
+ // Create date field
+ const typeOptionController = new TypeOptionController(view.id, None, FieldType.Number);
+ await typeOptionController.initialize();
+
+ // update date type option
+ const dateTypeOptionContext = makeNumberTypeOptionContext(typeOptionController);
+ const typeOption = await dateTypeOptionContext.getTypeOption().then((a) => a.unwrap());
+ typeOption.format = NumberFormat.EUR;
+ typeOption.name = 'Money';
+ await dateTypeOptionContext.setTypeOption(typeOption);
+
+ const typeOption2 = await dateTypeOptionContext.getTypeOption().then((a) => a.unwrap());
+ Log.info(typeOption2);
+ await new Promise((resolve) => setTimeout(resolve, 200));
+}
+
async function testCheckboxCell() {
const view = await createTestDatabaseView(ViewLayoutPB.Grid);
const databaseController = await openTestDatabase(view.id);
@@ -250,10 +306,13 @@ async function testMoveField() {
const view = await createTestDatabaseView(ViewLayoutPB.Grid);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
+ const ids = databaseController.fieldController.fieldInfos.map((value) => value.field.id);
+ Log.info('Receive fields data:', ids);
databaseController.subscribe({
- onFieldsChanged: (value) => {
- Log.info('Receive fields data:', value);
+ onFieldsChanged: (values) => {
+ const new_ids = values.map((value) => value.field.id);
+ Log.info('Receive fields data:', new_ids);
},
});
@@ -431,6 +490,12 @@ export const TestEditURLCell = () => {
export const TestEditDateCell = () => {
return TestButton('Test editing date cell', testEditDateCell);
};
+export const TestEditDateFormat = () => {
+ return TestButton('Test editing date format', testEditDateFormat);
+};
+export const TestEditNumberFormat = () => {
+ return TestButton('Test editing number format', testEditNumberFormat);
+};
export const TestEditCheckboxCell = () => {
return TestButton('Test editing checkbox cell', testCheckboxCell);
};
diff --git a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/field/type_option/type_option_controller.ts b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/field/type_option/type_option_controller.ts
index 86fd441cab..7a56a083ed 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/field/type_option/type_option_controller.ts
+++ b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/field/type_option/type_option_controller.ts
@@ -1,8 +1,8 @@
import { FieldPB, FieldType, TypeOptionPB } from '@/services/backend';
import { ChangeNotifier } from '$app/utils/change_notifier';
-import { FieldBackendService } from '../field_bd_svc';
+import { FieldBackendService, TypeOptionParser } from '../field_bd_svc';
import { Log } from '$app/utils/log';
-import { None, Option, Some } from 'ts-results';
+import { None, Ok, Option, Some } from 'ts-results';
import { FieldInfo } from '../field_controller';
import { TypeOptionBackendService } from './type_option_bd_svc';