Skip to content

Commit

Permalink
Merged branch feature/show-info-on-time-plans-too into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
horia141 committed Oct 20, 2024
1 parent ed41bba commit 774a67f
Show file tree
Hide file tree
Showing 14 changed files with 208 additions and 31 deletions.
2 changes: 2 additions & 0 deletions gen/py/webapi-client/jupiter_webapi_client/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -482,6 +482,7 @@
from .time_plan_activity_feasability import TimePlanActivityFeasability
from .time_plan_activity_find_for_target_args import TimePlanActivityFindForTargetArgs
from .time_plan_activity_find_for_target_result import TimePlanActivityFindForTargetResult
from .time_plan_activity_find_for_target_result_entry import TimePlanActivityFindForTargetResultEntry
from .time_plan_activity_kind import TimePlanActivityKind
from .time_plan_activity_load_args import TimePlanActivityLoadArgs
from .time_plan_activity_load_result import TimePlanActivityLoadResult
Expand Down Expand Up @@ -1054,6 +1055,7 @@
"TimePlanActivityFeasability",
"TimePlanActivityFindForTargetArgs",
"TimePlanActivityFindForTargetResult",
"TimePlanActivityFindForTargetResultEntry",
"TimePlanActivityKind",
"TimePlanActivityLoadArgs",
"TimePlanActivityLoadResult",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from attrs import field as _attrs_field

if TYPE_CHECKING:
from ..models.time_plan_activity import TimePlanActivity
from ..models.time_plan_activity_find_for_target_result_entry import TimePlanActivityFindForTargetResultEntry


T = TypeVar("T", bound="TimePlanActivityFindForTargetResult")
Expand All @@ -15,42 +15,42 @@ class TimePlanActivityFindForTargetResult:
"""Result.
Attributes:
activities (List['TimePlanActivity']):
entries (List['TimePlanActivityFindForTargetResultEntry']):
"""

activities: List["TimePlanActivity"]
entries: List["TimePlanActivityFindForTargetResultEntry"]
additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict)

def to_dict(self) -> Dict[str, Any]:
activities = []
for activities_item_data in self.activities:
activities_item = activities_item_data.to_dict()
activities.append(activities_item)
entries = []
for entries_item_data in self.entries:
entries_item = entries_item_data.to_dict()
entries.append(entries_item)

field_dict: Dict[str, Any] = {}
field_dict.update(self.additional_properties)
field_dict.update(
{
"activities": activities,
"entries": entries,
}
)

return field_dict

@classmethod
def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
from ..models.time_plan_activity import TimePlanActivity
from ..models.time_plan_activity_find_for_target_result_entry import TimePlanActivityFindForTargetResultEntry

d = src_dict.copy()
activities = []
_activities = d.pop("activities")
for activities_item_data in _activities:
activities_item = TimePlanActivity.from_dict(activities_item_data)
entries = []
_entries = d.pop("entries")
for entries_item_data in _entries:
entries_item = TimePlanActivityFindForTargetResultEntry.from_dict(entries_item_data)

activities.append(activities_item)
entries.append(entries_item)

time_plan_activity_find_for_target_result = cls(
activities=activities,
entries=entries,
)

time_plan_activity_find_for_target_result.additional_properties = d
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar

from attrs import define as _attrs_define
from attrs import field as _attrs_field

if TYPE_CHECKING:
from ..models.time_plan import TimePlan
from ..models.time_plan_activity import TimePlanActivity


T = TypeVar("T", bound="TimePlanActivityFindForTargetResultEntry")


@_attrs_define
class TimePlanActivityFindForTargetResultEntry:
"""Result.
Attributes:
time_plan (TimePlan): A plan for a particular period of time.
time_plan_activity (TimePlanActivity): A certain activity that happens in a plan.
"""

time_plan: "TimePlan"
time_plan_activity: "TimePlanActivity"
additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict)

def to_dict(self) -> Dict[str, Any]:
time_plan = self.time_plan.to_dict()

time_plan_activity = self.time_plan_activity.to_dict()

field_dict: Dict[str, Any] = {}
field_dict.update(self.additional_properties)
field_dict.update(
{
"time_plan": time_plan,
"time_plan_activity": time_plan_activity,
}
)

return field_dict

@classmethod
def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
from ..models.time_plan import TimePlan
from ..models.time_plan_activity import TimePlanActivity

