Skip to content

Commit

Permalink
feat: add note action buttons events and effects (#258)
Browse files Browse the repository at this point in the history
  • Loading branch information
nmpsilva authored Jan 6, 2025
1 parent 8e75918 commit 54b8008
Show file tree
Hide file tree
Showing 9 changed files with 106 additions and 7 deletions.
4 changes: 2 additions & 2 deletions canvas_generated/messages/effects_pb2.py

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions canvas_generated/messages/effects_pb2.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@ class EffectType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
DELETE_STRUCTURED_ASSESSMENT_COMMAND: _ClassVar[EffectType]
COMMIT_STRUCTURED_ASSESSMENT_COMMAND: _ClassVar[EffectType]
ENTER_IN_ERROR_STRUCTURED_ASSESSMENT_COMMAND: _ClassVar[EffectType]
SHOW_ACTION_BUTTON: _ClassVar[EffectType]
UNKNOWN_EFFECT: EffectType
LOG: EffectType
ADD_PLAN_COMMAND: EffectType
Expand Down Expand Up @@ -313,6 +314,7 @@ EDIT_STRUCTURED_ASSESSMENT_COMMAND: EffectType
DELETE_STRUCTURED_ASSESSMENT_COMMAND: EffectType
COMMIT_STRUCTURED_ASSESSMENT_COMMAND: EffectType
ENTER_IN_ERROR_STRUCTURED_ASSESSMENT_COMMAND: EffectType
SHOW_ACTION_BUTTON: EffectType

class Effect(_message.Message):
__slots__ = ("type", "payload", "plugin_name", "classname")
Expand Down
4 changes: 2 additions & 2 deletions canvas_generated/messages/events_pb2.py

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions canvas_generated/messages/events_pb2.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -647,6 +647,9 @@ class EventType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
DEFER_CODING_GAP_COMMAND__PRE_EXECUTE_ACTION: _ClassVar[EventType]
DEFER_CODING_GAP_COMMAND__POST_EXECUTE_ACTION: _ClassVar[EventType]
DEFER_CODING_GAP_COMMAND__POST_INSERTED_INTO_NOTE: _ClassVar[EventType]
SHOW_NOTE_HEADER_BUTTON: _ClassVar[EventType]
SHOW_NOTE_FOOTER_BUTTON: _ClassVar[EventType]
ACTION_BUTTON_CLICKED: _ClassVar[EventType]
PATIENT_CHART__CONDITIONS: _ClassVar[EventType]
PATIENT_CHART_SUMMARY__SECTION_CONFIGURATION: _ClassVar[EventType]
PATIENT_PROFILE__SECTION_CONFIGURATION: _ClassVar[EventType]
Expand Down Expand Up @@ -1292,6 +1295,9 @@ DEFER_CODING_GAP_COMMAND__POST_ENTER_IN_ERROR: EventType
DEFER_CODING_GAP_COMMAND__PRE_EXECUTE_ACTION: EventType
DEFER_CODING_GAP_COMMAND__POST_EXECUTE_ACTION: EventType
DEFER_CODING_GAP_COMMAND__POST_INSERTED_INTO_NOTE: EventType
SHOW_NOTE_HEADER_BUTTON: EventType
SHOW_NOTE_FOOTER_BUTTON: EventType
ACTION_BUTTON_CLICKED: EventType
PATIENT_CHART__CONDITIONS: EventType
PATIENT_CHART_SUMMARY__SECTION_CONFIGURATION: EventType
PATIENT_PROFILE__SECTION_CONFIGURATION: EventType
Expand Down
28 changes: 28 additions & 0 deletions canvas_sdk/effects/show_button.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from typing import Any

from pydantic import Field

from canvas_generated.messages.effects_pb2 import EffectType
from canvas_sdk.effects.base import _BaseEffect


class ShowButtonEffect(_BaseEffect):
"""
An Effect that will decide an action button's properties.
"""

class Meta:
effect_type = EffectType.SHOW_ACTION_BUTTON

key: str = Field(min_length=1)
title: str = Field(min_length=1)

@property
def values(self) -> dict[str, Any]:
"""The ShowButtonEffect's values."""
return {"key": self.key, "title": self.title}

@property
def effect_payload(self) -> dict[str, Any]:
"""The payload of the effect."""
return {"data": self.values}
55 changes: 55 additions & 0 deletions canvas_sdk/handlers/action_button.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
from abc import abstractmethod
from enum import StrEnum

from canvas_sdk.effects import Effect
from canvas_sdk.effects.show_button import ShowButtonEffect
from canvas_sdk.events import EventType
from canvas_sdk.handlers.base import BaseHandler


class ActionButton(BaseHandler):
"""Base class for action buttons."""

RESPONDS_TO = [
EventType.Name(EventType.SHOW_NOTE_HEADER_BUTTON),
EventType.Name(EventType.SHOW_NOTE_FOOTER_BUTTON),
EventType.Name(EventType.ACTION_BUTTON_CLICKED),
]

class ButtonLocation(StrEnum):
NOTE_HEADER = "note_header"
NOTE_FOOTER = "note_footer"

BUTTON_TITLE: str = ""
BUTTON_KEY: str = ""
BUTTON_LOCATION: ButtonLocation | None = None

@abstractmethod
def handle(self) -> list[Effect]:
"""Method to handle button click."""
raise NotImplementedError("Implement to handle button click")

def visible(self) -> bool:
"""Method to determine button visibility."""
return True

def compute(self) -> list[Effect]:
"""Method to compute the effects."""
if self.BUTTON_LOCATION is None:
return []

if self.event.type in (
EventType.SHOW_NOTE_HEADER_BUTTON,
EventType.SHOW_NOTE_FOOTER_BUTTON,
):
if self.context["location"].lower() == self.BUTTON_LOCATION.value and self.visible():
return [ShowButtonEffect(key=self.BUTTON_KEY, title=self.BUTTON_TITLE).apply()]
else:
return []
elif (
self.event.type == EventType.ACTION_BUTTON_CLICKED
and self.context["key"] == self.BUTTON_KEY
):
return self.handle()

return []
7 changes: 5 additions & 2 deletions canvas_sdk/handlers/base.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import importlib.metadata
from abc import ABC
from typing import Any

import deprecation
Expand All @@ -8,8 +9,10 @@
version = importlib.metadata.version("canvas")


class BaseHandler:
"""The class that all handlers inherit from."""
class BaseHandler(ABC):
"""
The class that all handlers inherit from.
"""

secrets: dict[str, Any]
event: Event
Expand Down
3 changes: 3 additions & 0 deletions protobufs/canvas_generated/messages/effects.proto
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,9 @@ enum EffectType {
DELETE_STRUCTURED_ASSESSMENT_COMMAND = 902;
COMMIT_STRUCTURED_ASSESSMENT_COMMAND = 903;
ENTER_IN_ERROR_STRUCTURED_ASSESSMENT_COMMAND = 904;

SHOW_ACTION_BUTTON = 1000;

}

message Effect {
Expand Down
4 changes: 3 additions & 1 deletion protobufs/canvas_generated/messages/events.proto
Original file line number Diff line number Diff line change
Expand Up @@ -987,14 +987,16 @@ enum EventType {
DEFER_CODING_GAP_COMMAND__POST_EXECUTE_ACTION = 60011;
DEFER_CODING_GAP_COMMAND__POST_INSERTED_INTO_NOTE = 60012;

SHOW_NOTE_HEADER_BUTTON = 70000;
SHOW_NOTE_FOOTER_BUTTON = 70001;
ACTION_BUTTON_CLICKED = 70002;

PATIENT_CHART__CONDITIONS = 100000;
PATIENT_CHART_SUMMARY__SECTION_CONFIGURATION = 100001;

PATIENT_PROFILE__SECTION_CONFIGURATION = 100002;
PATIENT_PROFILE__ADD_PHARMACY__POST_SEARCH = 100003;


CLAIM__CONDITIONS = 101000;

PLUGIN_CREATED = 102000;
Expand Down

0 comments on commit 54b8008

Please sign in to comment.