Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Добавление отображения описания активности #28

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from
Open
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
4 changes: 2 additions & 2 deletions application/chronography/controllers/fetch-chronography.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ export const fetchChronography = async (dayRange: DayRange) => {
timings.description as description
from
main.timings
left join main.activities on timings.activity_id = activities.id
left join main.categories on activities.category_id = categories.id
inner join main.activities on timings.activity_id = activities.id
inner join main.categories on activities.category_id = categories.id
where date(timings.start_at) between ? and ?
order by timings.start_at asc;
`, [activityDayStart, activityDayEnd]);
Expand Down
9 changes: 7 additions & 2 deletions application/chronography/controllers/post-activity-input.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,12 @@ import { completeActiveTiming, insertTiming } from '@application/chronography/co
import { ActivityData } from '@application/types';

export const postActivityInput = async (activityData: ActivityData): Promise<void> => {
const { category: categoryName, activity: activityName, startTime, endTime } = activityData
const {
category: categoryName,
activity: activityName,
description: activityDescription,
startTime, endTime,
} = activityData;

const startTimeString = new Date(startTime).toISOString();
const endTimeString = endTime ? new Date(endTime).toISOString() : null;
Expand All @@ -20,5 +25,5 @@ export const postActivityInput = async (activityData: ActivityData): Promise<voi
await completeActiveTiming(startTimeString);
}

await insertTiming(activity.id, startTimeString, endTimeString);
await insertTiming(activity.id, activityDescription, startTimeString, endTimeString);
};
12 changes: 6 additions & 6 deletions application/chronography/controllers/timings/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { activeTimingStart, ActivityDay, CurrentActivityView, TimingTable } from

const fetchTiming = async (timingId: number) => (
await knex<TimingTable>('timings')
.select('activity_id')
.select('activity_id', 'description')
.where({ id: timingId })
);

Expand All @@ -16,9 +16,9 @@ export const completeActiveTiming = async (startTime: string) => (
.update({ end_at: startTime })
);

export const insertTiming = async (activityId: number, startTime: string, endTime: string | null) => (
export const insertTiming = async (activityId: number, description: string, startTime: string, endTime: string | null) => (
await knex<TimingTable>('timings')
.insert({ activity_id: activityId, start_at: startTime, end_at: endTime })
.insert({ activity_id: activityId, description, start_at: startTime, end_at: endTime })
);

export const fetchActiveTiming = async (): Promise<CurrentActivityView | null> => {
Expand Down Expand Up @@ -46,8 +46,8 @@ export const fetchActiveTiming = async (): Promise<CurrentActivityView | null> =
(strftime('%s', timings.end_at) - strftime('%s', timings.start_at)) / 60 as duration
from
main.timings
left join main.activities on timings.activity_id = activities.id
left join main.categories on activities.category_id = categories.id
inner join main.activities on timings.activity_id = activities.id
inner join main.categories on activities.category_id = categories.id
where
date(timings.start_at) = ?`, [activeTimingDate.start_date_at]);

Expand All @@ -74,7 +74,7 @@ export const repeatTiming = async (timingId: number) => {
const [timing] = await fetchTiming(timingId);

await completeActiveTiming(currentTime);
await insertTiming(timing.activity_id, currentTime, null);
await insertTiming(timing.activity_id, timing.description, currentTime, null);
};

export const deleteTiming = async (timingId: number) => (
Expand Down
1 change: 1 addition & 0 deletions application/chronography/create-activity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export const getActivity = (friendlyString: string): ActivityData => {
activity: friendlyString,
category: null,
endTime: null,
description: null,
startTime: null,
};

Expand Down
1 change: 1 addition & 0 deletions application/types/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ export { ActivityView, activeTimingStart, CurrentActivityView } from './views';
export interface ActivityData {
activity: string;
category: string | null;
description: string | null;
startTime: Date;
endTime: Date | null;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
.#{$b}__description {
@import '@blueprintjs/core/lib/scss/variables';

.#{$b}__title {
flex-grow: 1;
}

.#{$b}__description {
color: $gray1;
font-size: $pt-font-size-small;
margin: 3px 0 5px;
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,13 @@ interface ActivityDescriptionProps {
isCurrent: boolean;
}

export const Activity__Description = ({ category, activity, isCurrent }: ActivityDescriptionProps) => (
<div className={b('activity__description', {}, { current: isCurrent })}>
export const Activity__Description = ({ category, activity, description, isCurrent }: ActivityDescriptionProps) => (
<div className={b('activity__title', {}, { current: isCurrent })}>
<div>{activity} <i>{category}</i></div>
{description && (
<div className={b('activity__description')}>
{description}
</div>
)}
</div>
)
4 changes: 3 additions & 1 deletion frontend/components/activity/__time/activity__time.scss
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
.#{$b}__time {
width: 110px;
width: 90px;
text-align: left;
white-space: nowrap;
margin-right: 10px;
}
23 changes: 21 additions & 2 deletions frontend/views/append-activity/append-activity.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { createRoot } from 'react-dom/client';
import 'dayjs/locale/ru';
import localizedFormat from 'dayjs/plugin/localizedFormat';

import { FocusStyleManager, FormGroup, InputGroup, Button } from '@blueprintjs/core';
import { FocusStyleManager, FormGroup, InputGroup, TextArea, Button } from '@blueprintjs/core';

import { Section, Section__Row, Section__Text } from '@frontend/components/section';
import { Form } from '@frontend/components/form';
Expand All @@ -28,12 +28,14 @@ FocusStyleManager.onlyShowFocusOnTabs();
const defaultActivityData: ActivityData = {
activity: '',
category: '',
description: '',
startTime: new Date(),
endTime: null,
};

const AppendActivityView = () => {
const [activityInput, setActivityInput] = useState<string>('');
const [activityDescription, setActivityDescription] = useState<string>('');
const [activityData, setActivityData] = useState<ActivityData>(defaultActivityData);
const [isLoading, setLoadingStatus] = useState(false);

Expand All @@ -54,11 +56,17 @@ const AppendActivityView = () => {
setActivityInput(value);
};

const changeActivityDescription = (event: FormEvent<HTMLTextAreaElement>) => {
const { value } = event.currentTarget;

setActivityDescription(value);
};

const submitActivityInput = async () => {
setLoadingStatus(true);

try {
await postActivityInput(activityData)
await postActivityInput({ ...activityData, description: activityDescription });
} catch (error) {
// eslint-disable-next-line no-console
console.error(error);
Expand Down Expand Up @@ -94,6 +102,17 @@ const AppendActivityView = () => {
</FormGroup>
</Section__Row>

<Section__Row>
<FormGroup helperText="Описание активности">
<TextArea
large={true}
fill={true}
value={activityDescription}
onChange={changeActivityDescription}
/>
</FormGroup>
</Section__Row>

<Section__Text>
{activityInput && activityData.startTime && (
<ActivityInfo {...activityData}/>
Expand Down
Loading