d = src_dict.copy()
time_plan = TimePlan.from_dict(d.pop("time_plan"))

time_plan_activity = TimePlanActivity.from_dict(d.pop("time_plan_activity"))

time_plan_activity_find_for_target_result_entry = cls(
time_plan=time_plan,
time_plan_activity=time_plan_activity,
)

time_plan_activity_find_for_target_result_entry.additional_properties = d
return time_plan_activity_find_for_target_result_entry

@property
def additional_keys(self) -> List[str]:
return list(self.additional_properties.keys())

def __getitem__(self, key: str) -> Any:
return self.additional_properties[key]

def __setitem__(self, key: str, value: Any) -> None:
self.additional_properties[key] = value

def __delitem__(self, key: str) -> None:
del self.additional_properties[key]

def __contains__(self, key: str) -> bool:
return key in self.additional_properties
1 change: 1 addition & 0 deletions gen/ts/webapi-client/gen/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,7 @@ export type { TimePlanActivityArchiveArgs } from './models/TimePlanActivityArchi
export { TimePlanActivityFeasability } from './models/TimePlanActivityFeasability';
export type { TimePlanActivityFindForTargetArgs } from './models/TimePlanActivityFindForTargetArgs';
export type { TimePlanActivityFindForTargetResult } from './models/TimePlanActivityFindForTargetResult';
export type { TimePlanActivityFindForTargetResultEntry } from './models/TimePlanActivityFindForTargetResultEntry';
export { TimePlanActivityKind } from './models/TimePlanActivityKind';
export type { TimePlanActivityLoadArgs } from './models/TimePlanActivityLoadArgs';
export type { TimePlanActivityLoadResult } from './models/TimePlanActivityLoadResult';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
/* tslint:disable */
/* eslint-disable */

import type { TimePlanActivity } from './TimePlanActivity';
import type { TimePlanActivityFindForTargetResultEntry } from './TimePlanActivityFindForTargetResultEntry';

/**
* Result.
*/
export type TimePlanActivityFindForTargetResult = {
activities: Array<TimePlanActivity>;
entries: Array<TimePlanActivityFindForTargetResultEntry>;
};

Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */

import type { TimePlan } from './TimePlan';
import type { TimePlanActivity } from './TimePlanActivity';

/**
* Result.
*/
export type TimePlanActivityFindForTargetResultEntry = {
time_plan: TimePlan;
time_plan_activity: TimePlanActivity;
};

Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
"""The use case for finding the time plan activities for a particular target."""
from jupiter.core.domain.concept.time_plans.time_plan import TimePlan
from jupiter.core.domain.concept.time_plans.time_plan_activity import TimePlanActivity
from jupiter.core.domain.concept.time_plans.time_plan_activity_target import (
TimePlanActivityTarget,
)
from jupiter.core.domain.concept.time_plans.time_plan_domain import TimePlanDomain
from jupiter.core.domain.features import WorkspaceFeature
from jupiter.core.domain.storage_engine import DomainUnitOfWork
from jupiter.core.framework.base.entity_id import EntityId
Expand All @@ -28,11 +30,19 @@ class TimePlanActivityFindForTargetArgs(UseCaseArgsBase):
target_ref_id: EntityId


@use_case_result
class TimePlanActivityFindForTargetResultEntry(UseCaseResultBase):
"""Result."""

time_plan: TimePlan
time_plan_activity: TimePlanActivity


@use_case_result
class TimePlanActivityFindForTargetResult(UseCaseResultBase):
"""Result."""

activities: list[TimePlanActivity]
entries: list[TimePlanActivityFindForTargetResultEntry]


