mirror of
https://gitlab.com/bramw/baserow.git
synced 2025-04-07 14:25:37 +00:00
Fix import Airtable table sections view order
This commit is contained in:
parent
de70635ce3
commit
26903a9ece
3 changed files with 95 additions and 1 deletions
backend
src/baserow/contrib/database/airtable
tests/baserow/contrib/database/airtable
changelog/entries/unreleased/bug
|
@ -727,17 +727,33 @@ class AirtableViewType(Instance):
|
|||
"The `baserow_view_type` must be implemented for the AirtableViewType."
|
||||
)
|
||||
|
||||
view_id = raw_airtable_view["id"]
|
||||
view_name = raw_airtable_view["name"]
|
||||
view_name = self._check_personal_or_locked(
|
||||
view_name, raw_airtable_view, raw_airtable_table, import_report
|
||||
)
|
||||
|
||||
# Extract the ordered views from the sections and put them in a flat list so
|
||||
# that we can find the order for the Baserow view.
|
||||
flattened_view_order = []
|
||||
for view in raw_airtable_table["viewOrder"]:
|
||||
if view in raw_airtable_table["viewSectionsById"]:
|
||||
section = raw_airtable_table["viewSectionsById"][view]
|
||||
section_views = section["viewOrder"]
|
||||
flattened_view_order.extend(section_views)
|
||||
# Baserow doesn't support sections, but we can prepend the name of the
|
||||
# section.
|
||||
if view_id in section_views:
|
||||
view_name = f"{section['name']} / {view_name}"
|
||||
else:
|
||||
flattened_view_order.append(view)
|
||||
|
||||
view_type = view_type_registry.get(self.baserow_view_type)
|
||||
view = view_type.model_class(
|
||||
id=raw_airtable_view["id"],
|
||||
pk=raw_airtable_view["id"],
|
||||
name=view_name,
|
||||
order=raw_airtable_table["viewOrder"].index(raw_airtable_view["id"]) + 1,
|
||||
order=flattened_view_order.index(raw_airtable_view["id"]) + 1,
|
||||
)
|
||||
|
||||
filters_object = raw_airtable_view_data.get("filters", None)
|
||||
|
|
|
@ -1028,3 +1028,73 @@ def test_import_gallery_view_with_cover_column_type_fit():
|
|||
assert import_report.items[0].scope == SCOPE_VIEW
|
||||
assert import_report.items[0].table == "Data"
|
||||
assert serialized_view["card_cover_image_field_id"] == "fldwSc9PqedIhTSqhi3"
|
||||
|
||||
|
||||
def test_import_view_in_section_order():
|
||||
raw_airtable_table = deepcopy(RAW_AIRTABLE_TABLE)
|
||||
raw_airtable_table["viewOrder"] = ["vsc0001", "vsc0002", "viw00005"]
|
||||
raw_airtable_table["viewSectionsById"] = {
|
||||
"vsc0001": {
|
||||
"id": "vsc0001",
|
||||
"name": "Section 1",
|
||||
"createdByUserId": "usr0001",
|
||||
"pinnedForUserId": None,
|
||||
"viewOrder": ["viw00001", "viw00002"],
|
||||
},
|
||||
"vsc0002": {
|
||||
"id": "vsc0001",
|
||||
"name": "Section 1",
|
||||
"createdByUserId": "usr0001",
|
||||
"pinnedForUserId": None,
|
||||
"viewOrder": [RAW_AIRTABLE_VIEW["id"], "viw00004"],
|
||||
},
|
||||
}
|
||||
|
||||
airtable_view_type = airtable_view_type_registry.get("grid")
|
||||
import_report = AirtableImportReport()
|
||||
serialized_view = airtable_view_type.to_serialized_baserow_view(
|
||||
FIELD_MAPPING,
|
||||
ROW_ID_MAPPING,
|
||||
raw_airtable_table,
|
||||
RAW_AIRTABLE_VIEW,
|
||||
RAW_AIRTABLE_GRID_VIEW_DATA,
|
||||
AirtableImportConfig(),
|
||||
import_report,
|
||||
)
|
||||
|
||||
assert serialized_view["order"] == 3
|
||||
|
||||
|
||||
def test_import_view_in_section_name():
|
||||
raw_airtable_table = deepcopy(RAW_AIRTABLE_TABLE)
|
||||
raw_airtable_table["viewOrder"] = ["vsc0001", "vsc0002", "viw00005"]
|
||||
raw_airtable_table["viewSectionsById"] = {
|
||||
"vsc0001": {
|
||||
"id": "vsc0001",
|
||||
"name": "Section 1",
|
||||
"createdByUserId": "usr0001",
|
||||
"pinnedForUserId": None,
|
||||
"viewOrder": ["viw00001", "viw00002"],
|
||||
},
|
||||
"vsc0002": {
|
||||
"id": "vsc0001",
|
||||
"name": "Section 2",
|
||||
"createdByUserId": "usr0001",
|
||||
"pinnedForUserId": None,
|
||||
"viewOrder": [RAW_AIRTABLE_VIEW["id"], "viw00004"],
|
||||
},
|
||||
}
|
||||
|
||||
airtable_view_type = airtable_view_type_registry.get("grid")
|
||||
import_report = AirtableImportReport()
|
||||
serialized_view = airtable_view_type.to_serialized_baserow_view(
|
||||
FIELD_MAPPING,
|
||||
ROW_ID_MAPPING,
|
||||
raw_airtable_table,
|
||||
RAW_AIRTABLE_VIEW,
|
||||
RAW_AIRTABLE_GRID_VIEW_DATA,
|
||||
AirtableImportConfig(),
|
||||
import_report,
|
||||
)
|
||||
|
||||
assert serialized_view["name"] == "Section 2 / Grid view"
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"type": "bug",
|
||||
"message": "Fix bug where the Airtable import crashes if the table has sections.",
|
||||
"domain": "database",
|
||||
"issue_number": null,
|
||||
"bullet_points": [],
|
||||
"created_at": "2025-03-24"
|
||||
}
|
Loading…
Add table
Reference in a new issue