Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions backend/api/inputs.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,9 @@ class CreateSavedViewInput:
filter_definition: str
sort_definition: str
parameters: str
related_filter_definition: str = "{}"
related_sort_definition: str = "{}"
related_parameters: str = "{}"
visibility: SavedViewVisibility = SavedViewVisibility.LINK_SHARED


Expand All @@ -215,4 +218,7 @@ class UpdateSavedViewInput:
filter_definition: str | None = None
sort_definition: str | None = None
parameters: str | None = None
related_filter_definition: str | None = None
related_sort_definition: str | None = None
related_parameters: str | None = None
visibility: SavedViewVisibility | None = None
27 changes: 27 additions & 0 deletions backend/api/resolvers/saved_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ async def create_saved_view(
(data.filter_definition, "filter_definition"),
(data.sort_definition, "sort_definition"),
(data.parameters, "parameters"),
(data.related_filter_definition, "related_filter_definition"),
(data.related_sort_definition, "related_sort_definition"),
(data.related_parameters, "related_parameters"),
):
try:
json.loads(blob)
Expand All @@ -76,6 +79,9 @@ async def create_saved_view(
filter_definition=data.filter_definition,
sort_definition=data.sort_definition,
parameters=data.parameters,
related_filter_definition=data.related_filter_definition,
related_sort_definition=data.related_sort_definition,
related_parameters=data.related_parameters,
owner_user_id=user.id,
visibility=data.visibility.value,
)
Expand Down Expand Up @@ -122,6 +128,24 @@ async def update_saved_view(
except json.JSONDecodeError as e:
raise GraphQLError("Invalid JSON in parameters") from e
row.parameters = data.parameters
if data.related_filter_definition is not None:
try:
json.loads(data.related_filter_definition)
except json.JSONDecodeError as e:
raise GraphQLError("Invalid JSON in related_filter_definition") from e
row.related_filter_definition = data.related_filter_definition
if data.related_sort_definition is not None:
try:
json.loads(data.related_sort_definition)
except json.JSONDecodeError as e:
raise GraphQLError("Invalid JSON in related_sort_definition") from e
row.related_sort_definition = data.related_sort_definition
if data.related_parameters is not None:
try:
json.loads(data.related_parameters)
except json.JSONDecodeError as e:
raise GraphQLError("Invalid JSON in related_parameters") from e
row.related_parameters = data.related_parameters
if data.visibility is not None:
row.visibility = data.visibility.value

Expand Down Expand Up @@ -169,6 +193,9 @@ async def duplicate_saved_view(
filter_definition=src.filter_definition,
sort_definition=src.sort_definition,
parameters=src.parameters,
related_filter_definition=src.related_filter_definition,
related_sort_definition=src.related_sort_definition,
related_parameters=src.related_parameters,
owner_user_id=user.id,
visibility=SavedViewVisibility.PRIVATE.value,
)
Expand Down
6 changes: 6 additions & 0 deletions backend/api/types/saved_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ class SavedViewType:
filter_definition: str
sort_definition: str
parameters: str
related_filter_definition: str
related_sort_definition: str
related_parameters: str
owner_user_id: strawberry.ID
visibility: SavedViewVisibility
created_at: str
Expand All @@ -33,6 +36,9 @@ def from_model(
filter_definition=row.filter_definition,
sort_definition=row.sort_definition,
parameters=row.parameters,
related_filter_definition=row.related_filter_definition,
related_sort_definition=row.related_sort_definition,
related_parameters=row.related_parameters,
owner_user_id=strawberry.ID(row.owner_user_id),
visibility=SavedViewVisibility(row.visibility),
created_at=row.created_at.isoformat() if row.created_at else "",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
"""Add related_* columns for opposite-tab table state on saved_views.

Revision ID: add_saved_view_related_columns
Revises: merge_saved_views_task_assignees
Create Date: 2026-04-05

"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa

revision: str = "add_saved_view_related_columns"
down_revision: Union[str, Sequence[str], None] = "merge_saved_views_task_assignees"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
op.add_column(
"saved_views",
sa.Column(
"related_filter_definition",
sa.Text(),
nullable=False,
server_default="{}",
),
)
op.add_column(
"saved_views",
sa.Column(
"related_sort_definition",
sa.Text(),
nullable=False,
server_default="{}",
),
)
op.add_column(
"saved_views",
sa.Column(
"related_parameters",
sa.Text(),
nullable=False,
server_default="{}",
),
)
op.alter_column("saved_views", "related_filter_definition", server_default=None)
op.alter_column("saved_views", "related_sort_definition", server_default=None)
op.alter_column("saved_views", "related_parameters", server_default=None)


def downgrade() -> None:
op.drop_column("saved_views", "related_parameters")
op.drop_column("saved_views", "related_sort_definition")
op.drop_column("saved_views", "related_filter_definition")
3 changes: 3 additions & 0 deletions backend/database/models/saved_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ class SavedView(Base):
filter_definition: Mapped[str] = mapped_column(Text, nullable=False, default="{}")
sort_definition: Mapped[str] = mapped_column(Text, nullable=False, default="{}")
parameters: Mapped[str] = mapped_column(Text, nullable=False, default="{}")
related_filter_definition: Mapped[str] = mapped_column(Text, nullable=False, default="{}")
related_sort_definition: Mapped[str] = mapped_column(Text, nullable=False, default="{}")
related_parameters: Mapped[str] = mapped_column(Text, nullable=False, default="{}")
owner_user_id: Mapped[str] = mapped_column(
String, ForeignKey("users.id"), nullable=False
)
Expand Down
33 changes: 21 additions & 12 deletions web/api/gql/generated.ts

Large diffs are not rendered by default.

96 changes: 96 additions & 0 deletions web/api/graphql/GetTasks.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ query GetTasks($rootLocationIds: [ID!], $assigneeId: ID, $assigneeTeamId: ID, $f
patient {
id
name
firstname
lastname
birthdate
sex
state
assignedLocation {
id
title
Expand All @@ -21,6 +26,44 @@ query GetTasks($rootLocationIds: [ID!], $assigneeId: ID, $assigneeTeamId: ID, $f
}
}
assignedLocations {
id
title
kind
parent {
id
title
parent {
id
title
parent {
id
title
}
}
}
}
clinic {
id
title
kind
parent {
id
title
parent {
id
title
parent {
id
title
parent {
id
title
}
}
}
}
}
position {
id
title
kind
Expand All @@ -40,6 +83,59 @@ query GetTasks($rootLocationIds: [ID!], $assigneeId: ID, $assigneeTeamId: ID, $f
}
}
}
teams {
id
title
kind
parent {
id
title
parent {
id
title
parent {
id
title
parent {
id
title
}
}
}
}
}
properties {
id
definition {
id
name
description
fieldType
isActive
allowedEntities
options
}
textValue
numberValue
booleanValue
dateValue
dateTimeValue
selectValue
multiSelectValues
userValue
user {
id
name
avatarUrl
lastOnline
isOnline
}
team {
id
title
kind
}
}
}
assignees {
id
Expand Down
15 changes: 15 additions & 0 deletions web/api/graphql/SavedView.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ query MySavedViews {
filterDefinition
sortDefinition
parameters
relatedFilterDefinition
relatedSortDefinition
relatedParameters
ownerUserId
visibility
createdAt
Expand All @@ -22,6 +25,9 @@ query SavedView($id: ID!) {
filterDefinition
sortDefinition
parameters
relatedFilterDefinition
relatedSortDefinition
relatedParameters
ownerUserId
visibility
createdAt
Expand All @@ -38,6 +44,9 @@ mutation CreateSavedView($data: CreateSavedViewInput!) {
filterDefinition
sortDefinition
parameters
relatedFilterDefinition
relatedSortDefinition
relatedParameters
ownerUserId
visibility
createdAt
Expand All @@ -54,6 +63,9 @@ mutation UpdateSavedView($id: ID!, $data: UpdateSavedViewInput!) {
filterDefinition
sortDefinition
parameters
relatedFilterDefinition
relatedSortDefinition
relatedParameters
ownerUserId
visibility
createdAt
Expand All @@ -74,6 +86,9 @@ mutation DuplicateSavedView($id: ID!, $name: String!) {
filterDefinition
sortDefinition
parameters
relatedFilterDefinition
relatedSortDefinition
relatedParameters
ownerUserId
visibility
createdAt
Expand Down
1 change: 0 additions & 1 deletion web/components/properties/PropertyEntry.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,6 @@ export const PropertyEntry = ({
onDialogClose={userValue => {
onEditComplete({ ...value, userValue: userValue || undefined })
}}
onValueClear={onValueClear}
allowTeams={true}
/>
)}
Expand Down
Loading
Loading