@readonly_use_case(WorkspaceFeature.TIME_PLANS)
Expand All @@ -49,11 +59,30 @@ async def _perform_transactional_read(
context: AppLoggedInReadonlyUseCaseContext,
args: TimePlanActivityFindForTargetArgs,
) -> TimePlanActivityFindForTargetResult:
activities = await uow.get_for(TimePlanActivity).find_all_generic(
workspace = context.workspace
time_plan_domain = await uow.get_for(TimePlanDomain).load_by_parent(
workspace.ref_id
)

time_plan_activities = await uow.get_for(TimePlanActivity).find_all_generic(
parent_ref_id=None,
allow_archived=args.allow_archived,
target=args.target,
target_ref_id=args.target_ref_id,
)
time_plans = await uow.get_for(TimePlan).find_all_generic(
parent_ref_id=time_plan_domain.ref_id,
allow_archived=args.allow_archived,
ref_id=[activity.time_plan.ref_id for activity in time_plan_activities],
)
time_plans_by_ref_id = {time_plan.ref_id: time_plan for time_plan in time_plans}

return TimePlanActivityFindForTargetResult(activities=activities)
return TimePlanActivityFindForTargetResult(
entries=[
TimePlanActivityFindForTargetResultEntry(
time_plan=time_plans_by_ref_id[activity.time_plan.ref_id],
time_plan_activity=activity,
)
for activity in time_plan_activities
]
)
11 changes: 11 additions & 0 deletions src/webui/app/components/time-plan-activity-card.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import type {
BigPlan,
InboxTask,
TimePlan,
TimePlanActivity,
} from "@jupiter/webapi-client";
import {
Expand All @@ -18,10 +19,12 @@ import { TimePlanActivityKindTag } from "~/components/time-plan-activity-kind-ta
import { isWorkspaceFeatureAvailable } from "~/logic/domain/workspace";
import type { TopLevelInfo } from "~/top-level-context";
import { ADateTag } from "./adate-tag";
import { TimePlanTag } from "./time-plan-tag";

interface TimePlanActivityCardProps {
topLevelInfo: TopLevelInfo;
activity: TimePlanActivity;
timePlansByRefId: Map<string, TimePlan>;
inboxTasksByRefId: Map<string, InboxTask>;
bigPlansByRefId: Map<string, BigPlan>;
activityDoneness: Record<string, boolean>;
Expand All @@ -33,6 +36,10 @@ interface TimePlanActivityCardProps {
}

export function TimePlanActivityCard(props: TimePlanActivityCardProps) {
const timePlan = props.timePlansByRefId.get(
props.activity.time_plan_ref_id.toString()
);

if (props.activity.target === TimePlanActivityTarget.INBOX_TASK) {
const inboxTask = props.inboxTasksByRefId.get(props.activity.target_ref_id);

Expand Down Expand Up @@ -84,6 +91,8 @@ export function TimePlanActivityCard(props: TimePlanActivityCardProps) {
<TimePlanActivityFeasabilityTag
feasability={props.activity.feasability}
/>

{timePlan && <TimePlanTag timePlan={timePlan} />}
</EntityLink>
</EntityCard>
);
Expand Down Expand Up @@ -141,6 +150,8 @@ export function TimePlanActivityCard(props: TimePlanActivityCardProps) {
<TimePlanActivityFeasabilityTag
feasability={props.activity.feasability}
/>

{timePlan && <TimePlanTag timePlan={timePlan} />}
</EntityLink>
</EntityCard>
);
Expand Down
3 changes: 3 additions & 0 deletions src/webui/app/components/time-plan-activity-list.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import type {
BigPlan,
InboxTask,
TimePlan,
TimePlanActivity,
TimePlanActivityFeasability,
TimePlanActivityKind,
Expand All @@ -14,6 +15,7 @@ import { TimePlanActivityCard } from "./time-plan-activity-card";
interface TimePlanActivityListProps {
topLevelInfo: TopLevelInfo;
activities: Array<TimePlanActivity>;
timePlansByRefId: Map<string, TimePlan>;
inboxTasksByRefId: Map<string, InboxTask>;
bigPlansByRefId: Map<string, BigPlan>;
activityDoneness: Record<string, boolean>;
Expand Down Expand Up @@ -72,6 +74,7 @@ export function TimePlanActivityList(props: TimePlanActivityListProps) {
: 0
}
fullInfo={props.fullInfo}
timePlansByRefId={props.timePlansByRefId}
inboxTasksByRefId={props.inboxTasksByRefId}
bigPlansByRefId={props.bigPlansByRefId}
activityDoneness={props.activityDoneness}
Expand Down
16 changes: 16 additions & 0 deletions src/webui/app/components/time-plan-tag.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import type { TimePlan } from "@jupiter/webapi-client";
import { SlimChip } from "./infra/chips";

interface TimePlanTagProps {
timePlan: TimePlan;
}

export function TimePlanTag(props: TimePlanTagProps) {
return (
<SlimChip
sx={{ maxWidth: "unset" }}
label={props.timePlan.name}
color={"info"}
/>
);
}
Loading

0 comments on commit 774a67f

Please sign in to comment.