Skip to content

Commit

Permalink
IDOM type hints
Browse files Browse the repository at this point in the history
  • Loading branch information
Archmonger committed Dec 5, 2022
1 parent 38424e3 commit 4f147fc
Show file tree
Hide file tree
Showing 6 changed files with 98 additions and 90 deletions.
16 changes: 10 additions & 6 deletions conreq/app/register/components.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
from typing import Literal
from typing import Callable, Literal

from idom.core.component import Component

from conreq import config


def user_management(
component: Component | None = None,
component: Callable[..., Component] | None = None,
selector: Literal[
"main",
"manage_users",
Expand All @@ -22,7 +22,7 @@ def user_management(


def server_settings(
component: Component | None = None,
component: Callable[..., Component] | None = None,
selector: Literal[
"main", "general", "styling", "webserver", "email", "system_info"
] = "main",
Expand All @@ -33,23 +33,27 @@ def server_settings(


def user_settings(
component: Component | None = None,
component: Callable[..., Component] | None = None,
selector: Literal["main", "general", "change_password", "delete_account"] = "main",
):
"""Changes the user settings component."""
setattr(config.components.user_settings, selector, component)
return component


def app_store(component: Component | None = None, selector: Literal["main"] = "main"):
def app_store(
component: Callable[..., Component] | None = None,
selector: Literal["main"] = "main",
):
"""Changes the app store component."""
# TODO: Add more selectors after fleshing out the app store tab
setattr(config.components.app_store, selector, component)
return component


def loading_animation(
component: Component | None = None, selector: Literal["small", "large"] = "large"
component: Callable[..., Component] | None = None,
selector: Literal["small", "large"] = "large",
):
"""Changes the default component loading animation."""
if component:
Expand Down
3 changes: 2 additions & 1 deletion conreq/app/register/homepage.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from typing import Callable

from idom.core.component import Component
from idom.types import ComponentConstructor

from conreq import config
from conreq.types import (
Expand Down Expand Up @@ -29,7 +30,7 @@ def sidebar_tab(
# TODO: Implement auth level
# TODO: URL support (Requires IDOM to support URL routing)

def decorator(component: Component):
def decorator(component: ComponentConstructor | Callable[..., Component]):
if config.homepage.sidebar_tabs and group not in config.homepage.sidebar_tabs:
config.homepage.sidebar_tabs.add(group)

Expand Down
41 changes: 20 additions & 21 deletions conreq/config/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@
from typing import Callable

from django.views import View
from idom.core.component import Component
from idom.html import div, span
from idom.types import VdomDict
from idom.types import ComponentConstructor, VdomDict
from sortedcontainers import SortedList

from conreq.types import CSS, SCSS, HTMLTemplate, JavaScript, SidebarTab, SubTab
Expand All @@ -22,42 +21,42 @@
class _UserSettingsComponents:
"""Used to store user-defined components."""

main: Component | None = None
general: Component | None = None
change_password: Component | None = None
delete_account: Component | None = None
main: ComponentConstructor | None = None
general: ComponentConstructor | None = None
change_password: ComponentConstructor | None = None
delete_account: ComponentConstructor | None = None


@dataclass
class _SignOutComponents:
"""Used to store user-defined components."""

main: Component | None = None
main: ComponentConstructor | None = None
event: Callable | None = None


@dataclass
class _UserManagementComponents:
"""Used to store user-defined components."""

main: Component | None = None
manage_users: Component | None = None
edit_user: Component | None = None
delete_user: Component | None = None
manage_invites: Component | None = None
create_invite: Component | None = None
main: ComponentConstructor | None = None
manage_users: ComponentConstructor | None = None
edit_user: ComponentConstructor | None = None
delete_user: ComponentConstructor | None = None
manage_invites: ComponentConstructor | None = None
create_invite: ComponentConstructor | None = None


@dataclass
class _ServerSettingsComponents:
"""Used to store user-defined components."""

main: Component | None = None
general: Component | None = None
styling: Component | None = None
webserver: Component | None = None
email: Component | None = None
system_info: Component | None = None
main: ComponentConstructor | None = None
general: ComponentConstructor | None = None
styling: ComponentConstructor | None = None
webserver: ComponentConstructor | None = None
email: ComponentConstructor | None = None
system_info: ComponentConstructor | None = None


@dataclass
Expand All @@ -70,7 +69,7 @@ class _LoadingAnimationComponents:
span({"className": "sr-only"}, "Loading..."),
),
)
small: Component | VdomDict = field(
small: ComponentConstructor | VdomDict = field(
default_factory=lambda: div(
{"className": "spinner-border loading-animation", "role": "status"},
span({"className": "sr-only"}, "Loading..."),
Expand All @@ -82,7 +81,7 @@ class _LoadingAnimationComponents:
class _AppStoreComponents:
"""Used to store user-defined components."""

main: Component | None = None
main: ComponentConstructor | None = None


# Tab Configuration
Expand Down
4 changes: 3 additions & 1 deletion conreq/config/utils.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
from typing import Callable

from idom.core.component import Component

from conreq.types import AuthLevel, SidebarTab, Viewport


def tab_constructor(
name: str,
component: Callable,
component: Callable[..., Component],
on_click: Callable | None = None,
padding: bool = True,
auth: str = AuthLevel.user,
Expand Down
Loading

0 comments on commit 4f147fc

Please sign in to comment.