(core) Comments

Summary:
First iteration for comments system for Grist.
- Comments are stored in a generic metatable `_grist_Cells`
- Each comment is connected to a particular cell (hence the generic name of the table)
- Access level works naturally for records stored in this table
-- User can add/read comments for cells he can see
-- User can't update/remove comments that he doesn't own, but he can delete them by removing cells (rows/columns)
-- Anonymous users can't see comments at all.
- Each comment can have replies (but replies can't have more replies)

Comments are hidden by default, they can be enabled by COMMENTS=true env variable.
Some things for follow-up
- Avatars, currently the user's profile image is not shown or retrieved from the server
- Virtual rendering for comments list in creator panel. Currently, there is a limit of 200 comments.

Test Plan: New and existing tests

Reviewers: georgegevoian, paulfitz

Reviewed By: georgegevoian

Subscribers: paulfitz

Differential Revision: https://phab.getgrist.com/D3509
This commit is contained in:
Jarosław Sadziński
2022-10-17 11:47:16 +02:00
parent 8be920dd25
commit bfd7243fe2
41 changed files with 2621 additions and 77 deletions

View File

@@ -32,7 +32,7 @@ log = logger.Logger(__name__, logger.INFO)
# After each migration you probably should run these commands:
# ./test/upgradeDocument public_samples/*.grist
# UPDATE_REGRESSION_DATA=1 GREP_TESTS=DocRegressionTests ./test/testrun.sh server
# ./test/upgradeDocument test/fixtures/docs/Hello.grist
# ./test/upgradeDocument core/test/fixtures/docs/Hello.grist
all_migrations = {}
@@ -1092,3 +1092,23 @@ def migration32(tdset):
return tdset.apply_doc_actions([
add_column('_grist_Views_section', 'rules', 'RefList:_grist_Tables_column'),
])
@migration(schema_version=33)
def migration33(tdset):
"""
Add _grist_Cells table
"""
doc_actions = [
actions.AddTable('_grist_Cells', [
schema.make_column("tableRef", "Ref:_grist_Tables"),
schema.make_column("colRef", "Ref:_grist_Tables_column"),
schema.make_column("rowId", "Int"),
schema.make_column("root", "Bool"),
schema.make_column("parentId", "Ref:_grist_Cells"),
schema.make_column("type", "Int"),
schema.make_column("content", "Text"),
schema.make_column("userRef", "Text"),
]),
]
return tdset.apply_doc_actions(doc_actions)