diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md
new file mode 100644
index 0000000000..57ebf4205f
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md
@@ -0,0 +1,27 @@
+
+
+
+
+### Feature Preview
+
+
+
+---
+
+
+
+#### PR Checklist
+
+- [ ] My code adheres to the [AppFlowy Style Guide](https://appflowy.gitbook.io/docs/essential-documentation/contribute-to-appflowy/software-contributions/submitting-code/style-guides)
+- [ ] I've listed at least one issue that this PR fixes in the description above.
+- [ ] I've added a test(s) to validate changes in this PR, or this PR only contains semantic changes.
+- [ ] All existing tests are passing.
diff --git a/.github/workflows/flutter_ci.yaml b/.github/workflows/flutter_ci.yaml
index fafb78558e..842608e5ec 100644
--- a/.github/workflows/flutter_ci.yaml
+++ b/.github/workflows/flutter_ci.yaml
@@ -16,7 +16,7 @@ on:
- "frontend/**"
env:
- FLUTTER_VERSION: "3.3.9"
+ FLUTTER_VERSION: "3.7.5"
RUST_TOOLCHAIN: "1.65"
jobs:
diff --git a/.github/workflows/integration_test.yml b/.github/workflows/integration_test.yml
index 96ad941a26..76aed8da9b 100644
--- a/.github/workflows/integration_test.yml
+++ b/.github/workflows/integration_test.yml
@@ -35,7 +35,7 @@ jobs:
- uses: subosito/flutter-action@v2
with:
channel: "stable"
- flutter-version: "3.3.9"
+ flutter-version: "3.7.5"
cache: true
- name: Cache Cargo
@@ -56,15 +56,16 @@ jobs:
- name: Setup Environment
run: |
+ cargo install --force cargo-make
+ cargo install --force duckscript_cli
if [ "$RUNNER_OS" == "Linux" ]; then
sudo wget -qO /etc/apt/trusted.gpg.d/dart_linux_signing_key.asc https://dl-ssl.google.com/linux/linux_signing_key.pub
sudo wget -qO /etc/apt/sources.list.d/dart_stable.list https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list
sudo apt-get update
- sudo apt-get install -y dart curl build-essential libsqlite3-dev libssl-dev clang cmake ninja-build pkg-config libgtk-3-dev
+ sudo apt-get install -y dart curl build-essential libssl-dev clang cmake ninja-build pkg-config libgtk-3-dev
sudo apt-get install keybinder-3.0
elif [ "$RUNNER_OS" == "Windows" ]; then
vcpkg integrate install
- cargo install --force duckscript_cli
elif [ "$RUNNER_OS" == "macOS" ]; then
echo 'do nothing'
fi
@@ -77,17 +78,6 @@ jobs:
cargo install cargo-make
cargo make appflowy-flutter-deps-tools
- - name: Build Test lib
- working-directory: frontend
- run: |
- if [ "$RUNNER_OS" == "Linux" ]; then
- cargo make --profile production-linux-x86_64 appflowy
- elif [ "$RUNNER_OS" == "macOS" ]; then
- cargo make --profile production-mac-x86_64 appflowy
- elif [ "$RUNNER_OS" == "Windows" ]; then
- cargo make --profile production-windows-x86 appflowy
- fi
-
- name: Config Flutter
run: |
if [ "$RUNNER_OS" == "Linux" ]; then
@@ -99,22 +89,27 @@ jobs:
fi
shell: bash
- - name: Flutter Code Generation
- working-directory: frontend/appflowy_flutter
+ - name: Build Test lib
+ working-directory: frontend
run: |
- flutter packages pub get
- flutter packages pub run easy_localization:generate -f keys -o locale_keys.g.dart -S assets/translations -s en.json
- flutter packages pub run build_runner build --delete-conflicting-outputs
+ if [ "$RUNNER_OS" == "Linux" ]; then
+ cargo make --profile development-linux-x86_64 appflowy-dev
+ elif [ "$RUNNER_OS" == "macOS" ]; then
+ cargo make --profile development-mac-x86_64 appflowy-dev
+ elif [ "$RUNNER_OS" == "Windows" ]; then
+ cargo make --profile development-windows-x86 appflowy-dev
+ fi
+ shell: bash
- name: Run AppFlowy tests
working-directory: frontend/appflowy_flutter
run: |
if [ "$RUNNER_OS" == "Linux" ]; then
- flutter test integration_test -d Linux --coverage
+ flutter test integration_test/runner.dart -d Linux --coverage
elif [ "$RUNNER_OS" == "macOS" ]; then
- flutter test integration_test -d macOS --coverage
+ flutter test integration_test/runner.dart -d macOS --coverage
elif [ "$RUNNER_OS" == "Windows" ]; then
- flutter test integration_test -d Windows --coverage
+ flutter test integration_test/runner.dart -d Windows --coverage
fi
shell: bash
@@ -125,4 +120,3 @@ jobs:
# env_vars: ${{ matrix.os }}
# fail_ci_if_error: true
# verbose: true
-
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index e784801bca..88e40585f4 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -3,10 +3,10 @@ name: release
on:
push:
tags:
- - '*'
+ - "*"
env:
- FLUTTER_VERSION: "3.3.9"
+ FLUTTER_VERSION: "3.7.5"
RUST_TOOLCHAIN: "1.65"
jobs:
@@ -136,7 +136,11 @@ jobs:
fail-fast: false
matrix:
job:
- - { target: x86_64-apple-darwin, os: macos-10.15, extra-build-args: "" }
+ - {
+ target: x86_64-apple-darwin,
+ os: macos-10.15,
+ extra-build-args: "",
+ }
steps:
- name: Checkout source code
uses: actions/checkout@v3
@@ -172,7 +176,7 @@ jobs:
working-directory: frontend
run: |
flutter config --enable-macos-desktop
- cargo make --env APP_VERSION=${{ github.ref_name }} --profile production-mac-x86_64 appflowy
+ dart ./scripts/flutter_release_build/build_flowy.dart . ${{ github.ref_name }}
- name: Create macOS dmg
run: |
@@ -225,9 +229,21 @@ jobs:
fail-fast: false
matrix:
job:
- - { arch: x86_64, target: x86_64-unknown-linux-gnu, os: ubuntu-20.04, extra-build-args: "", flutter_profile: production-linux-x86_64 }
+ - {
+ arch: x86_64,
+ target: x86_64-unknown-linux-gnu,
+ os: ubuntu-20.04,
+ extra-build-args: "",
+ flutter_profile: production-linux-x86_64,
+ }
# - { arch: aarch64, target: aarch64-unknown-linux-gnu, os: ubuntu-20.04, extra-build-args: "", flutter_profile: production-linux-aarch64 }
- - { arch: x86_64, target: x86_64-unknown-linux-gnu, os: ubuntu-18.04, extra-build-args: "", flutter_profile: production-linux-x86_64}
+ - {
+ arch: x86_64,
+ target: x86_64-unknown-linux-gnu,
+ os: ubuntu-18.04,
+ extra-build-args: "",
+ flutter_profile: production-linux-x86_64,
+ }
steps:
- name: Checkout source code
uses: actions/checkout@v3
@@ -275,7 +291,7 @@ jobs:
working-directory: frontend
run: |
flutter config --enable-linux-desktop
- cargo make --env APP_VERSION=${{ github.ref_name }} --profile ${{ matrix.job.flutter_profile}} appflowy
+ dart ./scripts/flutter_release_build/build_flowy.dart . ${{ github.ref_name }}
- name: Archive Assert
working-directory: ${{ env.LINUX_APP_RELEASE_PATH }}
@@ -361,4 +377,4 @@ jobs:
- name: Notify Discord
run: |
curl -H "Content-Type: application/json" -d '{"username": "release@appflowy", "content": "🎉 AppFlowy ${{ github.ref_name }} is available. https://github.com/AppFlowy-IO/AppFlowy/releases/tag/'${{ github.ref_name }}'"}' "https://discord.com/api/webhooks/${{ secrets.DISCORD }}"
- shell: bash
\ No newline at end of file
+ shell: bash
diff --git a/.github/workflows/rust_ci.yaml b/.github/workflows/rust_ci.yaml
index 0991dd0dcb..33b08bbde7 100644
--- a/.github/workflows/rust_ci.yaml
+++ b/.github/workflows/rust_ci.yaml
@@ -20,7 +20,7 @@ on:
env:
CARGO_TERM_COLOR: always
RUST_TOOLCHAIN: "1.65"
- FLUTTER_VERSION: "3.3.9"
+ FLUTTER_VERSION: "3.7.5"
jobs:
test-on-ubuntu:
diff --git a/.github/workflows/rust_coverage.yml b/.github/workflows/rust_coverage.yml
index 5e5c741b0d..be9d09bb4d 100644
--- a/.github/workflows/rust_coverage.yml
+++ b/.github/workflows/rust_coverage.yml
@@ -11,7 +11,7 @@ on:
env:
CARGO_TERM_COLOR: always
- FLUTTER_VERSION: "3.3.9"
+ FLUTTER_VERSION: "3.7.5"
RUST_TOOLCHAIN: "1.65"
jobs:
diff --git a/.gitignore b/.gitignore
index 5eeae980bc..bce47974c4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,3 +35,5 @@ pubspec.lock
.githooks/gitlint
.githooks/gitlint.exe
.fvm/
+
+**/AppFlowy-Collab/
diff --git a/frontend/.vscode/tasks.json b/frontend/.vscode/tasks.json
index 227a5cbfba..4f8a52c95c 100644
--- a/frontend/.vscode/tasks.json
+++ b/frontend/.vscode/tasks.json
@@ -1,223 +1,225 @@
{
- "version": "2.0.0",
- // https://code.visualstudio.com/docs/editor/tasks
- // https://gist.github.com/deadalusai/9e13e36d61ec7fb72148
- // ${workspaceRoot}: the root folder of the team
- // ${file}: the current opened file
- // ${fileBasename}: the current opened file's basename
- // ${fileDirname}: the current opened file's dirname
- // ${fileExtname}: the current opened file's extension
- // ${cwd}: the current working directory of the spawned process
- "tasks": [
- {
- "label": "AF: Clean + Rebuild All",
- "type": "shell",
- "dependsOrder": "sequence",
- "dependsOn": [
- "AF: Dart Clean",
- "AF: Flutter Clean",
- "AF: Build Appflowy Core",
- "AF: Flutter Pub Get",
- "AF: Flutter Package Get",
- "AF: Generate Language Files",
- "AF: Generate Freezed Files"
- ],
- "presentation": {
- "reveal": "always",
- "panel": "new"
- }
- },
- {
- "label": "AF: Clean + Rebuild All (Android)",
- "type": "shell",
- "dependsOrder": "sequence",
- "dependsOn": [
- "AF: Dart Clean",
- "AF: Flutter Clean",
- "AF: Build Appflowy Core_for_android",
- "AF: Flutter Pub Get",
- "AF: Flutter Package Get",
- "AF: Generate Language Files",
- "AF: Generate Freezed Files"
- ],
- "presentation": {
- "reveal": "always",
- "panel": "new"
- }
- },
- {
- "label": "AF: Build Appflowy Core_for_android",
- "type": "shell",
- "command": "cargo make --profile development-android appflowy-core-dev-android",
- "group": "build",
- "options": {
- "cwd": "${workspaceFolder}"
- }
- },
- {
- "label": "AF: Build Appflowy Core",
- "type": "shell",
- "windows": {
- "command": "cargo make --profile development-windows-x86 appflowy-core-dev"
- },
- "linux": {
- "command": "cargo make --profile \"development-linux-$(uname -m)\" appflowy-core-dev"
- },
- "osx": {
- "command": "cargo make --profile \"development-mac-$(uname -m)\" appflowy-core-dev"
- },
- "group": "build",
- "options": {
- "cwd": "${workspaceFolder}"
- }
- },
- {
- "label": "AF: Code Gen",
- "type": "shell",
- "dependsOrder": "sequence",
- "dependsOn": [
- "AF: Flutter Clean",
- "AF: Flutter Pub Get",
- "AF: Flutter Package Get",
- "AF: Generate Language Files",
- "AF: Generate Freezed Files"
- ],
- "group": {
- "kind": "build",
- "isDefault": true
- },
- "presentation": {
- "reveal": "always",
- "panel": "new"
- }
- },
- {
- "label": "AF: Flutter Clean",
- "type": "shell",
- "command": "flutter clean",
- "options": {
- "cwd": "${workspaceFolder}/appflowy_flutter"
- }
- },
- {
- "label": "AF: Flutter Pub Get",
- "type": "shell",
- "command": "flutter pub get",
- "options": {
- "cwd": "${workspaceFolder}/appflowy_flutter"
- }
- },
- {
- "label": "AF: Flutter Package Get",
- "type": "shell",
- "command": "flutter packages pub get",
- "options": {
- "cwd": "${workspaceFolder}/appflowy_flutter"
- }
- },
- {
- "label": "AF: Generate Freezed Files",
- "type": "shell",
- "command": "flutter pub run build_runner build --delete-conflicting-outputs",
- "options": {
- "cwd": "${workspaceFolder}/appflowy_flutter"
- }
- },
- {
- "label": "AF: Generate Language Files",
- "type": "shell",
- "command": "sh ./scripts/generate_language_files.sh",
- "windows": {
- "options": {
- "shell": {
- "executable": "cmd.exe",
- "args": [
- "/d",
- "/c",
- ".\\scripts\\generate_language_files.cmd"
- ]
- }
- }
- },
- "group": "build",
- "options": {
- "cwd": "${workspaceFolder}"
- }
- },
- {
- "label": "AF: Flutter Clean",
- "type": "shell",
- "command": "cargo make flutter_clean",
- "group": "build",
- "options": {
- "cwd": "${workspaceFolder}"
- }
- },
- {
- "label": "AF: flutter build aar",
- "type": "flutter",
- "command": "flutter",
- "args": [
- "build",
- "aar"
- ],
- "group": "build",
- "problemMatcher": [],
- "detail": "appflowy_flutter"
- },
- {
- "label": "AF: Tauri UI Dev",
- "type": "shell",
- "isBackground": true,
- "command": "yarn",
- "args": ["dev"],
- "options": {
- "cwd": "${workspaceFolder}/appflowy_tauri"
- }
- },
- {
- "label": "AF: Tauri UI Build",
- "type": "shell",
- "command": "npm run build",
- "options": {
- "cwd": "${workspaceFolder}/appflowy_tauri"
- }
- },
- {
- "label": "AF: Tauri Dev",
- "type": "shell",
- "command": "npm run tauri:dev",
- "options": {
- "cwd": "${workspaceFolder}/appflowy_tauri"
- }
- },
- {
- "label": "AF: Tauri Clean",
- "type": "shell",
- "command": "cargo make tauri_clean",
- "options": {
- "cwd": "${workspaceFolder}"
- }
- },
- {
- "label": "AF: Tauri Clean + Dev",
- "type": "shell",
- "dependsOrder": "sequence",
- "dependsOn": [
- "AF: Tauri Clean",
- "AF: Tauri UI Dev"
- ],
- "options": {
- "cwd": "${workspaceFolder}"
- }
- },
- {
- "label": "AF: Tauri ESLint",
- "type": "shell",
- "command": "npx eslint --fix src",
- "options": {
- "cwd": "${workspaceFolder}/appflowy_tauri"
- }
- },
- ]
-}
\ No newline at end of file
+ "version": "2.0.0",
+ // https://code.visualstudio.com/docs/editor/tasks
+ // https://gist.github.com/deadalusai/9e13e36d61ec7fb72148
+ // ${workspaceRoot}: the root folder of the team
+ // ${file}: the current opened file
+ // ${fileBasename}: the current opened file's basename
+ // ${fileDirname}: the current opened file's dirname
+ // ${fileExtname}: the current opened file's extension
+ // ${cwd}: the current working directory of the spawned process
+ "tasks": [
+ {
+ "label": "AF: Clean + Rebuild All",
+ "type": "shell",
+ "dependsOrder": "sequence",
+ "dependsOn": [
+ "AF: Dart Clean",
+ "AF: Flutter Clean",
+ "AF: Build Appflowy Core",
+ "AF: Flutter Pub Get",
+ "AF: Flutter Package Get",
+ "AF: Generate Language Files",
+ "AF: Generate Freezed Files"
+ ],
+ "presentation": {
+ "reveal": "always",
+ "panel": "new"
+ }
+ },
+ {
+ "label": "AF: Clean + Rebuild All (Android)",
+ "type": "shell",
+ "dependsOrder": "sequence",
+ "dependsOn": [
+ "AF: Dart Clean",
+ "AF: Flutter Clean",
+ "AF: Build Appflowy Core_for_android",
+ "AF: Flutter Pub Get",
+ "AF: Flutter Package Get",
+ "AF: Generate Language Files",
+ "AF: Generate Freezed Files"
+ ],
+ "presentation": {
+ "reveal": "always",
+ "panel": "new"
+ }
+ },
+ {
+ "label": "AF: Build Appflowy Core_for_android",
+ "type": "shell",
+ "command": "cargo make --profile development-android appflowy-core-dev-android",
+ "group": "build",
+ "options": {
+ "cwd": "${workspaceFolder}"
+ }
+ },
+ {
+ "label": "AF: Build Appflowy Core",
+ "type": "shell",
+ "windows": {
+ "command": "cargo make --profile development-windows-x86 appflowy-core-dev"
+ },
+ "linux": {
+ "command": "cargo make --profile \"development-linux-$(uname -m)\" appflowy-core-dev"
+ },
+ "osx": {
+ "command": "cargo make --profile \"development-mac-$(uname -m)\" appflowy-core-dev"
+ },
+ "group": "build",
+ "options": {
+ "cwd": "${workspaceFolder}"
+ }
+ },
+ {
+ "label": "AF: Code Gen",
+ "type": "shell",
+ "dependsOrder": "sequence",
+ "dependsOn": [
+ "AF: Flutter Clean",
+ "AF: Flutter Pub Get",
+ "AF: Flutter Package Get",
+ "AF: Generate Language Files",
+ "AF: Generate Freezed Files"
+ ],
+ "group": {
+ "kind": "build",
+ "isDefault": true
+ },
+ "presentation": {
+ "reveal": "always",
+ "panel": "new"
+ }
+ },
+ {
+ "label": "AF: Flutter Clean",
+ "type": "shell",
+ "command": "flutter clean",
+ "options": {
+ "cwd": "${workspaceFolder}/appflowy_flutter"
+ }
+ },
+ {
+ "label": "AF: Flutter Pub Get",
+ "type": "shell",
+ "command": "flutter pub get",
+ "options": {
+ "cwd": "${workspaceFolder}/appflowy_flutter"
+ }
+ },
+ {
+ "label": "AF: Flutter Package Get",
+ "type": "shell",
+ "command": "flutter packages pub get",
+ "options": {
+ "cwd": "${workspaceFolder}/appflowy_flutter"
+ }
+ },
+ {
+ "label": "AF: Generate Freezed Files",
+ "type": "shell",
+ "command": "flutter pub run build_runner build --delete-conflicting-outputs",
+ "options": {
+ "cwd": "${workspaceFolder}/appflowy_flutter"
+ }
+ },
+ {
+ "label": "AF: Generate Language Files",
+ "type": "shell",
+ "command": "sh ./scripts/generate_language_files.sh",
+ "windows": {
+ "options": {
+ "shell": {
+ "executable": "cmd.exe",
+ "args": [
+ "/d",
+ "/c",
+ ".\\scripts\\generate_language_files.cmd"
+ ]
+ }
+ }
+ },
+ "group": "build",
+ "options": {
+ "cwd": "${workspaceFolder}"
+ }
+ },
+ {
+ "label": "AF: Flutter Clean",
+ "type": "shell",
+ "command": "cargo make flutter_clean",
+ "group": "build",
+ "options": {
+ "cwd": "${workspaceFolder}"
+ }
+ },
+ {
+ "label": "AF: flutter build aar",
+ "type": "flutter",
+ "command": "flutter",
+ "args": [
+ "build",
+ "aar"
+ ],
+ "group": "build",
+ "problemMatcher": [],
+ "detail": "appflowy_flutter"
+ },
+ {
+ "label": "AF: Tauri UI Dev",
+ "type": "shell",
+ "isBackground": true,
+ "command": "yarn",
+ "args": [
+ "dev"
+ ],
+ "options": {
+ "cwd": "${workspaceFolder}/appflowy_tauri"
+ }
+ },
+ {
+ "label": "AF: Tauri UI Build",
+ "type": "shell",
+ "command": "npm run build",
+ "options": {
+ "cwd": "${workspaceFolder}/appflowy_tauri"
+ }
+ },
+ {
+ "label": "AF: Tauri Dev",
+ "type": "shell",
+ "command": "npm run tauri:dev",
+ "options": {
+ "cwd": "${workspaceFolder}/appflowy_tauri"
+ }
+ },
+ {
+ "label": "AF: Tauri Clean",
+ "type": "shell",
+ "command": "cargo make tauri_clean",
+ "options": {
+ "cwd": "${workspaceFolder}"
+ }
+ },
+ {
+ "label": "AF: Tauri Clean + Dev",
+ "type": "shell",
+ "dependsOrder": "sequence",
+ "dependsOn": [
+ "AF: Tauri Clean",
+ "AF: Tauri UI Dev"
+ ],
+ "options": {
+ "cwd": "${workspaceFolder}"
+ }
+ },
+ {
+ "label": "AF: Tauri ESLint",
+ "type": "shell",
+ "command": "npx eslint --fix src",
+ "options": {
+ "cwd": "${workspaceFolder}/appflowy_tauri"
+ }
+ },
+ ]
+}
diff --git a/frontend/appflowy_flutter/.gitignore b/frontend/appflowy_flutter/.gitignore
index e77b1c9f0f..82c35e91cd 100644
--- a/frontend/appflowy_flutter/.gitignore
+++ b/frontend/appflowy_flutter/.gitignore
@@ -40,7 +40,7 @@ lib/generated_plugin_registrant.dart
lib/generated/
# Freezed generated files
-*.g.dart
+*.g.dart
*.freezed.dart
# Symbolication related
@@ -67,4 +67,4 @@ windows/flutter/dart_ffi/
**/**/*.so
**/**/Brewfile.lock.json
**/.sandbox
-**/.vscode/
\ No newline at end of file
+**/.vscode/
diff --git a/frontend/appflowy_flutter/README.md b/frontend/appflowy_flutter/README.md
index 74e4f803a3..3c1ac42d93 100644
--- a/frontend/appflowy_flutter/README.md
+++ b/frontend/appflowy_flutter/README.md
@@ -1,6 +1,6 @@
AppFlowy_Flutter
@@ -9,13 +9,16 @@
This Repository contains the codebase for the frontend of the application, currently we use Flutter as our frontend framework.
### Platforms Supported Using Flutter 💻
+
- Linux
- macOS
- Windows
-> We later expect to extend support to Android and iOS devices using Flutter.
+ > We later expect to extend support to Android and iOS devices using Flutter.
### Am I Eligible to Contribute?
+
Yes! You are eligible to contribute, check out the ways in which you can [contribute to AppFlowy](https://appflowy.gitbook.io/docs/essential-documentation/contribute-to-appflowy/contributing-to-appflowy). Some of the ways in which you can contribute are:
+
- Non-Coding Contributions
- Documentation
- Feature Requests and Feedbacks
@@ -23,26 +26,27 @@ Yes! You are eligible to contribute, check out the ways in which you can [contri
- Improve Translations
- Coding Contributions
-
To contribute to `AppFlowy_Flutter` codebase specifically (coding contribution) we suggest you to have basic knowledge of Flutter. In case you are new to Flutter, we may suggest you to learn the basics and then try to contribute, get started with Flutter [here](https://flutter.dev/docs/get-started/codelab).
### What OS Should I Use for Development?
+
We support all OS for Development i.e Linux, macOS and Windows. However, most of us promote macOS and Linux over Windows. We have detailed [docs](https://appflowy.gitbook.io/docs/essential-documentation/contribute-to-appflowy/software-contributions/environment-setup) on How to Setup `AppFlowy_Flutter` in your local system in each OS.
-
### Getting Started ❇
+
We have a detailed documentation, on how to [get started](https://appflowy.gitbook.io/docs/essential-documentation/contribute-to-appflowy/contributing-to-appflowy) with the project, and make your first contribution. However, we do have some specific picks for you.
+
- [Code Architecture](https://appflowy.gitbook.io/docs/essential-documentation/contribute-to-appflowy/architecture/frontend/frontend/codemap)
- [Making Your First PR](https://appflowy.gitbook.io/docs/essential-documentation/contribute-to-appflowy/software-contributions/submitting-code/submitting-your-first-pull-request)
- [The Style Guide](https://appflowy.gitbook.io/docs/essential-documentation/contribute-to-appflowy/software-contributions/submitting-code/style-guides)
- [How to run/debug the application](https://appflowy.gitbook.io/docs/essential-documentation/contribute-to-appflowy/software-contributions/launcher-and-tasks)
-
### Need Help?
+
- New to GitHub? Follow [these](https://appflowy.gitbook.io/docs/essential-documentation/contribute-to-appflowy/software-contributions/submitting-code/setting-up-your-repositories) steps to get started
- Stuck Somewhere? Join the [Discord](https://discord.gg/9Q2xaN37tV) Group and we are there to help you!
-
diff --git a/frontend/appflowy_flutter/assets/images/home/new_app.svg b/frontend/appflowy_flutter/assets/images/home/new_app.svg
index ac6c002d3d..c74ac3b349 100644
--- a/frontend/appflowy_flutter/assets/images/home/new_app.svg
+++ b/frontend/appflowy_flutter/assets/images/home/new_app.svg
@@ -1,5 +1,17 @@
-
-
-
-
+
+
+
diff --git a/frontend/appflowy_flutter/assets/images/home/new_app_dark.svg b/frontend/appflowy_flutter/assets/images/home/new_app_dark.svg
deleted file mode 100644
index f1ab9c8cd3..0000000000
--- a/frontend/appflowy_flutter/assets/images/home/new_app_dark.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/frontend/appflowy_flutter/assets/test/workspaces/board.zip b/frontend/appflowy_flutter/assets/test/workspaces/board.zip
new file mode 100644
index 0000000000..1a8f6b0dd4
Binary files /dev/null and b/frontend/appflowy_flutter/assets/test/workspaces/board.zip differ
diff --git a/frontend/appflowy_flutter/assets/test/workspaces/empty_document.zip b/frontend/appflowy_flutter/assets/test/workspaces/empty_document.zip
new file mode 100644
index 0000000000..1399d640ad
Binary files /dev/null and b/frontend/appflowy_flutter/assets/test/workspaces/empty_document.zip differ
diff --git a/frontend/appflowy_flutter/assets/translations/en.json b/frontend/appflowy_flutter/assets/translations/en.json
index a00a49ceb8..dd3435c19a 100644
--- a/frontend/appflowy_flutter/assets/translations/en.json
+++ b/frontend/appflowy_flutter/assets/translations/en.json
@@ -326,7 +326,8 @@
"checklist": {
"panelTitle": "Add an item"
},
- "menuName": "Grid"
+ "menuName": "Grid",
+ "referencedGridPrefix": "View of"
},
"document": {
"menuName": "Document",
@@ -390,7 +391,8 @@
"column": {
"create_new_card": "New"
},
- "menuName": "Board"
+ "menuName": "Board",
+ "referencedBoardPrefix": "View of"
},
"calendar": {
"menuName": "Calendar",
diff --git a/frontend/appflowy_flutter/integration_test/board_test.dart b/frontend/appflowy_flutter/integration_test/board_test.dart
new file mode 100644
index 0000000000..3900843207
--- /dev/null
+++ b/frontend/appflowy_flutter/integration_test/board_test.dart
@@ -0,0 +1,43 @@
+import 'package:appflowy_board/appflowy_board.dart';
+import 'package:flutter_test/flutter_test.dart';
+import 'package:integration_test/integration_test.dart';
+import 'util/util.dart';
+
+/// Integration tests for an empty board. The [TestWorkspaceService] will load
+/// a workspace from an empty board `assets/test/workspaces/board.zip` for all
+/// tests.
+///
+/// To create another integration test with a preconfigured workspace.
+/// Use the following steps.
+/// 1. Create a new workspace from the AppFlowy launch screen.
+/// 2. Modify the workspace until it is suitable as the starting point for
+/// the integration test you need to land.
+/// 3. Use a zip utility program to zip the workspace folder that you created.
+/// 4. Add the zip file under `assets/test/workspaces/`
+/// 5. Add a new enumeration to [TestWorkspace] in `integration_test/utils/data.dart`.
+/// For example, if you added a workspace called `empty_calendar.zip`,
+/// then [TestWorkspace] should have the following value:
+/// ```dart
+/// enum TestWorkspace {
+/// board('board'),
+/// empty_calendar('empty_calendar');
+///
+/// /* code */
+/// }
+/// ```
+/// 6. Double check that the .zip file that you added is included as an asset in
+/// the pubspec.yaml file under appflowy_flutter.
+void main() {
+ IntegrationTestWidgetsFlutterBinding.ensureInitialized();
+ const service = TestWorkspaceService(TestWorkspace.board);
+
+ group('board', () {
+ setUpAll(() async => await service.setUpAll());
+ setUp(() async => await service.setUp());
+
+ testWidgets('integration test unzips the proper workspace and loads it correctly.', (tester) async {
+ await tester.initializeAppFlowy();
+ expect(find.byType(AppFlowyBoard), findsOneWidget);
+ });
+ });
+}
diff --git a/frontend/appflowy_flutter/integration_test/empty_document_test.dart b/frontend/appflowy_flutter/integration_test/empty_document_test.dart
new file mode 100644
index 0000000000..51f92c4c35
--- /dev/null
+++ b/frontend/appflowy_flutter/integration_test/empty_document_test.dart
@@ -0,0 +1,120 @@
+import 'package:appflowy/plugins/document/presentation/plugins/base/built_in_page_widget.dart';
+import 'package:appflowy_editor/appflowy_editor.dart';
+import 'package:flutter/services.dart';
+import 'package:flutter_test/flutter_test.dart';
+import 'package:integration_test/integration_test.dart';
+import 'util/keyboard.dart';
+import 'util/util.dart';
+
+/// Integration tests for an empty document. The [TestWorkspaceService] will load a workspace from an empty document `assets/test/workspaces/empty_document.zip` for all tests.
+///
+/// To create another integration test with a preconfigured workspace. Use the following steps:
+/// 1. Create a new workspace from the AppFlowy launch screen.
+/// 2. Modify the workspace until it is suitable as the starting point for the integration test you need to land.
+/// 3. Use a zip utility program to zip the workspace folder that you created.
+/// 4. Add the zip file under `assets/test/workspaces/`
+/// 5. Add a new enumeration to [TestWorkspace] in `integration_test/utils/data.dart`. For example, if you added a workspace called `empty_calendar.zip`, then [TestWorkspace] should have the following value:
+/// ```dart
+/// enum TestWorkspace {
+/// board('board'),
+/// empty_calendar('empty_calendar');
+///
+/// /* code */
+/// }
+/// ```
+/// 6. Double check that the .zip file that you added is included as an asset in the pubspec.yaml file under appflowy_flutter.
+void main() {
+ IntegrationTestWidgetsFlutterBinding.ensureInitialized();
+ const service = TestWorkspaceService(TestWorkspace.emptyDocument);
+
+ group('Tests on a workspace with only an empty document', () {
+ setUpAll(() async => await service.setUpAll());
+ setUp(() async => await service.setUp());
+
+ testWidgets('/board shortcut creates a new board and view of the board', (tester) async {
+ await tester.initializeAppFlowy();
+
+ // Needs tab to obtain focus for the app flowy editor.
+ // by default the tap appears at the center of the widget.
+ final Finder editor = find.byType(AppFlowyEditor);
+ await tester.tap(editor);
+ await tester.pumpAndSettle();
+
+ // tester.sendText() cannot be used since the editor
+ // does not contain any EditableText widgets.
+ // to interact with the app during an integration test,
+ // simulate physical keyboard events.
+ await FlowyTestKeyboard.simulateKeyDownEvent([
+ LogicalKeyboardKey.slash,
+ LogicalKeyboardKey.keyB,
+ LogicalKeyboardKey.keyO,
+ LogicalKeyboardKey.keyA,
+ LogicalKeyboardKey.keyR,
+ LogicalKeyboardKey.keyD,
+ LogicalKeyboardKey.arrowDown,
+ ], tester: tester);
+
+ // Checks whether the options in the selection menu
+ // for /board exist.
+ expect(find.byType(SelectionMenuItemWidget), findsAtLeastNWidgets(2));
+
+ // Finalizes the slash command that creates the board.
+ await FlowyTestKeyboard.simulateKeyDownEvent([
+ LogicalKeyboardKey.enter,
+ ], tester: tester);
+
+ // Checks whether new board is referenced and properly on the page.
+ expect(find.byType(BuiltInPageWidget), findsOneWidget);
+
+ // Checks whether the new database was created
+ const newBoardLabel = "Untitled";
+ expect(find.text(newBoardLabel), findsOneWidget);
+
+ // Checks whether a view of the database was created
+ const viewOfBoardLabel = "View of Untitled";
+ expect(find.text(viewOfBoardLabel), findsNWidgets(2));
+ });
+
+ testWidgets('/grid shortcut creates a new grid and view of the grid', (tester) async {
+ await tester.initializeAppFlowy();
+
+ // Needs tab to obtain focus for the app flowy editor.
+ // by default the tap appears at the center of the widget.
+ final Finder editor = find.byType(AppFlowyEditor);
+ await tester.tap(editor);
+ await tester.pumpAndSettle();
+
+ // tester.sendText() cannot be used since the editor
+ // does not contain any EditableText widgets.
+ // to interact with the app during an integration test,
+ // simulate physical keyboard events.
+ await FlowyTestKeyboard.simulateKeyDownEvent([
+ LogicalKeyboardKey.slash,
+ LogicalKeyboardKey.keyG,
+ LogicalKeyboardKey.keyR,
+ LogicalKeyboardKey.keyI,
+ LogicalKeyboardKey.keyD,
+ LogicalKeyboardKey.arrowDown,
+ ], tester: tester);
+
+ // Checks whether the options in the selection menu
+ // for /grid exist.
+ expect(find.byType(SelectionMenuItemWidget), findsAtLeastNWidgets(2));
+
+ // Finalizes the slash command that creates the board.
+ await simulateKeyDownEvent(LogicalKeyboardKey.enter);
+ await tester.pumpAndSettle();
+
+ // Checks whether new board is referenced and properly on the page.
+ expect(find.byType(BuiltInPageWidget), findsOneWidget);
+
+ // Checks whether the new database was created
+ const newTableLabel = "Untitled";
+ expect(find.text(newTableLabel), findsOneWidget);
+
+ // Checks whether a view of the database was created
+ const viewOfTableLabel = "View of Untitled";
+ expect(find.text(viewOfTableLabel), findsNWidgets(2));
+ });
+ });
+}
diff --git a/frontend/appflowy_flutter/integration_test/runner.dart b/frontend/appflowy_flutter/integration_test/runner.dart
new file mode 100644
index 0000000000..1592cccb93
--- /dev/null
+++ b/frontend/appflowy_flutter/integration_test/runner.dart
@@ -0,0 +1,19 @@
+import 'package:integration_test/integration_test.dart';
+
+import 'board_test.dart' as board_test;
+import 'switch_folder_test.dart' as switch_folder_test;
+import 'empty_document_test.dart' as empty_document_test;
+
+/// The main task runner for all integration tests in AppFlowy.
+///
+/// Having a single entrypoint for integration tests is necessary due to an
+/// [issue caused by switching files with integration testing](https://github.com/flutter/flutter/issues/101031).
+/// If flutter/flutter#101031 is resolved, this file can be removed completely.
+/// Once removed, the integration_test.yaml must be updated to exclude this as
+/// as the test target.
+void main() {
+ IntegrationTestWidgetsFlutterBinding.ensureInitialized();
+ switch_folder_test.main();
+ board_test.main();
+ empty_document_test.main();
+}
diff --git a/frontend/appflowy_flutter/integration_test/switch_folder_test.dart b/frontend/appflowy_flutter/integration_test/switch_folder_test.dart
index 555a5e41b1..6dcd41b081 100644
--- a/frontend/appflowy_flutter/integration_test/switch_folder_test.dart
+++ b/frontend/appflowy_flutter/integration_test/switch_folder_test.dart
@@ -1,10 +1,5 @@
-import 'package:appflowy/generated/locale_keys.g.dart';
-import 'package:appflowy/plugins/document/presentation/plugins/base/built_in_page_widget.dart';
import 'package:appflowy/user/presentation/folder/folder_widget.dart';
-import 'package:appflowy_editor/appflowy_editor.dart';
-import 'package:easy_localization/easy_localization.dart';
import 'package:flowy_infra_ui/style_widget/text_field.dart';
-import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
@@ -162,135 +157,5 @@ void main() {
await TestFolder.currentLocation(),
);
});
-
- testWidgets('/board shortcut creates a new board', (tester) async {
- const folderName = 'appflowy';
- await TestFolder.cleanTestLocation(folderName);
- await TestFolder.setTestLocation(folderName);
-
- await tester.initializeAppFlowy();
-
- // tap open button
- await mockGetDirectoryPath(folderName);
- await tester.tapOpenFolderButton();
-
- await tester.wait(1000);
- await tester.expectToSeeWelcomePage();
-
- final binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized();
-
- // Necessary for being able to enterText when not in debug mode
- binding.testTextInput.register();
-
- // Needs tab to obtain focus for the app flowy editor.
- // by default the tap appears at the center of the widget.
- final Finder editor = find.byType(AppFlowyEditor);
- await tester.tap(editor);
- await tester.pumpAndSettle();
-
- // tester.sendText() cannot be used since the editor
- // does not contain any EditableText widgets.
- // to interact with the app during an integration test,
- // simulate physical keyboard events.
- await simulateKeyDownEvent(LogicalKeyboardKey.enter);
- await tester.pumpAndSettle();
- await simulateKeyDownEvent(LogicalKeyboardKey.enter);
- await tester.pumpAndSettle();
- await simulateKeyDownEvent(LogicalKeyboardKey.arrowLeft);
- await tester.pumpAndSettle();
- await simulateKeyDownEvent(LogicalKeyboardKey.slash);
- await tester.pumpAndSettle();
- await simulateKeyDownEvent(LogicalKeyboardKey.keyB);
- await tester.pumpAndSettle();
- await simulateKeyDownEvent(LogicalKeyboardKey.keyO);
- await tester.pumpAndSettle();
- await simulateKeyDownEvent(LogicalKeyboardKey.keyA);
- await tester.pumpAndSettle();
- await simulateKeyDownEvent(LogicalKeyboardKey.keyR);
- await tester.pumpAndSettle();
- await simulateKeyDownEvent(LogicalKeyboardKey.keyD);
- await tester.pumpAndSettle();
- await simulateKeyDownEvent(LogicalKeyboardKey.arrowDown);
- await tester.pumpAndSettle();
-
- // Checks whether the options in the selection menu
- // for /board exist.
- expect(find.byType(SelectionMenuItemWidget), findsAtLeastNWidgets(2));
-
- // Finalizes the slash command that creates the board.
- await simulateKeyDownEvent(LogicalKeyboardKey.enter);
- await tester.pumpAndSettle();
-
- // Checks whether new board is referenced and properly on the page.
- expect(find.byType(BuiltInPageWidget), findsOneWidget);
-
- // Checks whether the new board is in the side bar.
- final sidebarLabel = LocaleKeys.newPageText.tr();
- expect(find.text(sidebarLabel), findsOneWidget);
- });
-
- testWidgets('/grid shortcut creates a new grid', (tester) async {
- const folderName = 'appflowy';
- await TestFolder.cleanTestLocation(folderName);
- await TestFolder.setTestLocation(folderName);
-
- await tester.initializeAppFlowy();
-
- // tap open button
- await mockGetDirectoryPath(folderName);
- await tester.tapOpenFolderButton();
-
- await tester.wait(1000);
- await tester.expectToSeeWelcomePage();
-
- final binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized();
-
- // Necessary for being able to enterText when not in debug mode
- binding.testTextInput.register();
-
- // Needs tab to obtain focus for the app flowy editor.
- // by default the tap appears at the center of the widget.
- final Finder editor = find.byType(AppFlowyEditor);
- await tester.tap(editor);
- await tester.pumpAndSettle();
-
- // tester.sendText() cannot be used since the editor
- // does not contain any EditableText widgets.
- // to interact with the app during an integration test,
- // simulate physical keyboard events.
- await simulateKeyDownEvent(LogicalKeyboardKey.enter);
- await tester.pumpAndSettle();
- await simulateKeyDownEvent(LogicalKeyboardKey.enter);
- await tester.pumpAndSettle();
- await simulateKeyDownEvent(LogicalKeyboardKey.arrowLeft);
- await tester.pumpAndSettle();
- await simulateKeyDownEvent(LogicalKeyboardKey.slash);
- await tester.pumpAndSettle();
- await simulateKeyDownEvent(LogicalKeyboardKey.keyG);
- await tester.pumpAndSettle();
- await simulateKeyDownEvent(LogicalKeyboardKey.keyR);
- await tester.pumpAndSettle();
- await simulateKeyDownEvent(LogicalKeyboardKey.keyI);
- await tester.pumpAndSettle();
- await simulateKeyDownEvent(LogicalKeyboardKey.keyD);
- await tester.pumpAndSettle();
- await simulateKeyDownEvent(LogicalKeyboardKey.arrowDown);
- await tester.pumpAndSettle();
-
- // Checks whether the options in the selection menu
- // for /grid exist.
- expect(find.byType(SelectionMenuItemWidget), findsAtLeastNWidgets(2));
-
- // Finalizes the slash command that creates the board.
- await simulateKeyDownEvent(LogicalKeyboardKey.enter);
- await tester.pumpAndSettle();
-
- // Checks whether new board is referenced and properly on the page.
- expect(find.byType(BuiltInPageWidget), findsOneWidget);
-
- // Checks whether the new board is in the side bar.
- final sidebarLabel = LocaleKeys.newPageText.tr();
- expect(find.text(sidebarLabel), findsOneWidget);
- });
});
}
diff --git a/frontend/appflowy_flutter/integration_test/util/data.dart b/frontend/appflowy_flutter/integration_test/util/data.dart
new file mode 100644
index 0000000000..a527950489
--- /dev/null
+++ b/frontend/appflowy_flutter/integration_test/util/data.dart
@@ -0,0 +1,66 @@
+import 'dart:io';
+
+import 'package:appflowy/workspace/application/settings/settings_location_cubit.dart';
+import 'package:archive/archive_io.dart';
+import 'package:flutter/services.dart';
+import 'package:path/path.dart' as p;
+import 'package:path_provider/path_provider.dart';
+import 'package:shared_preferences/shared_preferences.dart';
+
+enum TestWorkspace {
+ board("board"),
+ emptyDocument("empty_document");
+
+ const TestWorkspace(this._name);
+
+ final String _name;
+
+ Future get zip async {
+ final Directory parent = await TestWorkspace._parent;
+ final File out = File(p.join(parent.path, '$_name.zip'));
+ if (await out.exists()) return out;
+ await out.create();
+ final ByteData data = await rootBundle.load(_asset);
+ await out.writeAsBytes(data.buffer.asUint8List());
+ return out;
+ }
+
+ Future get root async {
+ final Directory parent = await TestWorkspace._parent;
+ return Directory(p.join(parent.path, _name));
+ }
+
+ static Future get _parent async {
+ final Directory root = await getTemporaryDirectory();
+ if (await root.exists()) return root;
+ await root.create();
+ return root;
+ }
+
+ String get _asset => 'assets/test/workspaces/$_name.zip';
+}
+
+class TestWorkspaceService {
+ const TestWorkspaceService(this.workspace);
+
+ final TestWorkspace workspace;
+
+ /// Instructs the application to read workspace data from the workspace found under this [TestWorkspace]'s path.
+ Future setUpAll() async {
+ SharedPreferences.setMockInitialValues(
+ {
+ kSettingsLocationDefaultLocation:
+ await workspace.root.then((value) => value.path),
+ },
+ );
+ }
+
+ /// Workspaces that are checked into source are compressed. [TestWorkspaceService.setUp()] decompresses the file into an ephemeral directory that will be ignored by source control.
+ Future setUp() async {
+ final inputStream =
+ InputFileStream(await workspace.zip.then((value) => value.path));
+ final archive = ZipDecoder().decodeBuffer(inputStream);
+ extractArchiveToDisk(
+ archive, await TestWorkspace._parent.then((value) => value.path));
+ }
+}
diff --git a/frontend/appflowy_flutter/integration_test/util/keyboard.dart b/frontend/appflowy_flutter/integration_test/util/keyboard.dart
new file mode 100644
index 0000000000..02bbdb79f1
--- /dev/null
+++ b/frontend/appflowy_flutter/integration_test/util/keyboard.dart
@@ -0,0 +1,12 @@
+import 'package:flutter/services.dart';
+import 'package:flutter_test/flutter_test.dart' as flutter_test;
+
+class FlowyTestKeyboard {
+ static Future simulateKeyDownEvent(List keys,
+ {required flutter_test.WidgetTester tester}) async {
+ for (final LogicalKeyboardKey key in keys) {
+ await flutter_test.simulateKeyDownEvent(key);
+ await tester.pumpAndSettle();
+ }
+ }
+}
diff --git a/frontend/appflowy_flutter/integration_test/util/util.dart b/frontend/appflowy_flutter/integration_test/util/util.dart
index 1b4b7c3272..20606483d3 100644
--- a/frontend/appflowy_flutter/integration_test/util/util.dart
+++ b/frontend/appflowy_flutter/integration_test/util/util.dart
@@ -1,3 +1,4 @@
export 'base.dart';
export 'launch.dart';
export 'settings.dart';
+export 'data.dart';
diff --git a/frontend/appflowy_flutter/lib/core/folder_notification.dart b/frontend/appflowy_flutter/lib/core/folder_notification.dart
index 4d147da88e..571561bbaa 100644
--- a/frontend/appflowy_flutter/lib/core/folder_notification.dart
+++ b/frontend/appflowy_flutter/lib/core/folder_notification.dart
@@ -3,7 +3,7 @@ import 'dart:typed_data';
import 'package:appflowy_backend/protobuf/flowy-notification/protobuf.dart';
import 'package:dartz/dartz.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/notification.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/notification.pb.dart';
import 'package:appflowy_backend/rust_stream.dart';
import 'notification_helper.dart';
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/application/database_controller.dart b/frontend/appflowy_flutter/lib/plugins/database_view/application/database_controller.dart
index 6cdbc964e4..86e6da42be 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/application/database_controller.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/application/database_controller.dart
@@ -9,7 +9,7 @@ import 'package:appflowy_backend/protobuf/flowy-database/group_changeset.pb.dart
import 'package:appflowy_backend/protobuf/flowy-database/row_entities.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-database/setting_entities.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:collection/collection.dart';
import 'dart:async';
import 'package:dartz/dartz.dart';
@@ -79,7 +79,7 @@ class DatabaseController {
final DatabaseViewBackendService _databaseViewBackendSvc;
final FieldController fieldController;
late DatabaseViewCache _viewCache;
- final LayoutTypePB layoutType;
+ final DatabaseLayoutPB layoutType;
// Callbacks
DatabaseCallbacks? _databaseCallbacks;
@@ -110,7 +110,7 @@ class DatabaseController {
_listenOnFieldsChanged();
_listenOnGroupChanged();
_listenOnLayoutChanged();
- if (layoutType == LayoutTypePB.Calendar) {
+ if (layoutType == DatabaseLayoutPB.Calendar) {
_listenOnCalendarLayoutChanged();
}
}
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/application/database_service.dart b/frontend/appflowy_flutter/lib/plugins/database_view/application/database_service.dart
index 4d12cae839..b6ca40b630 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/application/database_service.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/application/database_service.dart
@@ -5,7 +5,7 @@ import 'package:dartz/dartz.dart';
class DatabaseBackendService {
static Future, FlowyError>>
- getAllDatabase() {
+ getAllDatabases() {
return DatabaseEventGetDatabases().send().then((result) {
return result.fold((l) => left(l.items), (r) => right(r));
});
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/application/database_view_service.dart b/frontend/appflowy_flutter/lib/plugins/database_view/application/database_view_service.dart
index 5ecaad6ef3..bc6dd6e699 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/application/database_view_service.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/application/database_view_service.dart
@@ -5,7 +5,7 @@ import 'package:appflowy_backend/protobuf/flowy-database/setting_entities.pb.dar
import 'package:dartz/dartz.dart';
import 'package:appflowy_backend/dispatch/dispatch.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-database/field_entities.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-database/group.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-database/row_entities.pb.dart';
@@ -86,7 +86,7 @@ class DatabaseViewBackendService {
}
Future> getLayoutSetting(
- LayoutTypePB layoutType) {
+ DatabaseLayoutPB layoutType) {
final payload = DatabaseLayoutIdPB.create()
..viewId = viewId
..layout = layoutType;
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/application/field/field_action_sheet_bloc.dart b/frontend/appflowy_flutter/lib/plugins/database_view/application/field/field_action_sheet_bloc.dart
index 354bafbf1f..493f971177 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/application/field/field_action_sheet_bloc.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/application/field/field_action_sheet_bloc.dart
@@ -2,7 +2,6 @@ import 'package:appflowy_backend/log.dart';
import 'package:appflowy_backend/protobuf/flowy-database/field_entities.pb.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
-import 'dart:async';
import 'field_service.dart';
part 'field_action_sheet_bloc.freezed.dart';
@@ -64,11 +63,6 @@ class FieldActionSheetBloc
},
);
}
-
- @override
- Future close() async {
- return super.close();
- }
}
@freezed
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/application/field/field_editor_bloc.dart b/frontend/appflowy_flutter/lib/plugins/database_view/application/field/field_editor_bloc.dart
index 8ec40c1c93..491d266b7d 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/application/field/field_editor_bloc.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/application/field/field_editor_bloc.dart
@@ -1,6 +1,5 @@
import 'package:appflowy_backend/protobuf/flowy-database/field_entities.pb.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
-import 'dart:async';
import 'package:dartz/dartz.dart';
import 'field_service.dart';
import 'type_option/type_option_context.dart';
@@ -17,8 +16,7 @@ class FieldEditorBloc extends Bloc {
required String fieldName,
required bool isGroupField,
required IFieldTypeOptionLoader loader,
- }) : dataController =
- TypeOptionController(viewId: viewId, loader: loader),
+ }) : dataController = TypeOptionController(viewId: viewId, loader: loader),
super(FieldEditorState.initial(viewId, fieldName, isGroupField)) {
on(
(event, emit) async {
@@ -63,11 +61,6 @@ class FieldEditorBloc extends Bloc {
},
);
}
-
- @override
- Future close() async {
- return super.close();
- }
}
@freezed
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/application/field/type_option/date_bloc.dart b/frontend/appflowy_flutter/lib/plugins/database_view/application/field/type_option/date_bloc.dart
index 03eef86736..6762e0d7d3 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/application/field/type_option/date_bloc.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/application/field/type_option/date_bloc.dart
@@ -2,7 +2,6 @@ import 'package:appflowy_backend/protobuf/flowy-database/date_type_option.pb.dar
import 'package:appflowy_backend/protobuf/flowy-database/date_type_option_entities.pb.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
-import 'dart:async';
import 'package:protobuf/protobuf.dart';
import 'type_option_context.dart';
@@ -52,11 +51,6 @@ class DateTypeOptionBloc
}
});
}
-
- @override
- Future close() async {
- return super.close();
- }
}
@freezed
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/application/field/type_option/edit_select_option_bloc.dart b/frontend/appflowy_flutter/lib/plugins/database_view/application/field/type_option/edit_select_option_bloc.dart
index 063be6be32..873daaeabe 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/application/field/type_option/edit_select_option_bloc.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/application/field/type_option/edit_select_option_bloc.dart
@@ -1,7 +1,6 @@
import 'package:appflowy_backend/protobuf/flowy-database/select_type_option.pb.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
-import 'dart:async';
import 'package:protobuf/protobuf.dart';
import 'package:dartz/dartz.dart';
part 'edit_select_option_bloc.freezed.dart';
@@ -27,11 +26,6 @@ class EditSelectOptionBloc
);
}
- @override
- Future close() async {
- return super.close();
- }
-
SelectOptionPB _updateColor(SelectOptionColorPB color) {
state.option.freeze();
return state.option.rebuild((option) {
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/application/field/type_option/number_bloc.dart b/frontend/appflowy_flutter/lib/plugins/database_view/application/field/type_option/number_bloc.dart
index a66b5a88ca..b8e924819f 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/application/field/type_option/number_bloc.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/application/field/type_option/number_bloc.dart
@@ -2,7 +2,6 @@ import 'package:appflowy_backend/protobuf/flowy-database/format.pbenum.dart';
import 'package:appflowy_backend/protobuf/flowy-database/number_type_option.pb.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
-import 'dart:async';
import 'package:protobuf/protobuf.dart';
import 'type_option_context.dart';
@@ -29,11 +28,6 @@ class NumberTypeOptionBloc
typeOption.format = format;
});
}
-
- @override
- Future close() async {
- return super.close();
- }
}
@freezed
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/application/field/type_option/number_format_bloc.dart b/frontend/appflowy_flutter/lib/plugins/database_view/application/field/type_option/number_format_bloc.dart
index 4936f69900..4145e90aff 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/application/field/type_option/number_format_bloc.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/application/field/type_option/number_format_bloc.dart
@@ -1,7 +1,6 @@
import 'package:appflowy_backend/protobuf/flowy-database/format.pbenum.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
-import 'dart:async';
part 'number_format_bloc.freezed.dart';
class NumberFormatBloc extends Bloc {
@@ -21,11 +20,6 @@ class NumberFormatBloc extends Bloc {
},
);
}
-
- @override
- Future close() async {
- return super.close();
- }
}
@freezed
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/application/field/type_option/select_option_type_option_bloc.dart b/frontend/appflowy_flutter/lib/plugins/database_view/application/field/type_option/select_option_type_option_bloc.dart
index 5c608b474f..75c472f96d 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/application/field/type_option/select_option_type_option_bloc.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/application/field/type_option/select_option_type_option_bloc.dart
@@ -49,11 +49,6 @@ class SelectOptionTypeOptionBloc
},
);
}
-
- @override
- Future close() async {
- return super.close();
- }
}
@freezed
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/application/setting/setting_bloc.dart b/frontend/appflowy_flutter/lib/plugins/database_view/application/setting/setting_bloc.dart
index 9857a2871a..8c59036f56 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/application/setting/setting_bloc.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/application/setting/setting_bloc.dart
@@ -1,6 +1,5 @@
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
-import 'dart:async';
import 'package:dartz/dartz.dart';
part 'setting_bloc.freezed.dart';
@@ -18,11 +17,6 @@ class DatabaseSettingBloc
},
);
}
-
- @override
- Future close() async {
- return super.close();
- }
}
@freezed
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/board/application/board_bloc.dart b/frontend/appflowy_flutter/lib/plugins/database_view/board/application/board_bloc.dart
index 61911b5318..6acfbfc650 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/board/application/board_bloc.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/board/application/board_bloc.dart
@@ -6,7 +6,7 @@ import 'package:dartz/dartz.dart';
import 'package:equatable/equatable.dart';
import 'package:appflowy_backend/log.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-database/protobuf.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
@@ -30,7 +30,7 @@ class BoardBloc extends Bloc {
BoardBloc({required ViewPB view})
: _databaseController = DatabaseController(
view: view,
- layoutType: LayoutTypePB.Board,
+ layoutType: DatabaseLayoutPB.Board,
),
super(BoardState.initial(view.id)) {
boardController = AppFlowyBoardController(
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/board/application/toolbar/board_setting_bloc.dart b/frontend/appflowy_flutter/lib/plugins/database_view/board/application/toolbar/board_setting_bloc.dart
index 739d9ee141..e64072db56 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/board/application/toolbar/board_setting_bloc.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/board/application/toolbar/board_setting_bloc.dart
@@ -1,6 +1,5 @@
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
-import 'dart:async';
import 'package:dartz/dartz.dart';
part 'board_setting_bloc.freezed.dart';
@@ -17,11 +16,6 @@ class BoardSettingBloc extends Bloc {
},
);
}
-
- @override
- Future close() async {
- return super.close();
- }
}
@freezed
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/board/board.dart b/frontend/appflowy_flutter/lib/plugins/database_view/board/board.dart
index fe1702873a..15adee1187 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/board/board.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/board/board.dart
@@ -3,7 +3,7 @@ import 'package:appflowy/plugins/util.dart';
import 'package:appflowy/startup/plugin/plugin.dart';
import 'package:appflowy/workspace/presentation/home/home_stack.dart';
import 'package:appflowy/workspace/presentation/widgets/left_bar_item.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
@@ -29,7 +29,7 @@ class BoardPluginBuilder implements PluginBuilder {
PluginType get pluginType => PluginType.board;
@override
- ViewLayoutTypePB? get layoutType => ViewLayoutTypePB.Board;
+ ViewLayoutPB? get layoutType => ViewLayoutPB.Board;
}
class BoardPluginConfig implements PluginConfig {
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/board/presentation/board_page.dart b/frontend/appflowy_flutter/lib/plugins/database_view/board/presentation/board_page.dart
index 24c30a0cd3..095ffab019 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/board/presentation/board_page.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/board/presentation/board_page.dart
@@ -7,7 +7,7 @@ import 'package:appflowy/plugins/database_view/application/field/field_controlle
import 'package:appflowy/plugins/database_view/application/row/row_cache.dart';
import 'package:appflowy/plugins/database_view/application/row/row_data_controller.dart';
import 'package:appflowy/plugins/database_view/widgets/row/row_detail.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-database/field_entities.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-database/row_entities.pb.dart';
import 'package:appflowy_board/appflowy_board.dart';
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/calendar/application/calendar_bloc.dart b/frontend/appflowy_flutter/lib/plugins/database_view/calendar/application/calendar_bloc.dart
index f0cfb43b48..db5150d8d4 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/calendar/application/calendar_bloc.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/calendar/application/calendar_bloc.dart
@@ -3,7 +3,7 @@ import 'package:appflowy/plugins/database_view/application/field/field_controlle
import 'package:appflowy_backend/dispatch/dispatch.dart';
import 'package:appflowy_backend/log.dart';
import 'package:appflowy_backend/protobuf/flowy-error/protobuf.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/protobuf.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/protobuf.dart';
import 'package:appflowy_backend/protobuf/flowy-database/protobuf.dart';
import 'package:calendar_view/calendar_view.dart';
import 'package:dartz/dartz.dart';
@@ -28,7 +28,7 @@ class CalendarBloc extends Bloc {
CalendarBloc({required ViewPB view})
: _databaseController = DatabaseController(
view: view,
- layoutType: LayoutTypePB.Calendar,
+ layoutType: DatabaseLayoutPB.Calendar,
),
super(CalendarState.initial()) {
on(
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/calendar/application/calendar_setting_bloc.dart b/frontend/appflowy_flutter/lib/plugins/database_view/calendar/application/calendar_setting_bloc.dart
index 1ebc97d90a..074836236f 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/calendar/application/calendar_setting_bloc.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/calendar/application/calendar_setting_bloc.dart
@@ -23,8 +23,6 @@ class CalendarSettingBloc
});
}
- @override
- Future close() async => super.close();
}
@freezed
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/calendar/calendar.dart b/frontend/appflowy_flutter/lib/plugins/database_view/calendar/calendar.dart
index 1ddfb7a64f..558db1419a 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/calendar/calendar.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/calendar/calendar.dart
@@ -3,7 +3,7 @@ import 'package:appflowy/startup/plugin/plugin.dart';
import 'package:appflowy/workspace/presentation/home/home_stack.dart';
import 'package:appflowy/workspace/presentation/widgets/left_bar_item.dart';
import 'package:easy_localization/easy_localization.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:flutter/material.dart';
import '../../util.dart';
@@ -29,7 +29,7 @@ class CalendarPluginBuilder extends PluginBuilder {
PluginType get pluginType => PluginType.calendar;
@override
- ViewLayoutTypePB? get layoutType => ViewLayoutTypePB.Calendar;
+ ViewLayoutPB? get layoutType => ViewLayoutPB.Calendar;
}
class CalendarPluginConfig implements PluginConfig {
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/calendar/presentation/calendar_page.dart b/frontend/appflowy_flutter/lib/plugins/database_view/calendar/presentation/calendar_page.dart
index 988654a8ec..943af77ce4 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/calendar/presentation/calendar_page.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/calendar/presentation/calendar_page.dart
@@ -1,6 +1,6 @@
import 'package:appflowy/generated/locale_keys.g.dart';
import 'package:appflowy/plugins/database_view/calendar/application/calendar_bloc.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:calendar_view/calendar_view.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flowy_infra/image.dart';
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/application/filter/select_option_filter_list_bloc.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/application/filter/select_option_filter_list_bloc.dart
index 9ff924c449..cd95541905 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/application/filter/select_option_filter_list_bloc.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/application/filter/select_option_filter_list_bloc.dart
@@ -1,5 +1,3 @@
-import 'dart:async';
-
import 'package:appflowy/plugins/database_view/grid/presentation/widgets/filter/choicechip/select_option/select_option_loader.dart';
import 'package:appflowy_backend/protobuf/flowy-database/field_entities.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-database/select_type_option.pb.dart';
@@ -63,11 +61,6 @@ class SelectOptionFilterListBloc
);
}
- @override
- Future close() async {
- return super.close();
- }
-
void _updateSelectOptions({
String? predicate,
Set? selectedOptionIds,
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/application/grid_bloc.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/application/grid_bloc.dart
index 7d73ab9b4a..01082746e3 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/application/grid_bloc.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/application/grid_bloc.dart
@@ -4,7 +4,7 @@ import 'package:appflowy/plugins/database_view/application/row/row_service.dart'
import 'package:dartz/dartz.dart';
import 'package:equatable/equatable.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-database/protobuf.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/application/grid_header_bloc.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/application/grid_header_bloc.dart
index 7d212a80e0..92486a699b 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/application/grid_header_bloc.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/application/grid_header_bloc.dart
@@ -61,11 +61,6 @@ class GridHeaderBloc extends Bloc {
listenWhen: () => !isClosed,
);
}
-
- @override
- Future close() async {
- return super.close();
- }
}
@freezed
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/application/row/row_action_sheet_bloc.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/application/row/row_action_sheet_bloc.dart
index 1ff5529ad9..aab8875a4c 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/application/row/row_action_sheet_bloc.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/application/row/row_action_sheet_bloc.dart
@@ -2,7 +2,6 @@ import 'package:appflowy_backend/log.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
-import 'dart:async';
import 'package:dartz/dartz.dart';
import '../../../application/row/row_cache.dart';
@@ -34,11 +33,6 @@ class RowActionSheetBloc
);
}
- @override
- Future close() async {
- return super.close();
- }
-
void logResult(Either result) {
result.fold((l) => null, (err) => Log.error(err));
}
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/grid.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/grid.dart
index ba4bc2f628..283eca5701 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/grid.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/grid.dart
@@ -4,7 +4,7 @@ import 'package:appflowy/startup/plugin/plugin.dart';
import 'package:appflowy/workspace/presentation/home/home_stack.dart';
import 'package:appflowy/workspace/presentation/widgets/left_bar_item.dart';
import 'package:easy_localization/easy_localization.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:flutter/material.dart';
import 'presentation/grid_page.dart';
@@ -29,7 +29,7 @@ class GridPluginBuilder implements PluginBuilder {
PluginType get pluginType => PluginType.grid;
@override
- ViewLayoutTypePB? get layoutType => ViewLayoutTypePB.Grid;
+ ViewLayoutPB? get layoutType => ViewLayoutPB.Grid;
}
class GridPluginConfig implements PluginConfig {
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/grid_page.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/grid_page.dart
index 2b8f9a060c..2db3051642 100755
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/grid_page.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/grid_page.dart
@@ -8,7 +8,7 @@ import 'package:flowy_infra_ui/style_widget/scrolling/styled_scroll_bar.dart';
import 'package:flowy_infra_ui/style_widget/scrolling/styled_scrollview.dart';
import 'package:flowy_infra_ui/style_widget/text.dart';
import 'package:flowy_infra_ui/widget/error_page.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter/material.dart';
import 'package:linked_scroll_controller/linked_scroll_controller.dart';
@@ -38,7 +38,7 @@ class GridPage extends StatefulWidget {
Key? key,
}) : databaseController = DatabaseController(
view: view,
- layoutType: LayoutTypePB.Grid,
+ layoutType: DatabaseLayoutPB.Grid,
),
super(key: key);
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/filter/choicechip/choicechip.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/filter/choicechip/choicechip.dart
index 6900f472e0..46fb701441 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/filter/choicechip/choicechip.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/filter/choicechip/choicechip.dart
@@ -38,7 +38,10 @@ class ChoiceChipButton extends StatelessWidget {
child: FlowyButton(
decoration: decoration,
useIntrinsicWidth: true,
- text: FlowyText(filterInfo.fieldInfo.name),
+ text: FlowyText(
+ filterInfo.fieldInfo.name,
+ color: AFThemeExtension.of(context).textColor,
+ ),
margin: const EdgeInsets.symmetric(horizontal: 8, vertical: 2),
radius: const BorderRadius.all(Radius.circular(14)),
leftIcon: svgWidget(
@@ -62,7 +65,8 @@ class _ChoicechipFilterDesc extends StatelessWidget {
Widget build(BuildContext context) {
final arrow = Transform.rotate(
angle: -math.pi / 2,
- child: svgWidget("home/arrow_left"),
+ child: svgWidget("home/arrow_left",
+ color: AFThemeExtension.of(context).textColor),
);
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 2),
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/filter/condition_button.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/filter/condition_button.dart
index ef4d58f447..660c0b0316 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/filter/condition_button.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/filter/condition_button.dart
@@ -18,14 +18,19 @@ class ConditionButton extends StatelessWidget {
Widget build(BuildContext context) {
final arrow = Transform.rotate(
angle: -math.pi / 2,
- child: svgWidget("home/arrow_left"),
+ child: svgWidget("home/arrow_left",
+ color: AFThemeExtension.of(context).textColor),
);
return SizedBox(
height: 20,
child: FlowyButton(
useIntrinsicWidth: true,
- text: FlowyText(conditionName, fontSize: 10),
+ text: FlowyText(
+ conditionName,
+ fontSize: 10,
+ color: AFThemeExtension.of(context).textColor,
+ ),
margin: const EdgeInsets.symmetric(horizontal: 4),
radius: const BorderRadius.all(Radius.circular(2)),
rightIcon: arrow,
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/filter/create_filter_list.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/filter/create_filter_list.dart
index 3c8c6b4ba9..42ba35640e 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/filter/create_filter_list.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/filter/create_filter_list.dart
@@ -3,6 +3,7 @@ import 'package:appflowy/plugins/database_view/grid/presentation/layout/sizes.da
import 'package:appflowy/plugins/database_view/grid/presentation/widgets/header/field_type_extension.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flowy_infra/image.dart';
+import 'package:flowy_infra/theme_extension.dart';
import 'package:flowy_infra_ui/style_widget/button.dart';
import 'package:flowy_infra_ui/style_widget/scrolling/styled_list.dart';
import 'package:flowy_infra_ui/style_widget/text.dart';
@@ -117,19 +118,16 @@ class _FilterTextFieldDelegate extends SliverPersistentHeaderDelegate {
@override
Widget build(
BuildContext context, double shrinkOffset, bool overlapsContent) {
- return Padding(
+ return Container(
padding: const EdgeInsets.only(top: 4),
- child: Container(
- color: Theme.of(context).colorScheme.background,
- height: fixHeight,
- child: FlowyTextField(
- hintText: LocaleKeys.grid_settings_filterBy.tr(),
- onChanged: (text) {
- context
- .read()
- .add(GridCreateFilterEvent.didReceiveFilterText(text));
- },
- ),
+ height: fixHeight,
+ child: FlowyTextField(
+ hintText: LocaleKeys.grid_settings_filterBy.tr(),
+ onChanged: (text) {
+ context
+ .read()
+ .add(GridCreateFilterEvent.didReceiveFilterText(text));
+ },
),
);
}
@@ -158,7 +156,11 @@ class _FilterPropertyCell extends StatelessWidget {
@override
Widget build(BuildContext context) {
return FlowyButton(
- text: FlowyText.medium(fieldInfo.name),
+ hoverColor: AFThemeExtension.of(context).lightGreyHover,
+ text: FlowyText.medium(
+ fieldInfo.name,
+ color: AFThemeExtension.of(context).textColor,
+ ),
onTap: () => onTap(fieldInfo),
leftIcon: svgWidget(
fieldInfo.fieldType.iconName(),
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/filter/disclosure_button.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/filter/disclosure_button.dart
index 0f70d7be9d..fd296a73e0 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/filter/disclosure_button.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/filter/disclosure_button.dart
@@ -3,6 +3,7 @@ import 'package:appflowy/workspace/presentation/widgets/pop_up_action.dart';
import 'package:appflowy_popover/appflowy_popover.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flowy_infra/image.dart';
+import 'package:flowy_infra/theme_extension.dart';
import 'package:flowy_infra_ui/style_widget/icon_button.dart';
import 'package:flutter/material.dart';
@@ -31,6 +32,7 @@ class _DisclosureButtonState extends State {
.toList(),
buildChild: (controller) {
return FlowyIconButton(
+ hoverColor: AFThemeExtension.of(context).lightGreyHover,
width: 20,
icon: svgWidget(
"editor/details",
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/filter/filter_menu.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/filter/filter_menu.dart
index ec8c47dc6f..91cbcbe54b 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/filter/filter_menu.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/filter/filter_menu.dart
@@ -71,7 +71,10 @@ class _AddFilterButtonState extends State {
SizedBox(
height: 28,
child: FlowyButton(
- text: FlowyText(LocaleKeys.grid_settings_addFilter.tr()),
+ text: FlowyText(
+ LocaleKeys.grid_settings_addFilter.tr(),
+ color: AFThemeExtension.of(context).textColor,
+ ),
useIntrinsicWidth: true,
hoverColor: AFThemeExtension.of(context).lightGreyHover,
leftIcon: svgWidget(
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/footer/grid_footer.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/footer/grid_footer.dart
index 44f1d3fb7d..b985f59430 100755
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/footer/grid_footer.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/footer/grid_footer.dart
@@ -14,12 +14,15 @@ class GridAddRowButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return FlowyButton(
- text: FlowyText.medium(LocaleKeys.grid_row_newRow.tr()),
+ text: FlowyText.medium(
+ LocaleKeys.grid_row_newRow.tr(),
+ color: Theme.of(context).colorScheme.tertiary,
+ ),
hoverColor: AFThemeExtension.of(context).lightGreyHover,
onTap: () => context.read().add(const GridEvent.createRow()),
leftIcon: svgWidget(
"home/add",
- color: Theme.of(context).iconTheme.color,
+ color: Theme.of(context).colorScheme.tertiary,
),
);
}
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/field_cell.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/field_cell.dart
index 3af13c93a2..526276e0f2 100755
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/field_cell.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/field_cell.dart
@@ -164,11 +164,10 @@ class FieldCellButton extends StatelessWidget {
.replaceAll(Characters(''), Characters('\u{200B}'))
.toString();
return FlowyButton(
- hoverColor: AFThemeExtension.of(context).lightGreyHover,
+ hoverColor: AFThemeExtension.of(context).greyHover,
onTap: onTap,
- leftIcon: svgWidget(
- field.fieldType.iconName(),
- color: Theme.of(context).iconTheme.color,
+ leftIcon: FlowySvg(
+ name: field.fieldType.iconName(),
),
radius: BorderRadius.zero,
text: FlowyText.medium(
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/field_cell_action_sheet.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/field_cell_action_sheet.dart
index 4cd23e3b84..cf44799a88 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/field_cell_action_sheet.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/field_cell_action_sheet.dart
@@ -5,6 +5,7 @@ import 'package:appflowy/startup/startup.dart';
import 'package:appflowy/workspace/presentation/widgets/dialogs.dart';
import 'package:appflowy_popover/appflowy_popover.dart';
import 'package:flowy_infra/image.dart';
+import 'package:flowy_infra/theme_extension.dart';
import 'package:flowy_infra_ui/style_widget/button.dart';
import 'package:flowy_infra_ui/style_widget/text.dart';
import 'package:flowy_infra_ui/widget/spacing.dart';
@@ -81,8 +82,10 @@ class _EditFieldButton extends StatelessWidget {
return SizedBox(
height: GridSize.popoverItemHeight,
child: FlowyButton(
+ hoverColor: AFThemeExtension.of(context).lightGreyHover,
text: FlowyText.medium(
LocaleKeys.grid_field_editProperty.tr(),
+ color: AFThemeExtension.of(context).textColor,
),
onTap: onTap,
),
@@ -148,9 +151,12 @@ class FieldActionCell extends StatelessWidget {
@override
Widget build(BuildContext context) {
return FlowyButton(
+ hoverColor: AFThemeExtension.of(context).lightGreyHover,
text: FlowyText.medium(
action.title(),
- color: enable ? null : Theme.of(context).disabledColor,
+ color: enable
+ ? AFThemeExtension.of(context).textColor
+ : Theme.of(context).disabledColor,
),
onTap: () {
if (enable) {
@@ -160,7 +166,7 @@ class FieldActionCell extends StatelessWidget {
leftIcon: svgWidget(
action.iconName(),
color: enable
- ? Theme.of(context).colorScheme.onSurface
+ ? AFThemeExtension.of(context).textColor
: Theme.of(context).disabledColor,
),
);
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/field_type_list.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/field_type_list.dart
index f94b46cbee..b05d9391c3 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/field_type_list.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/field_type_list.dart
@@ -1,5 +1,6 @@
import 'package:appflowy_popover/appflowy_popover.dart';
import 'package:flowy_infra/image.dart';
+import 'package:flowy_infra/theme_extension.dart';
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
import 'package:appflowy_backend/protobuf/flowy-database/field_entities.pb.dart';
import 'package:flutter/material.dart';
@@ -57,7 +58,11 @@ class FieldTypeCell extends StatelessWidget {
return SizedBox(
height: GridSize.popoverItemHeight,
child: FlowyButton(
- text: FlowyText.medium(fieldType.title()),
+ hoverColor: AFThemeExtension.of(context).lightGreyHover,
+ text: FlowyText.medium(
+ fieldType.title(),
+ color: AFThemeExtension.of(context).textColor,
+ ),
onTap: () => onSelectField(fieldType),
leftIcon: svgWidget(
fieldType.iconName(),
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/field_type_option_editor.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/field_type_option_editor.dart
index 5f2364571c..b8d1e9a26a 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/field_type_option_editor.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/field_type_option_editor.dart
@@ -4,6 +4,7 @@ import 'package:appflowy/plugins/database_view/application/field/type_option/typ
import 'package:appflowy_popover/appflowy_popover.dart';
import 'package:dartz/dartz.dart' show Either;
import 'package:flowy_infra/image.dart';
+import 'package:flowy_infra/theme_extension.dart';
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-database/field_entities.pb.dart';
@@ -110,8 +111,10 @@ class _SwitchFieldButton extends StatelessWidget {
Widget _buildMoreButton(BuildContext context) {
final bloc = context.read();
return FlowyButton(
+ hoverColor: AFThemeExtension.of(context).lightGreyHover,
text: FlowyText.medium(
bloc.state.field.fieldType.title(),
+ color: AFThemeExtension.of(context).textColor,
),
margin: GridSize.typeOptionContentInsets,
leftIcon: svgWidget(
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/grid_header.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/grid_header.dart
index 986a91daa2..6a77ac83ee 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/grid_header.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/grid_header.dart
@@ -178,12 +178,9 @@ class CreateFieldButton extends StatelessWidget {
child: FlowyButton(
radius: BorderRadius.zero,
text: FlowyText.medium(LocaleKeys.grid_field_newColumn.tr()),
- hoverColor: AFThemeExtension.of(context).lightGreyHover,
+ hoverColor: AFThemeExtension.of(context).greyHover,
onTap: () {},
- leftIcon: svgWidget(
- "home/add",
- color: Theme.of(context).iconTheme.color,
- ),
+ leftIcon: const FlowySvg(name: 'home/add'),
),
popupBuilder: (BuildContext popover) {
return FieldEditor(
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/type_option/date.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/type_option/date.dart
index 3da0aadd93..12237b8350 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/type_option/date.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/type_option/date.dart
@@ -151,10 +151,7 @@ class DateFormatButton extends StatelessWidget {
margin: buttonMargins,
onTap: onTap,
onHover: onHover,
- rightIcon: svgWidget(
- "grid/more",
- color: Theme.of(context).iconTheme.color,
- ),
+ rightIcon: const FlowySvg(name: 'grid/more'),
),
);
}
@@ -182,10 +179,7 @@ class TimeFormatButton extends StatelessWidget {
margin: buttonMargins,
onTap: onTap,
onHover: onHover,
- rightIcon: svgWidget(
- "grid/more",
- color: Theme.of(context).iconTheme.color,
- ),
+ rightIcon: const FlowySvg(name: 'grid/more'),
),
);
}
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/type_option/select_option.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/type_option/select_option.dart
index cac4f1f0f0..56a0ad0736 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/type_option/select_option.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/type_option/select_option.dart
@@ -1,6 +1,7 @@
import 'package:appflowy/plugins/database_view/application/field/type_option/select_option_type_option_bloc.dart';
import 'package:appflowy_popover/appflowy_popover.dart';
import 'package:flowy_infra/image.dart';
+import 'package:flowy_infra/theme_extension.dart';
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
import 'package:appflowy_backend/protobuf/flowy-database/select_type_option.pb.dart';
import 'package:flutter/material.dart';
@@ -243,7 +244,11 @@ class _AddOptionButton extends StatelessWidget {
child: SizedBox(
height: GridSize.popoverItemHeight,
child: FlowyButton(
- text: FlowyText.medium(LocaleKeys.grid_field_addSelectOption.tr()),
+ hoverColor: AFThemeExtension.of(context).lightGreyHover,
+ text: FlowyText.medium(
+ LocaleKeys.grid_field_addSelectOption.tr(),
+ color: AFThemeExtension.of(context).textColor,
+ ),
onTap: () {
context
.read()
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/type_option/select_option_editor.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/type_option/select_option_editor.dart
index b0d6338ae3..36ebffa692 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/type_option/select_option_editor.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/type_option/select_option_editor.dart
@@ -1,6 +1,7 @@
import 'package:appflowy/plugins/database_view/application/field/type_option/edit_select_option_bloc.dart';
import 'package:appflowy/plugins/database_view/widgets/row/cells/select_option_cell/extension.dart';
import 'package:flowy_infra/image.dart';
+import 'package:flowy_infra/theme_extension.dart';
import 'package:flowy_infra_ui/style_widget/button.dart';
import 'package:flowy_infra_ui/style_widget/scrolling/styled_list.dart';
import 'package:flowy_infra_ui/style_widget/text.dart';
@@ -103,7 +104,11 @@ class _DeleteTag extends StatelessWidget {
return SizedBox(
height: GridSize.popoverItemHeight,
child: FlowyButton(
- text: FlowyText.medium(LocaleKeys.grid_selectOption_deleteTag.tr()),
+ hoverColor: AFThemeExtension.of(context).lightGreyHover,
+ text: FlowyText.medium(
+ LocaleKeys.grid_selectOption_deleteTag.tr(),
+ color: AFThemeExtension.of(context).textColor,
+ ),
leftIcon: svgWidget(
"grid/delete",
color: Theme.of(context).iconTheme.color,
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/row/action.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/row/action.dart
index 9ecaaf055b..33e1a69c7a 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/row/action.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/row/action.dart
@@ -3,6 +3,7 @@ import 'package:appflowy/plugins/database_view/grid/application/row/row_action_s
import 'package:easy_localization/easy_localization.dart';
import 'package:appflowy/generated/locale_keys.g.dart';
import 'package:flowy_infra/image.dart';
+import 'package:flowy_infra/theme_extension.dart';
import 'package:flowy_infra_ui/style_widget/button.dart';
import 'package:flowy_infra_ui/style_widget/scrolling/styled_list.dart';
import 'package:flowy_infra_ui/style_widget/text.dart';
@@ -56,9 +57,12 @@ class _ActionCell extends StatelessWidget {
return SizedBox(
height: GridSize.popoverItemHeight,
child: FlowyButton(
+ hoverColor: AFThemeExtension.of(context).lightGreyHover,
text: FlowyText.medium(
action.title(),
- color: action.enable() ? null : Theme.of(context).disabledColor,
+ color: action.enable()
+ ? AFThemeExtension.of(context).textColor
+ : Theme.of(context).disabledColor,
),
onTap: () {
if (action.enable()) {
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/row/row.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/row/row.dart
index 09aff68112..425dec6317 100755
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/row/row.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/row/row.dart
@@ -5,6 +5,7 @@ import 'package:appflowy/plugins/database_view/grid/application/row/row_bloc.dar
import 'package:appflowy/plugins/database_view/widgets/row/cell_builder.dart';
import 'package:appflowy_popover/appflowy_popover.dart';
import 'package:flowy_infra/image.dart';
+import 'package:flowy_infra/theme_extension.dart';
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
@@ -152,11 +153,15 @@ class _InsertButton extends StatelessWidget {
Widget build(BuildContext context) {
return FlowyIconButton(
tooltipText: LocaleKeys.tooltip_addNewRow.tr(),
+ hoverColor: AFThemeExtension.of(context).lightGreyHover,
width: 20,
height: 30,
onPressed: () => context.read().add(const RowEvent.createRow()),
iconPadding: const EdgeInsets.all(3),
- icon: svgWidget("home/add"),
+ icon: svgWidget(
+ 'home/add',
+ color: Theme.of(context).colorScheme.tertiary,
+ ),
);
}
}
@@ -182,11 +187,15 @@ class _MenuButtonState extends State<_MenuButton> {
Widget build(BuildContext context) {
return FlowyIconButton(
tooltipText: LocaleKeys.tooltip_openMenu.tr(),
+ hoverColor: AFThemeExtension.of(context).lightGreyHover,
width: 20,
height: 30,
onPressed: () => widget.openMenu(),
iconPadding: const EdgeInsets.all(3),
- icon: svgWidget("editor/details"),
+ icon: svgWidget(
+ 'editor/details',
+ color: Theme.of(context).colorScheme.tertiary,
+ ),
);
}
}
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/sort/create_sort_list.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/sort/create_sort_list.dart
index 531d781aee..6dea5acb43 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/sort/create_sort_list.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/sort/create_sort_list.dart
@@ -5,6 +5,7 @@ import 'package:appflowy/plugins/database_view/grid/presentation/layout/sizes.da
import 'package:appflowy/plugins/database_view/grid/presentation/widgets/header/field_type_extension.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flowy_infra/image.dart';
+import 'package:flowy_infra/theme_extension.dart';
import 'package:flowy_infra_ui/style_widget/button.dart';
import 'package:flowy_infra_ui/style_widget/scrolling/styled_list.dart';
import 'package:flowy_infra_ui/style_widget/text.dart';
@@ -116,19 +117,16 @@ class _FilterTextFieldDelegate extends SliverPersistentHeaderDelegate {
@override
Widget build(
BuildContext context, double shrinkOffset, bool overlapsContent) {
- return Padding(
+ return Container(
padding: const EdgeInsets.only(top: 4),
- child: Container(
- color: Theme.of(context).colorScheme.background,
- height: fixHeight,
- child: FlowyTextField(
- hintText: LocaleKeys.grid_settings_sortBy.tr(),
- onChanged: (text) {
- context
- .read()
- .add(CreateSortEvent.didReceiveFilterText(text));
- },
- ),
+ height: fixHeight,
+ child: FlowyTextField(
+ hintText: LocaleKeys.grid_settings_sortBy.tr(),
+ onChanged: (text) {
+ context
+ .read()
+ .add(CreateSortEvent.didReceiveFilterText(text));
+ },
),
);
}
@@ -157,7 +155,11 @@ class _SortPropertyCell extends StatelessWidget {
@override
Widget build(BuildContext context) {
return FlowyButton(
- text: FlowyText.medium(fieldInfo.name),
+ hoverColor: AFThemeExtension.of(context).lightGreyHover,
+ text: FlowyText.medium(
+ fieldInfo.name,
+ color: AFThemeExtension.of(context).textColor,
+ ),
onTap: () => onTap(fieldInfo),
leftIcon: svgWidget(
fieldInfo.fieldType.iconName(),
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/sort/sort_choice_button.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/sort/sort_choice_button.dart
index 29e705f9d0..40afc7019f 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/sort/sort_choice_button.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/sort/sort_choice_button.dart
@@ -37,7 +37,10 @@ class SortChoiceButton extends StatelessWidget {
return FlowyButton(
decoration: decoration,
useIntrinsicWidth: true,
- text: FlowyText(text),
+ text: FlowyText(
+ text,
+ color: AFThemeExtension.of(context).textColor,
+ ),
margin: const EdgeInsets.symmetric(horizontal: 8, vertical: 2),
radius: BorderRadius.all(radius),
leftIcon: leftIcon,
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/sort/sort_editor.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/sort/sort_editor.dart
index 8789a6829a..9895c08c43 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/sort/sort_editor.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/sort/sort_editor.dart
@@ -182,13 +182,11 @@ class _AddSortButtonState extends State<_AddSortButton> {
child: SizedBox(
height: GridSize.popoverItemHeight,
child: FlowyButton(
+ hoverColor: AFThemeExtension.of(context).greyHover,
disable: getCreatableSorts(widget.fieldController.fieldInfos).isEmpty,
text: FlowyText.medium(LocaleKeys.grid_sort_addSort.tr()),
onTap: () => _popoverController.show(),
- leftIcon: svgWidget(
- "home/add",
- color: Theme.of(context).iconTheme.color,
- ),
+ leftIcon: const FlowySvg(name: 'home/add'),
),
),
popupBuilder: (BuildContext context) {
@@ -220,10 +218,7 @@ class _DeleteSortButton extends StatelessWidget {
.read()
.add(const SortEditorEvent.deleteAllSorts());
},
- leftIcon: svgWidget(
- "editor/delete",
- color: Theme.of(context).iconTheme.color,
- ),
+ leftIcon: const FlowySvg(name: 'editor/delete'),
),
);
},
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/sort/sort_menu.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/sort/sort_menu.dart
index 81a07844cf..c255e36525 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/sort/sort_menu.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/sort/sort_menu.dart
@@ -55,7 +55,10 @@ class SortChoiceChip extends StatelessWidget {
Widget build(BuildContext context) {
final arrow = Transform.rotate(
angle: -math.pi / 2,
- child: svgWidget("home/arrow_left"),
+ child: svgWidget(
+ "home/arrow_left",
+ color: Theme.of(context).iconTheme.color,
+ ),
);
final text = LocaleKeys.grid_settings_sort.tr();
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/toolbar/filter_button.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/toolbar/filter_button.dart
index 38dfc83818..8d32ff981f 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/toolbar/filter_button.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/toolbar/filter_button.dart
@@ -25,7 +25,7 @@ class _FilterButtonState extends State {
return BlocBuilder(
builder: (context, state) {
final textColor = state.filters.isEmpty
- ? null
+ ? AFThemeExtension.of(context).textColor
: Theme.of(context).colorScheme.primary;
return _wrapPopover(
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/toolbar/grid_property.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/toolbar/grid_property.dart
index 0b6f67a6f3..0dc81d26b6 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/toolbar/grid_property.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/toolbar/grid_property.dart
@@ -5,6 +5,7 @@ import 'package:appflowy/plugins/database_view/grid/presentation/widgets/header/
import 'package:appflowy/startup/startup.dart';
import 'package:appflowy_popover/appflowy_popover.dart';
import 'package:flowy_infra/image.dart';
+import 'package:flowy_infra/theme_extension.dart';
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -115,7 +116,11 @@ class _GridPropertyCellState extends State<_GridPropertyCell> {
triggerActions: PopoverTriggerFlags.none,
margin: EdgeInsets.zero,
child: FlowyButton(
- text: FlowyText.medium(widget.fieldInfo.name),
+ hoverColor: AFThemeExtension.of(context).lightGreyHover,
+ text: FlowyText.medium(
+ widget.fieldInfo.name,
+ color: AFThemeExtension.of(context).textColor,
+ ),
leftIcon: svgWidget(
widget.fieldInfo.fieldType.iconName(),
color: Theme.of(context).iconTheme.color,
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/toolbar/grid_setting.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/toolbar/grid_setting.dart
index e41d75ce69..875f752106 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/toolbar/grid_setting.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/toolbar/grid_setting.dart
@@ -2,6 +2,7 @@ import 'package:appflowy/plugins/database_view/application/field/field_controlle
import 'package:appflowy/plugins/database_view/application/setting/setting_bloc.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flowy_infra/image.dart';
+import 'package:flowy_infra/theme_extension.dart';
import 'package:flowy_infra_ui/style_widget/button.dart';
import 'package:flowy_infra_ui/style_widget/scrolling/styled_list.dart';
import 'package:flowy_infra_ui/style_widget/text.dart';
@@ -71,9 +72,12 @@ class _SettingItem extends StatelessWidget {
return SizedBox(
height: GridSize.popoverItemHeight,
child: FlowyButton(
+ hoverColor: AFThemeExtension.of(context).lightGreyHover,
text: FlowyText.medium(
action.title(),
- color: action.enable() ? null : Theme.of(context).disabledColor,
+ color: action.enable()
+ ? AFThemeExtension.of(context).textColor
+ : Theme.of(context).disabledColor,
),
onTap: () => onAction(action),
leftIcon: svgWidget(
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/toolbar/setting_button.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/toolbar/setting_button.dart
index 93baeed518..b9b63eb5fb 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/toolbar/setting_button.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/toolbar/setting_button.dart
@@ -52,6 +52,7 @@ class _SettingButtonState extends State {
triggerActions: PopoverTriggerFlags.none,
child: FlowyTextButton(
LocaleKeys.settings_title.tr(),
+ fontColor: AFThemeExtension.of(context).textColor,
fillColor: Colors.transparent,
hoverColor: AFThemeExtension.of(context).lightGreyHover,
padding: GridSize.typeOptionContentInsets,
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/toolbar/sort_button.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/toolbar/sort_button.dart
index 7a38b73d08..debb83493a 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/toolbar/sort_button.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/toolbar/sort_button.dart
@@ -24,7 +24,7 @@ class _SortButtonState extends State {
return BlocBuilder(
builder: (context, state) {
final textColor = state.sortInfos.isEmpty
- ? null
+ ? AFThemeExtension.of(context).textColor
: Theme.of(context).colorScheme.primary;
return wrapPopover(
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/checklist_cell/checklist_cell_editor.dart b/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/checklist_cell/checklist_cell_editor.dart
index 891e3e7c05..e8ee95c406 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/checklist_cell/checklist_cell_editor.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/checklist_cell/checklist_cell_editor.dart
@@ -1,6 +1,7 @@
import 'package:appflowy/plugins/database_view/application/cell/cell_controller_builder.dart';
import 'package:appflowy_popover/appflowy_popover.dart';
import 'package:flowy_infra/image.dart';
+import 'package:flowy_infra/theme_extension.dart';
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -116,7 +117,11 @@ class _ChecklistOptionCellState extends State<_ChecklistOptionCell> {
children: [
Expanded(
child: FlowyButton(
- text: FlowyText(widget.option.data.name),
+ hoverColor: AFThemeExtension.of(context).lightGreyHover,
+ text: FlowyText(
+ widget.option.data.name,
+ color: AFThemeExtension.of(context).textColor,
+ ),
leftIcon: icon,
onTap: () => context
.read()
@@ -132,6 +137,7 @@ class _ChecklistOptionCellState extends State<_ChecklistOptionCell> {
Widget _disclosureButton() {
return FlowyIconButton(
+ hoverColor: AFThemeExtension.of(context).lightGreyHover,
width: 20,
onPressed: () => _popoverController.show(),
iconPadding: const EdgeInsets.fromLTRB(2, 2, 2, 2),
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/checklist_cell/checklist_progress_bar.dart b/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/checklist_cell/checklist_progress_bar.dart
index b8599f60c4..f997eb7768 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/checklist_cell/checklist_progress_bar.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/checklist_cell/checklist_progress_bar.dart
@@ -20,7 +20,7 @@ class ChecklistProgressBar extends StatelessWidget {
percent: percent,
padding: EdgeInsets.zero,
progressColor: Theme.of(context).colorScheme.primary,
- backgroundColor: AFThemeExtension.of(context).tint9,
+ backgroundColor: AFThemeExtension.of(context).progressBarBGcolor,
barRadius: const Radius.circular(5),
);
}
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/date_cell/date_editor.dart b/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/date_cell/date_editor.dart
index 3b338d5355..ae4de41db5 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/date_cell/date_editor.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/date_cell/date_editor.dart
@@ -385,10 +385,7 @@ class _DateTypeOptionButton extends StatelessWidget {
child: FlowyButton(
text: FlowyText.medium(title),
margin: GridSize.typeOptionContentInsets,
- rightIcon: svgWidget(
- "grid/more",
- color: Theme.of(context).iconTheme.color,
- ),
+ rightIcon: const FlowySvg(name: 'grid/more'),
),
),
),
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/select_option_cell/extension.dart b/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/select_option_cell/extension.dart
index 29b0d9b96e..7b8041cb3d 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/select_option_cell/extension.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/select_option_cell/extension.dart
@@ -106,7 +106,11 @@ class SelectOptionTag extends StatelessWidget {
mainAxisSize: MainAxisSize.min,
children: [
Flexible(
- child: FlowyText.medium(name, overflow: TextOverflow.ellipsis),
+ child: FlowyText.medium(
+ name,
+ overflow: TextOverflow.ellipsis,
+ color: Theme.of(context).colorScheme.onSurface,
+ ),
),
if (onRemove != null)
FlowyIconButton(
@@ -116,7 +120,7 @@ class SelectOptionTag extends StatelessWidget {
hoverColor: Colors.transparent,
icon: svgWidget(
'home/close',
- color: Theme.of(context).iconTheme.color,
+ color: Theme.of(context).colorScheme.onSurface,
),
),
],
@@ -139,6 +143,9 @@ class SelectOptionTagCell extends StatelessWidget {
@override
Widget build(BuildContext context) {
return FlowyHover(
+ style: HoverStyle(
+ hoverColor: AFThemeExtension.of(context).lightGreyHover,
+ ),
child: InkWell(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/select_option_cell/select_option_editor.dart b/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/select_option_cell/select_option_editor.dart
index e3ba894373..1d8ca404d8 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/select_option_cell/select_option_editor.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/select_option_cell/select_option_editor.dart
@@ -210,7 +210,7 @@ class _CreateOptionCell extends StatelessWidget {
alignment: Alignment.centerLeft,
child: SelectOptionTag(
name: name,
- color: AFThemeExtension.of(context).lightGreyHover,
+ color: AFThemeExtension.of(context).greyHover,
onSelected: () => context
.read()
.add(SelectOptionEditorEvent.newOption(name)),
diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/url_cell/url_cell.dart b/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/url_cell/url_cell.dart
index 30cd9ae807..470fd31b26 100644
--- a/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/url_cell/url_cell.dart
+++ b/frontend/appflowy_flutter/lib/plugins/database_view/widgets/row/cells/url_cell/url_cell.dart
@@ -5,6 +5,7 @@ import 'package:appflowy/workspace/presentation/home/toast.dart';
import 'package:appflowy_popover/appflowy_popover.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flowy_infra/image.dart';
+import 'package:flowy_infra/theme_extension.dart';
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@@ -211,10 +212,8 @@ class _EditURLAccessoryState extends State<_EditURLAccessory>
controller: _popoverController,
direction: PopoverDirection.bottomWithLeftAligned,
offset: const Offset(0, 8),
- child: svgWidget(
- "editor/edit",
- color: Theme.of(context).iconTheme.color,
- ),
+ child: svgWidget("editor/edit",
+ color: AFThemeExtension.of(context).textColor),
popupBuilder: (BuildContext popoverContext) {
return URLEditorPopover(
cellController:
diff --git a/frontend/appflowy_flutter/lib/plugins/document/application/doc_bloc.dart b/frontend/appflowy_flutter/lib/plugins/document/application/doc_bloc.dart
index ae47a120ca..b1eae868d7 100644
--- a/frontend/appflowy_flutter/lib/plugins/document/application/doc_bloc.dart
+++ b/frontend/appflowy_flutter/lib/plugins/document/application/doc_bloc.dart
@@ -8,9 +8,8 @@ import 'package:appflowy_backend/protobuf/flowy-document/entities.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-user/user_profile.pbserver.dart';
import 'package:appflowy_editor/appflowy_editor.dart'
show EditorState, Document, Transaction, Node;
-import 'package:appflowy_backend/protobuf/flowy-folder/trash.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_backend/log.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -49,8 +48,7 @@ class DocumentBloc extends Bloc {
emit(state.copyWith(isDeleted: false));
},
deletePermanently: (DeletePermanently value) async {
- final result = await _trashService
- .deleteViews([Tuple2(view.id, TrashType.TrashView)]);
+ final result = await _trashService.deleteViews([view.id]);
final newState = result.fold(
(l) => state.copyWith(forceClose: true), (r) => state);
diff --git a/frontend/appflowy_flutter/lib/plugins/document/application/doc_service.dart b/frontend/appflowy_flutter/lib/plugins/document/application/doc_service.dart
index 6597dfc3f1..88f4ead686 100644
--- a/frontend/appflowy_flutter/lib/plugins/document/application/doc_service.dart
+++ b/frontend/appflowy_flutter/lib/plugins/document/application/doc_service.dart
@@ -1,7 +1,7 @@
import 'package:dartz/dartz.dart';
import 'package:appflowy_backend/dispatch/dispatch.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-document/entities.pb.dart';
diff --git a/frontend/appflowy_flutter/lib/plugins/document/application/share_bloc.dart b/frontend/appflowy_flutter/lib/plugins/document/application/share_bloc.dart
index ddb4fe915d..abd53da58c 100644
--- a/frontend/appflowy_flutter/lib/plugins/document/application/share_bloc.dart
+++ b/frontend/appflowy_flutter/lib/plugins/document/application/share_bloc.dart
@@ -5,7 +5,7 @@ import 'package:appflowy/plugins/document/presentation/plugins/parsers/divider_n
import 'package:appflowy/plugins/document/presentation/plugins/parsers/math_equation_node_parser.dart';
import 'package:appflowy/plugins/document/presentation/plugins/parsers/code_block_node_parser.dart';
import 'package:appflowy_backend/protobuf/flowy-document/entities.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
diff --git a/frontend/appflowy_flutter/lib/plugins/document/application/share_service.dart b/frontend/appflowy_flutter/lib/plugins/document/application/share_service.dart
index cf07dc0054..b2939244b5 100644
--- a/frontend/appflowy_flutter/lib/plugins/document/application/share_service.dart
+++ b/frontend/appflowy_flutter/lib/plugins/document/application/share_service.dart
@@ -3,7 +3,7 @@ import 'package:dartz/dartz.dart';
import 'package:appflowy_backend/dispatch/dispatch.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-document/protobuf.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
class ShareService {
Future> export(
diff --git a/frontend/appflowy_flutter/lib/plugins/document/document.dart b/frontend/appflowy_flutter/lib/plugins/document/document.dart
index 30a9aa688d..904dfd527f 100644
--- a/frontend/appflowy_flutter/lib/plugins/document/document.dart
+++ b/frontend/appflowy_flutter/lib/plugins/document/document.dart
@@ -10,7 +10,7 @@ import 'package:appflowy/startup/plugin/plugin.dart';
import 'package:appflowy/workspace/presentation/home/home_stack.dart';
import 'package:appflowy/workspace/presentation/widgets/left_bar_item.dart';
import 'package:easy_localization/easy_localization.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -34,7 +34,7 @@ class DocumentPluginBuilder extends PluginBuilder {
PluginType get pluginType => PluginType.editor;
@override
- ViewLayoutTypePB? get layoutType => ViewLayoutTypePB.Document;
+ ViewLayoutPB? get layoutType => ViewLayoutPB.Document;
}
class DocumentPlugin extends Plugin {
diff --git a/frontend/appflowy_flutter/lib/plugins/document/document_page.dart b/frontend/appflowy_flutter/lib/plugins/document/document_page.dart
index 8c87000722..b2c44f41f2 100644
--- a/frontend/appflowy_flutter/lib/plugins/document/document_page.dart
+++ b/frontend/appflowy_flutter/lib/plugins/document/document_page.dart
@@ -1,5 +1,5 @@
import 'package:appflowy/plugins/document/presentation/plugins/board/board_view_menu_item.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_editor_plugins/appflowy_editor_plugins.dart';
import 'package:appflowy_editor/appflowy_editor.dart';
import 'package:appflowy/plugins/document/presentation/plugins/board/board_node_widget.dart';
diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/base/built_in_page_widget.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/base/built_in_page_widget.dart
index 0df834c355..a80be87b9d 100644
--- a/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/base/built_in_page_widget.dart
+++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/base/built_in_page_widget.dart
@@ -3,7 +3,7 @@ import 'package:appflowy/startup/startup.dart';
import 'package:appflowy/workspace/application/app/app_service.dart';
import 'package:appflowy/workspace/presentation/widgets/pop_up_action.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pbserver.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_editor/appflowy_editor.dart';
import 'package:dartz/dartz.dart' as dartz;
import 'package:flowy_infra_ui/style_widget/text.dart';
@@ -59,7 +59,7 @@ class _BuiltInPageWidgetState extends State {
child: CircularProgressIndicator(),
);
},
- future: AppBackendService().getView(appID, gridID),
+ future: AppBackendService().getChildView(appID, gridID),
);
}
diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/base/insert_page_command.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/base/insert_page_command.dart
index 8d4afd917e..5b8d899343 100644
--- a/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/base/insert_page_command.dart
+++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/base/insert_page_command.dart
@@ -1,20 +1,53 @@
+import 'package:appflowy/generated/locale_keys.g.dart';
+import 'package:appflowy/plugins/database_view/application/database_view_service.dart';
import 'package:appflowy/plugins/document/presentation/plugins/board/board_node_widget.dart';
import 'package:appflowy/plugins/document/presentation/plugins/grid/grid_node_widget.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/app.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
+import 'package:appflowy/workspace/application/app/app_service.dart';
import 'package:appflowy_editor/appflowy_editor.dart';
+import 'package:easy_localization/easy_localization.dart';
const String kAppID = 'app_id';
const String kViewID = 'view_id';
extension InsertPage on EditorState {
- void insertPage(AppPB appPB, ViewPB viewPB) {
+ Future insertPage(ViewPB appPB, ViewPB viewPB) async {
final selection = service.selectionService.currentSelection.value;
final textNodes =
service.selectionService.currentSelectedNodes.whereType();
if (selection == null || textNodes.isEmpty) {
return;
}
+
+ // get the database that the view is associated with
+ final database =
+ await DatabaseViewBackendService(viewId: viewPB.id).openGrid().then(
+ (value) => value.getLeftOrNull(),
+ );
+
+ if (database == null) {
+ throw StateError(
+ 'The database associated with ${viewPB.id} could not be found while attempting to create a referenced ${viewPB.layout.name}.');
+ }
+
+ final prefix = referencedBoardPrefix(viewPB.layout);
+
+ final ref = await AppBackendService().createView(
+ appId: appPB.id,
+ name: "$prefix ${viewPB.name}",
+ layoutType: viewPB.layout,
+ ext: {
+ 'database_id': database.id,
+ },
+ ).then(
+ (value) => value.getLeftOrNull(),
+ );
+
+ // TODO(a-wallen): Show error dialog here.
+ if (ref == null) {
+ return;
+ }
+
final transaction = this.transaction;
transaction.insertNode(
selection.end.path,
@@ -22,18 +55,29 @@ extension InsertPage on EditorState {
type: _convertPageType(viewPB),
attributes: {
kAppID: appPB.id,
- kViewID: viewPB.id,
+ kViewID: ref.id,
},
),
);
apply(transaction);
}
+ String referencedBoardPrefix(ViewLayoutPB layout) {
+ switch (layout) {
+ case ViewLayoutPB.Grid:
+ return LocaleKeys.grid_referencedGridPrefix.tr();
+ case ViewLayoutPB.Board:
+ return LocaleKeys.board_referencedBoardPrefix.tr();
+ default:
+ throw UnimplementedError();
+ }
+ }
+
String _convertPageType(ViewPB viewPB) {
switch (viewPB.layout) {
- case ViewLayoutTypePB.Grid:
+ case ViewLayoutPB.Grid:
return kGridType;
- case ViewLayoutTypePB.Board:
+ case ViewLayoutPB.Board:
return kBoardType;
default:
throw Exception('Unknown layout type');
diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/base/link_to_page_widget.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/base/link_to_page_widget.dart
index 46c8298b49..3f8cb5b1ef 100644
--- a/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/base/link_to_page_widget.dart
+++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/base/link_to_page_widget.dart
@@ -1,12 +1,12 @@
import 'package:appflowy/workspace/application/app/app_service.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/app.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_editor/appflowy_editor.dart';
import 'package:dartz/dartz.dart' as dartz;
import 'package:flowy_infra/image.dart';
import 'package:flowy_infra_ui/style_widget/button.dart';
import 'package:flowy_infra_ui/style_widget/text.dart';
import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
import 'insert_page_command.dart';
import 'package:appflowy/generated/locale_keys.g.dart';
import 'package:easy_localization/easy_localization.dart';
@@ -18,7 +18,7 @@ void showLinkToPageMenu(
EditorState editorState,
SelectionMenuService menuService,
BuildContext context,
- ViewLayoutTypePB pageType,
+ ViewLayoutPB pageType,
) {
final alignment = menuService.alignment;
final offset = menuService.offset;
@@ -28,10 +28,10 @@ void showLinkToPageMenu(
String hintText = '';
switch (pageType) {
- case ViewLayoutTypePB.Grid:
+ case ViewLayoutPB.Grid:
hintText = LocaleKeys.document_slashMenu_grid_selectAGridToLinkTo.tr();
break;
- case ViewLayoutTypePB.Board:
+ case ViewLayoutPB.Board:
hintText = LocaleKeys.document_slashMenu_board_selectABoardToLinkTo.tr();
break;
default:
@@ -50,15 +50,15 @@ void showLinkToPageMenu(
editorState: editorState,
layoutType: pageType,
hintText: hintText,
- onSelected: (appPB, viewPB) {
- editorState.insertPage(appPB, viewPB);
+ onSelected: (viewPB, childViewPB) {
+ editorState.insertPage(viewPB, childViewPB);
},
),
),
);
});
- Overlay.of(context)?.insert(_linkToPageMenu!);
+ Overlay.of(context).insert(_linkToPageMenu!);
editorState.service.selectionService.currentSelection
.addListener(dismissLinkToPageMenu);
@@ -83,23 +83,59 @@ class LinkToPageMenu extends StatefulWidget {
});
final EditorState editorState;
- final ViewLayoutTypePB layoutType;
+ final ViewLayoutPB layoutType;
final String hintText;
- final void Function(AppPB appPB, ViewPB viewPB) onSelected;
+ final void Function(ViewPB view, ViewPB childView) onSelected;
@override
State createState() => _LinkToPageMenuState();
}
class _LinkToPageMenuState extends State {
+ final _focusNode = FocusNode(debugLabel: 'reference_list_widget');
EditorStyle get style => widget.editorState.editorStyle;
+ int _selectedIndex = 0;
+ int _totalItems = 0;
+ Future>>>? _availableLayout;
+ final Map> _items = {};
+
+ Future>>> fetchItems() async {
+ final items = await AppBackendService().fetchViews(widget.layoutType);
+
+ int index = 0;
+ for (final app in items) {
+ for (final view in app.value2) {
+ _items.putIfAbsent(index, () => dartz.Tuple2(app.value1, view));
+ index += 1;
+ }
+ }
+
+ _totalItems = _items.length;
+ return items;
+ }
+
+ @override
+ void initState() {
+ _availableLayout = fetchItems();
+ WidgetsBinding.instance.addPostFrameCallback((_) {
+ _focusNode.requestFocus();
+ });
+ super.initState();
+ }
+
+ @override
+ void dispose() {
+ _focusNode.dispose();
+ super.dispose();
+ }
@override
Widget build(BuildContext context) {
- return Container(
- color: Colors.transparent,
- width: 300,
+ return Focus(
+ focusNode: _focusNode,
+ onKey: _onKey,
child: Container(
+ width: 300,
padding: const EdgeInsets.fromLTRB(10, 6, 10, 6),
decoration: BoxDecoration(
color: style.selectionMenuBackgroundColor,
@@ -112,17 +148,62 @@ class _LinkToPageMenuState extends State {
],
borderRadius: BorderRadius.circular(6.0),
),
- child: _buildListWidget(context),
+ child: _buildListWidget(context, _selectedIndex, _availableLayout),
),
);
}
- Widget _buildListWidget(BuildContext context) {
- return FutureBuilder>>>(
+ KeyEventResult _onKey(FocusNode node, RawKeyEvent event) {
+ if (event is! RawKeyDownEvent ||
+ _availableLayout == null ||
+ _items.isEmpty) {
+ return KeyEventResult.ignored;
+ }
+
+ final acceptedKeys = [
+ LogicalKeyboardKey.arrowUp,
+ LogicalKeyboardKey.arrowDown,
+ LogicalKeyboardKey.tab,
+ LogicalKeyboardKey.enter
+ ];
+
+ if (!acceptedKeys.contains(event.logicalKey)) {
+ return KeyEventResult.handled;
+ }
+
+ var newSelectedIndex = _selectedIndex;
+ if (event.logicalKey == LogicalKeyboardKey.arrowDown &&
+ newSelectedIndex != _totalItems - 1) {
+ newSelectedIndex += 1;
+ } else if (event.logicalKey == LogicalKeyboardKey.arrowUp &&
+ newSelectedIndex != 0) {
+ newSelectedIndex -= 1;
+ } else if (event.logicalKey == LogicalKeyboardKey.tab) {
+ newSelectedIndex += 1;
+ newSelectedIndex %= _totalItems;
+ } else if (event.logicalKey == LogicalKeyboardKey.enter) {
+ widget.onSelected(
+ _items[_selectedIndex]!.value1, _items[_selectedIndex]!.value2);
+ }
+
+ setState(() {
+ _selectedIndex = newSelectedIndex;
+ });
+
+ return KeyEventResult.handled;
+ }
+
+ Widget _buildListWidget(
+ BuildContext context,
+ int selectedIndex,
+ Future>>>? items,
+ ) {
+ int index = 0;
+ return FutureBuilder>>>(
builder: (context, snapshot) {
if (snapshot.hasData &&
snapshot.connectionState == ConnectionState.done) {
- final apps = snapshot.data;
+ final views = snapshot.data;
final children = [
Padding(
padding: const EdgeInsets.symmetric(vertical: 4),
@@ -133,28 +214,31 @@ class _LinkToPageMenuState extends State {
),
),
];
- if (apps != null && apps.isNotEmpty) {
- for (final app in apps) {
- if (app.value2.isNotEmpty) {
+ if (views != null && views.isNotEmpty) {
+ for (final view in views) {
+ if (view.value2.isNotEmpty) {
children.add(
Padding(
padding: const EdgeInsets.symmetric(vertical: 4),
child: FlowyText.regular(
- app.value1.name,
+ view.value1.name,
),
),
);
- for (final value in app.value2) {
+ for (final value in view.value2) {
children.add(
FlowyButton(
+ isSelected: index == _selectedIndex,
leftIcon: svgWidget(
_iconName(value),
color: Theme.of(context).iconTheme.color,
),
text: FlowyText.regular(value.name),
- onTap: () => widget.onSelected(app.value1, value),
+ onTap: () => widget.onSelected(view.value1, value),
),
);
+
+ index += 1;
}
}
}
@@ -169,15 +253,15 @@ class _LinkToPageMenuState extends State {
);
}
},
- future: AppBackendService().fetchViews(widget.layoutType),
+ future: items,
);
}
String _iconName(ViewPB viewPB) {
switch (viewPB.layout) {
- case ViewLayoutTypePB.Grid:
+ case ViewLayoutPB.Grid:
return 'editor/grid';
- case ViewLayoutTypePB.Board:
+ case ViewLayoutPB.Board:
return 'editor/board';
default:
throw Exception('Unknown layout type');
diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/board/board_menu_item.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/board/board_menu_item.dart
index c81d394f7d..8390f9201f 100644
--- a/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/board/board_menu_item.dart
+++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/board/board_menu_item.dart
@@ -1,6 +1,6 @@
import 'package:appflowy/generated/locale_keys.g.dart';
import 'package:appflowy/plugins/document/presentation/plugins/base/link_to_page_widget.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_editor/appflowy_editor.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flowy_infra/image.dart';
@@ -24,7 +24,7 @@ SelectionMenuItem boardMenuItem = SelectionMenuItem(
editorState,
menuService,
context,
- ViewLayoutTypePB.Board,
+ ViewLayoutPB.Board,
);
},
);
diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/board/board_view_menu_item.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/board/board_view_menu_item.dart
index b25fe52679..56c55ba1bd 100644
--- a/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/board/board_view_menu_item.dart
+++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/board/board_view_menu_item.dart
@@ -1,4 +1,4 @@
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_editor/appflowy_editor.dart';
import 'package:appflowy/generated/locale_keys.g.dart';
import 'package:appflowy/plugins/document/application/prelude.dart';
@@ -23,17 +23,17 @@ SelectionMenuItem boardViewMenuItem(DocumentBloc documentBloc) =>
// TODO(a-wallen): Translate keywords.
keywords: ['board', 'kanban'],
handler: (editorState, menuService, context) async {
- if (!documentBloc.view.hasAppId()) {
+ if (!documentBloc.view.hasParentViewId()) {
return;
}
- final appId = documentBloc.view.appId;
+ final appId = documentBloc.view.parentViewId;
final service = AppBackendService();
final result = (await service.createView(
appId: appId,
name: LocaleKeys.menuAppHeader_defaultNewPageName.tr(),
- layoutType: ViewLayoutTypePB.Board,
+ layoutType: ViewLayoutPB.Board,
))
.getLeftOrNull();
@@ -42,15 +42,14 @@ SelectionMenuItem boardViewMenuItem(DocumentBloc documentBloc) =>
return;
}
- final app =
- (await service.readApp(appId: result.appId)).getLeftOrNull();
+ final app = (await service.getView(result.viewId)).getLeftOrNull();
// We should show an error dialog.
if (app == null) {
return;
}
- final view =
- (await service.getView(result.appId, result.id)).getLeftOrNull();
+ final view = (await service.getChildView(result.viewId, result.id))
+ .getLeftOrNull();
// As this.
if (view == null) {
return;
diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/grid/grid_menu_item.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/grid/grid_menu_item.dart
index b79162027b..09806b4eb0 100644
--- a/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/grid/grid_menu_item.dart
+++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/grid/grid_menu_item.dart
@@ -1,6 +1,6 @@
import 'package:appflowy/generated/locale_keys.g.dart';
import 'package:appflowy/plugins/document/presentation/plugins/base/link_to_page_widget.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_editor/appflowy_editor.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flowy_infra/image.dart';
@@ -23,7 +23,7 @@ SelectionMenuItem gridMenuItem = SelectionMenuItem(
editorState,
menuService,
context,
- ViewLayoutTypePB.Grid,
+ ViewLayoutPB.Grid,
);
},
);
diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/grid/grid_view_menu_item.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/grid/grid_view_menu_item.dart
index 2dc030d547..96cc8861cb 100644
--- a/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/grid/grid_view_menu_item.dart
+++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/grid/grid_view_menu_item.dart
@@ -2,7 +2,7 @@ import 'package:appflowy/generated/locale_keys.g.dart';
import 'package:appflowy/plugins/document/application/doc_bloc.dart';
import 'package:appflowy/plugins/document/presentation/plugins/base/insert_page_command.dart';
import 'package:appflowy/workspace/application/app/app_service.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_editor/appflowy_editor.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flowy_infra/image.dart';
@@ -22,17 +22,17 @@ SelectionMenuItem gridViewMenuItem(DocumentBloc documentBloc) =>
},
keywords: ['grid'],
handler: (editorState, menuService, context) async {
- if (!documentBloc.view.hasAppId()) {
+ if (!documentBloc.view.hasParentViewId()) {
return;
}
- final appId = documentBloc.view.appId;
+ final appId = documentBloc.view.parentViewId;
final service = AppBackendService();
final result = (await service.createView(
appId: appId,
name: LocaleKeys.menuAppHeader_defaultNewPageName.tr(),
- layoutType: ViewLayoutTypePB.Grid,
+ layoutType: ViewLayoutPB.Grid,
))
.getLeftOrNull();
@@ -41,15 +41,14 @@ SelectionMenuItem gridViewMenuItem(DocumentBloc documentBloc) =>
return;
}
- final app =
- (await service.readApp(appId: result.appId)).getLeftOrNull();
+ final app = (await service.getView(result.viewId)).getLeftOrNull();
// We should show an error dialog.
if (app == null) {
return;
}
- final view =
- (await service.getView(result.appId, result.id)).getLeftOrNull();
+ final view = (await service.getChildView(result.viewId, result.id))
+ .getLeftOrNull();
// As this.
if (view == null) {
return;
diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/share/share_button.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/share/share_button.dart
index 84e9b179cb..ffdd9a5f23 100644
--- a/frontend/appflowy_flutter/lib/plugins/document/presentation/share/share_button.dart
+++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/share/share_button.dart
@@ -13,7 +13,7 @@ import 'package:file_picker/file_picker.dart';
import 'package:flowy_infra_ui/widget/rounded_button.dart';
import 'package:appflowy_backend/log.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-document/entities.pb.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
diff --git a/frontend/appflowy_flutter/lib/plugins/trash/application/trash_bloc.dart b/frontend/appflowy_flutter/lib/plugins/trash/application/trash_bloc.dart
index 2a744817e4..f653fbfe11 100644
--- a/frontend/appflowy_flutter/lib/plugins/trash/application/trash_bloc.dart
+++ b/frontend/appflowy_flutter/lib/plugins/trash/application/trash_bloc.dart
@@ -1,6 +1,6 @@
import 'package:dartz/dartz.dart';
import 'package:appflowy_backend/log.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/trash.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/trash.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
@@ -31,8 +31,7 @@ class TrashBloc extends Bloc {
final result = await _service.putback(e.trashId);
await _handleResult(result, emit);
}, delete: (e) async {
- final result =
- await _service.deleteViews([Tuple2(e.trash.id, e.trash.ty)]);
+ final result = await _service.deleteViews([e.trash.id]);
await _handleResult(result, emit);
}, deleteAll: (e) async {
final result = await _service.deleteAll();
diff --git a/frontend/appflowy_flutter/lib/plugins/trash/application/trash_listener.dart b/frontend/appflowy_flutter/lib/plugins/trash/application/trash_listener.dart
index 5df20b27e9..bca3bd3f74 100644
--- a/frontend/appflowy_flutter/lib/plugins/trash/application/trash_listener.dart
+++ b/frontend/appflowy_flutter/lib/plugins/trash/application/trash_listener.dart
@@ -3,9 +3,9 @@ import 'dart:typed_data';
import 'package:appflowy/core/folder_notification.dart';
import 'package:dartz/dartz.dart';
import 'package:appflowy_backend/protobuf/flowy-notification/subject.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/notification.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/notification.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/trash.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/trash.pb.dart';
import 'package:appflowy_backend/rust_stream.dart';
typedef TrashUpdatedCallback = void Function(
@@ -19,7 +19,10 @@ class TrashListener {
void start({TrashUpdatedCallback? trashUpdated}) {
_trashUpdated = trashUpdated;
- _parser = FolderNotificationParser(callback: _observableCallback);
+ _parser = FolderNotificationParser(
+ id: "trash",
+ callback: _observableCallback,
+ );
_subscription =
RustStreamReceiver.listen((observable) => _parser?.parse(observable));
}
diff --git a/frontend/appflowy_flutter/lib/plugins/trash/application/trash_service.dart b/frontend/appflowy_flutter/lib/plugins/trash/application/trash_service.dart
index 5b2e350435..29fb9f13c1 100644
--- a/frontend/appflowy_flutter/lib/plugins/trash/application/trash_service.dart
+++ b/frontend/appflowy_flutter/lib/plugins/trash/application/trash_service.dart
@@ -2,7 +2,7 @@ import 'dart:async';
import 'package:dartz/dartz.dart';
import 'package:appflowy_backend/dispatch/dispatch.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/trash.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/trash.pb.dart';
class TrashService {
Future> readTrash() {
@@ -15,12 +15,9 @@ class TrashService {
return FolderEventPutbackTrash(id).send();
}
- Future> deleteViews(
- List> trashList) {
- final items = trashList.map((trash) {
- return TrashIdPB.create()
- ..id = trash.value1
- ..ty = trash.value2;
+ Future> deleteViews(List trash) {
+ final items = trash.map((trash) {
+ return TrashIdPB.create()..id = trash;
});
final ids = RepeatedTrashIdPB(items: items);
diff --git a/frontend/appflowy_flutter/lib/plugins/trash/src/trash_cell.dart b/frontend/appflowy_flutter/lib/plugins/trash/src/trash_cell.dart
index a46cca2a3b..01f33edbfd 100644
--- a/frontend/appflowy_flutter/lib/plugins/trash/src/trash_cell.dart
+++ b/frontend/appflowy_flutter/lib/plugins/trash/src/trash_cell.dart
@@ -2,7 +2,7 @@ import 'package:flowy_infra/image.dart';
import 'package:flowy_infra_ui/style_widget/icon_button.dart';
import 'package:flowy_infra_ui/style_widget/text.dart';
import 'package:flowy_infra_ui/widget/spacing.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/trash.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/trash.pb.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:fixnum/fixnum.dart' as $fixnum;
diff --git a/frontend/appflowy_flutter/lib/plugins/util.dart b/frontend/appflowy_flutter/lib/plugins/util.dart
index f689511c44..f128b3ad99 100644
--- a/frontend/appflowy_flutter/lib/plugins/util.dart
+++ b/frontend/appflowy_flutter/lib/plugins/util.dart
@@ -2,7 +2,7 @@ import 'package:appflowy/startup/plugin/plugin.dart';
import 'package:appflowy/workspace/application/view/view_listener.dart';
import 'package:dartz/dartz.dart';
import 'package:appflowy_backend/log.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:flutter/material.dart';
class ViewPluginNotifier extends PluginNotifier> {
diff --git a/frontend/appflowy_flutter/lib/startup/deps_resolver.dart b/frontend/appflowy_flutter/lib/startup/deps_resolver.dart
index b8e219125e..8e0f4cbbc0 100644
--- a/frontend/appflowy_flutter/lib/startup/deps_resolver.dart
+++ b/frontend/appflowy_flutter/lib/startup/deps_resolver.dart
@@ -8,7 +8,6 @@ import 'package:appflowy/user/application/user_listener.dart';
import 'package:appflowy/user/application/user_service.dart';
import 'package:appflowy/util/file_picker/file_picker_impl.dart';
import 'package:appflowy/util/file_picker/file_picker_service.dart';
-import 'package:appflowy/workspace/application/app/prelude.dart';
import 'package:appflowy/plugins/document/application/prelude.dart';
import 'package:appflowy/workspace/application/settings/settings_location_cubit.dart';
import 'package:appflowy/workspace/application/user/prelude.dart';
@@ -22,8 +21,7 @@ import 'package:appflowy/user/presentation/router.dart';
import 'package:appflowy/plugins/trash/application/prelude.dart';
import 'package:appflowy/workspace/presentation/home/home_stack.dart';
import 'package:appflowy/workspace/presentation/home/menu/menu.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/app.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-user/user_profile.pb.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:get_it/get_it.dart';
@@ -122,11 +120,6 @@ void _resolveFolderDeps(GetIt getIt) {
(user, _) => SettingsUserViewBloc(user),
);
- // AppPB
- getIt.registerFactoryParam(
- (app, _) => AppBloc(app: app),
- );
-
// trash
getIt.registerLazySingleton(() => TrashService());
getIt.registerLazySingleton(() => TrashListener());
diff --git a/frontend/appflowy_flutter/lib/startup/plugin/plugin.dart b/frontend/appflowy_flutter/lib/startup/plugin/plugin.dart
index 2a50dda5e0..f6d6cad9fa 100644
--- a/frontend/appflowy_flutter/lib/startup/plugin/plugin.dart
+++ b/frontend/appflowy_flutter/lib/startup/plugin/plugin.dart
@@ -3,7 +3,7 @@ library flowy_plugin;
import 'package:appflowy/startup/plugin/plugin.dart';
import 'package:appflowy/startup/startup.dart';
import 'package:appflowy/workspace/presentation/home/home_stack.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:flutter/widgets.dart';
export "./src/sandbox.dart";
@@ -52,7 +52,7 @@ abstract class PluginBuilder {
PluginType get pluginType;
- ViewLayoutTypePB? get layoutType => ViewLayoutTypePB.Document;
+ ViewLayoutPB? get layoutType => ViewLayoutPB.Document;
}
abstract class PluginConfig {
diff --git a/frontend/appflowy_flutter/lib/startup/tasks/rust_sdk.dart b/frontend/appflowy_flutter/lib/startup/tasks/rust_sdk.dart
index 9507e9fd0c..994e018f21 100644
--- a/frontend/appflowy_flutter/lib/startup/tasks/rust_sdk.dart
+++ b/frontend/appflowy_flutter/lib/startup/tasks/rust_sdk.dart
@@ -36,10 +36,10 @@ Future appFlowyDocumentDirectory() async {
switch (integrationEnv()) {
case IntegrationMode.develop:
Directory documentsDir = await getApplicationDocumentsDirectory();
- return Directory(path.join(documentsDir.path, 'flowy_dev')).create();
+ return Directory(path.join(documentsDir.path, 'data_dev')).create();
case IntegrationMode.release:
Directory documentsDir = await getApplicationDocumentsDirectory();
- return Directory(path.join(documentsDir.path, 'flowy')).create();
+ return Directory(path.join(documentsDir.path, 'data')).create();
case IntegrationMode.test:
return Directory(path.join(Directory.current.path, '.sandbox'));
}
diff --git a/frontend/appflowy_flutter/lib/user/application/user_listener.dart b/frontend/appflowy_flutter/lib/user/application/user_listener.dart
index 8dc182a48b..b9bda5e042 100644
--- a/frontend/appflowy_flutter/lib/user/application/user_listener.dart
+++ b/frontend/appflowy_flutter/lib/user/application/user_listener.dart
@@ -2,12 +2,12 @@ import 'dart:async';
import 'package:appflowy/core/folder_notification.dart';
import 'package:appflowy/core/user_notification.dart';
import 'package:dartz/dartz.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/workspace.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/workspace.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
import 'dart:typed_data';
import 'package:flowy_infra/notifier.dart';
import 'package:appflowy_backend/protobuf/flowy-notification/protobuf.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/notification.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/notification.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-user/user_profile.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-user/notification.pb.dart'
as user;
@@ -119,13 +119,6 @@ class UserWorkspaceListener {
) {
switch (ty) {
case FolderNotification.DidCreateWorkspace:
- case FolderNotification.DidDeleteWorkspace:
- result.fold(
- (payload) => _workspacesChangedNotifier?.value =
- left(RepeatedWorkspacePB.fromBuffer(payload).items),
- (error) => _workspacesChangedNotifier?.value = right(error),
- );
- break;
case FolderNotification.DidUpdateWorkspaceSetting:
result.fold(
(payload) => _settingChangedNotifier?.value =
diff --git a/frontend/appflowy_flutter/lib/user/application/user_service.dart b/frontend/appflowy_flutter/lib/user/application/user_service.dart
index 295c1c4f01..7edf49a4ee 100644
--- a/frontend/appflowy_flutter/lib/user/application/user_service.dart
+++ b/frontend/appflowy_flutter/lib/user/application/user_service.dart
@@ -3,15 +3,16 @@ import 'dart:async';
import 'package:dartz/dartz.dart';
import 'package:appflowy_backend/dispatch/dispatch.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/workspace.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/workspace.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-user/user_profile.pb.dart';
+import 'package:fixnum/fixnum.dart';
class UserBackendService {
UserBackendService({
required this.userId,
});
- final String userId;
+ final Int64 userId;
static Future> getCurrentUserProfile() {
return UserEventGetUserProfile().send();
diff --git a/frontend/appflowy_flutter/lib/user/presentation/router.dart b/frontend/appflowy_flutter/lib/user/presentation/router.dart
index 665b261b66..8e08a0ce11 100644
--- a/frontend/appflowy_flutter/lib/user/presentation/router.dart
+++ b/frontend/appflowy_flutter/lib/user/presentation/router.dart
@@ -10,7 +10,7 @@ import 'package:flowy_infra/time/duration.dart';
import 'package:flowy_infra_ui/widget/route/animation.dart';
import 'package:appflowy_backend/protobuf/flowy-user/protobuf.dart'
show UserProfilePB;
-import 'package:appflowy_backend/protobuf/flowy-folder/protobuf.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/protobuf.dart';
import 'package:flutter/material.dart';
class AuthRouter {
diff --git a/frontend/appflowy_flutter/lib/user/presentation/skip_log_in_screen.dart b/frontend/appflowy_flutter/lib/user/presentation/skip_log_in_screen.dart
index 84f9fa441f..3aefed7c6c 100644
--- a/frontend/appflowy_flutter/lib/user/presentation/skip_log_in_screen.dart
+++ b/frontend/appflowy_flutter/lib/user/presentation/skip_log_in_screen.dart
@@ -6,7 +6,7 @@ import 'package:flowy_infra_ui/flowy_infra_ui.dart';
import 'package:appflowy_backend/dispatch/dispatch.dart';
import 'package:appflowy_backend/log.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/protobuf.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/protobuf.dart';
import 'package:appflowy_backend/protobuf/flowy-user/user_profile.pb.dart';
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
diff --git a/frontend/appflowy_flutter/lib/user/presentation/welcome_screen.dart b/frontend/appflowy_flutter/lib/user/presentation/welcome_screen.dart
index 5e21d4c69d..78c23b2521 100644
--- a/frontend/appflowy_flutter/lib/user/presentation/welcome_screen.dart
+++ b/frontend/appflowy_flutter/lib/user/presentation/welcome_screen.dart
@@ -5,7 +5,7 @@ import 'package:flowy_infra/theme_extension.dart';
import 'package:flowy_infra_ui/style_widget/scrolling/styled_list.dart';
import 'package:flowy_infra_ui/style_widget/button.dart';
import 'package:flowy_infra_ui/widget/error_page.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/workspace.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/workspace.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-user/user_profile.pb.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
diff --git a/frontend/appflowy_flutter/lib/workspace/application/app/app_bloc.dart b/frontend/appflowy_flutter/lib/workspace/application/app/app_bloc.dart
index df9d203974..6132d3870d 100644
--- a/frontend/appflowy_flutter/lib/workspace/application/app/app_bloc.dart
+++ b/frontend/appflowy_flutter/lib/workspace/application/app/app_bloc.dart
@@ -7,8 +7,7 @@ import 'package:appflowy/workspace/application/app/app_service.dart';
import 'package:appflowy/workspace/presentation/home/menu/menu.dart';
import 'package:expandable/expandable.dart';
import 'package:appflowy_backend/log.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/app.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
import 'package:flutter/foundation.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
@@ -21,10 +20,10 @@ class AppBloc extends Bloc {
final AppBackendService appService;
final AppListener appListener;
- AppBloc({required AppPB app})
+ AppBloc({required ViewPB view})
: appService = AppBackendService(),
- appListener = AppListener(appId: app.id),
- super(AppState.initial(app)) {
+ appListener = AppListener(viewId: view.id),
+ super(AppState.initial(view)) {
on((event, emit) async {
await event.map(initial: (e) async {
_startListening();
@@ -41,10 +40,10 @@ class AppBloc extends Bloc {
await _renameView(e, emit);
}, appDidUpdate: (e) async {
final latestCreatedView = state.latestCreatedView;
- final views = e.app.belongings.items;
+ final views = e.app.belongings;
AppState newState = state.copyWith(
views: views,
- app: e.app,
+ view: e.app,
);
if (latestCreatedView != null) {
final index =
@@ -70,7 +69,7 @@ class AppBloc extends Bloc {
Future _renameView(Rename e, Emitter emit) async {
final result =
- await appService.updateApp(appId: state.app.id, name: e.newName);
+ await appService.updateApp(appId: state.view.id, name: e.newName);
result.fold(
(l) => emit(state.copyWith(successOrFailure: left(unit))),
(error) => emit(state.copyWith(successOrFailure: right(error))),
@@ -79,7 +78,7 @@ class AppBloc extends Bloc {
// Delete the current app
Future _deleteApp(Emitter emit) async {
- final result = await appService.delete(appId: state.app.id);
+ final result = await appService.delete(viewId: state.view.id);
result.fold(
(unit) => emit(state.copyWith(successOrFailure: left(unit))),
(error) => emit(state.copyWith(successOrFailure: right(error))),
@@ -96,7 +95,7 @@ class AppBloc extends Bloc {
Future _createView(CreateView value, Emitter emit) async {
final result = await appService.createView(
- appId: state.app.id,
+ appId: state.view.id,
name: value.name,
desc: value.desc ?? "",
layoutType: value.pluginBuilder.layoutType!,
@@ -122,7 +121,7 @@ class AppBloc extends Bloc {
}
Future _loadViews(Emitter emit) async {
- final viewsOrFailed = await appService.getViews(appId: state.app.id);
+ final viewsOrFailed = await appService.getViews(viewId: state.view.id);
viewsOrFailed.fold(
(views) => emit(state.copyWith(views: views)),
(error) {
@@ -150,34 +149,34 @@ class AppEvent with _$AppEvent {
const factory AppEvent.delete() = DeleteApp;
const factory AppEvent.deleteView(String viewId) = DeleteView;
const factory AppEvent.rename(String newName) = Rename;
- const factory AppEvent.appDidUpdate(AppPB app) = AppDidUpdate;
+ const factory AppEvent.appDidUpdate(ViewPB app) = AppDidUpdate;
}
@freezed
class AppState with _$AppState {
const factory AppState({
- required AppPB app,
+ required ViewPB view,
required List views,
ViewPB? latestCreatedView,
required Either successOrFailure,
}) = _AppState;
- factory AppState.initial(AppPB app) => AppState(
- app: app,
- views: app.belongings.items,
+ factory AppState.initial(ViewPB view) => AppState(
+ view: view,
+ views: view.belongings,
successOrFailure: left(unit),
);
}
class AppViewDataContext extends ChangeNotifier {
- final String appId;
+ final String viewId;
final ValueNotifier> _viewsNotifier = ValueNotifier([]);
final ValueNotifier _selectedViewNotifier = ValueNotifier(null);
VoidCallback? _menuSharedStateListener;
ExpandableController expandController =
ExpandableController(initialExpanded: false);
- AppViewDataContext({required this.appId}) {
+ AppViewDataContext({required this.viewId}) {
_setLatestView(getIt().latestOpenView);
_menuSharedStateListener =
getIt().addLatestViewListener((view) {
diff --git a/frontend/appflowy_flutter/lib/workspace/application/app/app_listener.dart b/frontend/appflowy_flutter/lib/workspace/application/app/app_listener.dart
index 1186068c75..af3875b1ec 100644
--- a/frontend/appflowy_flutter/lib/workspace/application/app/app_listener.dart
+++ b/frontend/appflowy_flutter/lib/workspace/application/app/app_listener.dart
@@ -5,12 +5,11 @@ import 'package:dartz/dartz.dart';
import 'package:appflowy_backend/log.dart';
import 'package:appflowy_backend/protobuf/flowy-notification/subject.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/app.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/notification.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/notification.pb.dart';
import 'package:appflowy_backend/rust_stream.dart';
-typedef AppDidUpdateCallback = void Function(AppPB app);
+typedef AppDidUpdateCallback = void Function(ViewPB app);
typedef ViewsDidChangeCallback = void Function(
Either, FlowyError> viewsOrFailed);
@@ -18,15 +17,15 @@ class AppListener {
StreamSubscription? _subscription;
AppDidUpdateCallback? _updated;
FolderNotificationParser? _parser;
- String appId;
+ String viewId;
AppListener({
- required this.appId,
+ required this.viewId,
});
void start({AppDidUpdateCallback? onAppUpdated}) {
_updated = onAppUpdated;
- _parser = FolderNotificationParser(id: appId, callback: _handleCallback);
+ _parser = FolderNotificationParser(id: viewId, callback: _handleCallback);
_subscription =
RustStreamReceiver.listen((observable) => _parser?.parse(observable));
}
@@ -34,11 +33,12 @@ class AppListener {
void _handleCallback(
FolderNotification ty, Either result) {
switch (ty) {
- case FolderNotification.DidUpdateApp:
+ case FolderNotification.DidUpdateView:
+ case FolderNotification.DidUpdateChildViews:
if (_updated != null) {
result.fold(
(payload) {
- final app = AppPB.fromBuffer(payload);
+ final app = ViewPB.fromBuffer(payload);
_updated!(app);
},
(error) => Log.error(error),
diff --git a/frontend/appflowy_flutter/lib/workspace/application/app/app_service.dart b/frontend/appflowy_flutter/lib/workspace/application/app/app_service.dart
index c54d2ad602..5cc0e0439c 100644
--- a/frontend/appflowy_flutter/lib/workspace/application/app/app_service.dart
+++ b/frontend/appflowy_flutter/lib/workspace/application/app/app_service.dart
@@ -1,25 +1,18 @@
import 'dart:async';
import 'dart:convert';
-import 'package:appflowy_backend/protobuf/flowy-folder/workspace.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/workspace.pb.dart';
import 'package:dartz/dartz.dart';
import 'package:appflowy_backend/dispatch/dispatch.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/app.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
class AppBackendService {
- Future> readApp({required String appId}) {
- final payload = AppIdPB.create()..value = appId;
-
- return FolderEventReadApp(payload).send();
- }
-
Future> createView({
required String appId,
required String name,
String? desc,
- required ViewLayoutTypePB layoutType,
+ required ViewLayoutPB layoutType,
/// The initial data should be the JSON of the document.
/// Currently, only support create document with initial data.
@@ -51,20 +44,20 @@ class AppBackendService {
return FolderEventCreateView(payload).send();
}
- Future, FlowyError>> getViews({required String appId}) {
- final payload = AppIdPB.create()..value = appId;
+ Future, FlowyError>> getViews({required String viewId}) {
+ final payload = ViewIdPB.create()..value = viewId;
- return FolderEventReadApp(payload).send().then((result) {
+ return FolderEventReadView(payload).send().then((result) {
return result.fold(
- (app) => left(app.belongings.items),
+ (app) => left(app.belongings),
(error) => right(error),
);
});
}
- Future> delete({required String appId}) {
- final request = AppIdPB.create()..value = appId;
- return FolderEventDeleteApp(request).send();
+ Future> delete({required String viewId}) {
+ final request = RepeatedViewIdPB.create()..items.add(viewId);
+ return FolderEventDeleteView(request).send();
}
Future> deleteView({required String viewId}) {
@@ -72,14 +65,14 @@ class AppBackendService {
return FolderEventDeleteView(request).send();
}
- Future> updateApp(
+ Future> updateApp(
{required String appId, String? name}) {
- UpdateAppPayloadPB payload = UpdateAppPayloadPB.create()..appId = appId;
+ var payload = UpdateViewPayloadPB.create()..viewId = appId;
if (name != null) {
payload.name = name;
}
- return FolderEventUpdateApp(payload).send();
+ return FolderEventUpdateView(payload).send();
}
Future> moveView({
@@ -96,22 +89,22 @@ class AppBackendService {
return FolderEventMoveItem(payload).send();
}
- Future>>> fetchViews(
- ViewLayoutTypePB layoutType) async {
- final result = >>[];
+ Future>>> fetchViews(
+ ViewLayoutPB layoutType) async {
+ final result = >>[];
return FolderEventReadCurrentWorkspace().send().then((value) async {
final workspaces = value.getLeftOrNull();
if (workspaces != null) {
- final apps = workspaces.workspace.apps.items;
- for (var app in apps) {
- final views = await getViews(appId: app.id).then(
+ final views = workspaces.workspace.views;
+ for (var view in views) {
+ final childViews = await getViews(viewId: view.id).then(
(value) => value
.getLeftOrNull>()
?.where((e) => e.layout == layoutType)
.toList(),
);
- if (views != null && views.isNotEmpty) {
- result.add(Tuple2(app, views));
+ if (childViews != null && childViews.isNotEmpty) {
+ result.add(Tuple2(view, childViews));
}
}
}
@@ -120,14 +113,21 @@ class AppBackendService {
}
Future> getView(
- String appID,
String viewID,
) async {
- final payload = AppIdPB.create()..value = appID;
- return FolderEventReadApp(payload).send().then((result) {
+ final payload = ViewIdPB.create()..value = viewID;
+ return FolderEventReadView(payload).send();
+ }
+
+ Future> getChildView(
+ String viewID,
+ String childViewID,
+ ) async {
+ final payload = ViewIdPB.create()..value = viewID;
+ return FolderEventReadView(payload).send().then((result) {
return result.fold(
(app) => left(
- app.belongings.items.firstWhere((e) => e.id == viewID),
+ app.belongings.firstWhere((e) => e.id == childViewID),
),
(error) => right(error),
);
diff --git a/frontend/appflowy_flutter/lib/workspace/application/appearance.dart b/frontend/appflowy_flutter/lib/workspace/application/appearance.dart
index b340b8612e..d7dbc10377 100644
--- a/frontend/appflowy_flutter/lib/workspace/application/appearance.dart
+++ b/frontend/appflowy_flutter/lib/workspace/application/appearance.dart
@@ -226,6 +226,7 @@ class AppearanceSettingsState with _$AppearanceSettingsState {
fontColor: theme.surface,
),
),
+ scaffoldBackgroundColor: theme.surface,
scrollbarTheme: ScrollbarThemeData(
thumbColor: MaterialStateProperty.all(theme.shader3),
thickness: MaterialStateProperty.resolveWith((states) {
@@ -292,10 +293,12 @@ class AppearanceSettingsState with _$AppearanceSettingsState {
tint7: theme.tint7,
tint8: theme.tint8,
tint9: theme.tint9,
+ textColor: theme.text,
greyHover: theme.hoverBG1,
greySelect: theme.bg3,
- lightGreyHover: theme.shader6,
+ lightGreyHover: theme.hoverBG3,
toggleOffFill: theme.shader5,
+ progressBarBGcolor: theme.progressBarBGcolor,
code: _getFontStyle(
fontFamily: monospaceFontFamily,
fontColor: theme.shader3,
@@ -309,7 +312,7 @@ class AppearanceSettingsState with _$AppearanceSettingsState {
fontFamily: fontFamily,
fontSize: FontSizes.s11,
fontWeight: FontWeight.w400,
- fontColor: theme.shader3,
+ fontColor: theme.hint,
),
)
],
diff --git a/frontend/appflowy_flutter/lib/workspace/application/home/home_bloc.dart b/frontend/appflowy_flutter/lib/workspace/application/home/home_bloc.dart
index 9163710b96..53b7328122 100644
--- a/frontend/appflowy_flutter/lib/workspace/application/home/home_bloc.dart
+++ b/frontend/appflowy_flutter/lib/workspace/application/home/home_bloc.dart
@@ -3,8 +3,8 @@ import 'package:flowy_infra/time/duration.dart';
import 'package:appflowy_backend/log.dart';
import 'package:appflowy_backend/protobuf/flowy-error/code.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/workspace.pb.dart'
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/workspace.pb.dart'
show WorkspaceSettingPB;
import 'package:appflowy_backend/protobuf/flowy-user/user_profile.pb.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
diff --git a/frontend/appflowy_flutter/lib/workspace/application/home/home_service.dart b/frontend/appflowy_flutter/lib/workspace/application/home/home_service.dart
index 51c57ca576..dd1c19b2b7 100644
--- a/frontend/appflowy_flutter/lib/workspace/application/home/home_service.dart
+++ b/frontend/appflowy_flutter/lib/workspace/application/home/home_service.dart
@@ -1,14 +1,14 @@
import 'dart:async';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:dartz/dartz.dart';
import 'package:appflowy_backend/dispatch/dispatch.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/app.pb.dart';
class HomeService {
- Future> readApp({required String appId}) {
- final payload = AppIdPB.create()..value = appId;
+ Future> readApp({required String appId}) {
+ final payload = ViewIdPB.create()..value = appId;
- return FolderEventReadApp(payload).send();
+ return FolderEventReadView(payload).send();
}
}
diff --git a/frontend/appflowy_flutter/lib/workspace/application/home/home_setting_bloc.dart b/frontend/appflowy_flutter/lib/workspace/application/home/home_setting_bloc.dart
index 44e8518760..d24ca6f8a4 100644
--- a/frontend/appflowy_flutter/lib/workspace/application/home/home_setting_bloc.dart
+++ b/frontend/appflowy_flutter/lib/workspace/application/home/home_setting_bloc.dart
@@ -1,7 +1,7 @@
import 'package:appflowy/user/application/user_listener.dart';
import 'package:appflowy/workspace/application/appearance.dart';
import 'package:appflowy/workspace/application/edit_panel/edit_context.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/workspace.pb.dart'
+import 'package:appflowy_backend/protobuf/flowy-folder2/workspace.pb.dart'
show WorkspaceSettingPB;
import 'package:appflowy_backend/protobuf/flowy-user/user_profile.pb.dart';
import 'package:dartz/dartz.dart';
diff --git a/frontend/appflowy_flutter/lib/workspace/application/menu/menu_bloc.dart b/frontend/appflowy_flutter/lib/workspace/application/menu/menu_bloc.dart
index c687938652..54c126b221 100644
--- a/frontend/appflowy_flutter/lib/workspace/application/menu/menu_bloc.dart
+++ b/frontend/appflowy_flutter/lib/workspace/application/menu/menu_bloc.dart
@@ -2,11 +2,11 @@ import 'dart:async';
import 'package:appflowy/startup/plugin/plugin.dart';
import 'package:appflowy/workspace/application/workspace/workspace_listener.dart';
import 'package:appflowy/workspace/application/workspace/workspace_service.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:dartz/dartz.dart';
import 'package:appflowy_backend/log.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/app.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/workspace.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/workspace.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-user/user_profile.pb.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -38,24 +38,35 @@ class MenuBloc extends Bloc {
emit(state.copyWith(plugin: e.plugin));
},
createApp: (_CreateApp event) async {
- await _performActionOnCreateApp(event, emit);
+ final result = await _workspaceService.createApp(
+ name: event.name,
+ desc: event.desc ?? "",
+ );
+ result.fold(
+ (app) => {},
+ (error) {
+ Log.error(error);
+ emit(state.copyWith(successOrFailure: right(error)));
+ },
+ );
},
didReceiveApps: (e) async {
emit(e.appsOrFail.fold(
- (apps) => state.copyWith(apps: apps, successOrFailure: left(unit)),
+ (views) =>
+ state.copyWith(views: views, successOrFailure: left(unit)),
(err) => state.copyWith(successOrFailure: right(err)),
));
},
moveApp: (_MoveApp value) {
- if (state.apps.length > value.fromIndex) {
- final app = state.apps[value.fromIndex];
+ if (state.views.length > value.fromIndex) {
+ final view = state.views[value.fromIndex];
_workspaceService.moveApp(
- appId: app.id,
+ appId: view.id,
fromIndex: value.fromIndex,
toIndex: value.toIndex);
- final apps = List.from(state.apps);
+ final apps = List.from(state.views);
apps.insert(value.toIndex, apps.removeAt(value.fromIndex));
- emit(state.copyWith(apps: apps));
+ emit(state.copyWith(views: apps));
}
},
);
@@ -68,24 +79,11 @@ class MenuBloc extends Bloc {
return super.close();
}
- Future _performActionOnCreateApp(
- _CreateApp event, Emitter emit) async {
- final result = await _workspaceService.createApp(
- name: event.name, desc: event.desc ?? "");
- result.fold(
- (app) => {},
- (error) {
- Log.error(error);
- emit(state.copyWith(successOrFailure: right(error)));
- },
- );
- }
-
// ignore: unused_element
Future _fetchApps(Emitter emit) async {
final appsOrFail = await _workspaceService.getApps();
emit(appsOrFail.fold(
- (apps) => state.copyWith(apps: apps),
+ (views) => state.copyWith(views: views),
(error) {
Log.error(error);
return state.copyWith(successOrFailure: right(error));
@@ -93,7 +91,7 @@ class MenuBloc extends Bloc {
));
}
- void _handleAppsOrFail(Either, FlowyError> appsOrFail) {
+ void _handleAppsOrFail(Either, FlowyError> appsOrFail) {
appsOrFail.fold(
(apps) => add(MenuEvent.didReceiveApps(left(apps))),
(error) => add(MenuEvent.didReceiveApps(right(error))),
@@ -108,19 +106,19 @@ class MenuEvent with _$MenuEvent {
const factory MenuEvent.createApp(String name, {String? desc}) = _CreateApp;
const factory MenuEvent.moveApp(int fromIndex, int toIndex) = _MoveApp;
const factory MenuEvent.didReceiveApps(
- Either, FlowyError> appsOrFail) = _ReceiveApps;
+ Either, FlowyError> appsOrFail) = _ReceiveApps;
}
@freezed
class MenuState with _$MenuState {
const factory MenuState({
- required List apps,
+ required List views,
required Either successOrFailure,
required Plugin plugin,
}) = _MenuState;
factory MenuState.initial(WorkspacePB workspace) => MenuState(
- apps: workspace.apps.items,
+ views: workspace.views,
successOrFailure: left(unit),
plugin: makePlugin(pluginType: PluginType.blank),
);
diff --git a/frontend/appflowy_flutter/lib/workspace/application/menu/menu_user_bloc.dart b/frontend/appflowy_flutter/lib/workspace/application/menu/menu_user_bloc.dart
index f12627dca9..d6bb398d9c 100644
--- a/frontend/appflowy_flutter/lib/workspace/application/menu/menu_user_bloc.dart
+++ b/frontend/appflowy_flutter/lib/workspace/application/menu/menu_user_bloc.dart
@@ -1,7 +1,7 @@
import 'package:appflowy/user/application/user_listener.dart';
import 'package:appflowy/user/application/user_service.dart';
import 'package:appflowy_backend/log.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/workspace.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/workspace.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-user/user_profile.pb.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
diff --git a/frontend/appflowy_flutter/lib/workspace/application/menu/menu_view_section_bloc.dart b/frontend/appflowy_flutter/lib/workspace/application/menu/menu_view_section_bloc.dart
index fdf82a91a2..2f275f1fef 100644
--- a/frontend/appflowy_flutter/lib/workspace/application/menu/menu_view_section_bloc.dart
+++ b/frontend/appflowy_flutter/lib/workspace/application/menu/menu_view_section_bloc.dart
@@ -3,7 +3,7 @@ import 'dart:async';
import 'package:appflowy/workspace/application/app/app_bloc.dart';
import 'package:appflowy/workspace/application/app/app_service.dart';
import 'package:appflowy_backend/log.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
diff --git a/frontend/appflowy_flutter/lib/workspace/application/settings/settings_file_exporter_cubit.dart b/frontend/appflowy_flutter/lib/workspace/application/settings/settings_file_exporter_cubit.dart
index 04be1f61bf..5e75f744b5 100644
--- a/frontend/appflowy_flutter/lib/workspace/application/settings/settings_file_exporter_cubit.dart
+++ b/frontend/appflowy_flutter/lib/workspace/application/settings/settings_file_exporter_cubit.dart
@@ -1,26 +1,26 @@
-import 'package:appflowy_backend/protobuf/flowy-folder/app.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
class SettingsFileExportState {
SettingsFileExportState({
- required this.apps,
+ required this.views,
}) {
initialize();
}
- List apps;
+ List views;
List expanded = [];
List selectedApps = [];
List> selectedItems = [];
SettingsFileExportState copyWith({
- List? apps,
+ List? views,
List? expanded,
List? selectedApps,
List>? selectedItems,
}) {
final state = SettingsFileExportState(
- apps: apps ?? this.apps,
+ views: views ?? this.views,
);
state.expanded = expanded ?? this.expanded;
state.selectedApps = selectedApps ?? this.selectedApps;
@@ -29,17 +29,17 @@ class SettingsFileExportState {
}
void initialize() {
- expanded = apps.map((e) => true).toList();
- selectedApps = apps.map((e) => true).toList();
+ expanded = views.map((e) => true).toList();
+ selectedApps = views.map((e) => true).toList();
selectedItems =
- apps.map((e) => e.belongings.items.map((e) => true).toList()).toList();
+ views.map((e) => e.belongings.map((e) => true).toList()).toList();
}
}
class SettingsFileExporterCubit extends Cubit {
SettingsFileExporterCubit({
- required List apps,
- }) : super(SettingsFileExportState(apps: apps));
+ required List views,
+ }) : super(SettingsFileExportState(views: views));
void selectOrDeselectItem(int outerIndex, int innerIndex) {
final selectedItems = state.selectedItems;
@@ -55,7 +55,7 @@ class SettingsFileExporterCubit extends Cubit {
}
Map> fetchSelectedPages() {
- final apps = state.apps;
+ final apps = state.views;
final selectedItems = state.selectedItems;
Map> result = {};
for (var i = 0; i < selectedItems.length; i++) {
@@ -63,7 +63,7 @@ class SettingsFileExporterCubit extends Cubit {
final ids = [];
for (var j = 0; j < selectedItem.length; j++) {
if (selectedItem[j]) {
- ids.add(apps[i].belongings.items[j].id);
+ ids.add(apps[i].belongings[j].id);
}
}
if (ids.isNotEmpty) {
diff --git a/frontend/appflowy_flutter/lib/workspace/application/view/view_bloc.dart b/frontend/appflowy_flutter/lib/workspace/application/view/view_bloc.dart
index 1951fd0a88..05bd1ca178 100644
--- a/frontend/appflowy_flutter/lib/workspace/application/view/view_bloc.dart
+++ b/frontend/appflowy_flutter/lib/workspace/application/view/view_bloc.dart
@@ -1,7 +1,7 @@
import 'package:appflowy/workspace/application/view/view_listener.dart';
import 'package:appflowy/workspace/application/view/view_service.dart';
import 'package:dartz/dartz.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
diff --git a/frontend/appflowy_flutter/lib/workspace/application/view/view_ext.dart b/frontend/appflowy_flutter/lib/workspace/application/view/view_ext.dart
index 200ce23686..069cc8e07f 100644
--- a/frontend/appflowy_flutter/lib/workspace/application/view/view_ext.dart
+++ b/frontend/appflowy_flutter/lib/workspace/application/view/view_ext.dart
@@ -1,6 +1,6 @@
import 'package:appflowy/startup/plugin/plugin.dart';
import 'package:flowy_infra/image.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:flutter/material.dart';
enum FlowyPlugin {
@@ -42,13 +42,13 @@ extension ViewExtension on ViewPB {
PluginType get pluginType {
switch (layout) {
- case ViewLayoutTypePB.Board:
+ case ViewLayoutPB.Board:
return PluginType.board;
- case ViewLayoutTypePB.Calendar:
+ case ViewLayoutPB.Calendar:
return PluginType.calendar;
- case ViewLayoutTypePB.Document:
+ case ViewLayoutPB.Document:
return PluginType.editor;
- case ViewLayoutTypePB.Grid:
+ case ViewLayoutPB.Grid:
return PluginType.grid;
}
diff --git a/frontend/appflowy_flutter/lib/workspace/application/view/view_listener.dart b/frontend/appflowy_flutter/lib/workspace/application/view/view_listener.dart
index 1af4a8e57b..38de59e4cc 100644
--- a/frontend/appflowy_flutter/lib/workspace/application/view/view_listener.dart
+++ b/frontend/appflowy_flutter/lib/workspace/application/view/view_listener.dart
@@ -3,9 +3,9 @@ import 'dart:typed_data';
import 'package:appflowy/core/folder_notification.dart';
import 'package:dartz/dartz.dart';
import 'package:appflowy_backend/protobuf/flowy-notification/subject.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/notification.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/notification.pb.dart';
import 'package:appflowy_backend/rust_stream.dart';
import 'package:flowy_infra/notifier.dart';
diff --git a/frontend/appflowy_flutter/lib/workspace/application/view/view_service.dart b/frontend/appflowy_flutter/lib/workspace/application/view/view_service.dart
index 7524a39e2c..7facfcec3f 100644
--- a/frontend/appflowy_flutter/lib/workspace/application/view/view_service.dart
+++ b/frontend/appflowy_flutter/lib/workspace/application/view/view_service.dart
@@ -1,7 +1,7 @@
import 'dart:async';
import 'package:dartz/dartz.dart';
import 'package:appflowy_backend/dispatch/dispatch.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
class ViewService {
diff --git a/frontend/appflowy_flutter/lib/workspace/application/workspace/welcome_bloc.dart b/frontend/appflowy_flutter/lib/workspace/application/workspace/welcome_bloc.dart
index aef0464cee..8700297a84 100644
--- a/frontend/appflowy_flutter/lib/workspace/application/workspace/welcome_bloc.dart
+++ b/frontend/appflowy_flutter/lib/workspace/application/workspace/welcome_bloc.dart
@@ -1,7 +1,7 @@
import 'package:appflowy/user/application/user_listener.dart';
import 'package:appflowy/user/application/user_service.dart';
import 'package:appflowy_backend/log.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/workspace.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/workspace.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
diff --git a/frontend/appflowy_flutter/lib/workspace/application/workspace/workspace_listener.dart b/frontend/appflowy_flutter/lib/workspace/application/workspace/workspace_listener.dart
index 73019c34e1..4346d1f226 100644
--- a/frontend/appflowy_flutter/lib/workspace/application/workspace/workspace_listener.dart
+++ b/frontend/appflowy_flutter/lib/workspace/application/workspace/workspace_listener.dart
@@ -1,16 +1,16 @@
import 'dart:async';
import 'dart:typed_data';
import 'package:appflowy/core/folder_notification.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:dartz/dartz.dart';
import 'package:flowy_infra/notifier.dart';
import 'package:appflowy_backend/protobuf/flowy-user/protobuf.dart'
show UserProfilePB;
-import 'package:appflowy_backend/protobuf/flowy-folder/app.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/workspace.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/workspace.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/notification.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/notification.pb.dart';
-typedef AppListNotifyValue = Either, FlowyError>;
+typedef AppListNotifyValue = Either, FlowyError>;
typedef WorkspaceNotifyValue = Either;
class WorkspaceListener {
@@ -55,10 +55,10 @@ class WorkspaceListener {
(error) => _workspaceUpdatedNotifier?.value = right(error),
);
break;
- case FolderNotification.DidUpdateWorkspaceApps:
+ case FolderNotification.DidUpdateWorkspaceViews:
result.fold(
(payload) => _appsChangedNotifier?.value =
- left(RepeatedAppPB.fromBuffer(payload).items),
+ left(RepeatedViewPB.fromBuffer(payload).items),
(error) => _appsChangedNotifier?.value = right(error),
);
break;
diff --git a/frontend/appflowy_flutter/lib/workspace/application/workspace/workspace_service.dart b/frontend/appflowy_flutter/lib/workspace/application/workspace/workspace_service.dart
index 425154f353..a3e075f84e 100644
--- a/frontend/appflowy_flutter/lib/workspace/application/workspace/workspace_service.dart
+++ b/frontend/appflowy_flutter/lib/workspace/application/workspace/workspace_service.dart
@@ -4,10 +4,14 @@ import 'package:dartz/dartz.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:appflowy_backend/dispatch/dispatch.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/app.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart'
- show MoveFolderItemPayloadPB, MoveFolderItemType;
-import 'package:appflowy_backend/protobuf/flowy-folder/workspace.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart'
+ show
+ CreateViewPayloadPB,
+ MoveFolderItemPayloadPB,
+ MoveFolderItemType,
+ ViewLayoutPB,
+ ViewPB;
+import 'package:appflowy_backend/protobuf/flowy-folder2/workspace.pb.dart';
import 'package:appflowy/generated/locale_keys.g.dart';
@@ -16,13 +20,15 @@ class WorkspaceService {
WorkspaceService({
required this.workspaceId,
});
- Future> createApp(
+ Future> createApp(
{required String name, String? desc}) {
- final payload = CreateAppPayloadPB.create()
+ final payload = CreateViewPayloadPB.create()
+ ..belongToId = workspaceId
..name = name
- ..workspaceId = workspaceId
- ..desc = desc ?? "";
- return FolderEventCreateApp(payload).send();
+ ..desc = desc ?? ""
+ ..layout = ViewLayoutPB.Document;
+
+ return FolderEventCreateView(payload).send();
}
Future> getWorkspace() {
@@ -44,7 +50,7 @@ class WorkspaceService {
});
}
- Future, FlowyError>> getApps() {
+ Future, FlowyError>> getApps() {
final payload = WorkspaceIdPB.create()..value = workspaceId;
return FolderEventReadWorkspaceApps(payload).send().then((result) {
return result.fold(
diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/home/home_screen.dart b/frontend/appflowy_flutter/lib/workspace/presentation/home/home_screen.dart
index 57ca5182aa..b35da5cf9a 100644
--- a/frontend/appflowy_flutter/lib/workspace/presentation/home/home_screen.dart
+++ b/frontend/appflowy_flutter/lib/workspace/presentation/home/home_screen.dart
@@ -10,7 +10,7 @@ import 'package:appflowy/workspace/presentation/home/hotkeys.dart';
import 'package:appflowy/workspace/presentation/widgets/edit_panel/panel_animation.dart';
import 'package:appflowy/workspace/presentation/widgets/float_bubble/question_bubble.dart';
import 'package:appflowy_backend/log.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/protobuf.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/protobuf.dart';
import 'package:appflowy_backend/protobuf/flowy-user/protobuf.dart'
show UserProfilePB;
import 'package:flowy_infra_ui/style_widget/container.dart';
@@ -261,10 +261,10 @@ class HomeScreenStackAdaptor extends HomeStackDelegate {
@override
void didDeleteStackWidget(ViewPB view, int? index) {
final homeService = HomeService();
- homeService.readApp(appId: view.appId).then((result) {
+ homeService.readApp(appId: view.parentViewId).then((result) {
result.fold(
- (appPB) {
- final List views = appPB.belongings.items;
+ (parentView) {
+ final List views = parentView.belongings;
if (views.isNotEmpty) {
var lastView = views.last;
if (index != null && index != 0 && views.length > index - 1) {
diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/home/home_stack.dart b/frontend/appflowy_flutter/lib/workspace/presentation/home/home_stack.dart
index e73577d818..1511965942 100644
--- a/frontend/appflowy_flutter/lib/workspace/presentation/home/home_stack.dart
+++ b/frontend/appflowy_flutter/lib/workspace/presentation/home/home_stack.dart
@@ -5,7 +5,7 @@ import 'package:appflowy/startup/startup.dart';
import 'package:appflowy/workspace/presentation/home/home_sizes.dart';
import 'package:appflowy/workspace/presentation/home/navigation.dart';
import 'package:appflowy/workspace/presentation/home/toast.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:flowy_infra_ui/style_widget/extension.dart';
import 'package:flowy_infra_ui/widget/spacing.dart';
import 'package:flutter/material.dart';
diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/app/create_button.dart b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/app/create_button.dart
index be6fddf37a..96e00499ee 100644
--- a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/app/create_button.dart
+++ b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/app/create_button.dart
@@ -20,12 +20,15 @@ class NewAppButton extends StatelessWidget {
hoverColor: Colors.transparent,
fontColor: Theme.of(context).colorScheme.tertiary,
onPressed: () async => await _showCreateAppDialog(context),
- heading: Theme.of(context).brightness == Brightness.light
- ? svgWidget("home/new_app", size: const Size(16, 16))
- : svgWidget(
- "home/new_app_dark",
- size: const Size(16, 16),
- ),
+ heading: Container(
+ width: 16,
+ height: 16,
+ decoration: BoxDecoration(
+ shape: BoxShape.circle,
+ color: Theme.of(context).colorScheme.surface,
+ ),
+ child: svgWidget("home/new_app"),
+ ),
padding: EdgeInsets.symmetric(horizontal: Insets.l, vertical: 20),
);
diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/app/header/header.dart b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/app/header/header.dart
index c2161066c9..6137a49d7f 100644
--- a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/app/header/header.dart
+++ b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/app/header/header.dart
@@ -2,12 +2,12 @@ import 'dart:convert';
import 'package:appflowy/workspace/presentation/widgets/dialogs.dart';
import 'package:appflowy/workspace/presentation/widgets/pop_up_action.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_popover/appflowy_popover.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:expandable/expandable.dart';
import 'package:flowy_infra/icon_data.dart';
import 'package:flowy_infra_ui/style_widget/text.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/app.pb.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:appflowy/workspace/application/app/app_bloc.dart';
@@ -19,7 +19,7 @@ import '../menu_app.dart';
import 'add_button.dart';
class MenuAppHeader extends StatelessWidget {
- final AppPB app;
+ final ViewPB app;
const MenuAppHeader(
this.app, {
Key? key,
@@ -83,7 +83,7 @@ class MenuAppHeader extends StatelessWidget {
case AppDisclosureAction.rename:
NavigatorTextFieldDialog(
title: LocaleKeys.menuAppHeader_renameDialog.tr(),
- value: context.read().state.app.name,
+ value: context.read().state.view.name,
confirm: (newValue) {
context.read().add(AppEvent.rename(newValue));
},
@@ -166,8 +166,8 @@ class AppActionList extends StatelessWidget {
onSecondaryTap: () {
controller.show();
},
- child: BlocSelector(
- selector: (state) => state.app,
+ child: BlocSelector(
+ selector: (state) => state.view,
builder: (context, app) => FlowyText.medium(
app.name,
overflow: TextOverflow.ellipsis,
diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/app/header/import/import_panel.dart b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/app/header/import/import_panel.dart
index f1996af8f8..540e0d8b1d 100644
--- a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/app/header/import/import_panel.dart
+++ b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/app/header/import/import_panel.dart
@@ -45,7 +45,7 @@ enum _ImportType {
case _ImportType.markdownOrText:
return 'Text & Markdown';
default:
- assert(false, 'Unsupported Type ${this}');
+ assert(false, 'Unsupported Type $this');
return '';
}
}
@@ -55,7 +55,7 @@ enum _ImportType {
case _ImportType.markdownOrText:
return svgWidget('editor/documents');
default:
- assert(false, 'Unsupported Type ${this}');
+ assert(false, 'Unsupported Type $this');
return null;
}
}
@@ -65,7 +65,7 @@ enum _ImportType {
case _ImportType.markdownOrText:
return ['md', 'txt'];
default:
- assert(false, 'Unsupported Type ${this}');
+ assert(false, 'Unsupported Type $this');
return [];
}
}
diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/app/menu_app.dart b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/app/menu_app.dart
index 653f67fa5a..cf48af34fe 100644
--- a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/app/menu_app.dart
+++ b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/app/menu_app.dart
@@ -1,6 +1,6 @@
import 'package:appflowy/workspace/presentation/home/menu/menu.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:expandable/expandable.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/app.pb.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:appflowy/startup/startup.dart';
@@ -9,8 +9,8 @@ import 'package:provider/provider.dart';
import 'section/section.dart';
class MenuApp extends StatefulWidget {
- final AppPB app;
- const MenuApp(this.app, {Key? key}) : super(key: key);
+ final ViewPB view;
+ const MenuApp(this.view, {Key? key}) : super(key: key);
@override
State createState() => _MenuAppState();
@@ -21,7 +21,7 @@ class _MenuAppState extends State {
@override
void initState() {
- viewDataContext = AppViewDataContext(appId: widget.app.id);
+ viewDataContext = AppViewDataContext(viewId: widget.view.id);
super.initState();
}
@@ -31,7 +31,7 @@ class _MenuAppState extends State {
providers: [
BlocProvider(
create: (context) {
- final appBloc = getIt(param1: widget.app);
+ final appBloc = AppBloc(view: widget.view);
appBloc.add(const AppEvent.initial());
return appBloc;
},
@@ -86,7 +86,7 @@ class _MenuAppState extends State {
iconPadding: EdgeInsets.zero,
hasIcon: false,
),
- header: MenuAppHeader(widget.app),
+ header: MenuAppHeader(widget.view),
expanded: ViewSection(appViewData: viewDataContext),
collapsed: const SizedBox(),
),
diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/app/section/item.dart b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/app/section/item.dart
index e6d328d797..bbe1e607f6 100644
--- a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/app/section/item.dart
+++ b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/app/section/item.dart
@@ -7,7 +7,7 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flowy_infra_ui/style_widget/hover.dart';
import 'package:flowy_infra_ui/style_widget/text.dart';
import 'package:flowy_infra_ui/widget/spacing.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:styled_widget/styled_widget.dart';
diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/menu.dart b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/menu.dart
index 11cfa05042..b0be6b6be2 100644
--- a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/menu.dart
+++ b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/menu.dart
@@ -8,8 +8,8 @@ import 'package:appflowy/workspace/application/home/home_setting_bloc.dart';
import 'package:appflowy/workspace/application/menu/menu_bloc.dart';
import 'package:appflowy/workspace/presentation/home/home_sizes.dart';
import 'package:appflowy/workspace/presentation/home/home_stack.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/workspace.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/workspace.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-user/protobuf.dart'
show UserProfilePB;
import 'package:easy_localization/easy_localization.dart';
@@ -112,7 +112,7 @@ class HomeMenu extends StatelessWidget {
child: ScrollConfiguration(
behavior: const ScrollBehavior().copyWith(scrollbars: false),
child: BlocSelector>(
- selector: (state) => state.apps
+ selector: (state) => state.views
.map((app) => MenuApp(app, key: ValueKey(app.id)))
.toList(),
builder: (context, menuItems) {
diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/settings/widgets/settings_appearance_view.dart b/frontend/appflowy_flutter/lib/workspace/presentation/settings/widgets/settings_appearance_view.dart
index 81149f9f34..acbec83aa2 100644
--- a/frontend/appflowy_flutter/lib/workspace/presentation/settings/widgets/settings_appearance_view.dart
+++ b/frontend/appflowy_flutter/lib/workspace/presentation/settings/widgets/settings_appearance_view.dart
@@ -59,7 +59,7 @@ class ThemeSetting extends StatelessWidget {
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
- _themeItemButton(context, BuiltInTheme.light),
+ _themeItemButton(context, BuiltInTheme.defaultTheme),
_themeItemButton(context, BuiltInTheme.dandelion),
_themeItemButton(context, BuiltInTheme.lavender),
],
diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/settings/widgets/settings_file_exporter_widget.dart b/frontend/appflowy_flutter/lib/workspace/presentation/settings/widgets/settings_file_exporter_widget.dart
index 2b075d16fc..9d490d1b69 100644
--- a/frontend/appflowy_flutter/lib/workspace/presentation/settings/widgets/settings_file_exporter_widget.dart
+++ b/frontend/appflowy_flutter/lib/workspace/presentation/settings/widgets/settings_file_exporter_widget.dart
@@ -6,7 +6,7 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
import 'package:appflowy_backend/dispatch/dispatch.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pbserver.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/workspace.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/workspace.pb.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -73,9 +73,9 @@ class _FileExporterWidgetState extends State {
snapshot.connectionState == ConnectionState.done) {
final workspaces = snapshot.data?.getLeftOrNull();
if (workspaces != null) {
- final apps = workspaces.workspace.apps.items;
+ final views = workspaces.workspace.views;
return BlocProvider(
- create: (_) => SettingsFileExporterCubit(apps: apps),
+ create: (_) => SettingsFileExporterCubit(views: views),
child: const _ExpandedList(),
);
}
@@ -118,7 +118,7 @@ class _ExpandedListState extends State<_ExpandedList> {
}
List _buildChildren(BuildContext context) {
- final apps = context.read().state.apps;
+ final apps = context.read().state.views;
List children = [];
for (var i = 0; i < apps.length; i++) {
children.add(_buildExpandedItem(context, i));
@@ -128,14 +128,14 @@ class _ExpandedListState extends State<_ExpandedList> {
Widget _buildExpandedItem(BuildContext context, int index) {
final state = context.read().state;
- final apps = state.apps;
+ final apps = state.views;
final expanded = state.expanded;
final selectedItems = state.selectedItems;
final isExpaned = expanded[index] == true;
List expandedChildren = [];
if (isExpaned) {
for (var i = 0; i < selectedItems[index].length; i++) {
- final name = apps[index].belongings.items[i].name;
+ final name = apps[index].belongings[i].name;
final checkbox = CheckboxListTile(
value: selectedItems[index][i],
onChanged: (value) {
diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/widgets/dialogs.dart b/frontend/appflowy_flutter/lib/workspace/presentation/widgets/dialogs.dart
index 681bd58cf3..88b3395e57 100644
--- a/frontend/appflowy_flutter/lib/workspace/presentation/widgets/dialogs.dart
+++ b/frontend/appflowy_flutter/lib/workspace/presentation/widgets/dialogs.dart
@@ -119,7 +119,7 @@ class _CreateFlowyAlertDialog extends State {
FlowyText.medium(
widget.title,
fontSize: FontSizes.s16,
- color: Theme.of(context).disabledColor,
+ color: Theme.of(context).colorScheme.tertiary,
),
],
if (widget.confirm != null) ...[
diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/widgets/left_bar_item.dart b/frontend/appflowy_flutter/lib/workspace/presentation/widgets/left_bar_item.dart
index e697262492..5bf6052516 100644
--- a/frontend/appflowy_flutter/lib/workspace/presentation/widgets/left_bar_item.dart
+++ b/frontend/appflowy_flutter/lib/workspace/presentation/widgets/left_bar_item.dart
@@ -1,7 +1,7 @@
import 'package:appflowy/workspace/application/view/view_listener.dart';
import 'package:appflowy/workspace/application/view/view_service.dart';
import 'package:appflowy_backend/log.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:flutter/material.dart';
class ViewLeftBarItem extends StatefulWidget {
diff --git a/frontend/appflowy_flutter/macos/Podfile b/frontend/appflowy_flutter/macos/Podfile
index e806f574bd..7d7672e61f 100644
--- a/frontend/appflowy_flutter/macos/Podfile
+++ b/frontend/appflowy_flutter/macos/Podfile
@@ -1,4 +1,4 @@
-platform :osx, '10.11'
+platform :osx, '10.14'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
diff --git a/frontend/appflowy_flutter/macos/Runner.xcodeproj/project.pbxproj b/frontend/appflowy_flutter/macos/Runner.xcodeproj/project.pbxproj
index 5634f236ea..7e9dfada08 100644
--- a/frontend/appflowy_flutter/macos/Runner.xcodeproj/project.pbxproj
+++ b/frontend/appflowy_flutter/macos/Runner.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 51;
+ objectVersion = 54;
objects = {
/* Begin PBXAggregateTarget section */
@@ -202,7 +202,7 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0920;
- LastUpgradeCheck = 0930;
+ LastUpgradeCheck = 1300;
ORGANIZATIONNAME = "";
TargetAttributes = {
33CC10EC2044A3C60003C045 = {
@@ -255,6 +255,7 @@
/* Begin PBXShellScriptBuildPhase section */
3399D490228B24CF009A79C7 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -403,7 +404,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- MACOSX_DEPLOYMENT_TARGET = 10.11;
+ MACOSX_DEPLOYMENT_TARGET = 10.14;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = macosx;
STRIP_STYLE = "non-global";
@@ -489,7 +490,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- MACOSX_DEPLOYMENT_TARGET = 10.11;
+ MACOSX_DEPLOYMENT_TARGET = 10.14;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
@@ -537,7 +538,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- MACOSX_DEPLOYMENT_TARGET = 10.11;
+ MACOSX_DEPLOYMENT_TARGET = 10.14;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = macosx;
STRIP_STYLE = "non-global";
diff --git a/frontend/appflowy_flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/frontend/appflowy_flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index 60b6e605fe..656a4d8b2a 100644
--- a/frontend/appflowy_flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/frontend/appflowy_flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -1,6 +1,6 @@
=2.18.0 <3.0.0"
- flutter: ">=3.3.0"
+ sdk: ">=2.19.0 <3.0.0"
+ flutter: ">=3.7.0"
dependencies:
flutter:
sdk: flutter
- appflowy_editor:
- path: ../appflowy_editor
- flowy_infra:
+ appflowy_editor: ^0.1.4
+ flowy_infra:
path: ../flowy_infra
flowy_infra_ui:
path: ../flowy_infra_ui
- appflowy_popover:
+ appflowy_popover:
path: ../appflowy_popover
- flutter_math_fork: ^0.6.3+1
+ flutter_math_fork:
+ git:
+ url: https://github.com/LucasXu0/flutter_math_fork.git
+ ref: master
highlight: ^0.7.0
shared_preferences: ^2.0.15
- flutter_svg: ^1.1.1+1
+ flutter_svg: ^2.0.2
provider: ^6.0.3
dev_dependencies:
diff --git a/frontend/appflowy_flutter/packages/appflowy_popover/lib/src/mask.dart b/frontend/appflowy_flutter/packages/appflowy_popover/lib/src/mask.dart
index 4a79a1731f..d63e486a1e 100644
--- a/frontend/appflowy_flutter/packages/appflowy_popover/lib/src/mask.dart
+++ b/frontend/appflowy_flutter/packages/appflowy_popover/lib/src/mask.dart
@@ -17,7 +17,7 @@ class RootOverlayEntry {
bool asBarrier,
) {
_entries[newState] = OverlayEntryContext(entry, newState, asBarrier);
- Overlay.of(context)?.insert(entry);
+ Overlay.of(context).insert(entry);
}
bool contains(PopoverState oldState) {
diff --git a/frontend/appflowy_flutter/packages/flowy_infra/lib/colorscheme/colorscheme.dart b/frontend/appflowy_flutter/packages/flowy_infra/lib/colorscheme/colorscheme.dart
index b109dbad8d..704bd9337d 100644
--- a/frontend/appflowy_flutter/packages/flowy_infra/lib/colorscheme/colorscheme.dart
+++ b/frontend/appflowy_flutter/packages/flowy_infra/lib/colorscheme/colorscheme.dart
@@ -1,9 +1,9 @@
-import 'package:flowy_infra/colorscheme/lavender.dart';
import 'package:flutter/material.dart';
import 'package:flowy_infra/theme.dart';
import 'default_colorscheme.dart';
import 'dandelion.dart';
+import 'lavender.dart';
/// A map of all the built-in themes.
///
@@ -11,7 +11,7 @@ import 'dandelion.dart';
/// the first is for light mode, and the second is for dark mode.
const Map> themeMap = {
- BuiltInTheme.light: [
+ BuiltInTheme.defaultTheme: [
DefaultColorScheme.light(),
DefaultColorScheme.dark(),
],
@@ -69,9 +69,11 @@ abstract class FlowyColorScheme {
final Color hoverBG1;
//action item hover effect
final Color hoverBG2;
+ final Color hoverBG3;
//the text color when it is hovered
final Color hoverFG;
final Color questionBubbleBG;
+ final Color progressBarBGcolor;
const FlowyColorScheme({
required this.surface,
@@ -114,8 +116,10 @@ abstract class FlowyColorScheme {
required this.onPrimary,
required this.hoverBG1,
required this.hoverBG2,
+ required this.hoverBG3,
required this.hoverFG,
required this.questionBubbleBG,
+ required this.progressBarBGcolor,
});
factory FlowyColorScheme.builtIn(String themeName, Brightness brightness) {
diff --git a/frontend/appflowy_flutter/packages/flowy_infra/lib/colorscheme/dandelion.dart b/frontend/appflowy_flutter/packages/flowy_infra/lib/colorscheme/dandelion.dart
index 00655eef21..c5ec13a48f 100644
--- a/frontend/appflowy_flutter/packages/flowy_infra/lib/colorscheme/dandelion.dart
+++ b/frontend/appflowy_flutter/packages/flowy_infra/lib/colorscheme/dandelion.dart
@@ -12,6 +12,7 @@ const _lightShader1 = Color(0xff333333);
const _lightShader3 = Color(0xff828282);
const _lightShader6 = Color(0xfff2f2f2);
const _lightMain1 = Color(0xffe21f74);
+const _lightTint9 = Color(0xffe1fbff);
const _darkShader1 = Color(0xff131720);
const _darkShader2 = Color(0xff1A202C);
@@ -48,7 +49,7 @@ class DandelionColorScheme extends FlowyColorScheme {
tint6: const Color(0xfff5ffdc),
tint7: const Color(0xffddffd6),
tint8: const Color(0xffdefff1),
- tint9: const Color(0xffe1fbff),
+ tint9: _lightTint9,
main1: _lightMain1,
main2: const Color.fromARGB(255, 224, 25, 111),
shadow: _black,
@@ -63,8 +64,10 @@ class DandelionColorScheme extends FlowyColorScheme {
onPrimary: _white,
hoverBG1: _lightBg2,
hoverBG2: _lightHover,
+ hoverBG3: _lightShader6,
hoverFG: _lightShader1,
questionBubbleBG: _lightSelector,
+ progressBarBGcolor: _lightTint9,
);
const DandelionColorScheme.dark()
@@ -86,15 +89,15 @@ class DandelionColorScheme extends FlowyColorScheme {
bg2: _black,
bg3: const Color(0xff4f4f4f),
bg4: const Color(0xff2c144b),
- tint1: const Color(0xffc3adff),
- tint2: const Color(0xffffadf9),
- tint3: const Color(0xffffadad),
- tint4: const Color(0xffffcfad),
- tint5: const Color(0xfffffead),
- tint6: const Color(0xffe6ffa3),
- tint7: const Color(0xffbcffad),
- tint8: const Color(0xffadffe2),
- tint9: const Color(0xffade4ff),
+ tint1: const Color(0xff8738F5),
+ tint2: const Color(0xffE6336E),
+ tint3: const Color(0xffFF2D9E),
+ tint4: const Color(0xffE9973E),
+ tint5: const Color(0xffFBF000),
+ tint6: const Color(0xffC0F000),
+ tint7: const Color(0xff15F74E),
+ tint8: const Color(0xff00F0E2),
+ tint9: const Color(0xff00BCF0),
main1: _darkMain1,
main2: const Color.fromARGB(255, 224, 25, 111),
shadow: _black,
@@ -109,7 +112,9 @@ class DandelionColorScheme extends FlowyColorScheme {
onPrimary: _darkShader1,
hoverBG1: _darkMain1,
hoverBG2: _darkMain1,
+ hoverBG3: _darkShader3,
hoverFG: _darkShader1,
questionBubbleBG: _darkShader3,
+ progressBarBGcolor: _darkShader3,
);
}
diff --git a/frontend/appflowy_flutter/packages/flowy_infra/lib/colorscheme/default_colorscheme.dart b/frontend/appflowy_flutter/packages/flowy_infra/lib/colorscheme/default_colorscheme.dart
index 590b5c7bc6..a11c453865 100644
--- a/frontend/appflowy_flutter/packages/flowy_infra/lib/colorscheme/default_colorscheme.dart
+++ b/frontend/appflowy_flutter/packages/flowy_infra/lib/colorscheme/default_colorscheme.dart
@@ -12,6 +12,7 @@ const _lightShader1 = Color(0xff333333);
const _lightShader3 = Color(0xff828282);
const _lightShader6 = Color(0xfff2f2f2);
const _lightMain1 = Color(0xff00bcf0);
+const _lightTint9 = Color(0xffe1fbff);
const _darkShader1 = Color(0xff131720);
const _darkShader2 = Color(0xff1A202C);
const _darkShader3 = Color(0xff363D49);
@@ -47,7 +48,7 @@ class DefaultColorScheme extends FlowyColorScheme {
tint6: const Color(0xfff5ffdc),
tint7: const Color(0xffddffd6),
tint8: const Color(0xffdefff1),
- tint9: const Color(0xffe1fbff),
+ tint9: _lightTint9,
main1: _lightMain1,
main2: const Color(0xff00b7ea),
shadow: _black,
@@ -64,6 +65,8 @@ class DefaultColorScheme extends FlowyColorScheme {
hoverBG2: _lightHover,
hoverFG: _lightShader1,
questionBubbleBG: _lightSelector,
+ hoverBG3: _lightShader6,
+ progressBarBGcolor: _lightTint9,
);
const DefaultColorScheme.dark()
@@ -108,7 +111,9 @@ class DefaultColorScheme extends FlowyColorScheme {
onPrimary: _darkShader1,
hoverBG1: _darkMain1,
hoverBG2: _darkMain1,
+ hoverBG3: _darkShader3,
hoverFG: _darkShader1,
questionBubbleBG: _darkShader3,
+ progressBarBGcolor: _darkShader3,
);
}
diff --git a/frontend/appflowy_flutter/packages/flowy_infra/lib/colorscheme/lavender.dart b/frontend/appflowy_flutter/packages/flowy_infra/lib/colorscheme/lavender.dart
index 83f0557349..19f00ae4d4 100644
--- a/frontend/appflowy_flutter/packages/flowy_infra/lib/colorscheme/lavender.dart
+++ b/frontend/appflowy_flutter/packages/flowy_infra/lib/colorscheme/lavender.dart
@@ -13,6 +13,7 @@ const _lightShader1 = Color(0xff333333);
const _lightShader3 = Color(0xff828282);
const _lightShader6 = Color(0xfff2f2f2);
const _lightMain1 = Color(0xffA652FB);
+const _lightTint9 = Color(0xffe1fbff);
const _darkShader1 = Color(0xff131720);
const _darkShader2 = Color(0xff1A202C);
@@ -49,7 +50,7 @@ class LavenderColorScheme extends FlowyColorScheme {
tint6: const Color(0xfff5ffdc),
tint7: const Color(0xffddffd6),
tint8: const Color(0xffdefff1),
- tint9: const Color(0xffe1fbff),
+ tint9: _lightTint9,
main1: _lightMain1,
main2: const Color(0xff9327FF),
shadow: _black,
@@ -64,8 +65,10 @@ class LavenderColorScheme extends FlowyColorScheme {
onPrimary: _white,
hoverBG1: _lightBg2,
hoverBG2: _lightHover,
+ hoverBG3: _lightShader6,
hoverFG: _lightShader1,
questionBubbleBG: _lightSelector,
+ progressBarBGcolor: _lightTint9,
);
const LavenderColorScheme.dark()
@@ -87,15 +90,15 @@ class LavenderColorScheme extends FlowyColorScheme {
bg2: _black,
bg3: const Color(0xff4f4f4f),
bg4: const Color(0xff2c144b),
- tint1: const Color(0xffc3adff),
- tint2: const Color(0xffffadf9),
- tint3: const Color(0xffffadad),
- tint4: const Color(0xffffcfad),
- tint5: const Color(0xfffffead),
- tint6: const Color(0xffe6ffa3),
- tint7: const Color(0xffbcffad),
- tint8: const Color(0xffadffe2),
- tint9: const Color(0xffade4ff),
+ tint1: const Color(0xff8738F5),
+ tint2: const Color(0xffE6336E),
+ tint3: const Color(0xffFF2D9E),
+ tint4: const Color(0xffE9973E),
+ tint5: const Color(0xffFBF000),
+ tint6: const Color(0xffC0F000),
+ tint7: const Color(0xff15F74E),
+ tint8: const Color(0xff00F0E2),
+ tint9: const Color(0xff00BCF0),
main1: _darkMain1,
main2: const Color(0xff9327FF),
shadow: _black,
@@ -110,7 +113,9 @@ class LavenderColorScheme extends FlowyColorScheme {
onPrimary: _darkShader1,
hoverBG1: _darkMain1,
hoverBG2: _darkMain1,
+ hoverBG3: _darkShader3,
hoverFG: _darkShader1,
questionBubbleBG: _darkShader3,
+ progressBarBGcolor: _darkShader3,
);
}
diff --git a/frontend/appflowy_flutter/packages/flowy_infra/lib/image.dart b/frontend/appflowy_flutter/packages/flowy_infra/lib/image.dart
index 577e3c182a..0566f207e9 100644
--- a/frontend/appflowy_flutter/packages/flowy_infra/lib/image.dart
+++ b/frontend/appflowy_flutter/packages/flowy_infra/lib/image.dart
@@ -1,6 +1,6 @@
+import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
-import 'package:flutter/material.dart';
/// For icon that needs to change color when it is on hovered
///
@@ -29,9 +29,17 @@ Widget svgWidget(String name, {Size? size, Color? color}) {
if (size != null) {
return SizedBox.fromSize(
size: size,
- child: SvgPicture.asset('assets/images/$name.svg', color: color),
+ child: SvgPicture.asset(
+ 'assets/images/$name.svg',
+ colorFilter:
+ color != null ? ColorFilter.mode(color, BlendMode.srcIn) : null,
+ ),
);
} else {
- return SvgPicture.asset('assets/images/$name.svg', color: color);
+ return SvgPicture.asset(
+ 'assets/images/$name.svg',
+ colorFilter:
+ color != null ? ColorFilter.mode(color, BlendMode.srcIn) : null,
+ );
}
}
diff --git a/frontend/appflowy_flutter/packages/flowy_infra/lib/theme.dart b/frontend/appflowy_flutter/packages/flowy_infra/lib/theme.dart
index 9b07ccb7c4..1f4f3584e1 100644
--- a/frontend/appflowy_flutter/packages/flowy_infra/lib/theme.dart
+++ b/frontend/appflowy_flutter/packages/flowy_infra/lib/theme.dart
@@ -2,9 +2,9 @@ import 'package:flowy_infra/colorscheme/colorscheme.dart';
import 'package:flutter/material.dart';
class BuiltInTheme {
- static const String light = 'light';
- static const String dandelion = 'dandelion';
- static const String lavender = 'lavender';
+ static const String defaultTheme = 'Default';
+ static const String dandelion = 'Dandelion';
+ static const String lavender = 'Lavender';
}
class AppTheme {
diff --git a/frontend/appflowy_flutter/packages/flowy_infra/lib/theme_extension.dart b/frontend/appflowy_flutter/packages/flowy_infra/lib/theme_extension.dart
index bc72732fef..77d8549fe1 100644
--- a/frontend/appflowy_flutter/packages/flowy_infra/lib/theme_extension.dart
+++ b/frontend/appflowy_flutter/packages/flowy_infra/lib/theme_extension.dart
@@ -15,10 +15,12 @@ class AFThemeExtension extends ThemeExtension {
final Color tint8;
final Color tint9;
+ final Color textColor;
final Color greyHover;
final Color greySelect;
final Color lightGreyHover;
final Color toggleOffFill;
+ final Color progressBarBGcolor;
final TextStyle code;
final TextStyle callout;
@@ -40,9 +42,11 @@ class AFThemeExtension extends ThemeExtension {
required this.greySelect,
required this.lightGreyHover,
required this.toggleOffFill,
+ required this.textColor,
required this.code,
required this.callout,
required this.caption,
+ required this.progressBarBGcolor,
});
static AFThemeExtension of(BuildContext context) {
@@ -62,10 +66,12 @@ class AFThemeExtension extends ThemeExtension {
Color? tint7,
Color? tint8,
Color? tint9,
+ Color? textColor,
Color? greyHover,
Color? greySelect,
Color? lightGreyHover,
Color? toggleOffFill,
+ Color? progressBarBGcolor,
TextStyle? code,
TextStyle? callout,
TextStyle? caption,
@@ -82,10 +88,12 @@ class AFThemeExtension extends ThemeExtension {
tint7: tint7 ?? this.tint7,
tint8: tint8 ?? this.tint8,
tint9: tint9 ?? this.tint9,
+ textColor: textColor ?? this.textColor,
greyHover: greyHover ?? this.greyHover,
greySelect: greySelect ?? this.greySelect,
lightGreyHover: lightGreyHover ?? this.lightGreyHover,
toggleOffFill: toggleOffFill ?? this.toggleOffFill,
+ progressBarBGcolor: progressBarBGcolor ?? this.progressBarBGcolor,
code: code ?? this.code,
callout: callout ?? this.callout,
caption: caption ?? this.caption,
@@ -110,10 +118,13 @@ class AFThemeExtension extends ThemeExtension {
tint7: Color.lerp(tint7, other.tint7, t)!,
tint8: Color.lerp(tint8, other.tint8, t)!,
tint9: Color.lerp(tint9, other.tint9, t)!,
+ textColor: Color.lerp(textColor, other.textColor, t)!,
greyHover: Color.lerp(greyHover, other.greyHover, t)!,
greySelect: Color.lerp(greySelect, other.greySelect, t)!,
lightGreyHover: Color.lerp(lightGreyHover, other.lightGreyHover, t)!,
toggleOffFill: Color.lerp(toggleOffFill, other.toggleOffFill, t)!,
+ progressBarBGcolor:
+ Color.lerp(progressBarBGcolor, other.progressBarBGcolor, t)!,
code: other.code,
callout: other.callout,
caption: other.caption,
diff --git a/frontend/appflowy_flutter/packages/flowy_infra/pubspec.yaml b/frontend/appflowy_flutter/packages/flowy_infra/pubspec.yaml
index a361184dbe..4686b7cd00 100644
--- a/frontend/appflowy_flutter/packages/flowy_infra/pubspec.yaml
+++ b/frontend/appflowy_flutter/packages/flowy_infra/pubspec.yaml
@@ -13,12 +13,12 @@ dependencies:
time: '>=2.0.0'
uuid: ">=2.2.2"
textstyle_extensions: '2.0.0-nullsafety'
- flutter_svg: ^1.1.1
+ flutter_svg: ^2.0.2
dev_dependencies:
flutter_test:
sdk: flutter
- flutter_lints: ^2.0.1
+ flutter_lints: ^2.0.1
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
diff --git a/frontend/appflowy_flutter/packages/flowy_infra_ui/lib/flowy_infra_ui.dart b/frontend/appflowy_flutter/packages/flowy_infra_ui/lib/flowy_infra_ui.dart
index adb43b4837..7c830775c8 100644
--- a/frontend/appflowy_flutter/packages/flowy_infra_ui/lib/flowy_infra_ui.dart
+++ b/frontend/appflowy_flutter/packages/flowy_infra_ui/lib/flowy_infra_ui.dart
@@ -18,5 +18,4 @@ export 'style_widget/icon_button.dart';
export 'style_widget/scrolling/styled_scroll_bar.dart';
export '/widget/spacing.dart';
export 'style_widget/scrolling/styled_list.dart';
-export 'style_widget/button.dart';
export 'style_widget/color_picker.dart';
diff --git a/frontend/appflowy_flutter/packages/flowy_infra_ui/lib/style_widget/scrolling/styled_scroll_bar.dart b/frontend/appflowy_flutter/packages/flowy_infra_ui/lib/style_widget/scrolling/styled_scroll_bar.dart
index 2eb27f12a7..61cc750478 100644
--- a/frontend/appflowy_flutter/packages/flowy_infra_ui/lib/style_widget/scrolling/styled_scroll_bar.dart
+++ b/frontend/appflowy_flutter/packages/flowy_infra_ui/lib/style_widget/scrolling/styled_scroll_bar.dart
@@ -138,7 +138,7 @@ class ScrollbarState extends State {
// Handle color
var handleColor = widget.handleColor ??
(Theme.of(context).brightness == Brightness.dark
- ? AFThemeExtension.of(context).greyHover.withOpacity(.2)
+ ? AFThemeExtension.of(context).lightGreyHover
: AFThemeExtension.of(context).greyHover);
// Track color
var trackColor = widget.trackColor ??
diff --git a/frontend/appflowy_flutter/pubspec.lock b/frontend/appflowy_flutter/pubspec.lock
index f6e21acf11..bd3d354c76 100644
--- a/frontend/appflowy_flutter/pubspec.lock
+++ b/frontend/appflowy_flutter/pubspec.lock
@@ -5,21 +5,24 @@ packages:
dependency: transitive
description:
name: _fe_analyzer_shared
- url: "https://pub.dartlang.org"
+ sha256: "4897882604d919befd350648c7f91926a9d5de99e67b455bf0917cc2362f4bb8"
+ url: "https://pub.dev"
source: hosted
version: "47.0.0"
analyzer:
dependency: transitive
description:
name: analyzer
- url: "https://pub.dartlang.org"
+ sha256: "690e335554a8385bc9d787117d9eb52c0c03ee207a607e593de3c9d71b1cfe80"
+ url: "https://pub.dev"
source: hosted
version: "4.7.0"
animations:
dependency: transitive
description:
name: animations
- url: "https://pub.dartlang.org"
+ sha256: fe8a6bdca435f718bb1dc8a11661b2c22504c6da40ef934cee8327ed77934164
+ url: "https://pub.dev"
source: hosted
version: "2.0.7"
appflowy_backend:
@@ -41,10 +44,11 @@ packages:
appflowy_editor:
dependency: "direct main"
description:
- path: "packages/appflowy_editor"
- relative: true
- source: path
- version: "0.0.9"
+ name: appflowy_editor
+ sha256: "2f28ff3ef62bfb02f13e10931fa8c091aa9f804934dfbf5d3d0af0acaf06a240"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.1.4"
appflowy_editor_plugins:
dependency: "direct main"
description:
@@ -60,367 +64,387 @@ packages:
source: path
version: "0.0.1"
archive:
- dependency: transitive
+ dependency: "direct main"
description:
name: archive
- url: "https://pub.dartlang.org"
+ sha256: "80e5141fafcb3361653ce308776cfd7d45e6e9fbb429e14eec571382c0c5fecb"
+ url: "https://pub.dev"
source: hosted
- version: "3.3.0"
+ version: "3.3.2"
args:
dependency: transitive
description:
name: args
- url: "https://pub.dartlang.org"
+ sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440"
+ url: "https://pub.dev"
source: hosted
version: "2.4.0"
async:
dependency: transitive
description:
name: async
- url: "https://pub.dartlang.org"
+ sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0
+ url: "https://pub.dev"
source: hosted
- version: "2.9.0"
+ version: "2.10.0"
bloc:
dependency: "direct main"
description:
name: bloc
- url: "https://pub.dartlang.org"
+ sha256: "658a5ae59edcf1e58aac98b000a71c762ad8f46f1394c34a52050cafb3e11a80"
+ url: "https://pub.dev"
source: hosted
version: "8.1.1"
bloc_test:
dependency: "direct dev"
description:
name: bloc_test
- url: "https://pub.dartlang.org"
+ sha256: ffbb60c17ee3d8e3784cb78071088e353199057233665541e8ac6cd438dca8ad
+ url: "https://pub.dev"
source: hosted
version: "9.1.1"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
- url: "https://pub.dartlang.org"
+ sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
+ url: "https://pub.dev"
source: hosted
- version: "2.1.0"
+ version: "2.1.1"
build:
dependency: transitive
description:
name: build
- url: "https://pub.dartlang.org"
+ sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777"
+ url: "https://pub.dev"
source: hosted
version: "2.3.1"
build_config:
dependency: transitive
description:
name: build_config
- url: "https://pub.dartlang.org"
+ sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1
+ url: "https://pub.dev"
source: hosted
version: "1.1.1"
build_daemon:
dependency: transitive
description:
name: build_daemon
- url: "https://pub.dartlang.org"
+ sha256: "757153e5d9cd88253cb13f28c2fb55a537dc31fefd98137549895b5beb7c6169"
+ url: "https://pub.dev"
source: hosted
version: "3.1.1"
build_resolvers:
dependency: transitive
description:
name: build_resolvers
- url: "https://pub.dartlang.org"
+ sha256: "687cf90a3951affac1bd5f9ecb5e3e90b60487f3d9cdc359bb310f8876bb02a6"
+ url: "https://pub.dev"
source: hosted
version: "2.0.10"
build_runner:
dependency: "direct dev"
description:
name: build_runner
- url: "https://pub.dartlang.org"
+ sha256: "93f05c041932674be039b0a2323d6cf57e5f2bbf884a3c0382f9e53fc45ebace"
+ url: "https://pub.dev"
source: hosted
version: "2.3.0"
build_runner_core:
dependency: transitive
description:
name: build_runner_core
- url: "https://pub.dartlang.org"
+ sha256: "14febe0f5bac5ae474117a36099b4de6f1dbc52df6c5e55534b3da9591bf4292"
+ url: "https://pub.dev"
source: hosted
version: "7.2.7"
built_collection:
dependency: transitive
description:
name: built_collection
- url: "https://pub.dartlang.org"
+ sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100"
+ url: "https://pub.dev"
source: hosted
version: "5.1.1"
built_value:
dependency: transitive
description:
name: built_value
- url: "https://pub.dartlang.org"
+ sha256: "31b7c748fd4b9adf8d25d72a4c4a59ef119f12876cf414f94f8af5131d5fa2b0"
+ url: "https://pub.dev"
source: hosted
version: "8.4.4"
calendar_view:
dependency: "direct main"
description:
name: calendar_view
- url: "https://pub.dartlang.org"
+ sha256: "7f2c460d38cda782e0852ca7706086c24f6e9407a9f0cfcdef034fb81e6d9f3e"
+ url: "https://pub.dev"
source: hosted
version: "1.0.2"
characters:
dependency: transitive
description:
name: characters
- url: "https://pub.dartlang.org"
+ sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c
+ url: "https://pub.dev"
source: hosted
version: "1.2.1"
charcode:
dependency: "direct main"
description:
name: charcode
- url: "https://pub.dartlang.org"
+ sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306
+ url: "https://pub.dev"
source: hosted
version: "1.3.1"
checked_yaml:
dependency: transitive
description:
name: checked_yaml
- url: "https://pub.dartlang.org"
+ sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311"
+ url: "https://pub.dev"
source: hosted
version: "2.0.2"
clipboard:
dependency: "direct main"
description:
name: clipboard
- url: "https://pub.dartlang.org"
+ sha256: "2ec38f0e59878008ceca0ab122e4bfde98847f88ef0f83331362ba4521f565a9"
+ url: "https://pub.dev"
source: hosted
version: "0.1.3"
clock:
dependency: transitive
description:
name: clock
- url: "https://pub.dartlang.org"
+ sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
+ url: "https://pub.dev"
source: hosted
version: "1.1.1"
code_builder:
dependency: transitive
description:
name: code_builder
- url: "https://pub.dartlang.org"
+ sha256: "0d43dd1288fd145de1ecc9a3948ad4a6d5a82f0a14c4fdd0892260787d975cbe"
+ url: "https://pub.dev"
source: hosted
version: "4.4.0"
collection:
dependency: "direct main"
description:
name: collection
- url: "https://pub.dartlang.org"
+ sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0
+ url: "https://pub.dev"
source: hosted
- version: "1.16.0"
+ version: "1.17.0"
connectivity_plus:
dependency: "direct main"
description:
name: connectivity_plus
- url: "https://pub.dartlang.org"
+ sha256: "8875e8ed511a49f030e313656154e4bbbcef18d68dfd32eb853fac10bce48e96"
+ url: "https://pub.dev"
source: hosted
- version: "2.3.9"
- connectivity_plus_linux:
- dependency: transitive
- description:
- name: connectivity_plus_linux
- url: "https://pub.dartlang.org"
- source: hosted
- version: "1.3.1"
- connectivity_plus_macos:
- dependency: transitive
- description:
- name: connectivity_plus_macos
- url: "https://pub.dartlang.org"
- source: hosted
- version: "1.2.6"
+ version: "3.0.3"
connectivity_plus_platform_interface:
dependency: "direct main"
description:
name: connectivity_plus_platform_interface
- url: "https://pub.dartlang.org"
+ sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a
+ url: "https://pub.dev"
source: hosted
version: "1.2.4"
- connectivity_plus_web:
- dependency: transitive
- description:
- name: connectivity_plus_web
- url: "https://pub.dartlang.org"
- source: hosted
- version: "1.2.5"
- connectivity_plus_windows:
- dependency: transitive
- description:
- name: connectivity_plus_windows
- url: "https://pub.dartlang.org"
- source: hosted
- version: "1.2.2"
convert:
dependency: transitive
description:
name: convert
- url: "https://pub.dartlang.org"
+ sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592"
+ url: "https://pub.dev"
source: hosted
version: "3.1.1"
coverage:
dependency: transitive
description:
name: coverage
- url: "https://pub.dartlang.org"
+ sha256: "525ac94733f9ce82507a050bfd62ad89eb1dcbc56308e1e2e17ab11abeee4a75"
+ url: "https://pub.dev"
source: hosted
version: "1.5.0"
crypto:
dependency: transitive
description:
name: crypto
- url: "https://pub.dartlang.org"
+ sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67
+ url: "https://pub.dev"
source: hosted
version: "3.0.2"
csslib:
dependency: transitive
description:
name: csslib
- url: "https://pub.dartlang.org"
+ sha256: b36c7f7e24c0bdf1bf9a3da461c837d1de64b9f8beb190c9011d8c72a3dfd745
+ url: "https://pub.dev"
source: hosted
version: "0.17.2"
cupertino_icons:
dependency: "direct main"
description:
name: cupertino_icons
- url: "https://pub.dartlang.org"
+ sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be
+ url: "https://pub.dev"
source: hosted
version: "1.0.5"
dart_style:
dependency: transitive
description:
name: dart_style
- url: "https://pub.dartlang.org"
+ sha256: "7a03456c3490394c8e7665890333e91ae8a49be43542b616e414449ac358acd4"
+ url: "https://pub.dev"
source: hosted
version: "2.2.4"
dartz:
dependency: "direct main"
description:
name: dartz
- url: "https://pub.dartlang.org"
+ sha256: e6acf34ad2e31b1eb00948692468c30ab48ac8250e0f0df661e29f12dd252168
+ url: "https://pub.dev"
source: hosted
version: "0.10.1"
dbus:
dependency: transitive
description:
name: dbus
- url: "https://pub.dartlang.org"
+ sha256: "6f07cba3f7b3448d42d015bfd3d53fe12e5b36da2423f23838efc1d5fb31a263"
+ url: "https://pub.dev"
source: hosted
- version: "0.7.4"
+ version: "0.7.8"
device_info_plus:
dependency: "direct main"
description:
name: device_info_plus
- url: "https://pub.dartlang.org"
+ sha256: b809c4ed5f7fcdb325ccc70b80ad934677dc4e2aa414bf46859a42bfdfafcbb6
+ url: "https://pub.dev"
source: hosted
- version: "3.2.4"
+ version: "4.1.3"
device_info_plus_linux:
dependency: transitive
description:
name: device_info_plus_linux
- url: "https://pub.dartlang.org"
+ sha256: "77a8b3c4af06bc46507f89304d9f49dfc64b4ae004b994532ed23b34adeae4b3"
+ url: "https://pub.dev"
source: hosted
- version: "2.1.1"
+ version: "3.0.0"
device_info_plus_macos:
dependency: transitive
description:
name: device_info_plus_macos
- url: "https://pub.dartlang.org"
+ sha256: "37961762fbd46d3620c7b69ca606671014db55fc1b7a11e696fd90ed2e8fe03d"
+ url: "https://pub.dev"
source: hosted
- version: "2.2.3"
+ version: "3.0.0"
device_info_plus_platform_interface:
dependency: transitive
description:
name: device_info_plus_platform_interface
- url: "https://pub.dartlang.org"
+ sha256: "83fdba24fcf6846d3b10f10dfdc8b6c6d7ada5f8ed21d62ea2909c2dfa043773"
+ url: "https://pub.dev"
source: hosted
- version: "2.6.1"
+ version: "3.0.0"
device_info_plus_web:
dependency: transitive
description:
name: device_info_plus_web
- url: "https://pub.dartlang.org"
+ sha256: "5890f6094df108181c7a29720bc23d0fd6159f17d82787fac093d1fefcaf6325"
+ url: "https://pub.dev"
source: hosted
- version: "2.1.0"
+ version: "3.0.0"
device_info_plus_windows:
dependency: transitive
description:
name: device_info_plus_windows
- url: "https://pub.dartlang.org"
+ sha256: "23a2874af0e23ee6e3a2a0ebcecec3a9da13241f2cb93a93a44c8764df123dd7"
+ url: "https://pub.dev"
source: hosted
- version: "2.1.1"
+ version: "4.1.0"
diff_match_patch:
dependency: transitive
description:
name: diff_match_patch
- url: "https://pub.dartlang.org"
+ sha256: "2efc9e6e8f449d0abe15be240e2c2a3bcd977c8d126cfd70598aee60af35c0a4"
+ url: "https://pub.dev"
source: hosted
version: "0.4.1"
easy_localization:
dependency: "direct main"
description:
name: easy_localization
- url: "https://pub.dartlang.org"
+ sha256: "6a2e99fa0bfe5765bf4c6ca9b137d5de2c75593007178c5e4cd2ae985f870080"
+ url: "https://pub.dev"
source: hosted
version: "3.0.1"
easy_logger:
dependency: transitive
description:
name: easy_logger
- url: "https://pub.dartlang.org"
+ sha256: c764a6e024846f33405a2342caf91c62e357c24b02c04dbc712ef232bf30ffb7
+ url: "https://pub.dev"
source: hosted
version: "0.0.2"
equatable:
dependency: "direct main"
description:
name: equatable
- url: "https://pub.dartlang.org"
+ sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2
+ url: "https://pub.dev"
source: hosted
version: "2.0.5"
expandable:
dependency: "direct main"
description:
name: expandable
- url: "https://pub.dartlang.org"
+ sha256: "9604d612d4d1146dafa96c6d8eec9c2ff0994658d6d09fed720ab788c7f5afc2"
+ url: "https://pub.dev"
source: hosted
version: "5.0.1"
fake_async:
dependency: transitive
description:
name: fake_async
- url: "https://pub.dartlang.org"
+ sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
+ url: "https://pub.dev"
source: hosted
version: "1.3.1"
ffi:
dependency: transitive
description:
name: ffi
- url: "https://pub.dartlang.org"
+ sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978
+ url: "https://pub.dev"
source: hosted
- version: "1.2.1"
+ version: "2.0.1"
file:
dependency: transitive
description:
name: file
- url: "https://pub.dartlang.org"
+ sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d"
+ url: "https://pub.dev"
source: hosted
- version: "6.1.2"
+ version: "6.1.4"
file_picker:
dependency: "direct main"
description:
name: file_picker
- url: "https://pub.dartlang.org"
+ sha256: aeeb811e81c3831124fb9dc1077e42d3837de401f4762dd371cb108e9c9fb2a4
+ url: "https://pub.dev"
source: hosted
- version: "4.6.1"
+ version: "5.0.0"
fixnum:
dependency: "direct main"
description:
name: fixnum
- url: "https://pub.dartlang.org"
+ sha256: "04be3e934c52e082558cc9ee21f42f5c1cd7a1262f4c63cd0357c08d5bba81ec"
+ url: "https://pub.dev"
source: hosted
version: "1.0.1"
flowy_infra:
@@ -460,16 +484,18 @@ packages:
dependency: "direct main"
description:
name: flutter_bloc
- url: "https://pub.dartlang.org"
+ sha256: "434951eea948dbe87f737b674281465f610b8259c16c097b8163ce138749a775"
+ url: "https://pub.dev"
source: hosted
version: "8.1.2"
flutter_colorpicker:
dependency: "direct main"
description:
name: flutter_colorpicker
- url: "https://pub.dartlang.org"
+ sha256: "458a6ed8ea480eb16ff892aedb4b7092b2804affd7e046591fb03127e8d8ef8b"
+ url: "https://pub.dev"
source: hosted
- version: "0.6.1"
+ version: "1.0.3"
flutter_driver:
dependency: transitive
description: flutter
@@ -479,7 +505,8 @@ packages:
dependency: "direct dev"
description:
name: flutter_lints
- url: "https://pub.dartlang.org"
+ sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c
+ url: "https://pub.dev"
source: hosted
version: "2.0.1"
flutter_localizations:
@@ -490,24 +517,28 @@ packages:
flutter_math_fork:
dependency: transitive
description:
- name: flutter_math_fork
- url: "https://pub.dartlang.org"
- source: hosted
+ path: "."
+ ref: master
+ resolved-ref: "77cab5696e756e1e18e26b2a6239c1083f60d6b9"
+ url: "https://github.com/LucasXu0/flutter_math_fork.git"
+ source: git
version: "0.6.3+1"
flutter_plugin_android_lifecycle:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
- url: "https://pub.dartlang.org"
+ sha256: c224ac897bed083dabf11f238dd11a239809b446740be0c2044608c50029ffdf
+ url: "https://pub.dev"
source: hosted
version: "2.0.9"
flutter_svg:
dependency: transitive
description:
name: flutter_svg
- url: "https://pub.dartlang.org"
+ sha256: "12006889e2987c549c4c1ec1a5ba4ec4b24d34d2469ee5f9476c926dcecff266"
+ url: "https://pub.dev"
source: hosted
- version: "1.1.6"
+ version: "2.0.4"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -522,28 +553,32 @@ packages:
dependency: "direct main"
description:
name: fluttertoast
- url: "https://pub.dartlang.org"
+ sha256: "2f9c4d3f4836421f7067a28f8939814597b27614e021da9d63e5d3fb6e212d25"
+ url: "https://pub.dev"
source: hosted
version: "8.2.1"
freezed:
dependency: "direct dev"
description:
name: freezed
- url: "https://pub.dartlang.org"
+ sha256: "4179d41127bc7a67dc3f58ceec1d22f1cdf10470653cb86eda2a63f81b4920c7"
+ url: "https://pub.dev"
source: hosted
version: "2.2.0"
freezed_annotation:
dependency: "direct main"
description:
name: freezed_annotation
- url: "https://pub.dartlang.org"
+ sha256: aeac15850ef1b38ee368d4c53ba9a847e900bb2c53a4db3f6881cbb3cb684338
+ url: "https://pub.dev"
source: hosted
version: "2.2.0"
frontend_server_client:
dependency: transitive
description:
name: frontend_server_client
- url: "https://pub.dartlang.org"
+ sha256: "4f4a162323c86ffc1245765cfe138872b8f069deb42f7dbb36115fa27f31469b"
+ url: "https://pub.dev"
source: hosted
version: "2.1.3"
fuchsia_remote_debug_protocol:
@@ -555,70 +590,80 @@ packages:
dependency: "direct main"
description:
name: get_it
- url: "https://pub.dartlang.org"
+ sha256: "290fde3a86072e4b37dbb03c07bec6126f0ecc28dad403c12ffe2e5a2d751ab7"
+ url: "https://pub.dev"
source: hosted
version: "7.2.0"
glob:
dependency: transitive
description:
name: glob
- url: "https://pub.dartlang.org"
+ sha256: c51b4fdfee4d281f49b8c957f1add91b815473597f76bcf07377987f66a55729
+ url: "https://pub.dev"
source: hosted
version: "2.1.0"
google_fonts:
dependency: "direct main"
description:
name: google_fonts
- url: "https://pub.dartlang.org"
+ sha256: "927573f2e8a8d65c17931e21918ad0ab0666b1b636537de7c4932bdb487b190f"
+ url: "https://pub.dev"
source: hosted
- version: "3.0.1"
+ version: "4.0.3"
graphs:
dependency: transitive
description:
name: graphs
- url: "https://pub.dartlang.org"
+ sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2
+ url: "https://pub.dev"
source: hosted
version: "2.2.0"
highlight:
dependency: transitive
description:
name: highlight
- url: "https://pub.dartlang.org"
+ sha256: "5353a83ffe3e3eca7df0abfb72dcf3fa66cc56b953728e7113ad4ad88497cf21"
+ url: "https://pub.dev"
source: hosted
version: "0.7.0"
hotkey_manager:
dependency: "direct main"
description:
name: hotkey_manager
- url: "https://pub.dartlang.org"
+ sha256: "39b352b6dabb806fd53122d6c95ded1174df882d2db01eedc31cc046f8cc7b6c"
+ url: "https://pub.dev"
source: hosted
version: "0.1.7"
html:
dependency: transitive
description:
name: html
- url: "https://pub.dartlang.org"
+ sha256: "79d498e6d6761925a34ee5ea8fa6dfef38607781d2fa91e37523474282af55cb"
+ url: "https://pub.dev"
source: hosted
version: "0.15.2"
http:
dependency: "direct main"
description:
name: http
- url: "https://pub.dartlang.org"
+ sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482"
+ url: "https://pub.dev"
source: hosted
version: "0.13.5"
http_multi_server:
dependency: transitive
description:
name: http_multi_server
- url: "https://pub.dartlang.org"
+ sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b"
+ url: "https://pub.dev"
source: hosted
version: "3.2.1"
http_parser:
dependency: transitive
description:
name: http_parser
- url: "https://pub.dartlang.org"
+ sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
+ url: "https://pub.dev"
source: hosted
version: "4.0.2"
integration_test:
@@ -630,497 +675,560 @@ packages:
dependency: "direct main"
description:
name: intl
- url: "https://pub.dartlang.org"
+ sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91"
+ url: "https://pub.dev"
source: hosted
version: "0.17.0"
intl_utils:
dependency: transitive
description:
name: intl_utils
- url: "https://pub.dartlang.org"
+ sha256: "856baa08d4735ee3476901827d52671c1a2b6f9ccb8b848d73bc5b8dd28b21e5"
+ url: "https://pub.dev"
source: hosted
version: "2.7.0"
io:
dependency: transitive
description:
name: io
- url: "https://pub.dartlang.org"
+ sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e"
+ url: "https://pub.dev"
source: hosted
version: "1.0.4"
isolates:
dependency: transitive
description:
name: isolates
- url: "https://pub.dartlang.org"
+ sha256: ce89e4141b27b877326d3715be2dceac7a7ba89f3229785816d2d318a75ddf28
+ url: "https://pub.dev"
source: hosted
version: "3.0.3+8"
js:
dependency: transitive
description:
name: js
- url: "https://pub.dartlang.org"
+ sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7"
+ url: "https://pub.dev"
source: hosted
- version: "0.6.4"
+ version: "0.6.5"
json_annotation:
dependency: "direct main"
description:
name: json_annotation
- url: "https://pub.dartlang.org"
+ sha256: "3520fa844009431b5d4491a5a778603520cdc399ab3406332dcc50f93547258c"
+ url: "https://pub.dev"
source: hosted
version: "4.7.0"
json_serializable:
dependency: "direct dev"
description:
name: json_serializable
- url: "https://pub.dartlang.org"
+ sha256: f3c2c18a7889580f71926f30c1937727c8c7d4f3a435f8f5e8b0ddd25253ef5d
+ url: "https://pub.dev"
source: hosted
version: "6.5.4"
linked_scroll_controller:
dependency: "direct main"
description:
name: linked_scroll_controller
- url: "https://pub.dartlang.org"
+ sha256: e6020062bcf4ffc907ee7fd090fa971e65d8dfaac3c62baf601a3ced0b37986a
+ url: "https://pub.dev"
source: hosted
version: "0.2.0"
lint:
dependency: transitive
description:
name: lint
- url: "https://pub.dartlang.org"
+ sha256: "4a539aa34ec5721a2c7574ae2ca0336738ea4adc2a34887d54b7596310b33c85"
+ url: "https://pub.dev"
source: hosted
version: "1.10.0"
lints:
dependency: transitive
description:
name: lints
- url: "https://pub.dartlang.org"
+ sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593"
+ url: "https://pub.dev"
source: hosted
version: "2.0.1"
loading_indicator:
dependency: transitive
description:
name: loading_indicator
- url: "https://pub.dartlang.org"
+ sha256: "5cb15810fc3d8872230d086b4810d9f9bbcd6e7d208a38f7cd6bc81fb2650e4b"
+ url: "https://pub.dev"
source: hosted
version: "3.1.0"
logger:
dependency: transitive
description:
name: logger
- url: "https://pub.dartlang.org"
+ sha256: db2ff852ed77090ba9f62d3611e4208a3d11dfa35991a81ae724c113fcb3e3f7
+ url: "https://pub.dev"
source: hosted
version: "1.3.0"
logging:
dependency: transitive
description:
name: logging
- url: "https://pub.dartlang.org"
+ sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d"
+ url: "https://pub.dev"
source: hosted
version: "1.1.1"
markdown:
dependency: transitive
description:
name: markdown
- url: "https://pub.dartlang.org"
+ sha256: b3c60dee8c2af50ad0e6e90cceba98e47718a6ee0a7a6772c77846a0cc21f78b
+ url: "https://pub.dev"
source: hosted
- version: "6.0.1"
+ version: "7.0.1"
matcher:
dependency: transitive
description:
name: matcher
- url: "https://pub.dartlang.org"
+ sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72"
+ url: "https://pub.dev"
source: hosted
- version: "0.12.12"
+ version: "0.12.13"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
- url: "https://pub.dartlang.org"
+ sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724
+ url: "https://pub.dev"
source: hosted
- version: "0.1.5"
+ version: "0.2.0"
meta:
dependency: transitive
description:
name: meta
- url: "https://pub.dartlang.org"
+ sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42"
+ url: "https://pub.dev"
source: hosted
version: "1.8.0"
mime:
dependency: transitive
description:
name: mime
- url: "https://pub.dartlang.org"
+ sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e
+ url: "https://pub.dev"
source: hosted
version: "1.0.4"
mocktail:
dependency: transitive
description:
name: mocktail
- url: "https://pub.dartlang.org"
+ sha256: "80a996cd9a69284b3dc521ce185ffe9150cde69767c2d3a0720147d93c0cef53"
+ url: "https://pub.dev"
source: hosted
version: "0.3.0"
nested:
dependency: transitive
description:
name: nested
- url: "https://pub.dartlang.org"
+ sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20"
+ url: "https://pub.dev"
source: hosted
version: "1.0.0"
nm:
dependency: transitive
description:
name: nm
- url: "https://pub.dartlang.org"
+ sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254"
+ url: "https://pub.dev"
source: hosted
version: "0.5.0"
node_preamble:
dependency: transitive
description:
name: node_preamble
- url: "https://pub.dartlang.org"
+ sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db"
+ url: "https://pub.dev"
source: hosted
version: "2.0.2"
package_config:
dependency: transitive
description:
name: package_config
- url: "https://pub.dartlang.org"
+ sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd"
+ url: "https://pub.dev"
source: hosted
version: "2.1.0"
package_info_plus:
dependency: "direct main"
description:
name: package_info_plus
- url: "https://pub.dartlang.org"
+ sha256: f62d7253edc197fe3c88d7c2ddab82d68f555e778d55390ccc3537eca8e8d637
+ url: "https://pub.dev"
source: hosted
- version: "1.4.2"
+ version: "1.4.3+1"
package_info_plus_linux:
dependency: transitive
description:
name: package_info_plus_linux
- url: "https://pub.dartlang.org"
+ sha256: "04b575f44233d30edbb80a94e57cad9107aada334fc02aabb42b6becd13c43fc"
+ url: "https://pub.dev"
source: hosted
version: "1.0.5"
package_info_plus_macos:
dependency: transitive
description:
name: package_info_plus_macos
- url: "https://pub.dartlang.org"
+ sha256: a2ad8b4acf4cd479d4a0afa5a74ea3f5b1c7563b77e52cc32b3ee6956d5482a6
+ url: "https://pub.dev"
source: hosted
version: "1.3.0"
package_info_plus_platform_interface:
dependency: transitive
description:
name: package_info_plus_platform_interface
- url: "https://pub.dartlang.org"
+ sha256: f7a0c8f1e7e981bc65f8b64137a53fd3c195b18d429fba960babc59a5a1c7ae8
+ url: "https://pub.dev"
source: hosted
version: "1.0.2"
package_info_plus_web:
dependency: transitive
description:
name: package_info_plus_web
- url: "https://pub.dartlang.org"
+ sha256: f0829327eb534789e0a16ccac8936a80beed4e2401c4d3a74f3f39094a822d3b
+ url: "https://pub.dev"
source: hosted
version: "1.0.6"
package_info_plus_windows:
dependency: transitive
description:
name: package_info_plus_windows
- url: "https://pub.dartlang.org"
+ sha256: "79524f11c42dd9078b96d797b3cf79c0a2883a50c4920dc43da8562c115089bc"
+ url: "https://pub.dev"
source: hosted
- version: "1.0.5"
+ version: "2.1.0"
path:
dependency: "direct main"
description:
name: path
- url: "https://pub.dartlang.org"
+ sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b
+ url: "https://pub.dev"
source: hosted
version: "1.8.2"
- path_drawing:
- dependency: transitive
- description:
- name: path_drawing
- url: "https://pub.dartlang.org"
- source: hosted
- version: "1.0.1"
path_parsing:
dependency: transitive
description:
name: path_parsing
- url: "https://pub.dartlang.org"
+ sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf
+ url: "https://pub.dev"
source: hosted
version: "1.0.1"
path_provider:
dependency: "direct main"
description:
name: path_provider
- url: "https://pub.dartlang.org"
+ sha256: c7edf82217d4b2952b2129a61d3ad60f1075b9299e629e149a8d2e39c2e6aad4
+ url: "https://pub.dev"
source: hosted
version: "2.0.14"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
- url: "https://pub.dartlang.org"
+ sha256: "019f18c9c10ae370b08dce1f3e3b73bc9f58e7f087bb5e921f06529438ac0ae7"
+ url: "https://pub.dev"
source: hosted
version: "2.0.24"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
- url: "https://pub.dartlang.org"
+ sha256: "12eee51abdf4d34c590f043f45073adbb45514a108bd9db4491547a2fd891059"
+ url: "https://pub.dev"
source: hosted
version: "2.2.0"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
- url: "https://pub.dartlang.org"
+ sha256: "2ae08f2216225427e64ad224a24354221c2c7907e448e6e0e8b57b1eb9f10ad1"
+ url: "https://pub.dev"
source: hosted
version: "2.1.10"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
- url: "https://pub.dartlang.org"
+ sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec"
+ url: "https://pub.dev"
source: hosted
version: "2.0.6"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
- url: "https://pub.dartlang.org"
+ sha256: f53720498d5a543f9607db4b0e997c4b5438884de25b0f73098cc2671a51b130
+ url: "https://pub.dev"
source: hosted
- version: "2.0.7"
+ version: "2.1.5"
percent_indicator:
dependency: "direct main"
description:
name: percent_indicator
- url: "https://pub.dartlang.org"
+ sha256: c37099ad833a883c9d71782321cb65c3a848c21b6939b6185f0ff6640d05814c
+ url: "https://pub.dev"
source: hosted
version: "4.2.3"
petitparser:
dependency: transitive
description:
name: petitparser
- url: "https://pub.dartlang.org"
+ sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4"
+ url: "https://pub.dev"
source: hosted
version: "5.1.0"
platform:
dependency: transitive
description:
name: platform
- url: "https://pub.dartlang.org"
+ sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76"
+ url: "https://pub.dev"
source: hosted
version: "3.1.0"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
- url: "https://pub.dartlang.org"
+ sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc"
+ url: "https://pub.dev"
source: hosted
version: "2.1.4"
pool:
dependency: transitive
description:
name: pool
- url: "https://pub.dartlang.org"
+ sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a"
+ url: "https://pub.dev"
source: hosted
version: "1.5.1"
process:
dependency: transitive
description:
name: process
- url: "https://pub.dartlang.org"
+ sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09"
+ url: "https://pub.dev"
source: hosted
version: "4.2.4"
protobuf:
dependency: "direct main"
description:
name: protobuf
- url: "https://pub.dartlang.org"
+ sha256: "467c7ccf3fee0272d5cb84bf20debc509f9a4f69ce06e5f7a8b749d7e6962085"
+ url: "https://pub.dev"
source: hosted
version: "2.0.0"
provider:
dependency: "direct main"
description:
name: provider
- url: "https://pub.dartlang.org"
+ sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f
+ url: "https://pub.dev"
source: hosted
version: "6.0.5"
pub_semver:
dependency: transitive
description:
name: pub_semver
- url: "https://pub.dartlang.org"
+ sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17"
+ url: "https://pub.dev"
source: hosted
version: "2.1.3"
pubspec_parse:
dependency: transitive
description:
name: pubspec_parse
- url: "https://pub.dartlang.org"
+ sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a"
+ url: "https://pub.dev"
source: hosted
version: "1.2.1"
reorderables:
dependency: "direct main"
description:
name: reorderables
- url: "https://pub.dartlang.org"
+ sha256: "004a886e4878df1ee27321831c838bc1c976311f4ca6a74ce7d561e506540a77"
+ url: "https://pub.dev"
source: hosted
- version: "0.5.1"
+ version: "0.6.0"
rich_clipboard:
dependency: transitive
description:
name: rich_clipboard
- url: "https://pub.dartlang.org"
+ sha256: "48bfc84a0d3eeec5692b3afd0277aa658a7c95d1dbda72bb623188fba6a8e253"
+ url: "https://pub.dev"
source: hosted
version: "1.0.1"
rich_clipboard_android:
dependency: transitive
description:
name: rich_clipboard_android
- url: "https://pub.dartlang.org"
+ sha256: "1388bad7748791818aa5b822df2f3449fff34785b266fa6ca4cbc7cd24342871"
+ url: "https://pub.dev"
source: hosted
version: "1.0.0"
rich_clipboard_ios:
dependency: transitive
description:
name: rich_clipboard_ios
- url: "https://pub.dartlang.org"
+ sha256: "9d6bc037463b1b24cb14ae35ee9d7530bd6b2bdb15b30909fb47a1af01bf3233"
+ url: "https://pub.dev"
source: hosted
version: "1.0.0"
rich_clipboard_linux:
dependency: transitive
description:
name: rich_clipboard_linux
- url: "https://pub.dartlang.org"
+ sha256: "0d0ab273afd60cb7314d01fdf3994fa01be2be79528f448241d9d70ea19b3db9"
+ url: "https://pub.dev"
source: hosted
version: "1.0.1"
rich_clipboard_macos:
dependency: transitive
description:
name: rich_clipboard_macos
- url: "https://pub.dartlang.org"
+ sha256: "1aeb409e267576baaced347549e42dabc59895b10b2e09dabd9f753f469deb3e"
+ url: "https://pub.dev"
source: hosted
version: "1.0.1"
rich_clipboard_platform_interface:
dependency: transitive
description:
name: rich_clipboard_platform_interface
- url: "https://pub.dartlang.org"
+ sha256: a1cbf255719cd4e340d33eca02b619d9ffb9cb571f1905e80b9345d4266e893d
+ url: "https://pub.dev"
source: hosted
version: "1.0.0"
rich_clipboard_web:
dependency: transitive
description:
name: rich_clipboard_web
- url: "https://pub.dartlang.org"
+ sha256: c1dd2b75b8ce83fed0027828900bbfd5c33c0f8ff22efb266931db5aa7acffa0
+ url: "https://pub.dev"
source: hosted
version: "1.0.2"
rich_clipboard_windows:
dependency: transitive
description:
name: rich_clipboard_windows
- url: "https://pub.dartlang.org"
+ sha256: fa2a28e75ce4bcc9efc6d5d0e9788b76716cdaf3b7063c141fe8af12a315f414
+ url: "https://pub.dev"
source: hosted
version: "1.0.2"
screen_retriever:
dependency: transitive
description:
name: screen_retriever
- url: "https://pub.dartlang.org"
+ sha256: "4931f226ca158123ccd765325e9fbf360bfed0af9b460a10f960f9bb13d58323"
+ url: "https://pub.dev"
source: hosted
version: "0.1.6"
shared_preferences:
dependency: "direct main"
description:
name: shared_preferences
- url: "https://pub.dartlang.org"
+ sha256: "78528fd87d0d08ffd3e69551173c026e8eacc7b7079c82eb6a77413957b7e394"
+ url: "https://pub.dev"
source: hosted
version: "2.0.20"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
- url: "https://pub.dartlang.org"
+ sha256: ad423a80fe7b4e48b50d6111b3ea1027af0e959e49d485712e134863d9c1c521
+ url: "https://pub.dev"
source: hosted
version: "2.0.17"
shared_preferences_foundation:
dependency: transitive
description:
name: shared_preferences_foundation
- url: "https://pub.dartlang.org"
+ sha256: "1e755f8583229f185cfca61b1d80fb2344c9d660e1c69ede5450d8f478fa5310"
+ url: "https://pub.dev"
source: hosted
version: "2.1.5"
shared_preferences_linux:
dependency: transitive
description:
name: shared_preferences_linux
- url: "https://pub.dartlang.org"
+ sha256: "3a59ed10890a8409ad0faad7bb2957dab4b92b8fbe553257b05d30ed8af2c707"
+ url: "https://pub.dev"
source: hosted
version: "2.1.5"
shared_preferences_platform_interface:
dependency: transitive
description:
name: shared_preferences_platform_interface
- url: "https://pub.dartlang.org"
+ sha256: "824bfd02713e37603b2bdade0842e47d56e7db32b1dcdd1cae533fb88e2913fc"
+ url: "https://pub.dev"
source: hosted
version: "2.1.1"
shared_preferences_web:
dependency: transitive
description:
name: shared_preferences_web
- url: "https://pub.dartlang.org"
+ sha256: "0dc2633f215a3d4aa3184c9b2c5766f4711e4e5a6b256e62aafee41f89f1bfb8"
+ url: "https://pub.dev"
source: hosted
version: "2.0.6"
shared_preferences_windows:
dependency: transitive
description:
name: shared_preferences_windows
- url: "https://pub.dartlang.org"
+ sha256: "71bcd669bb9cdb6b39f22c4a7728b6d49e934f6cba73157ffa5a54f1eed67436"
+ url: "https://pub.dev"
source: hosted
version: "2.1.5"
shelf:
dependency: transitive
description:
name: shelf
- url: "https://pub.dartlang.org"
+ sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c
+ url: "https://pub.dev"
source: hosted
version: "1.4.0"
shelf_packages_handler:
dependency: transitive
description:
name: shelf_packages_handler
- url: "https://pub.dartlang.org"
+ sha256: aef74dc9195746a384843102142ab65b6a4735bb3beea791e63527b88cc83306
+ url: "https://pub.dev"
source: hosted
version: "3.0.1"
shelf_static:
dependency: transitive
description:
name: shelf_static
- url: "https://pub.dartlang.org"
+ sha256: e792b76b96a36d4a41b819da593aff4bdd413576b3ba6150df5d8d9996d2e74c
+ url: "https://pub.dev"
source: hosted
version: "1.1.1"
shelf_web_socket:
dependency: transitive
description:
name: shelf_web_socket
- url: "https://pub.dartlang.org"
+ sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8
+ url: "https://pub.dev"
source: hosted
version: "1.0.3"
simple_gesture_detector:
dependency: transitive
description:
name: simple_gesture_detector
- url: "https://pub.dartlang.org"
+ sha256: "86d08f85f1f58583b7b4b941d989f48ea6ce08c1724a1d10954a277c2ec36592"
+ url: "https://pub.dev"
source: hosted
version: "0.2.0"
sized_context:
dependency: "direct main"
description:
name: sized_context
- url: "https://pub.dartlang.org"
+ sha256: "9921e6c09e018132c3e1c6a18e14febbc1cc5c87a200d64ff7578cb49991f6e7"
+ url: "https://pub.dev"
source: hosted
version: "1.0.0+4"
sky_engine:
@@ -1132,303 +1240,370 @@ packages:
dependency: transitive
description:
name: source_gen
- url: "https://pub.dartlang.org"
+ sha256: "2d79738b6bbf38a43920e2b8d189e9a3ce6cc201f4b8fc76be5e4fe377b1c38d"
+ url: "https://pub.dev"
source: hosted
version: "1.2.6"
source_helper:
dependency: transitive
description:
name: source_helper
- url: "https://pub.dartlang.org"
+ sha256: "3b67aade1d52416149c633ba1bb36df44d97c6b51830c2198e934e3fca87ca1f"
+ url: "https://pub.dev"
source: hosted
version: "1.3.3"
source_map_stack_trace:
dependency: transitive
description:
name: source_map_stack_trace
- url: "https://pub.dartlang.org"
+ sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae"
+ url: "https://pub.dev"
source: hosted
version: "2.1.1"
source_maps:
dependency: transitive
description:
name: source_maps
- url: "https://pub.dartlang.org"
+ sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703"
+ url: "https://pub.dev"
source: hosted
version: "0.10.12"
source_span:
dependency: transitive
description:
name: source_span
- url: "https://pub.dartlang.org"
+ sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250
+ url: "https://pub.dev"
source: hosted
- version: "1.9.0"
+ version: "1.9.1"
stack_trace:
dependency: transitive
description:
name: stack_trace
- url: "https://pub.dartlang.org"
+ sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5
+ url: "https://pub.dev"
source: hosted
- version: "1.10.0"
+ version: "1.11.0"
stream_channel:
dependency: transitive
description:
name: stream_channel
- url: "https://pub.dartlang.org"
+ sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8"
+ url: "https://pub.dev"
source: hosted
- version: "2.1.0"
+ version: "2.1.1"
stream_transform:
dependency: transitive
description:
name: stream_transform
- url: "https://pub.dartlang.org"
+ sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f"
+ url: "https://pub.dev"
source: hosted
version: "2.1.0"
string_scanner:
dependency: transitive
description:
name: string_scanner
- url: "https://pub.dartlang.org"
+ sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
+ url: "https://pub.dev"
source: hosted
- version: "1.1.1"
+ version: "1.2.0"
styled_widget:
dependency: "direct main"
description:
name: styled_widget
- url: "https://pub.dartlang.org"
+ sha256: a22407bb8e7450ad62e24232d8e02a12c399644d3144b6df742dc641e3f955ef
+ url: "https://pub.dev"
source: hosted
version: "0.3.1+2"
sync_http:
dependency: transitive
description:
name: sync_http
- url: "https://pub.dartlang.org"
+ sha256: "7f0cd72eca000d2e026bcd6f990b81d0ca06022ef4e32fb257b30d3d1014a961"
+ url: "https://pub.dev"
source: hosted
version: "0.3.1"
table_calendar:
dependency: "direct main"
description:
name: table_calendar
- url: "https://pub.dartlang.org"
+ sha256: "7f1270313c0cdb245b583ed8518982c01d4a7e95869b3c30abcbae3b642c45d0"
+ url: "https://pub.dev"
source: hosted
version: "3.0.8"
term_glyph:
dependency: transitive
description:
name: term_glyph
- url: "https://pub.dartlang.org"
+ sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
+ url: "https://pub.dev"
source: hosted
version: "1.2.1"
test:
dependency: transitive
description:
name: test
- url: "https://pub.dartlang.org"
+ sha256: a5fcd2d25eeadbb6589e80198a47d6a464ba3e2049da473943b8af9797900c2d
+ url: "https://pub.dev"
source: hosted
- version: "1.21.4"
+ version: "1.22.0"
test_api:
dependency: transitive
description:
name: test_api
- url: "https://pub.dartlang.org"
+ sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206
+ url: "https://pub.dev"
source: hosted
- version: "0.4.12"
+ version: "0.4.16"
test_core:
dependency: transitive
description:
name: test_core
- url: "https://pub.dartlang.org"
+ sha256: "0ef9755ec6d746951ba0aabe62f874b707690b5ede0fecc818b138fcc9b14888"
+ url: "https://pub.dev"
source: hosted
- version: "0.4.16"
+ version: "0.4.20"
textfield_tags:
dependency: "direct main"
description:
name: textfield_tags
- url: "https://pub.dartlang.org"
+ sha256: c1d215f481e7e8da5c79719825e595db4f829bf1ad3fce4c7ce43d340aa72683
+ url: "https://pub.dev"
source: hosted
version: "2.0.2"
textstyle_extensions:
dependency: "direct main"
description:
name: textstyle_extensions
- url: "https://pub.dartlang.org"
+ sha256: b0538352844fb4d1d0eea82f7bc6b96e4dae03a3a071247e4dcc85ec627b2c6c
+ url: "https://pub.dev"
source: hosted
version: "2.0.0-nullsafety"
time:
dependency: "direct main"
description:
name: time
- url: "https://pub.dartlang.org"
+ sha256: "83427e11d9072e038364a5e4da559e85869b227cf699a541be0da74f14140124"
+ url: "https://pub.dev"
source: hosted
version: "2.1.3"
timing:
dependency: transitive
description:
name: timing
- url: "https://pub.dartlang.org"
+ sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32"
+ url: "https://pub.dev"
source: hosted
version: "1.0.1"
tuple:
dependency: "direct main"
description:
name: tuple
- url: "https://pub.dartlang.org"
+ sha256: "0ea99cd2f9352b2586583ab2ce6489d1f95a5f6de6fb9492faaf97ae2060f0aa"
+ url: "https://pub.dev"
source: hosted
version: "2.0.1"
typed_data:
dependency: transitive
description:
name: typed_data
- url: "https://pub.dartlang.org"
+ sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5"
+ url: "https://pub.dev"
source: hosted
version: "1.3.1"
universal_platform:
dependency: transitive
description:
name: universal_platform
- url: "https://pub.dartlang.org"
+ sha256: d315be0f6641898b280ffa34e2ddb14f3d12b1a37882557869646e0cc363d0cc
+ url: "https://pub.dev"
source: hosted
version: "1.0.0+1"
url_launcher:
dependency: "direct main"
description:
name: url_launcher
- url: "https://pub.dartlang.org"
+ sha256: "75f2846facd11168d007529d6cd8fcb2b750186bea046af9711f10b907e1587e"
+ url: "https://pub.dev"
source: hosted
version: "6.1.10"
url_launcher_android:
dependency: transitive
description:
name: url_launcher_android
- url: "https://pub.dartlang.org"
+ sha256: dd729390aa936bf1bdf5cd1bc7468ff340263f80a2c4f569416507667de8e3c8
+ url: "https://pub.dev"
source: hosted
version: "6.0.26"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
- url: "https://pub.dartlang.org"
+ sha256: "3dedc66ca3c0bef9e6a93c0999aee102556a450afcc1b7bcfeace7a424927d92"
+ url: "https://pub.dev"
source: hosted
version: "6.1.3"
url_launcher_linux:
dependency: transitive
description:
name: url_launcher_linux
- url: "https://pub.dartlang.org"
+ sha256: "206fb8334a700ef7754d6a9ed119e7349bc830448098f21a69bf1b4ed038cabc"
+ url: "https://pub.dev"
source: hosted
version: "3.0.4"
url_launcher_macos:
dependency: transitive
description:
name: url_launcher_macos
- url: "https://pub.dartlang.org"
+ sha256: "0ef2b4f97942a16523e51256b799e9aa1843da6c60c55eefbfa9dbc2dcb8331a"
+ url: "https://pub.dev"
source: hosted
version: "3.0.4"
url_launcher_platform_interface:
dependency: transitive
description:
name: url_launcher_platform_interface
- url: "https://pub.dartlang.org"
+ sha256: "6c9ca697a5ae218ce56cece69d46128169a58aa8653c1b01d26fcd4aad8c4370"
+ url: "https://pub.dev"
source: hosted
version: "2.1.2"
url_launcher_web:
dependency: transitive
description:
name: url_launcher_web
- url: "https://pub.dartlang.org"
+ sha256: "81fe91b6c4f84f222d186a9d23c73157dc4c8e1c71489c4d08be1ad3b228f1aa"
+ url: "https://pub.dev"
source: hosted
version: "2.0.16"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
- url: "https://pub.dartlang.org"
+ sha256: a83ba3607a507758669cfafb03f9de09bf6e6280c14d9b9cb18f013e406dcacd
+ url: "https://pub.dev"
source: hosted
version: "3.0.5"
uuid:
dependency: transitive
description:
name: uuid
- url: "https://pub.dartlang.org"
+ sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313"
+ url: "https://pub.dev"
source: hosted
version: "3.0.7"
+ vector_graphics:
+ dependency: transitive
+ description:
+ name: vector_graphics
+ sha256: "4cf8e60dbe4d3a693d37dff11255a172594c0793da542183cbfe7fe978ae4aaa"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.4"
+ vector_graphics_codec:
+ dependency: transitive
+ description:
+ name: vector_graphics_codec
+ sha256: "278ad5f816f58b1967396d1f78ced470e3e58c9fe4b27010102c0a595c764468"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.4"
+ vector_graphics_compiler:
+ dependency: transitive
+ description:
+ name: vector_graphics_compiler
+ sha256: "0bf61ad56e6fd6688a2865d3ceaea396bc6a0a90ea0d7ad5049b1b76c09d6163"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.4"
vector_math:
dependency: transitive
description:
name: vector_math
- url: "https://pub.dartlang.org"
+ sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
+ url: "https://pub.dev"
source: hosted
- version: "2.1.2"
+ version: "2.1.4"
vm_service:
dependency: transitive
description:
name: vm_service
- url: "https://pub.dartlang.org"
+ sha256: e7fb6c2282f7631712b69c19d1bff82f3767eea33a2321c14fa59ad67ea391c7
+ url: "https://pub.dev"
source: hosted
- version: "9.0.0"
+ version: "9.4.0"
watcher:
dependency: transitive
description:
name: watcher
- url: "https://pub.dartlang.org"
+ sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0"
+ url: "https://pub.dev"
source: hosted
version: "1.0.2"
web_socket_channel:
dependency: transitive
description:
name: web_socket_channel
- url: "https://pub.dartlang.org"
+ sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b
+ url: "https://pub.dev"
source: hosted
version: "2.3.0"
webdriver:
dependency: transitive
description:
name: webdriver
- url: "https://pub.dartlang.org"
+ sha256: ef67178f0cc7e32c1494645b11639dd1335f1d18814aa8435113a92e9ef9d841
+ url: "https://pub.dev"
source: hosted
- version: "3.0.0"
+ version: "3.0.1"
webkit_inspection_protocol:
dependency: transitive
description:
name: webkit_inspection_protocol
- url: "https://pub.dartlang.org"
+ sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d"
+ url: "https://pub.dev"
source: hosted
version: "1.2.0"
win32:
dependency: transitive
description:
name: win32
- url: "https://pub.dartlang.org"
+ sha256: "6b75ac2ddd42f5c226fdaf4498a2b04071c06f1f2b8f7ab1c3f77cc7f2285ff1"
+ url: "https://pub.dev"
source: hosted
- version: "2.6.1"
+ version: "2.7.0"
window_manager:
dependency: "direct main"
description:
name: window_manager
- url: "https://pub.dartlang.org"
+ sha256: "492806c69879f0d28e95472bbe5e8d5940ac8c6e99cc07052fe14946974555ba"
+ url: "https://pub.dev"
source: hosted
version: "0.3.1"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
- url: "https://pub.dartlang.org"
+ sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1
+ url: "https://pub.dev"
source: hosted
version: "1.0.0"
xml:
dependency: transitive
description:
name: xml
- url: "https://pub.dartlang.org"
+ sha256: ac0e3f4bf00ba2708c33fbabbbe766300e509f8c82dbd4ab6525039813f7e2fb
+ url: "https://pub.dev"
source: hosted
version: "6.1.0"
yaml:
dependency: transitive
description:
name: yaml
- url: "https://pub.dartlang.org"
+ sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370"
+ url: "https://pub.dev"
source: hosted
version: "3.1.1"
sdks:
- dart: ">=2.18.0 <3.0.0"
- flutter: ">=3.3.0"
+ dart: ">=2.19.0 <3.0.0"
+ flutter: ">=3.7.0"
diff --git a/frontend/appflowy_flutter/pubspec.yaml b/frontend/appflowy_flutter/pubspec.yaml
index 05d84a4d4c..613b205df1 100644
--- a/frontend/appflowy_flutter/pubspec.yaml
+++ b/frontend/appflowy_flutter/pubspec.yaml
@@ -18,7 +18,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
version: 0.1.2
environment:
- sdk: ">=2.18.0 <3.0.0"
+ sdk: ">=2.19.0 <3.0.0"
# Dependencies specify other packages that your package needs in order to work.
# To automatically upgrade your package dependencies to the latest versions
@@ -42,8 +42,7 @@ dependencies:
git:
url: https://github.com/AppFlowy-IO/appflowy-board.git
ref: a183c57
- appflowy_editor:
- path: packages/appflowy_editor
+ appflowy_editor: ^0.1.4
appflowy_popover:
path: packages/appflowy_popover
@@ -60,22 +59,22 @@ dependencies:
sized_context: ^1.0.0+1
styled_widget: "^0.3.1"
expandable: ^5.0.1
- flutter_colorpicker: ^0.6.0
+ flutter_colorpicker: ^1.0.3
package_info_plus: ^1.3.0
url_launcher: ^6.0.2
# file_picker: ^4.2.1
clipboard: ^0.1.3
- connectivity_plus: ^2.3.6+1
+ connectivity_plus: ^3.0.3
connectivity_plus_platform_interface: ^1.2.2
easy_localization: ^3.0.0
textfield_tags: ^2.0.2
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.2
- device_info_plus: ^3.2.1
+ device_info_plus: ^4.0.0
fluttertoast: ^8.0.9
table_calendar: ^3.0.5
- reorderables: ^0.5.1
+ reorderables: ^0.6.0
linked_scroll_controller: ^0.2.0
hotkey_manager: ^0.1.7
fixnum: ^1.0.1
@@ -86,7 +85,7 @@ dependencies:
bloc: ^8.1.0
textstyle_extensions: "2.0.0-nullsafety"
shared_preferences: ^2.0.15
- google_fonts: ^3.0.1
+ google_fonts: ^4.0.3
file_picker: <=5.0.0
percent_indicator: ^4.0.1
appflowy_editor_plugins:
@@ -96,6 +95,7 @@ dependencies:
http: ^0.13.5
json_annotation: ^4.7.0
path: ^1.8.2
+ archive: ^3.3.0
dev_dependencies:
flutter_lints: ^2.0.1
@@ -164,30 +164,8 @@ flutter:
- assets/images/common/
- assets/images/grid/setting/
- assets/translations/
- # - images/a_dot_ham.jpeg
- # An image asset can refer to one or more resolution-specific "variants", see
- # https://flutter.dev/assets-and-images/#resolution-aware.
-
- # For details regarding adding assets from package dependencies, see
- # https://flutter.dev/assets-and-images/#from-packages
-
- # To add custom fonts to your application, add a fonts section here,
- # in this "flutter" section. Each entry in this list should have a
- # "family" key with the font family name, and a "fonts" key with a
- # list giving the asset and other descriptors for the font. For
- # example:
- # fonts:
- # - family: Schyler
- # fonts:
- # - asset: fonts/Schyler-Regular.ttf
- # - asset: fonts/Schyler-Italic.ttf
- # style: italic
- # - family: Trajan Pro
- # fonts:
- # - asset: fonts/TrajanPro.ttf
- # - asset: fonts/TrajanPro_Bold.ttf
- # weight: 700
- #
- # For details regarding fonts from package dependencies,
- # see https://flutter.dev/custom-fonts/#from-packages
+ # The following assets will be excluded in release.
+ # BEGIN: EXCLUDE_IN_RELEASE
+ - assets/test/workspaces/
+ # END: EXCLUDE_IN_RELEASE
diff --git a/frontend/appflowy_flutter/test/bloc_test/board_test/util.dart b/frontend/appflowy_flutter/test/bloc_test/board_test/util.dart
index 668338bfb5..da0722bb04 100644
--- a/frontend/appflowy_flutter/test/bloc_test/board_test/util.dart
+++ b/frontend/appflowy_flutter/test/bloc_test/board_test/util.dart
@@ -11,7 +11,7 @@ import 'package:appflowy/plugins/database_view/application/database_controller.d
import 'package:appflowy/plugins/database_view/grid/application/row/row_bloc.dart';
import 'package:appflowy/workspace/application/app/app_service.dart';
import 'package:appflowy_backend/protobuf/flowy-database/setting_entities.pbenum.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-database/field_entities.pb.dart';
import '../../util.dart';
@@ -43,7 +43,7 @@ class AppFlowyBoardTest {
view,
DatabaseController(
view: view,
- layoutType: LayoutTypePB.Board,
+ layoutType: DatabaseLayoutPB.Board,
),
);
final result = await context._boardDataController.open();
diff --git a/frontend/appflowy_flutter/test/bloc_test/grid_test/filter/create_filter_test.dart b/frontend/appflowy_flutter/test/bloc_test/grid_test/filter/create_filter_test.dart
index f6342904c2..cff1390ef2 100644
--- a/frontend/appflowy_flutter/test/bloc_test/grid_test/filter/create_filter_test.dart
+++ b/frontend/appflowy_flutter/test/bloc_test/grid_test/filter/create_filter_test.dart
@@ -53,7 +53,7 @@ void main() {
final service = FilterBackendService(viewId: context.gridView.id);
final gridController = DatabaseController(
view: context.gridView,
- layoutType: LayoutTypePB.Grid,
+ layoutType: DatabaseLayoutPB.Grid,
);
final gridBloc = GridBloc(
view: context.gridView,
@@ -77,7 +77,7 @@ void main() {
final service = FilterBackendService(viewId: context.gridView.id);
final gridController = DatabaseController(
view: context.gridView,
- layoutType: LayoutTypePB.Grid,
+ layoutType: DatabaseLayoutPB.Grid,
);
final gridBloc = GridBloc(
view: context.gridView,
@@ -121,7 +121,7 @@ void main() {
final service = FilterBackendService(viewId: context.gridView.id);
final gridController = DatabaseController(
view: context.gridView,
- layoutType: LayoutTypePB.Grid,
+ layoutType: DatabaseLayoutPB.Grid,
);
final gridBloc = GridBloc(
view: context.gridView,
@@ -143,7 +143,7 @@ void main() {
final service = FilterBackendService(viewId: context.gridView.id);
final gridController = DatabaseController(
view: context.gridView,
- layoutType: LayoutTypePB.Grid,
+ layoutType: DatabaseLayoutPB.Grid,
);
final gridBloc = GridBloc(
view: context.gridView,
diff --git a/frontend/appflowy_flutter/test/bloc_test/grid_test/filter/filter_util.dart b/frontend/appflowy_flutter/test/bloc_test/grid_test/filter/filter_util.dart
index b7b409f0e5..2d7d9babef 100644
--- a/frontend/appflowy_flutter/test/bloc_test/grid_test/filter/filter_util.dart
+++ b/frontend/appflowy_flutter/test/bloc_test/grid_test/filter/filter_util.dart
@@ -21,7 +21,7 @@ Future createTestFilterGrid(AppFlowyGridTest gridTest) async {
view,
DatabaseController(
view: view,
- layoutType: LayoutTypePB.Grid,
+ layoutType: DatabaseLayoutPB.Grid,
));
final result = await context.gridController.open();
diff --git a/frontend/appflowy_flutter/test/bloc_test/grid_test/grid_bloc_test.dart b/frontend/appflowy_flutter/test/bloc_test/grid_test/grid_bloc_test.dart
index a2ccbbd164..0129955344 100644
--- a/frontend/appflowy_flutter/test/bloc_test/grid_test/grid_bloc_test.dart
+++ b/frontend/appflowy_flutter/test/bloc_test/grid_test/grid_bloc_test.dart
@@ -23,7 +23,7 @@ void main() {
view: context.gridView,
databaseController: DatabaseController(
view: context.gridView,
- layoutType: LayoutTypePB.Grid,
+ layoutType: DatabaseLayoutPB.Grid,
))
..add(const GridEvent.initial()),
act: (bloc) => bloc.add(const GridEvent.createRow()),
@@ -39,7 +39,7 @@ void main() {
view: context.gridView,
databaseController: DatabaseController(
view: context.gridView,
- layoutType: LayoutTypePB.Grid,
+ layoutType: DatabaseLayoutPB.Grid,
))
..add(const GridEvent.initial()),
act: (bloc) async {
diff --git a/frontend/appflowy_flutter/test/bloc_test/grid_test/util.dart b/frontend/appflowy_flutter/test/bloc_test/grid_test/util.dart
index af85cc8bf2..79d0736ffd 100644
--- a/frontend/appflowy_flutter/test/bloc_test/grid_test/util.dart
+++ b/frontend/appflowy_flutter/test/bloc_test/grid_test/util.dart
@@ -13,7 +13,7 @@ import 'package:appflowy/workspace/application/app/app_service.dart';
import 'package:appflowy_backend/protobuf/flowy-database/row_entities.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-database/setting_entities.pbenum.dart';
import 'package:appflowy_backend/protobuf/flowy-error/errors.pbserver.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-database/field_entities.pb.dart';
import 'package:dartz/dartz.dart';
@@ -178,7 +178,7 @@ class AppFlowyGridTest {
view,
DatabaseController(
view: view,
- layoutType: LayoutTypePB.Grid,
+ layoutType: DatabaseLayoutPB.Grid,
));
final result = await context.gridController.open();
result.fold((l) => null, (r) => throw Exception(r));
diff --git a/frontend/appflowy_flutter/test/bloc_test/home_test/app_bloc_test.dart b/frontend/appflowy_flutter/test/bloc_test/home_test/app_bloc_test.dart
index 69ef8eb1e4..878bf71d23 100644
--- a/frontend/appflowy_flutter/test/bloc_test/home_test/app_bloc_test.dart
+++ b/frontend/appflowy_flutter/test/bloc_test/home_test/app_bloc_test.dart
@@ -15,30 +15,30 @@ void main() {
test('rename app test', () async {
final app = await testContext.createTestApp();
- final bloc = AppBloc(app: app)..add(const AppEvent.initial());
+ final bloc = AppBloc(view: app)..add(const AppEvent.initial());
await blocResponseFuture();
bloc.add(const AppEvent.rename('Hello world'));
await blocResponseFuture();
- assert(bloc.state.app.name == 'Hello world');
+ expect(bloc.state.view.name, 'Hello world');
});
test('delete app test', () async {
final app = await testContext.createTestApp();
- final bloc = AppBloc(app: app)..add(const AppEvent.initial());
+ final bloc = AppBloc(view: app)..add(const AppEvent.initial());
await blocResponseFuture();
bloc.add(const AppEvent.delete());
await blocResponseFuture();
final apps = await testContext.loadApps();
- assert(apps.where((element) => element.id == app.id).isEmpty);
+ expect(apps.where((element) => element.id == app.id).isEmpty, true);
});
test('create documents in order', () async {
final app = await testContext.createTestApp();
- final bloc = AppBloc(app: app)..add(const AppEvent.initial());
+ final bloc = AppBloc(view: app)..add(const AppEvent.initial());
await blocResponseFuture();
bloc.add(AppEvent.createView("1", DocumentPluginBuilder()));
@@ -55,7 +55,7 @@ void main() {
test('reorder documents test', () async {
final app = await testContext.createTestApp();
- final bloc = AppBloc(app: app)..add(const AppEvent.initial());
+ final bloc = AppBloc(view: app)..add(const AppEvent.initial());
await blocResponseFuture();
bloc.add(AppEvent.createView("1", DocumentPluginBuilder()));
@@ -66,7 +66,7 @@ void main() {
await blocResponseFuture();
assert(bloc.state.views.length == 3);
- final appViewData = AppViewDataContext(appId: app.id);
+ final appViewData = AppViewDataContext(viewId: app.id);
appViewData.views = bloc.state.views;
final viewSectionBloc = ViewSectionBloc(
@@ -84,7 +84,7 @@ void main() {
test('open latest view test', () async {
final app = await testContext.createTestApp();
- final bloc = AppBloc(app: app)..add(const AppEvent.initial());
+ final bloc = AppBloc(view: app)..add(const AppEvent.initial());
await blocResponseFuture();
assert(
bloc.state.latestCreatedView == null,
@@ -108,7 +108,7 @@ void main() {
test('open latest documents test', () async {
final app = await testContext.createTestApp();
- final bloc = AppBloc(app: app)..add(const AppEvent.initial());
+ final bloc = AppBloc(view: app)..add(const AppEvent.initial());
await blocResponseFuture();
bloc.add(AppEvent.createView("document 1", DocumentPluginBuilder()));
@@ -135,7 +135,7 @@ void main() {
test('open latest document test', () async {
final app = await testContext.createTestApp();
- final bloc = AppBloc(app: app)..add(const AppEvent.initial());
+ final bloc = AppBloc(view: app)..add(const AppEvent.initial());
await blocResponseFuture();
bloc.add(AppEvent.createView("document 1", DocumentPluginBuilder()));
diff --git a/frontend/appflowy_flutter/test/bloc_test/home_test/create_page_test.dart b/frontend/appflowy_flutter/test/bloc_test/home_test/create_page_test.dart
index 978f168df6..98a640b6e5 100644
--- a/frontend/appflowy_flutter/test/bloc_test/home_test/create_page_test.dart
+++ b/frontend/appflowy_flutter/test/bloc_test/home_test/create_page_test.dart
@@ -3,7 +3,7 @@ import 'package:appflowy/plugins/database_view/board/board.dart';
import 'package:appflowy/plugins/database_view/grid/grid.dart';
import 'package:appflowy/plugins/document/document.dart';
import 'package:appflowy/workspace/application/app/app_bloc.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:flutter_test/flutter_test.dart';
import '../../util.dart';
@@ -15,7 +15,7 @@ void main() {
test('create a document', () async {
final app = await testContext.createTestApp();
- final bloc = AppBloc(app: app)..add(const AppEvent.initial());
+ final bloc = AppBloc(view: app)..add(const AppEvent.initial());
await blocResponseFuture();
bloc.add(AppEvent.createView("Test document", DocumentPluginBuilder()));
@@ -23,12 +23,12 @@ void main() {
assert(bloc.state.views.length == 1);
assert(bloc.state.views.last.name == "Test document");
- assert(bloc.state.views.last.layout == ViewLayoutTypePB.Document);
+ assert(bloc.state.views.last.layout == ViewLayoutPB.Document);
});
test('create a grid', () async {
final app = await testContext.createTestApp();
- final bloc = AppBloc(app: app)..add(const AppEvent.initial());
+ final bloc = AppBloc(view: app)..add(const AppEvent.initial());
await blocResponseFuture();
bloc.add(AppEvent.createView("Test grid", GridPluginBuilder()));
@@ -36,12 +36,12 @@ void main() {
assert(bloc.state.views.length == 1);
assert(bloc.state.views.last.name == "Test grid");
- assert(bloc.state.views.last.layout == ViewLayoutTypePB.Grid);
+ assert(bloc.state.views.last.layout == ViewLayoutPB.Grid);
});
test('create a kanban', () async {
final app = await testContext.createTestApp();
- final bloc = AppBloc(app: app)..add(const AppEvent.initial());
+ final bloc = AppBloc(view: app)..add(const AppEvent.initial());
await blocResponseFuture();
bloc.add(AppEvent.createView("Test board", BoardPluginBuilder()));
@@ -49,12 +49,12 @@ void main() {
assert(bloc.state.views.length == 1);
assert(bloc.state.views.last.name == "Test board");
- assert(bloc.state.views.last.layout == ViewLayoutTypePB.Board);
+ assert(bloc.state.views.last.layout == ViewLayoutPB.Board);
});
test('create a calendar', () async {
final app = await testContext.createTestApp();
- final bloc = AppBloc(app: app)..add(const AppEvent.initial());
+ final bloc = AppBloc(view: app)..add(const AppEvent.initial());
await blocResponseFuture();
bloc.add(AppEvent.createView("Test calendar", CalendarPluginBuilder()));
@@ -62,6 +62,6 @@ void main() {
assert(bloc.state.views.length == 1);
assert(bloc.state.views.last.name == "Test calendar");
- assert(bloc.state.views.last.layout == ViewLayoutTypePB.Calendar);
+ assert(bloc.state.views.last.layout == ViewLayoutPB.Calendar);
});
}
diff --git a/frontend/appflowy_flutter/test/bloc_test/home_test/home_bloc_test.dart b/frontend/appflowy_flutter/test/bloc_test/home_test/home_bloc_test.dart
index ef42b59fc0..3f79d9dc20 100644
--- a/frontend/appflowy_flutter/test/bloc_test/home_test/home_bloc_test.dart
+++ b/frontend/appflowy_flutter/test/bloc_test/home_test/home_bloc_test.dart
@@ -37,7 +37,7 @@ void main() {
await blocResponseFuture();
final app = await testContext.createTestApp();
- final appBloc = AppBloc(app: app)..add(const AppEvent.initial());
+ final appBloc = AppBloc(view: app)..add(const AppEvent.initial());
assert(appBloc.state.latestCreatedView == null);
appBloc.add(AppEvent.createView("New document", DocumentPluginBuilder()));
diff --git a/frontend/appflowy_flutter/test/bloc_test/home_test/menu_bloc_test.dart b/frontend/appflowy_flutter/test/bloc_test/home_test/menu_bloc_test.dart
index 252cbc9f4f..2f0e94f346 100644
--- a/frontend/appflowy_flutter/test/bloc_test/home_test/menu_bloc_test.dart
+++ b/frontend/appflowy_flutter/test/bloc_test/home_test/menu_bloc_test.dart
@@ -16,7 +16,7 @@ void main() {
)..add(const MenuEvent.initial());
await blocResponseFuture();
- assert(menuBloc.state.apps.length == 1);
+ assert(menuBloc.state.views.length == 1);
});
test('reorder apps', () async {
@@ -35,8 +35,8 @@ void main() {
menuBloc.add(const MenuEvent.moveApp(1, 3));
await blocResponseFuture();
- assert(menuBloc.state.apps[1].name == 'App 2');
- assert(menuBloc.state.apps[2].name == 'App 3');
- assert(menuBloc.state.apps[3].name == 'App 1');
+ assert(menuBloc.state.views[1].name == 'App 2');
+ assert(menuBloc.state.views[2].name == 'App 3');
+ assert(menuBloc.state.views[3].name == 'App 1');
});
}
diff --git a/frontend/appflowy_flutter/test/bloc_test/home_test/trash_bloc_test.dart b/frontend/appflowy_flutter/test/bloc_test/home_test/trash_bloc_test.dart
index da7d0159d3..03db7f34b0 100644
--- a/frontend/appflowy_flutter/test/bloc_test/home_test/trash_bloc_test.dart
+++ b/frontend/appflowy_flutter/test/bloc_test/home_test/trash_bloc_test.dart
@@ -1,14 +1,13 @@
import 'package:appflowy/plugins/document/document.dart';
import 'package:appflowy/plugins/trash/application/trash_bloc.dart';
import 'package:appflowy/workspace/application/app/app_bloc.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/app.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:flutter_test/flutter_test.dart';
import '../../util.dart';
class TrashTestContext {
- late AppPB app;
+ late ViewPB view;
late AppBloc appBloc;
late List allViews;
final AppFlowyUnitTest unitTest;
@@ -16,8 +15,8 @@ class TrashTestContext {
TrashTestContext(this.unitTest);
Future initialize() async {
- app = await unitTest.createTestApp();
- appBloc = AppBloc(app: app)..add(const AppEvent.initial());
+ view = await unitTest.createTestApp();
+ appBloc = AppBloc(view: view)..add(const AppEvent.initial());
await blocResponseFuture();
appBloc.add(AppEvent.createView(
@@ -40,7 +39,7 @@ class TrashTestContext {
);
await blocResponseFuture();
- allViews = [...appBloc.state.app.belongings.items];
+ allViews = [...appBloc.state.view.belongings];
assert(allViews.length == 3, 'but receive ${allViews.length}');
}
}
@@ -65,17 +64,17 @@ void main() {
await blocResponseFuture(millisecond: 200);
// delete a view
- final deletedView = context.appBloc.state.app.belongings.items[0];
+ final deletedView = context.appBloc.state.view.belongings[0];
context.appBloc.add(AppEvent.deleteView(deletedView.id));
await blocResponseFuture();
- assert(context.appBloc.state.app.belongings.items.length == 2);
+ assert(context.appBloc.state.view.belongings.length == 2);
assert(trashBloc.state.objects.length == 1);
assert(trashBloc.state.objects.first.id == deletedView.id);
// put back
trashBloc.add(TrashEvent.putback(deletedView.id));
await blocResponseFuture();
- assert(context.appBloc.state.app.belongings.items.length == 3);
+ assert(context.appBloc.state.view.belongings.length == 3);
assert(trashBloc.state.objects.isEmpty);
// delete all views
diff --git a/frontend/appflowy_flutter/test/bloc_test/home_test/view_bloc_test.dart b/frontend/appflowy_flutter/test/bloc_test/home_test/view_bloc_test.dart
index cc4c5ec832..3009035607 100644
--- a/frontend/appflowy_flutter/test/bloc_test/home_test/view_bloc_test.dart
+++ b/frontend/appflowy_flutter/test/bloc_test/home_test/view_bloc_test.dart
@@ -13,7 +13,7 @@ void main() {
test('rename view test', () async {
final app = await testContext.createTestApp();
- final appBloc = AppBloc(app: app)..add(const AppEvent.initial());
+ final appBloc = AppBloc(view: app)..add(const AppEvent.initial());
appBloc.add(AppEvent.createView(
"Test document",
DocumentPluginBuilder(),
@@ -30,7 +30,7 @@ void main() {
test('duplicate view test', () async {
final app = await testContext.createTestApp();
- final appBloc = AppBloc(app: app)..add(const AppEvent.initial());
+ final appBloc = AppBloc(view: app)..add(const AppEvent.initial());
await blocResponseFuture();
appBloc.add(AppEvent.createView(
@@ -51,7 +51,7 @@ void main() {
test('delete view test', () async {
final app = await testContext.createTestApp();
- final appBloc = AppBloc(app: app)..add(const AppEvent.initial());
+ final appBloc = AppBloc(view: app)..add(const AppEvent.initial());
await blocResponseFuture();
appBloc.add(AppEvent.createView(
diff --git a/frontend/appflowy_flutter/test/util.dart b/frontend/appflowy_flutter/test/util.dart
index 93340ddb72..f31d90b84e 100644
--- a/frontend/appflowy_flutter/test/util.dart
+++ b/frontend/appflowy_flutter/test/util.dart
@@ -3,10 +3,10 @@ import 'package:appflowy/startup/startup.dart';
import 'package:appflowy/user/application/auth_service.dart';
import 'package:appflowy/user/application/user_service.dart';
import 'package:appflowy/workspace/application/workspace/workspace_service.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flowy_infra/uuid.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/app.pb.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder/workspace.pb.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/workspace.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-user/protobuf.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@@ -81,7 +81,7 @@ class AppFlowyUnitTest {
workspaceService = WorkspaceService(workspaceId: currentWorkspace.id);
}
- Future createTestApp() async {
+ Future createTestApp() async {
final result = await workspaceService.createApp(name: "Test App");
return result.fold(
(app) => app,
@@ -89,7 +89,7 @@ class AppFlowyUnitTest {
);
}
- Future> loadApps() async {
+ Future> loadApps() async {
final result = await workspaceService.getApps();
return result.fold(
diff --git a/frontend/appflowy_tauri/src-tauri/Cargo.lock b/frontend/appflowy_tauri/src-tauri/Cargo.lock
index 406589203c..93a06be85a 100644
--- a/frontend/appflowy_tauri/src-tauri/Cargo.lock
+++ b/frontend/appflowy_tauri/src-tauri/Cargo.lock
@@ -72,9 +72,9 @@ dependencies = [
[[package]]
name = "anyhow"
-version = "1.0.68"
+version = "1.0.70"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61"
+checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4"
[[package]]
name = "appflowy_tauri"
@@ -123,7 +123,7 @@ checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -134,7 +134,7 @@ checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -274,7 +274,7 @@ dependencies = [
"borsh-schema-derive-internal",
"proc-macro-crate 0.1.5",
"proc-macro2",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -285,7 +285,7 @@ checksum = "186b734fa1c9f6743e90c95d7233c9faab6360d1a96d4ffa19d9cfd1e9350f8a"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -296,7 +296,7 @@ checksum = "99b7ff1008316626f485991b960ade129253d4034014616b94f309a15366cc49"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -354,7 +354,7 @@ checksum = "13e576ebe98e605500b3c8041bb888e966653577172df6dd97398714eb30b9bf"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -460,9 +460,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "chrono"
-version = "0.4.23"
+version = "0.4.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f"
+checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
dependencies = [
"iana-time-zone",
"js-sys",
@@ -517,7 +517,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -561,6 +561,70 @@ dependencies = [
"unicode-width",
]
+[[package]]
+name = "collab"
+version = "0.1.0"
+source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab#9b3f895bb6f8e92830acd90cfb68b69aece83095"
+dependencies = [
+ "anyhow",
+ "bytes",
+ "collab-persistence",
+ "lib0",
+ "parking_lot 0.12.1",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tracing",
+ "y-sync",
+ "yrs",
+]
+
+[[package]]
+name = "collab-derive"
+version = "0.1.0"
+source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab#9b3f895bb6f8e92830acd90cfb68b69aece83095"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "serde_json",
+ "syn 1.0.109",
+ "yrs",
+]
+
+[[package]]
+name = "collab-folder"
+version = "0.1.0"
+source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab#9b3f895bb6f8e92830acd90cfb68b69aece83095"
+dependencies = [
+ "anyhow",
+ "collab",
+ "collab-derive",
+ "collab-persistence",
+ "parking_lot 0.12.1",
+ "serde",
+ "serde_json",
+ "serde_repr",
+ "thiserror",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "collab-persistence"
+version = "0.1.0"
+source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab#9b3f895bb6f8e92830acd90cfb68b69aece83095"
+dependencies = [
+ "bincode",
+ "chrono",
+ "lib0",
+ "serde",
+ "sled",
+ "smallvec",
+ "thiserror",
+ "tokio",
+ "yrs",
+]
+
[[package]]
name = "color_quant"
version = "1.1.0"
@@ -736,7 +800,7 @@ dependencies = [
"proc-macro2",
"quote",
"smallvec",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -746,7 +810,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e"
dependencies = [
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -756,7 +820,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
dependencies = [
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -789,7 +853,7 @@ dependencies = [
"proc-macro2",
"quote",
"scratch",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -806,7 +870,7 @@ checksum = "39e61fda7e62115119469c7b3591fd913ecca96fb766cfd3f2e2502ab7bc87a5"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -830,7 +894,7 @@ dependencies = [
"proc-macro2",
"quote",
"strsim",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -841,7 +905,7 @@ checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
dependencies = [
"darling_core",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -854,7 +918,7 @@ dependencies = [
"hashbrown",
"lock_api",
"once_cell",
- "parking_lot_core",
+ "parking_lot_core 0.9.6",
]
[[package]]
@@ -877,7 +941,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -890,7 +954,7 @@ dependencies = [
"proc-macro2",
"quote",
"rustc_version 0.4.0",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -918,7 +982,7 @@ checksum = "45f5098f628d02a7a0f68ddba586fb61e80edec3bdc1be3b921f4ceec60858d3"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -1133,7 +1197,7 @@ version = "0.1.0"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -1160,7 +1224,7 @@ dependencies = [
"folder-model",
"lib-infra",
"lib-ot",
- "parking_lot",
+ "parking_lot 0.12.1",
"revision-model",
"serde",
"serde_json",
@@ -1178,7 +1242,7 @@ dependencies = [
"futures-util",
"lib-infra",
"lib-ws",
- "parking_lot",
+ "parking_lot 0.12.1",
"serde",
"serde_repr",
"thiserror",
@@ -1204,7 +1268,7 @@ dependencies = [
"serde",
"serde_json",
"similar",
- "syn",
+ "syn 1.0.109",
"tera",
"toml",
"walkdir",
@@ -1215,12 +1279,14 @@ name = "flowy-core"
version = "0.1.0"
dependencies = [
"bytes",
+ "collab-persistence",
"database-model",
"flowy-client-ws",
"flowy-database",
"flowy-document",
"flowy-error",
"flowy-folder",
+ "flowy-folder2",
"flowy-net",
"flowy-revision",
"flowy-sqlite",
@@ -1231,7 +1297,7 @@ dependencies = [
"lib-infra",
"lib-log",
"lib-ws",
- "parking_lot",
+ "parking_lot 0.12.1",
"revision-model",
"serde",
"serde_json",
@@ -1271,7 +1337,7 @@ dependencies = [
"lib-infra",
"lib-ot",
"nanoid",
- "parking_lot",
+ "parking_lot 0.12.1",
"protobuf",
"rayon",
"regex",
@@ -1299,7 +1365,7 @@ dependencies = [
"proc-macro2",
"quote",
"serde_json",
- "syn",
+ "syn 1.0.109",
"walkdir",
]
@@ -1388,7 +1454,7 @@ dependencies = [
"lib-infra",
"lib-ot",
"log",
- "parking_lot",
+ "parking_lot 0.12.1",
"pin-project",
"protobuf",
"revision-model",
@@ -1402,6 +1468,33 @@ dependencies = [
"ws-model",
]
+[[package]]
+name = "flowy-folder2"
+version = "0.1.0"
+dependencies = [
+ "bytes",
+ "chrono",
+ "collab",
+ "collab-folder",
+ "collab-persistence",
+ "flowy-codegen",
+ "flowy-derive",
+ "flowy-document",
+ "flowy-error",
+ "flowy-notification",
+ "lazy_static",
+ "lib-dispatch",
+ "lib-infra",
+ "nanoid",
+ "parking_lot 0.12.1",
+ "protobuf",
+ "strum",
+ "strum_macros",
+ "tokio",
+ "tracing",
+ "unicode-segmentation",
+]
+
[[package]]
name = "flowy-net"
version = "0.1.0"
@@ -1419,7 +1512,7 @@ dependencies = [
"flowy-derive",
"flowy-document",
"flowy-error",
- "flowy-folder",
+ "flowy-folder2",
"flowy-server-sync",
"flowy-sync",
"flowy-user",
@@ -1431,7 +1524,7 @@ dependencies = [
"lib-infra",
"lib-ws",
"nanoid",
- "parking_lot",
+ "parking_lot 0.12.1",
"protobuf",
"reqwest",
"revision-model",
@@ -1536,7 +1629,7 @@ dependencies = [
"folder-model",
"lib-infra",
"lib-ot",
- "parking_lot",
+ "parking_lot 0.12.1",
"revision-model",
"serde",
"strum",
@@ -1562,6 +1655,7 @@ name = "flowy-user"
version = "0.1.0"
dependencies = [
"bytes",
+ "collab-persistence",
"diesel",
"diesel_derives",
"flowy-codegen",
@@ -1574,7 +1668,7 @@ dependencies = [
"lib-infra",
"log",
"once_cell",
- "parking_lot",
+ "parking_lot 0.12.1",
"protobuf",
"serde",
"serde_json",
@@ -1625,6 +1719,16 @@ dependencies = [
"percent-encoding",
]
+[[package]]
+name = "fs2"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
[[package]]
name = "futf"
version = "0.1.5"
@@ -1691,7 +1795,7 @@ checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -1845,8 +1949,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
dependencies = [
"cfg-if",
+ "js-sys",
"libc",
"wasi 0.9.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
]
[[package]]
@@ -1928,7 +2034,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -2034,7 +2140,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -2100,7 +2206,7 @@ dependencies = [
"markup5ever",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -2527,7 +2633,7 @@ dependencies = [
"futures-util",
"lib-infra",
"log",
- "parking_lot",
+ "parking_lot 0.12.1",
"pin-project",
"protobuf",
"serde",
@@ -2540,6 +2646,17 @@ dependencies = [
"url",
]
+[[package]]
+name = "lib0"
+version = "0.16.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "daf23122cb1c970b77ea6030eac5e328669415b65d2ab245c99bfb110f9d62dc"
+dependencies = [
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
[[package]]
name = "libc"
version = "0.2.139"
@@ -2716,7 +2833,7 @@ dependencies = [
"migrations_internals",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -2892,7 +3009,7 @@ dependencies = [
"proc-macro-crate 1.2.1",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -2977,7 +3094,7 @@ checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -3040,6 +3157,17 @@ dependencies = [
"system-deps 6.0.3",
]
+[[package]]
+name = "parking_lot"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core 0.8.6",
+]
+
[[package]]
name = "parking_lot"
version = "0.12.1"
@@ -3047,7 +3175,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
dependencies = [
"lock_api",
- "parking_lot_core",
+ "parking_lot_core 0.9.6",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
+dependencies = [
+ "cfg-if",
+ "instant",
+ "libc",
+ "redox_syscall 0.2.16",
+ "smallvec",
+ "winapi",
]
[[package]]
@@ -3120,7 +3262,7 @@ dependencies = [
"pest_meta",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -3226,7 +3368,7 @@ dependencies = [
"proc-macro-hack",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -3240,7 +3382,7 @@ dependencies = [
"proc-macro-hack",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -3288,7 +3430,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -3376,7 +3518,7 @@ dependencies = [
"proc-macro-error-attr",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
"version_check",
]
@@ -3399,9 +3541,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
[[package]]
name = "proc-macro2"
-version = "1.0.51"
+version = "1.0.56"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6"
+checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
dependencies = [
"unicode-ident",
]
@@ -3510,14 +3652,14 @@ checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
name = "quote"
-version = "1.0.23"
+version = "1.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
+checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
dependencies = [
"proc-macro2",
]
@@ -3529,7 +3671,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51de85fb3fb6524929c8a2eb85e6b6d363de4e8c48f9e2c2eac4944abc181c93"
dependencies = [
"log",
- "parking_lot",
+ "parking_lot 0.12.1",
"scheduled-thread-pool",
]
@@ -3784,7 +3926,7 @@ checksum = "6eaedadc88b53e36dd32d940ed21ae4d850d5916f2581526921f553a72ac34c4"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -3891,7 +4033,7 @@ version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "977a7519bff143a44f842fd07e80ad1329295bd71686457f18e496736f4bf9bf"
dependencies = [
- "parking_lot",
+ "parking_lot 0.12.1",
]
[[package]]
@@ -3990,9 +4132,9 @@ dependencies = [
[[package]]
name = "serde"
-version = "1.0.152"
+version = "1.0.159"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
+checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065"
dependencies = [
"serde_derive",
]
@@ -4010,20 +4152,20 @@ dependencies = [
[[package]]
name = "serde_derive"
-version = "1.0.152"
+version = "1.0.159"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
+checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.13",
]
[[package]]
name = "serde_json"
-version = "1.0.91"
+version = "1.0.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883"
+checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744"
dependencies = [
"itoa 1.0.5",
"ryu",
@@ -4038,7 +4180,7 @@ checksum = "9a5ec9fa74a20ebbe5d9ac23dac1fc96ba0ecfe9f50f2843b52e537b10fbcb4e"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -4072,7 +4214,7 @@ dependencies = [
"darling",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -4094,7 +4236,7 @@ checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -4170,6 +4312,22 @@ dependencies = [
"autocfg",
]
+[[package]]
+name = "sled"
+version = "0.34.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f96b4737c2ce5987354855aed3797279def4ebf734436c6aa4552cf8e169935"
+dependencies = [
+ "crc32fast",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+ "fs2",
+ "fxhash",
+ "libc",
+ "log",
+ "parking_lot 0.11.2",
+]
+
[[package]]
name = "slug"
version = "0.1.4"
@@ -4179,6 +4337,15 @@ dependencies = [
"deunicode",
]
+[[package]]
+name = "smallstr"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e922794d168678729ffc7e07182721a14219c65814e66e91b839a272fe5ae4f"
+dependencies = [
+ "smallvec",
+]
+
[[package]]
name = "smallvec"
version = "1.10.0"
@@ -4252,7 +4419,7 @@ checksum = "213494b7a2b503146286049378ce02b482200519accc31872ee8be91fa820a08"
dependencies = [
"new_debug_unreachable",
"once_cell",
- "parking_lot",
+ "parking_lot 0.12.1",
"phf_shared 0.10.0",
"precomputed-hash",
"serde",
@@ -4291,7 +4458,7 @@ dependencies = [
"heck 0.3.3",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -4305,6 +4472,17 @@ dependencies = [
"unicode-ident",
]
+[[package]]
+name = "syn"
+version = "2.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
[[package]]
name = "system-deps"
version = "5.0.0"
@@ -4364,7 +4542,7 @@ dependencies = [
"ndk-sys",
"objc",
"once_cell",
- "parking_lot",
+ "parking_lot 0.12.1",
"paste",
"png",
"raw-window-handle",
@@ -4486,7 +4664,7 @@ dependencies = [
"heck 0.4.0",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
"tauri-codegen",
"tauri-utils",
]
@@ -4633,22 +4811,22 @@ checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c"
[[package]]
name = "thiserror"
-version = "1.0.38"
+version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.38"
+version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.13",
]
[[package]]
@@ -4736,7 +4914,7 @@ dependencies = [
"memchr",
"mio",
"num_cpus",
- "parking_lot",
+ "parking_lot 0.12.1",
"pin-project-lite",
"signal-hook-registry",
"socket2",
@@ -4752,7 +4930,7 @@ checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -4839,7 +5017,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -5220,7 +5398,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
"wasm-bindgen-shared",
]
@@ -5254,7 +5432,7 @@ checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -5342,7 +5520,7 @@ checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -5432,7 +5610,7 @@ version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7"
dependencies = [
- "syn",
+ "syn 1.0.109",
"windows-tokens",
]
@@ -5662,6 +5840,17 @@ version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3"
+[[package]]
+name = "y-sync"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e77a143afe4dde83bc987ad3119228d0f107053a3da131a00738cb2d7f496641"
+dependencies = [
+ "lib0",
+ "thiserror",
+ "yrs",
+]
+
[[package]]
name = "yaml-rust"
version = "0.4.5"
@@ -5670,3 +5859,17 @@ checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
dependencies = [
"linked-hash-map",
]
+
+[[package]]
+name = "yrs"
+version = "0.16.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c2aef2bf89b4f7c003f9c73f1c8097427ca32e1d006443f3f607f11e79a797b"
+dependencies = [
+ "atomic_refcell",
+ "lib0",
+ "rand 0.7.3",
+ "smallstr",
+ "smallvec",
+ "thiserror",
+]
diff --git a/frontend/appflowy_tauri/src-tauri/Cargo.toml b/frontend/appflowy_tauri/src-tauri/Cargo.toml
index 04fccca1aa..085164b8fc 100644
--- a/frontend/appflowy_tauri/src-tauri/Cargo.toml
+++ b/frontend/appflowy_tauri/src-tauri/Cargo.toml
@@ -31,3 +31,15 @@ default = ["custom-protocol"]
# this feature is used used for production builds where `devPath` points to the filesystem
# DO NOT remove this
custom-protocol = ["tauri/custom-protocol"]
+
+[patch.crates-io]
+collab = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab" }
+collab-folder = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab" }
+collab-persistence = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab" }
+#collab = { path = "../../AppFlowy-Collab/collab" }
+#collab-folder = { path = "../../AppFlowy-Collab/collab-folder" }
+#collab-persistence = { path = "../../AppFlowy-Collab/collab-persistence" }
+
+
+
+
diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/database-hooks/useDatabase.ts b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/database-hooks/useDatabase.ts
index e7187384fa..e39dc29ec0 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/database-hooks/useDatabase.ts
+++ b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/database-hooks/useDatabase.ts
@@ -5,11 +5,11 @@ import { useAppDispatch } from '$app/stores/store';
import loadField from './loadField';
import { FieldInfo } from '$app/stores/effects/database/field/field_controller';
import { RowInfo } from '$app/stores/effects/database/row/row_cache';
-import { ViewLayoutTypePB } from '@/services/backend';
+import { ViewLayoutPB } from '@/services/backend';
import { DatabaseGroupController } from '$app/stores/effects/database/group/group_controller';
import { OnDragEndResponder } from 'react-beautiful-dnd';
-export const useDatabase = (viewId: string, type?: ViewLayoutTypePB) => {
+export const useDatabase = (viewId: string, type?: ViewLayoutPB) => {
const dispatch = useAppDispatch();
const [controller, setController] = useState();
const [rows, setRows] = useState([]);
@@ -58,7 +58,7 @@ export const useDatabase = (viewId: string, type?: ViewLayoutTypePB) => {
});
await controller.open();
- if (type === ViewLayoutTypePB.Board) {
+ if (type === ViewLayoutPB.Board) {
const fieldId = await controller.getGroupByFieldId();
setGroupByFieldId(fieldId.unwrap());
setGroups(controller.groups.value);
diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/auth/auth.hooks.ts b/frontend/appflowy_tauri/src/appflowy_app/components/auth/auth.hooks.ts
index 21be5aa783..6cb486e35b 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/components/auth/auth.hooks.ts
+++ b/frontend/appflowy_tauri/src/appflowy_app/components/auth/auth.hooks.ts
@@ -2,8 +2,8 @@ import { currentUserActions } from '../../stores/reducers/current-user/slice';
import { useAppDispatch, useAppSelector } from '../../stores/store';
import { UserProfilePB } from '../../../services/backend/events/flowy-user';
import { AuthBackendService, UserBackendService } from '../../stores/effects/user/user_bd_svc';
-import { FolderEventReadCurrentWorkspace } from '../../../services/backend/events/flowy-folder';
-import { WorkspaceSettingPB } from '../../../services/backend/models/flowy-folder/workspace';
+import { FolderEventReadCurrentWorkspace } from '../../../services/backend/events/flowy-folder2';
+import { WorkspaceSettingPB } from '../../../services/backend/models/flowy-folder2/workspace';
import { Log } from '../../utils/log';
export const useAuth = () => {
diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/board/Board.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/board/Board.tsx
index 7df79ede9a..b4b00d1796 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/components/board/Board.tsx
+++ b/frontend/appflowy_tauri/src/appflowy_app/components/board/Board.tsx
@@ -3,17 +3,14 @@ import { SearchInput } from '../_shared/SearchInput';
import { BoardBlock } from './BoardBlock';
import { NewBoardBlock } from './NewBoardBlock';
import { useDatabase } from '../_shared/database-hooks/useDatabase';
-import { ViewLayoutTypePB } from '@/services/backend';
+import { ViewLayoutPB } from '@/services/backend';
import { DragDropContext } from 'react-beautiful-dnd';
import { useState } from 'react';
import { RowInfo } from '$app/stores/effects/database/row/row_cache';
import { EditRow } from '$app/components/_shared/EditRow/EditRow';
export const Board = ({ viewId }: { viewId: string }) => {
- const { controller, rows, groups, groupByFieldId, onNewRowClick, onDragEnd } = useDatabase(
- viewId,
- ViewLayoutTypePB.Board
- );
+ const { controller, rows, groups, groupByFieldId, onNewRowClick, onDragEnd } = useDatabase(viewId, ViewLayoutPB.Board);
const [showBoardRow, setShowBoardRow] = useState(false);
const [boardRowInfo, setBoardRowInfo] = useState();
diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/FolderItem.hooks.ts b/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/FolderItem.hooks.ts
index 5c61a933ac..34850a89c3 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/FolderItem.hooks.ts
+++ b/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/FolderItem.hooks.ts
@@ -2,7 +2,7 @@ import { foldersActions, IFolder } from '../../../stores/reducers/folders/slice'
import { useEffect, useState } from 'react';
import { useAppDispatch, useAppSelector } from '../../../stores/store';
import { IPage, pagesActions } from '../../../stores/reducers/pages/slice';
-import { AppPB, ViewLayoutTypePB } from '@/services/backend';
+import { ViewLayoutPB } from '@/services/backend';
import { AppBackendService } from '../../../stores/effects/folder/app/app_bd_svc';
import { WorkspaceBackendService } from '../../../stores/effects/folder/workspace/workspace_bd_svc';
import { useError } from '../../error/Error.hooks';
@@ -39,10 +39,10 @@ export const useFolderEvents = (folder: IFolder, pages: IPage[]) => {
void appObserver.subscribe({
onAppChanged: (change) => {
if (change.ok) {
- const app: AppPB = change.val;
- const updatedPages: IPage[] = app.belongings.items.map((view) => ({
+ const views = change.val;
+ const updatedPages: IPage[] = views.items.map((view) => ({
id: view.id,
- folderId: view.app_id,
+ folderId: view.parent_view_id,
pageType: view.layout,
title: view.name,
}));
@@ -129,13 +129,13 @@ export const useFolderEvents = (folder: IFolder, pages: IPage[]) => {
try {
const newView = await appBackendService.createView({
name: 'New Document 1',
- layoutType: ViewLayoutTypePB.Document,
+ layoutType: ViewLayoutPB.Document,
});
appDispatch(
pagesActions.addPage({
folderId: folder.id,
- pageType: ViewLayoutTypePB.Document,
+ pageType: ViewLayoutPB.Document,
title: newView.name,
id: newView.id,
})
@@ -154,7 +154,7 @@ export const useFolderEvents = (folder: IFolder, pages: IPage[]) => {
try {
const newView = await appBackendService.createView({
name: 'New Board 1',
- layoutType: ViewLayoutTypePB.Board,
+ layoutType: ViewLayoutPB.Board,
});
setShowPages(true);
@@ -162,7 +162,7 @@ export const useFolderEvents = (folder: IFolder, pages: IPage[]) => {
appDispatch(
pagesActions.addPage({
folderId: folder.id,
- pageType: ViewLayoutTypePB.Board,
+ pageType: ViewLayoutPB.Board,
title: newView.name,
id: newView.id,
})
@@ -179,7 +179,7 @@ export const useFolderEvents = (folder: IFolder, pages: IPage[]) => {
try {
const newView = await appBackendService.createView({
name: 'New Grid 1',
- layoutType: ViewLayoutTypePB.Grid,
+ layoutType: ViewLayoutPB.Grid,
});
setShowPages(true);
@@ -187,7 +187,7 @@ export const useFolderEvents = (folder: IFolder, pages: IPage[]) => {
appDispatch(
pagesActions.addPage({
folderId: folder.id,
- pageType: ViewLayoutTypePB.Grid,
+ pageType: ViewLayoutPB.Grid,
title: newView.name,
id: newView.id,
})
diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/NavigationPanel.hooks.ts b/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/NavigationPanel.hooks.ts
index d728c1e838..a3ef4c1752 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/NavigationPanel.hooks.ts
+++ b/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/NavigationPanel.hooks.ts
@@ -1,7 +1,7 @@
import { useAppSelector } from '../../../stores/store';
import { useNavigate } from 'react-router-dom';
import { IPage } from '../../../stores/reducers/pages/slice';
-import { ViewLayoutTypePB } from '@/services/backend';
+import { ViewLayoutPB } from '@/services/backend';
import { useState } from 'react';
export const useNavigationPanelHooks = function () {
@@ -23,12 +23,12 @@ export const useNavigationPanelHooks = function () {
const onPageClick = (page: IPage) => {
let pageTypeRoute = (() => {
switch (page.pageType) {
- case ViewLayoutTypePB.Document:
+ case ViewLayoutPB.Document:
return 'document';
break;
- case ViewLayoutTypePB.Grid:
+ case ViewLayoutPB.Grid:
return 'grid';
- case ViewLayoutTypePB.Board:
+ case ViewLayoutPB.Board:
return 'board';
default:
return 'document';
diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/PageItem.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/PageItem.tsx
index b1736c1435..e00f37d0f9 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/PageItem.tsx
+++ b/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/PageItem.tsx
@@ -7,7 +7,7 @@ import { IPage } from '../../../stores/reducers/pages/slice';
import { Button } from '../../_shared/Button';
import { usePageEvents } from './PageItem.hooks';
import { RenamePopup } from './RenamePopup';
-import { ViewLayoutTypePB } from '@/services/backend';
+import { ViewLayoutPB } from '@/services/backend';
import { useEffect, useRef, useState } from 'react';
import { PAGE_ITEM_HEIGHT } from '../../_shared/constants';
@@ -47,9 +47,9 @@ export const PageItem = ({ page, onPageClick }: { page: IPage; onPageClick: () =
>
- {page.pageType === ViewLayoutTypePB.Document && }
- {page.pageType === ViewLayoutTypePB.Board && }
- {page.pageType === ViewLayoutTypePB.Grid && }
+ {page.pageType === ViewLayoutPB.Document && }
+ {page.pageType === ViewLayoutPB.Board && }
+ {page.pageType === ViewLayoutPB.Grid && }
{page.title}
diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/layout/Workspace.hooks.ts b/frontend/appflowy_tauri/src/appflowy_app/components/layout/Workspace.hooks.ts
index 5c1efcbc53..59d1231a7e 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/components/layout/Workspace.hooks.ts
+++ b/frontend/appflowy_tauri/src/appflowy_app/components/layout/Workspace.hooks.ts
@@ -6,11 +6,11 @@ import { UserBackendService } from '../../stores/effects/user/user_bd_svc';
import { useError } from '../error/Error.hooks';
export const useWorkspace = () => {
- const appDispatch = useAppDispatch();
const currentUser = useAppSelector((state) => state.currentUser);
- const error = useError();
- const userBackendService: UserBackendService = new UserBackendService(currentUser.id || '');
+ const appDispatch = useAppDispatch();
+ const error = useError();
+ const userBackendService: UserBackendService = new UserBackendService(currentUser.id || 0);
const loadWorkspaceItems = async () => {
try {
@@ -20,11 +20,11 @@ export const useWorkspace = () => {
appDispatch(foldersActions.clearFolders());
appDispatch(pagesActions.clearPages());
- const apps = workspace.apps.items;
+ const apps = workspace.views;
for (const app of apps) {
appDispatch(foldersActions.addFolder({ id: app.id, title: app.name }));
- const views = app.belongings.items;
+ const views = app.belongings;
for (const view of views) {
appDispatch(pagesActions.addPage({ folderId: app.id, id: view.id, pageType: view.layout, title: view.name }));
}
diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/tests/DatabaseTestHelper.ts b/frontend/appflowy_tauri/src/appflowy_app/components/tests/DatabaseTestHelper.ts
index 7ab6cdd5ce..6930e7c0e1 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/components/tests/DatabaseTestHelper.ts
+++ b/frontend/appflowy_tauri/src/appflowy_app/components/tests/DatabaseTestHelper.ts
@@ -1,11 +1,11 @@
import {
FieldType,
SingleSelectTypeOptionPB,
- ViewLayoutTypePB,
+ ViewLayoutPB,
ViewPB,
WorkspaceSettingPB,
} from '../../../services/backend';
-import { FolderEventReadCurrentWorkspace } from '../../../services/backend/events/flowy-folder';
+import { FolderEventReadCurrentWorkspace } from '../../../services/backend/events/flowy-folder2';
import { AppBackendService } from '../../stores/effects/folder/app/app_bd_svc';
import { DatabaseController } from '../../stores/effects/database/database_controller';
import { RowInfo } from '../../stores/effects/database/row/row_cache';
@@ -29,9 +29,9 @@ import { SelectOptionBackendService } from '../../stores/effects/database/cell/s
// Create a database view for specific layout type
// Do not use it production code. Just for testing
-export async function createTestDatabaseView(layout: ViewLayoutTypePB): Promise {
+export async function createTestDatabaseView(layout: ViewLayoutPB): Promise {
const workspaceSetting: WorkspaceSettingPB = await FolderEventReadCurrentWorkspace().then((result) => result.unwrap());
- const app = workspaceSetting.workspace.apps.items[0];
+ const app = workspaceSetting.workspace.views[0];
const appService = new AppBackendService(app.id);
return await appService.createView({ name: 'New Grid', layoutType: layout });
}
diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/tests/DocumentTestHelper.ts b/frontend/appflowy_tauri/src/appflowy_app/components/tests/DocumentTestHelper.ts
index f05220df94..4656d06577 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/components/tests/DocumentTestHelper.ts
+++ b/frontend/appflowy_tauri/src/appflowy_app/components/tests/DocumentTestHelper.ts
@@ -1,10 +1,10 @@
-import { ViewLayoutTypePB, WorkspaceSettingPB } from '../../../services/backend';
-import { FolderEventReadCurrentWorkspace } from '../../../services/backend/events/flowy-folder';
-import { AppBackendService } from '../../stores/effects/folder/app/app_bd_svc';
+import { ViewLayoutPB, WorkspaceSettingPB } from '@/services/backend';
+import { FolderEventReadCurrentWorkspace } from '@/services/backend/events/flowy-folder2';
+import { AppBackendService } from '$app/stores/effects/folder/app/app_bd_svc';
export async function createTestDocument() {
const workspaceSetting: WorkspaceSettingPB = await FolderEventReadCurrentWorkspace().then((result) => result.unwrap());
- const app = workspaceSetting.workspace.apps.items[0];
+ const app = workspaceSetting.workspace.views[0];
const appService = new AppBackendService(app.id);
- return await appService.createView({ name: 'New Document', layoutType: ViewLayoutTypePB.Document });
+ return await appService.createView({ name: 'New Document', layoutType: ViewLayoutPB.Document });
}
diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/tests/TestApiButton.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/tests/TestApiButton.tsx
deleted file mode 100644
index 161e94d596..0000000000
--- a/frontend/appflowy_tauri/src/appflowy_app/components/tests/TestApiButton.tsx
+++ /dev/null
@@ -1,129 +0,0 @@
-import { SignInPayloadPB } from '../../../services/backend/models/flowy-user/index';
-import { nanoid } from 'nanoid';
-import { UserNotificationListener } from '../user/application/notifications';
-import {
- ColorStylePB,
- CreateAppPayloadPB,
- CreateWorkspacePayloadPB,
- FolderEventCreateApp,
- FolderEventCreateWorkspace,
- FolderEventOpenWorkspace,
- WorkspaceIdPB,
-} from '../../../services/backend/events/flowy-folder';
-import { useEffect, useState } from 'react';
-import * as dependency_1 from '../../../services/backend/models/flowy-folder/app';
-import { UserEventGetUserSetting, UserEventSignIn } from '../../../services/backend/events/flowy-user';
-
-const TestApiButton = () => {
- const [workspaceId, setWorkspaceId] = useState('');
- const [appId, setAppId] = useState('');
-
- useEffect(() => {
- if (!workspaceId?.length) return;
- void (async () => {
- const openWorkspaceResult = await FolderEventOpenWorkspace(
- WorkspaceIdPB.fromObject({
- value: workspaceId,
- })
- );
-
- if (openWorkspaceResult.ok) {
- const pb = openWorkspaceResult.val;
- console.log(pb.toObject());
- } else {
- throw new Error('open workspace error');
- }
-
- const createAppResult = await FolderEventCreateApp(
- CreateAppPayloadPB.fromObject({
- name: 'APP_1',
- desc: 'Application One',
- color_style: ColorStylePB.fromObject({ theme_color: 'light' }),
- workspace_id: workspaceId,
- })
- );
- if (createAppResult.ok) {
- const pb = createAppResult.val;
- const obj = pb.toObject();
- console.log(obj);
- } else {
- throw new Error('create app error');
- }
- })();
- }, [workspaceId]);
-
- async function sendSignInEvent() {
- const make_payload = () =>
- SignInPayloadPB.fromObject({
- email: nanoid(4) + '@gmail.com',
- password: 'A!@123abc',
- name: 'abc',
- });
-
- const listener = new UserNotificationListener({
- onUserSignIn: (userProfile) => {
- console.log(userProfile);
- },
- onProfileUpdate: (userProfile) => {
- console.log(userProfile);
- // stop listening the changes
- void listener.stop();
- },
- });
-
- await listener.start();
-
- const signInResult = await UserEventSignIn(make_payload());
- if (signInResult.ok) {
- const pb = signInResult.val;
- console.log(pb.toObject());
- } else {
- throw new Error('sign in error');
- }
-
- const getSettingsResult = await UserEventGetUserSetting();
- if (getSettingsResult.ok) {
- const pb = getSettingsResult.val;
- console.log(pb.toObject());
- } else {
- throw new Error('get user settings error');
- }
-
- const createWorkspaceResult = await FolderEventCreateWorkspace(
- CreateWorkspacePayloadPB.fromObject({
- name: 'WS_1',
- desc: 'Workspace One',
- })
- );
-
- if (createWorkspaceResult.ok) {
- const pb = createWorkspaceResult.val;
- console.log(pb.toObject());
- const workspace: {
- id?: string;
- name?: string;
- desc?: string;
- apps?: ReturnType;
- modified_time?: number;
- create_time?: number;
- } = pb.toObject();
- setWorkspaceId(workspace?.id || '');
- } else {
- throw new Error('create workspace error');
- }
-
- /**/
- }
-
- return (
- <>
-
- sendSignInEvent()}>
- Sign in and create sample data
-
-
- >
- );
-};
-
-export default TestApiButton;
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 1a3925c82c..e44d334861 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/components/tests/TestGrid.tsx
+++ b/frontend/appflowy_tauri/src/appflowy_app/components/tests/TestGrid.tsx
@@ -1,11 +1,5 @@
import React from 'react';
-import {
- FieldType,
- NumberFormat,
- NumberTypeOptionPB,
- SelectOptionCellDataPB,
- ViewLayoutTypePB,
-} from '@/services/backend';
+import { FieldType, NumberFormat, NumberTypeOptionPB, SelectOptionCellDataPB, ViewLayoutPB } from '@/services/backend';
import { Log } from '$app/utils/log';
import {
assert,
@@ -60,7 +54,7 @@ export const RunAllGridTests = () => {
};
async function createBuildInGrid() {
- const view = await createTestDatabaseView(ViewLayoutTypePB.Grid);
+ const view = await createTestDatabaseView(ViewLayoutPB.Grid);
const databaseController = await openTestDatabase(view.id);
databaseController.subscribe({
onViewChanged: (databasePB) => {
@@ -82,7 +76,7 @@ async function createBuildInGrid() {
}
async function testEditGridCell() {
- const view = await createTestDatabaseView(ViewLayoutTypePB.Grid);
+ const view = await createTestDatabaseView(ViewLayoutPB.Grid);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
@@ -95,7 +89,7 @@ async function testEditGridCell() {
}
async function testEditTextCell() {
- const view = await createTestDatabaseView(ViewLayoutTypePB.Grid);
+ const view = await createTestDatabaseView(ViewLayoutPB.Grid);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
@@ -117,7 +111,7 @@ async function testEditTextCell() {
}
async function testEditURLCell() {
- const view = await createTestDatabaseView(ViewLayoutTypePB.Grid);
+ const view = await createTestDatabaseView(ViewLayoutPB.Grid);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
@@ -144,7 +138,7 @@ async function testEditURLCell() {
}
async function testEditDateCell() {
- const view = await createTestDatabaseView(ViewLayoutTypePB.Grid);
+ const view = await createTestDatabaseView(ViewLayoutPB.Grid);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
@@ -169,7 +163,7 @@ async function testEditDateCell() {
}
async function testCheckboxCell() {
- const view = await createTestDatabaseView(ViewLayoutTypePB.Grid);
+ const view = await createTestDatabaseView(ViewLayoutPB.Grid);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
@@ -195,7 +189,7 @@ async function testCheckboxCell() {
}
async function testCreateRow() {
- const view = await createTestDatabaseView(ViewLayoutTypePB.Grid);
+ const view = await createTestDatabaseView(ViewLayoutPB.Grid);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
await assertNumberOfRows(view.id, 3);
@@ -207,7 +201,7 @@ async function testCreateRow() {
}
async function testDeleteRow() {
- const view = await createTestDatabaseView(ViewLayoutTypePB.Grid);
+ const view = await createTestDatabaseView(ViewLayoutPB.Grid);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
@@ -226,7 +220,7 @@ async function testDeleteRow() {
}
async function testCreateOptionInCell() {
- const view = await createTestDatabaseView(ViewLayoutTypePB.Grid);
+ const view = await createTestDatabaseView(ViewLayoutPB.Grid);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
for (const [index, row] of databaseController.databaseViewCache.rowInfos.entries()) {
@@ -253,7 +247,7 @@ async function testCreateOptionInCell() {
}
async function testMoveField() {
- const view = await createTestDatabaseView(ViewLayoutTypePB.Grid);
+ const view = await createTestDatabaseView(ViewLayoutPB.Grid);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
@@ -271,7 +265,7 @@ async function testMoveField() {
}
async function testGetSingleSelectFieldData() {
- const view = await createTestDatabaseView(ViewLayoutTypePB.Grid);
+ const view = await createTestDatabaseView(ViewLayoutPB.Grid);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
@@ -296,7 +290,7 @@ async function testGetSingleSelectFieldData() {
}
async function testSwitchFromSingleSelectToNumber() {
- const view = await createTestDatabaseView(ViewLayoutTypePB.Grid);
+ const view = await createTestDatabaseView(ViewLayoutPB.Grid);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
@@ -322,7 +316,7 @@ async function testSwitchFromSingleSelectToNumber() {
}
async function testSwitchFromMultiSelectToRichText() {
- const view = await createTestDatabaseView(ViewLayoutTypePB.Grid);
+ const view = await createTestDatabaseView(ViewLayoutPB.Grid);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
@@ -372,7 +366,7 @@ async function testSwitchFromMultiSelectToRichText() {
}
async function testEditField() {
- const view = await createTestDatabaseView(ViewLayoutTypePB.Grid);
+ const view = await createTestDatabaseView(ViewLayoutPB.Grid);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
const fieldInfos = databaseController.fieldController.fieldInfos;
@@ -390,7 +384,7 @@ async function testEditField() {
}
async function testCreateNewField() {
- const view = await createTestDatabaseView(ViewLayoutTypePB.Grid);
+ const view = await createTestDatabaseView(ViewLayoutPB.Grid);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
await assertNumberOfFields(view.id, 3);
@@ -403,7 +397,7 @@ async function testCreateNewField() {
}
async function testDeleteField() {
- const view = await createTestDatabaseView(ViewLayoutTypePB.Grid);
+ const view = await createTestDatabaseView(ViewLayoutPB.Grid);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/tests/TestGroup.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/tests/TestGroup.tsx
index bbcf7a860c..b612d9ab9c 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/components/tests/TestGroup.tsx
+++ b/frontend/appflowy_tauri/src/appflowy_app/components/tests/TestGroup.tsx
@@ -5,7 +5,7 @@ import {
createTestDatabaseView,
openTestDatabase,
} from './DatabaseTestHelper';
-import { FieldType, ViewLayoutTypePB } from '../../../services/backend';
+import { FieldType, ViewLayoutPB } from '../../../services/backend';
import React from 'react';
export const TestAllKanbanTests = () => {
@@ -29,7 +29,7 @@ export const TestAllKanbanTests = () => {
};
async function createBuildInBoard() {
- const view = await createTestDatabaseView(ViewLayoutTypePB.Board);
+ const view = await createTestDatabaseView(ViewLayoutPB.Board);
const databaseController = await openTestDatabase(view.id);
databaseController.subscribe({
onGroupByField: (groups) => {
@@ -49,7 +49,7 @@ async function createBuildInBoard() {
}
async function createKanbanBoardRow() {
- const view = await createTestDatabaseView(ViewLayoutTypePB.Board);
+ const view = await createTestDatabaseView(ViewLayoutPB.Board);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
@@ -62,7 +62,7 @@ async function createKanbanBoardRow() {
}
async function moveKanbanBoardRow() {
- const view = await createTestDatabaseView(ViewLayoutTypePB.Board);
+ const view = await createTestDatabaseView(ViewLayoutPB.Board);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
@@ -113,7 +113,7 @@ async function moveKanbanBoardRow() {
}
async function createKanbanBoardColumn() {
- const view = await createTestDatabaseView(ViewLayoutTypePB.Board);
+ const view = await createTestDatabaseView(ViewLayoutPB.Board);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
@@ -128,7 +128,7 @@ async function createKanbanBoardColumn() {
}
async function createColumnInBoard() {
- const view = await createTestDatabaseView(ViewLayoutTypePB.Board);
+ const view = await createTestDatabaseView(ViewLayoutPB.Board);
const databaseController = await openTestDatabase(view.id);
await databaseController.open().then((result) => result.unwrap());
diff --git a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/database_bd_svc.ts b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/database_bd_svc.ts
index bce7783ddc..8b41f96f1c 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/database_bd_svc.ts
+++ b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/database_bd_svc.ts
@@ -23,7 +23,7 @@ import {
CreateRowPayloadPB,
ViewIdPB,
} from '@/services/backend';
-import { FolderEventCloseView } from '@/services/backend/events/flowy-folder';
+import { FolderEventCloseView } from '@/services/backend/events/flowy-folder2';
/// A service that wraps the backend service
export class DatabaseBackendService {
diff --git a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/document/document_bd_svc.ts b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/document/document_bd_svc.ts
index 095abcaa5b..c582b1f7d2 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/document/document_bd_svc.ts
+++ b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/document/document_bd_svc.ts
@@ -8,7 +8,7 @@ import {
} from '@/services/backend';
import { DocumentEventApplyEdit, DocumentEventGetDocument } from '@/services/backend/events/flowy-document';
import { Result } from 'ts-results';
-import { FolderEventCloseView } from '@/services/backend/events/flowy-folder';
+import { FolderEventCloseView } from '@/services/backend/events/flowy-folder2';
export class DocumentBackendService {
constructor(public readonly viewId: string) {}
diff --git a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/folder/app/app_bd_svc.ts b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/folder/app/app_bd_svc.ts
index 47c27c741d..57cabe7705 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/folder/app/app_bd_svc.ts
+++ b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/folder/app/app_bd_svc.ts
@@ -1,21 +1,20 @@
import {
FolderEventCreateView,
- FolderEventDeleteApp,
FolderEventDeleteView,
FolderEventMoveItem,
- FolderEventReadApp,
- FolderEventUpdateApp,
- ViewLayoutTypePB,
-} from '@/services/backend/events/flowy-folder';
+ FolderEventReadView,
+ FolderEventUpdateView,
+ ViewLayoutPB,
+} from '@/services/backend/events/flowy-folder2';
import {
- AppIdPB,
- UpdateAppPayloadPB,
CreateViewPayloadPB,
RepeatedViewIdPB,
ViewPB,
MoveFolderItemPayloadPB,
MoveFolderItemType,
FlowyError,
+ ViewIdPB,
+ UpdateViewPayloadPB,
} from '@/services/backend';
import { None, Result, Some } from 'ts-results';
@@ -23,14 +22,14 @@ export class AppBackendService {
constructor(public readonly appId: string) {}
getApp = () => {
- const payload = AppIdPB.fromObject({ value: this.appId });
- return FolderEventReadApp(payload);
+ const payload = ViewIdPB.fromObject({ value: this.appId });
+ return FolderEventReadView(payload);
};
createView = async (params: {
name: string;
desc?: string;
- layoutType: ViewLayoutTypePB;
+ layoutType: ViewLayoutPB;
/// The initial data should be the JSON of the document
/// For example: {"document":{"type":"editor","children":[]}}
initialData?: string;
@@ -54,9 +53,9 @@ export class AppBackendService {
};
getAllViews = (): Promise> => {
- const payload = AppIdPB.fromObject({ value: this.appId });
- return FolderEventReadApp(payload).then((result) => {
- return result.map((app) => app.belongings.items);
+ const payload = ViewIdPB.fromObject({ value: this.appId });
+ return FolderEventReadView(payload).then((result) => {
+ return result.map((app) => app.belongings);
});
};
@@ -75,16 +74,16 @@ export class AppBackendService {
};
update = async (params: { name: string }) => {
- const payload = UpdateAppPayloadPB.fromObject({ app_id: this.appId, name: params.name });
- const result = await FolderEventUpdateApp(payload);
+ const payload = UpdateViewPayloadPB.fromObject({ view_id: this.appId, name: params.name });
+ const result = await FolderEventUpdateView(payload);
if (!result.ok) {
throw new Error(result.val.msg);
}
};
delete = async () => {
- const payload = AppIdPB.fromObject({ value: this.appId });
- const result = await FolderEventDeleteApp(payload);
+ const payload = RepeatedViewIdPB.fromObject({ items: [this.appId] });
+ const result = await FolderEventDeleteView(payload);
if (!result.ok) {
throw new Error(result.val.msg);
}
diff --git a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/folder/app/app_observer.ts b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/folder/app/app_observer.ts
index 6440cb37c0..a2c430d92f 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/folder/app/app_observer.ts
+++ b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/folder/app/app_observer.ts
@@ -1,12 +1,12 @@
import { Ok, Result } from 'ts-results';
-import { AppPB, FlowyError, FolderNotification } from '@/services/backend';
+import { FlowyError, FolderNotification, RepeatedViewPB } from '@/services/backend';
import { ChangeNotifier } from '$app/utils/change_notifier';
import { FolderNotificationObserver } from '../notifications/observer';
-export type AppUpdateNotifyCallback = (value: Result) => void;
+export type AppUpdateNotifyCallback = (value: Result) => void;
export class AppObserver {
- _appNotifier = new ChangeNotifier>();
+ _appNotifier = new ChangeNotifier>();
_listener?: FolderNotificationObserver;
constructor(public readonly appId: string) {}
@@ -17,9 +17,9 @@ export class AppObserver {
viewId: this.appId,
parserHandler: (notification, result) => {
switch (notification) {
- case FolderNotification.DidUpdateWorkspaceApps:
+ case FolderNotification.DidUpdateWorkspaceViews:
if (result.ok) {
- this._appNotifier?.notify(Ok(AppPB.deserializeBinary(result.val)));
+ this._appNotifier?.notify(Ok(RepeatedViewPB.deserializeBinary(result.val)));
} else {
this._appNotifier?.notify(result);
}
diff --git a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/folder/view/view_bd_svc.ts b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/folder/view/view_bd_svc.ts
index f3fbd99829..ec98fb08ce 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/folder/view/view_bd_svc.ts
+++ b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/folder/view/view_bd_svc.ts
@@ -3,7 +3,7 @@ import {
FolderEventDeleteView,
FolderEventDuplicateView,
FolderEventUpdateView,
-} from '@/services/backend/events/flowy-folder';
+} from '@/services/backend/events/flowy-folder2';
export class ViewBackendService {
constructor(public readonly viewId: string) {}
diff --git a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/folder/workspace/workspace_bd_svc.ts b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/folder/workspace/workspace_bd_svc.ts
index fec8269cc6..c92169ade7 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/folder/workspace/workspace_bd_svc.ts
+++ b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/folder/workspace/workspace_bd_svc.ts
@@ -1,24 +1,31 @@
import { Err, Ok } from 'ts-results';
import {
- FolderEventCreateApp,
+ FolderEventCreateView,
FolderEventMoveItem,
FolderEventReadWorkspaceApps,
FolderEventReadWorkspaces,
-} from '@/services/backend/events/flowy-folder';
-import { CreateAppPayloadPB, WorkspaceIdPB, FlowyError, MoveFolderItemPayloadPB } from '@/services/backend';
+} from '@/services/backend/events/flowy-folder2';
+import {
+ CreateViewPayloadPB,
+ FlowyError,
+ MoveFolderItemPayloadPB,
+ ViewLayoutPB,
+ WorkspaceIdPB,
+} from '@/services/backend';
import assert from 'assert';
export class WorkspaceBackendService {
constructor(public readonly workspaceId: string) {}
createApp = async (params: { name: string; desc?: string }) => {
- const payload = CreateAppPayloadPB.fromObject({
- workspace_id: this.workspaceId,
+ const payload = CreateViewPayloadPB.fromObject({
+ belong_to_id: this.workspaceId,
name: params.name,
desc: params.desc || '',
+ layout: ViewLayoutPB.Document,
});
- const result = await FolderEventCreateApp(payload);
+ const result = await FolderEventCreateView(payload);
if (result.ok) {
return result.val;
} else {
diff --git a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/folder/workspace/workspace_observer.ts b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/folder/workspace/workspace_observer.ts
index 0b9efdab5a..7fd72c6622 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/folder/workspace/workspace_observer.ts
+++ b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/folder/workspace/workspace_observer.ts
@@ -1,9 +1,9 @@
import { Ok, Result } from 'ts-results';
-import { AppPB, FolderNotification, RepeatedAppPB, WorkspacePB, FlowyError } from '@/services/backend';
+import { FolderNotification, WorkspacePB, FlowyError, RepeatedViewPB, ViewPB } from '@/services/backend';
import { ChangeNotifier } from '$app/utils/change_notifier';
import { FolderNotificationObserver } from '../notifications/observer';
-export type AppListNotifyValue = Result;
+export type AppListNotifyValue = Result;
export type AppListNotifyCallback = (value: AppListNotifyValue) => void;
export type WorkspaceNotifyValue = Result;
export type WorkspaceNotifyCallback = (value: WorkspaceNotifyValue) => void;
@@ -33,9 +33,9 @@ export class WorkspaceObserver {
this.workspaceNotifier?.notify(result);
}
break;
- case FolderNotification.DidUpdateWorkspaceApps:
+ case FolderNotification.DidUpdateWorkspaceViews:
if (result.ok) {
- this.appListNotifier?.notify(Ok(RepeatedAppPB.deserializeBinary(result.val).items));
+ this.appListNotifier?.notify(Ok(RepeatedViewPB.deserializeBinary(result.val).items));
} else {
this.appListNotifier?.notify(result);
}
diff --git a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/user/user_bd_svc.ts b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/user/user_bd_svc.ts
index 2e80f34e54..7c9e50d3fc 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/user/user_bd_svc.ts
+++ b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/user/user_bd_svc.ts
@@ -21,10 +21,10 @@ import {
FolderEventOpenWorkspace,
FolderEventReadCurrentWorkspace,
FolderEventReadWorkspaces,
-} from '@/services/backend/events/flowy-folder';
+} from '@/services/backend/events/flowy-folder2';
export class UserBackendService {
- constructor(public readonly userId: string) {}
+ constructor(public readonly userId: number) {}
getUserProfile = () => {
return UserEventGetUserProfile();
diff --git a/frontend/appflowy_tauri/src/appflowy_app/stores/reducers/current-user/slice.ts b/frontend/appflowy_tauri/src/appflowy_app/stores/reducers/current-user/slice.ts
index 4b5fbcb5ea..be68ddf6c9 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/stores/reducers/current-user/slice.ts
+++ b/frontend/appflowy_tauri/src/appflowy_app/stores/reducers/current-user/slice.ts
@@ -1,9 +1,9 @@
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
import { nanoid } from 'nanoid';
-import { WorkspaceSettingPB } from '@/services/backend/models/flowy-folder/workspace';
+import { WorkspaceSettingPB } from '@/services/backend/models/flowy-folder2/workspace';
export interface ICurrentUser {
- id?: string;
+ id?: number;
displayName?: string;
email?: string;
token?: string;
diff --git a/frontend/appflowy_tauri/src/appflowy_app/stores/reducers/pages/slice.ts b/frontend/appflowy_tauri/src/appflowy_app/stores/reducers/pages/slice.ts
index 804038444f..7ad447601c 100644
--- a/frontend/appflowy_tauri/src/appflowy_app/stores/reducers/pages/slice.ts
+++ b/frontend/appflowy_tauri/src/appflowy_app/stores/reducers/pages/slice.ts
@@ -1,10 +1,10 @@
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
-import { ViewLayoutTypePB } from '@/services/backend';
+import { ViewLayoutPB } from '@/services/backend';
export interface IPage {
id: string;
title: string;
- pageType: ViewLayoutTypePB;
+ pageType: ViewLayoutPB;
folderId: string;
}
diff --git a/frontend/appflowy_tauri/src/services/backend/index.ts b/frontend/appflowy_tauri/src/services/backend/index.ts
index d9b08aff40..af708e6c22 100644
--- a/frontend/appflowy_tauri/src/services/backend/index.ts
+++ b/frontend/appflowy_tauri/src/services/backend/index.ts
@@ -1,6 +1,6 @@
export * from "./models/flowy-user";
export * from "./models/flowy-document";
export * from "./models/flowy-database";
-export * from "./models/flowy-folder";
+export * from "./models/flowy-folder2";
export * from "./models/flowy-net";
export * from "./models/flowy-error";
diff --git a/frontend/rust-lib/.gitignore b/frontend/rust-lib/.gitignore
index 264aad238c..740f8d77a7 100644
--- a/frontend/rust-lib/.gitignore
+++ b/frontend/rust-lib/.gitignore
@@ -12,4 +12,5 @@
bin/
**/src/protobuf
**/resources/proto
-.idea/
\ No newline at end of file
+.idea/
+AppFlowy-Collab/
\ No newline at end of file
diff --git a/frontend/rust-lib/Cargo.lock b/frontend/rust-lib/Cargo.lock
index 2052c1707c..a61256f6b9 100644
--- a/frontend/rust-lib/Cargo.lock
+++ b/frontend/rust-lib/Cargo.lock
@@ -67,9 +67,9 @@ dependencies = [
[[package]]
name = "anyhow"
-version = "1.0.68"
+version = "1.0.70"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61"
+checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4"
[[package]]
name = "arrayvec"
@@ -102,7 +102,7 @@ checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -113,7 +113,7 @@ checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -298,7 +298,7 @@ dependencies = [
"borsh-schema-derive-internal",
"proc-macro-crate",
"proc-macro2",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -309,7 +309,7 @@ checksum = "186b734fa1c9f6743e90c95d7233c9faab6360d1a96d4ffa19d9cfd1e9350f8a"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -320,7 +320,7 @@ checksum = "99b7ff1008316626f485991b960ade129253d4034014616b94f309a15366cc49"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -369,7 +369,7 @@ checksum = "13e576ebe98e605500b3c8041bb888e966653577172df6dd97398714eb30b9bf"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -407,9 +407,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "chrono"
-version = "0.4.23"
+version = "0.4.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f"
+checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
dependencies = [
"iana-time-zone",
"js-sys",
@@ -475,7 +475,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -488,6 +488,70 @@ dependencies = [
"unicode-width",
]
+[[package]]
+name = "collab"
+version = "0.1.0"
+source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab#306f27e56481eb2a998da4cb9f13763699dade76"
+dependencies = [
+ "anyhow",
+ "bytes",
+ "collab-persistence",
+ "lib0",
+ "parking_lot 0.12.1",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tracing",
+ "y-sync",
+ "yrs",
+]
+
+[[package]]
+name = "collab-derive"
+version = "0.1.0"
+source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab#306f27e56481eb2a998da4cb9f13763699dade76"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "serde_json",
+ "syn 1.0.109",
+ "yrs",
+]
+
+[[package]]
+name = "collab-folder"
+version = "0.1.0"
+source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab#306f27e56481eb2a998da4cb9f13763699dade76"
+dependencies = [
+ "anyhow",
+ "collab",
+ "collab-derive",
+ "collab-persistence",
+ "parking_lot 0.12.1",
+ "serde",
+ "serde_json",
+ "serde_repr",
+ "thiserror",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "collab-persistence"
+version = "0.1.0"
+source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab#306f27e56481eb2a998da4cb9f13763699dade76"
+dependencies = [
+ "bincode",
+ "chrono",
+ "lib0",
+ "serde",
+ "sled",
+ "smallvec",
+ "thiserror",
+ "tokio",
+ "yrs",
+]
+
[[package]]
name = "color-eyre"
version = "0.5.11"
@@ -739,7 +803,7 @@ dependencies = [
"proc-macro2",
"quote",
"scratch",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -756,7 +820,7 @@ checksum = "39e61fda7e62115119469c7b3591fd913ecca96fb766cfd3f2e2502ab7bc87a5"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -813,7 +877,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -826,7 +890,7 @@ dependencies = [
"proc-macro2",
"quote",
"rustc_version",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -854,7 +918,7 @@ checksum = "45f5098f628d02a7a0f68ddba586fb61e80edec3bdc1be3b921f4ceec60858d3"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -1022,7 +1086,7 @@ version = "0.1.0"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -1093,7 +1157,7 @@ dependencies = [
"serde",
"serde_json",
"similar",
- "syn",
+ "syn 1.0.109",
"tera",
"toml",
"walkdir",
@@ -1104,6 +1168,7 @@ name = "flowy-core"
version = "0.1.0"
dependencies = [
"bytes",
+ "collab-persistence",
"console-subscriber",
"database-model",
"flowy-client-ws",
@@ -1111,6 +1176,7 @@ dependencies = [
"flowy-document",
"flowy-error",
"flowy-folder",
+ "flowy-folder2",
"flowy-net",
"flowy-revision",
"flowy-sqlite",
@@ -1192,7 +1258,7 @@ dependencies = [
"proc-macro2",
"quote",
"serde_json",
- "syn",
+ "syn 1.0.109",
"tokio",
"trybuild",
"walkdir",
@@ -1307,6 +1373,35 @@ dependencies = [
"ws-model",
]
+[[package]]
+name = "flowy-folder2"
+version = "0.1.0"
+dependencies = [
+ "bytes",
+ "chrono",
+ "collab",
+ "collab-folder",
+ "collab-persistence",
+ "flowy-codegen",
+ "flowy-derive",
+ "flowy-document",
+ "flowy-error",
+ "flowy-folder2",
+ "flowy-notification",
+ "flowy-test",
+ "lazy_static",
+ "lib-dispatch",
+ "lib-infra",
+ "nanoid",
+ "parking_lot 0.12.1",
+ "protobuf",
+ "strum",
+ "strum_macros",
+ "tokio",
+ "tracing",
+ "unicode-segmentation",
+]
+
[[package]]
name = "flowy-net"
version = "0.1.0"
@@ -1324,7 +1419,7 @@ dependencies = [
"flowy-derive",
"flowy-document",
"flowy-error",
- "flowy-folder",
+ "flowy-folder2",
"flowy-server-sync",
"flowy-sync",
"flowy-user",
@@ -1478,7 +1573,7 @@ dependencies = [
"flowy-client-sync",
"flowy-core",
"flowy-document",
- "flowy-folder",
+ "flowy-folder2",
"flowy-net",
"flowy-user",
"futures",
@@ -1503,6 +1598,7 @@ name = "flowy-user"
version = "0.1.0"
dependencies = [
"bytes",
+ "collab-persistence",
"diesel",
"diesel_derives",
"flowy-codegen",
@@ -1568,6 +1664,16 @@ dependencies = [
"percent-encoding",
]
+[[package]]
+name = "fs2"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
[[package]]
name = "futures"
version = "0.3.26"
@@ -1624,7 +1730,7 @@ checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -1657,6 +1763,15 @@ dependencies = [
"slab",
]
+[[package]]
+name = "fxhash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
+dependencies = [
+ "byteorder",
+]
+
[[package]]
name = "generic-array"
version = "0.14.6"
@@ -1684,8 +1799,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
dependencies = [
"cfg-if",
+ "js-sys",
"libc",
"wasi 0.9.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
]
[[package]]
@@ -2166,6 +2283,17 @@ dependencies = [
"url",
]
+[[package]]
+name = "lib0"
+version = "0.16.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3994538ae0215990b1c3df6dc45bb5afad77abce3a6ba3335512c5f5d9bfb1d4"
+dependencies = [
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
[[package]]
name = "libc"
version = "0.2.139"
@@ -2285,7 +2413,7 @@ dependencies = [
"migrations_internals",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -2448,7 +2576,7 @@ checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -2589,7 +2717,7 @@ dependencies = [
"pest_meta",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -2664,7 +2792,7 @@ dependencies = [
"proc-macro-hack",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -2703,7 +2831,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -2776,7 +2904,7 @@ dependencies = [
"proc-macro-error-attr",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
"version_check",
]
@@ -2799,9 +2927,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
[[package]]
name = "proc-macro2"
-version = "1.0.49"
+version = "1.0.53"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5"
+checksum = "ba466839c78239c09faf015484e5cc04860f88242cff4d03eb038f04b4699b73"
dependencies = [
"unicode-ident",
]
@@ -2826,7 +2954,7 @@ dependencies = [
"itertools",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -2942,7 +3070,7 @@ checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -2964,14 +3092,14 @@ checksum = "608c156fd8e97febc07dc9c2e2c80bf74cfc6ef26893eae3daf8bc2bc94a4b7f"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
name = "quote"
-version = "1.0.23"
+version = "1.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
+checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
dependencies = [
"proc-macro2",
]
@@ -3218,7 +3346,7 @@ checksum = "6eaedadc88b53e36dd32d940ed21ae4d850d5916f2581526921f553a72ac34c4"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -3362,9 +3490,9 @@ checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a"
[[package]]
name = "serde"
-version = "1.0.152"
+version = "1.0.158"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
+checksum = "771d4d9c4163ee138805e12c710dd365e4f44be8be0503cb1bb9eb989425d9c9"
dependencies = [
"serde_derive",
]
@@ -3392,20 +3520,20 @@ dependencies = [
[[package]]
name = "serde_derive"
-version = "1.0.152"
+version = "1.0.158"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
+checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.8",
]
[[package]]
name = "serde_json"
-version = "1.0.91"
+version = "1.0.94"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883"
+checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea"
dependencies = [
"itoa 1.0.5",
"ryu",
@@ -3420,7 +3548,7 @@ checksum = "9a5ec9fa74a20ebbe5d9ac23dac1fc96ba0ecfe9f50f2843b52e537b10fbcb4e"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -3454,7 +3582,7 @@ checksum = "b2acd6defeddb41eb60bb468f8825d0cfd0c2a76bc03bfd235b6a1dc4f6a1ad5"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -3520,6 +3648,22 @@ dependencies = [
"autocfg",
]
+[[package]]
+name = "sled"
+version = "0.34.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f96b4737c2ce5987354855aed3797279def4ebf734436c6aa4552cf8e169935"
+dependencies = [
+ "crc32fast",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+ "fs2",
+ "fxhash",
+ "libc",
+ "log",
+ "parking_lot 0.11.2",
+]
+
[[package]]
name = "slug"
version = "0.1.4"
@@ -3529,6 +3673,15 @@ dependencies = [
"deunicode",
]
+[[package]]
+name = "smallstr"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e922794d168678729ffc7e07182721a14219c65814e66e91b839a272fe5ae4f"
+dependencies = [
+ "smallvec",
+]
+
[[package]]
name = "smallvec"
version = "1.10.0"
@@ -3566,7 +3719,7 @@ dependencies = [
"heck",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -3580,6 +3733,17 @@ dependencies = [
"unicode-ident",
]
+[[package]]
+name = "syn"
+version = "2.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcc02725fd69ab9f26eab07fad303e2497fad6fb9eba4f96c4d1687bdf704ad9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
[[package]]
name = "sync_wrapper"
version = "0.1.2"
@@ -3652,22 +3816,22 @@ dependencies = [
[[package]]
name = "thiserror"
-version = "1.0.38"
+version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.38"
+version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.8",
]
[[package]]
@@ -3765,7 +3929,7 @@ checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -3940,7 +4104,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
@@ -4306,7 +4470,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
"wasm-bindgen-shared",
]
@@ -4340,7 +4504,7 @@ checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -4504,6 +4668,17 @@ dependencies = [
"serde_repr",
]
+[[package]]
+name = "y-sync"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e77a143afe4dde83bc987ad3119228d0f107053a3da131a00738cb2d7f496641"
+dependencies = [
+ "lib0",
+ "thiserror",
+ "yrs",
+]
+
[[package]]
name = "yaml-rust"
version = "0.4.5"
@@ -4512,3 +4687,17 @@ checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
dependencies = [
"linked-hash-map",
]
+
+[[package]]
+name = "yrs"
+version = "0.16.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b2b23ac465bed6c0ffbb9fbd80ec808bd89b37b823a420b16917d1806d76d75"
+dependencies = [
+ "atomic_refcell",
+ "lib0",
+ "rand 0.7.3",
+ "smallstr",
+ "smallvec",
+ "thiserror",
+]
diff --git a/frontend/rust-lib/Cargo.toml b/frontend/rust-lib/Cargo.toml
index 83a5e25bc0..a7e271a950 100644
--- a/frontend/rust-lib/Cargo.toml
+++ b/frontend/rust-lib/Cargo.toml
@@ -8,7 +8,8 @@ members = [
"flowy-user",
"flowy-test",
"flowy-sqlite",
- "flowy-folder",
+# "flowy-folder",r
+ "flowy-folder2",
"flowy-notification",
"flowy-document",
"flowy-error",
@@ -34,4 +35,12 @@ opt-level = 3
#strip = "debuginfo"
## For from-scratch builds, incremental adds an extra dependency-tracking overhead. It also significantly increases
## the amount of IO and the size of ./target, which make caching less effective.
-incremental = false
\ No newline at end of file
+incremental = false
+
+[patch.crates-io]
+collab = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab" }
+collab-folder = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab" }
+collab-persistence = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab" }
+#collab = { path = "../AppFlowy-Collab/collab" }
+#collab-folder = { path = "../AppFlowy-Collab/collab-folder" }
+#collab-persistence = { path = "../AppFlowy-Collab/collab-persistence" }
diff --git a/frontend/rust-lib/flowy-core/Cargo.toml b/frontend/rust-lib/flowy-core/Cargo.toml
index 591f459963..98903e60f6 100644
--- a/frontend/rust-lib/flowy-core/Cargo.toml
+++ b/frontend/rust-lib/flowy-core/Cargo.toml
@@ -11,6 +11,7 @@ lib-log = { path = "../lib-log" }
flowy-user = { path = "../flowy-user" }
flowy-net = { path = "../flowy-net" }
flowy-folder = { path = "../flowy-folder" }
+flowy-folder2 = { path = "../flowy-folder2" }
flowy-database = { path = "../flowy-database" }
database-model = { path = "../../../shared-lib/database-model" }
user-model = { path = "../../../shared-lib/user-model" }
@@ -20,6 +21,7 @@ flowy-document = { path = "../flowy-document" }
flowy-revision = { path = "../flowy-revision" }
flowy-error = { path = "../flowy-error", features = ["adaptor_ws"] }
flowy-task = { path = "../flowy-task" }
+collab-persistence = { version = "0.1.0" }
tracing = { version = "0.1", features = ["log"] }
futures-core = { version = "0.3", default-features = false }
@@ -44,14 +46,16 @@ use_bunyan = ["lib-log/use_bunyan"]
dart = [
"flowy-user/dart",
"flowy-net/dart",
- "flowy-folder/dart",
+# "flowy-folder/dart",
+ "flowy-folder2/dart",
"flowy-database/dart",
"flowy-document/dart",
]
ts = [
"flowy-user/ts",
"flowy-net/ts",
- "flowy-folder/ts",
+# "flowy-folder/ts",
+ "flowy-folder2/ts",
"flowy-database/ts",
"flowy-document/ts",
]
diff --git a/frontend/rust-lib/flowy-core/src/deps_resolve/document_deps.rs b/frontend/rust-lib/flowy-core/src/deps_resolve/document_deps.rs
index b08b99769e..90b0d34ff7 100644
--- a/frontend/rust-lib/flowy-core/src/deps_resolve/document_deps.rs
+++ b/frontend/rust-lib/flowy-core/src/deps_resolve/document_deps.rs
@@ -61,7 +61,7 @@ impl DocumentUser for BlockUserImpl {
Ok(doc_dir)
}
- fn user_id(&self) -> Result {
+ fn user_id(&self) -> Result {
self.0.user_id()
}
diff --git a/frontend/rust-lib/flowy-core/src/deps_resolve/folder2_deps.rs b/frontend/rust-lib/flowy-core/src/deps_resolve/folder2_deps.rs
new file mode 100644
index 0000000000..c33d990730
--- /dev/null
+++ b/frontend/rust-lib/flowy-core/src/deps_resolve/folder2_deps.rs
@@ -0,0 +1,259 @@
+use bytes::Bytes;
+use collab_persistence::CollabKV;
+use database_model::BuildDatabaseContext;
+use flowy_database::entities::DatabaseLayoutPB;
+use flowy_database::manager::{create_new_database, link_existing_database, DatabaseManager};
+use flowy_database::util::{make_default_board, make_default_calendar, make_default_grid};
+use flowy_document::editor::make_transaction_from_document_content;
+use flowy_document::DocumentManager;
+use flowy_error::FlowyError;
+
+use flowy_folder2::entities::ViewLayoutPB;
+use flowy_folder2::manager::{Folder2Manager, FolderUser};
+use flowy_folder2::view_ext::{ViewDataProcessor, ViewDataProcessorMap};
+use flowy_folder2::ViewLayout;
+use flowy_user::services::UserSession;
+use lib_infra::future::FutureResult;
+use revision_model::Revision;
+use std::collections::HashMap;
+use std::convert::TryFrom;
+use std::sync::Arc;
+
+pub struct Folder2DepsResolver();
+impl Folder2DepsResolver {
+ pub async fn resolve(
+ user_session: Arc,
+ document_manager: &Arc,
+ database_manager: &Arc,
+ ) -> Arc {
+ let user: Arc = Arc::new(FolderUserImpl(user_session.clone()));
+
+ let view_data_processor =
+ make_view_data_processor(document_manager.clone(), database_manager.clone());
+ Arc::new(
+ Folder2Manager::new(user.clone(), view_data_processor)
+ .await
+ .unwrap(),
+ )
+ }
+}
+
+fn make_view_data_processor(
+ document_manager: Arc,
+ database_manager: Arc,
+) -> ViewDataProcessorMap {
+ let mut map: HashMap> = HashMap::new();
+
+ let document_processor = Arc::new(DocumentViewDataProcessor(document_manager));
+ map.insert(ViewLayout::Document, document_processor);
+
+ let database_processor = Arc::new(DatabaseViewDataProcessor(database_manager));
+ map.insert(ViewLayout::Board, database_processor.clone());
+ map.insert(ViewLayout::Grid, database_processor.clone());
+ map.insert(ViewLayout::Calendar, database_processor);
+ Arc::new(map)
+}
+
+struct FolderUserImpl(Arc);
+impl FolderUser for FolderUserImpl {
+ fn user_id(&self) -> Result {
+ self
+ .0
+ .user_id()
+ .map_err(|e| FlowyError::internal().context(e))
+ }
+
+ fn token(&self) -> Result {
+ self
+ .0
+ .token()
+ .map_err(|e| FlowyError::internal().context(e))
+ }
+
+ fn kv_db(&self) -> Result, FlowyError> {
+ self.0.get_kv_db()
+ }
+}
+
+struct DocumentViewDataProcessor(Arc);
+impl ViewDataProcessor for DocumentViewDataProcessor {
+ fn close_view(&self, view_id: &str) -> FutureResult<(), FlowyError> {
+ let manager = self.0.clone();
+ let view_id = view_id.to_string();
+ FutureResult::new(async move {
+ manager.close_document_editor(view_id).await?;
+ Ok(())
+ })
+ }
+
+ fn get_view_data(&self, view_id: &str) -> FutureResult {
+ let manager = self.0.clone();
+ let view_id = view_id.to_string();
+ FutureResult::new(async move {
+ let editor = manager.open_document_editor(view_id).await?;
+ let document_data = Bytes::from(editor.duplicate().await?);
+ Ok(document_data)
+ })
+ }
+
+ fn create_view_with_build_in_data(
+ &self,
+ _user_id: i64,
+ view_id: &str,
+ _name: &str,
+ layout: ViewLayout,
+ _ext: HashMap,
+ ) -> FutureResult<(), FlowyError> {
+ debug_assert_eq!(layout, ViewLayout::Document);
+ let view_id = view_id.to_string();
+ let manager = self.0.clone();
+ let document_content = self.0.initial_document_content();
+ FutureResult::new(async move {
+ let delta_data = Bytes::from(document_content);
+ let revision = Revision::initial_revision(&view_id, delta_data);
+ manager.create_document(view_id, vec![revision]).await?;
+ Ok(())
+ })
+ }
+
+ fn create_view_with_custom_data(
+ &self,
+ _user_id: i64,
+ view_id: &str,
+ _name: &str,
+ data: Vec,
+ layout: ViewLayout,
+ _ext: HashMap,
+ ) -> FutureResult<(), FlowyError> {
+ debug_assert_eq!(layout, ViewLayout::Document);
+ let view_data = match String::from_utf8(data) {
+ Ok(content) => match make_transaction_from_document_content(&content) {
+ Ok(transaction) => transaction.to_bytes().unwrap_or_else(|_| vec![]),
+ Err(_) => vec![],
+ },
+ Err(_) => vec![],
+ };
+
+ let revision = Revision::initial_revision(view_id, Bytes::from(view_data));
+ let view_id = view_id.to_string();
+ let manager = self.0.clone();
+
+ FutureResult::new(async move {
+ manager.create_document(view_id, vec![revision]).await?;
+ Ok(())
+ })
+ }
+}
+
+struct DatabaseViewDataProcessor(Arc);
+impl ViewDataProcessor for DatabaseViewDataProcessor {
+ fn close_view(&self, view_id: &str) -> FutureResult<(), FlowyError> {
+ let database_manager = self.0.clone();
+ let view_id = view_id.to_string();
+ FutureResult::new(async move {
+ database_manager.close_database_view(view_id).await?;
+ Ok(())
+ })
+ }
+
+ fn get_view_data(&self, view_id: &str) -> FutureResult {
+ let database_manager = self.0.clone();
+ let view_id = view_id.to_owned();
+ FutureResult::new(async move {
+ let editor = database_manager.open_database_view(&view_id).await?;
+ let delta_bytes = editor.duplicate_database(&view_id).await?;
+ Ok(delta_bytes.into())
+ })
+ }
+
+ /// Create a database view with build-in data.
+ /// If the ext contains the {"database_id": "xx"}, then it will link to
+ /// the existing database. The data of the database will be shared within
+ /// these references views.
+ fn create_view_with_build_in_data(
+ &self,
+ _user_id: i64,
+ view_id: &str,
+ name: &str,
+ layout: ViewLayout,
+ ext: HashMap,
+ ) -> FutureResult<(), FlowyError> {
+ let view_id = view_id.to_string();
+ let name = name.to_string();
+ let database_manager = self.0.clone();
+ match DatabaseExtParams::from_map(ext).map(|params| params.database_id) {
+ None => {
+ let (build_context, layout) = match layout {
+ ViewLayout::Grid => (make_default_grid(), DatabaseLayoutPB::Grid),
+ ViewLayout::Board => (make_default_board(), DatabaseLayoutPB::Board),
+ ViewLayout::Calendar => (make_default_calendar(), DatabaseLayoutPB::Calendar),
+ ViewLayout::Document => {
+ return FutureResult::new(async move {
+ Err(FlowyError::internal().context(format!("Can't handle {:?} layout type", layout)))
+ });
+ },
+ };
+ FutureResult::new(async move {
+ create_new_database(&view_id, name, layout, database_manager, build_context).await
+ })
+ },
+ Some(database_id) => {
+ let layout = layout_type_from_view_layout(layout.into());
+ FutureResult::new(async move {
+ link_existing_database(&view_id, name, &database_id, layout, database_manager).await
+ })
+ },
+ }
+ }
+
+ /// Create a database view with custom data.
+ /// If the ext contains the {"database_id": "xx"}, then it will link
+ /// to the existing database. The data of the database will be shared
+ /// within these references views.
+ fn create_view_with_custom_data(
+ &self,
+ _user_id: i64,
+ view_id: &str,
+ name: &str,
+ data: Vec,
+ layout: ViewLayout,
+ ext: HashMap,
+ ) -> FutureResult<(), FlowyError> {
+ let view_id = view_id.to_string();
+ let database_manager = self.0.clone();
+ let layout = layout_type_from_view_layout(layout.into());
+ let name = name.to_string();
+ match DatabaseExtParams::from_map(ext).map(|params| params.database_id) {
+ None => FutureResult::new(async move {
+ let bytes = Bytes::from(data);
+ let build_context = BuildDatabaseContext::try_from(bytes)?;
+ let _ = create_new_database(&view_id, name, layout, database_manager, build_context).await;
+ Ok(())
+ }),
+ Some(database_id) => FutureResult::new(async move {
+ link_existing_database(&view_id, name, &database_id, layout, database_manager).await
+ }),
+ }
+ }
+}
+
+#[derive(Debug, serde::Deserialize)]
+struct DatabaseExtParams {
+ database_id: String,
+}
+
+impl DatabaseExtParams {
+ pub fn from_map(map: HashMap) -> Option {
+ let value = serde_json::to_value(map).ok()?;
+ serde_json::from_value::(value).ok()
+ }
+}
+
+pub fn layout_type_from_view_layout(layout: ViewLayoutPB) -> DatabaseLayoutPB {
+ match layout {
+ ViewLayoutPB::Grid => DatabaseLayoutPB::Grid,
+ ViewLayoutPB::Board => DatabaseLayoutPB::Board,
+ ViewLayoutPB::Calendar => DatabaseLayoutPB::Calendar,
+ ViewLayoutPB::Document => DatabaseLayoutPB::Grid,
+ }
+}
diff --git a/frontend/rust-lib/flowy-core/src/deps_resolve/grid_deps.rs b/frontend/rust-lib/flowy-core/src/deps_resolve/grid_deps.rs
index 63fdf4bcad..77f07ebde3 100644
--- a/frontend/rust-lib/flowy-core/src/deps_resolve/grid_deps.rs
+++ b/frontend/rust-lib/flowy-core/src/deps_resolve/grid_deps.rs
@@ -46,7 +46,7 @@ impl DatabaseDBConnection for DatabaseDBConnectionImpl {
struct GridUserImpl(Arc