mirror of
https://github.com/IgnatZakalinsky/home-works.git
synced 2025-12-18 12:31:16 +00:00
final ref hw2 / with tasks
This commit is contained in:
@@ -5,6 +5,14 @@ import s2 from '../../s1-main/App.module.css'
|
|||||||
import FriendMessage from './friend-message/FriendMessage'
|
import FriendMessage from './friend-message/FriendMessage'
|
||||||
import avatar from './avatar.png'
|
import avatar from './avatar.png'
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 1 - описать тип MessageType
|
||||||
|
* 2 - описать тип MessagePropsType в файле Message.tsx
|
||||||
|
* 3 - в файле Message.tsx отобразить приходящие данные
|
||||||
|
* 4 - выполнить пункты 2, 3 в файле FriendMessage.tsx
|
||||||
|
* 5 - сделать стили в соответствии с дизайном
|
||||||
|
* */
|
||||||
|
|
||||||
// нужно создать правильный тип вместо any
|
// нужно создать правильный тип вместо any
|
||||||
export type MessageType = any
|
export type MessageType = any
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,21 @@
|
|||||||
import React, {useState} from 'react'
|
import React, {useState} from 'react'
|
||||||
import Affairs from './Affairs'
|
import Affairs from './affairs/Affairs'
|
||||||
import s2 from '../../s1-main/App.module.css'
|
import s2 from '../../s1-main/App.module.css'
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 1 - описать типы AffairPriorityType, AffairType
|
||||||
|
* 2 - указать нужный тип для defaultAffairs
|
||||||
|
* 3 - дописать типы и логику функции filterAffairs и проверить её тестами
|
||||||
|
* 4 - выполнить пункт 3 для функции deleteAffair
|
||||||
|
* 5 - указать нужный тип в useState с affairs
|
||||||
|
* 6 - дописать тип и логику функции deleteAffairCallback
|
||||||
|
* 7 - в файле Affairs.tsx дописать типизацию пропсов
|
||||||
|
* 8 - в файле Affairs.tsx дописать логику функций setAll, setHigh, setMiddle, setLow
|
||||||
|
* 9 - в файле Affair.tsx дописать типизацию пропсов
|
||||||
|
* 10 - в файле Affair.tsx дописать функции deleteCallback и использовать
|
||||||
|
* 11 - в файле Affair.tsx отобразить приходящие данные
|
||||||
|
* */
|
||||||
|
|
||||||
// types
|
// types
|
||||||
export type AffairPriorityType = any // need to fix any
|
export type AffairPriorityType = any // need to fix any
|
||||||
export type AffairType = {
|
export type AffairType = {
|
||||||
@@ -36,8 +50,9 @@ function HW2() {
|
|||||||
const [filter, setFilter] = useState<FilterType>('all')
|
const [filter, setFilter] = useState<FilterType>('all')
|
||||||
|
|
||||||
const filteredAffairs = filterAffairs(affairs, filter)
|
const filteredAffairs = filterAffairs(affairs, filter)
|
||||||
const deleteAffairCallback = (_id: any) => // need to fix any
|
const deleteAffairCallback = (_id: any) => { // need to fix any
|
||||||
setAffairs(deleteAffair(affairs, _id))
|
setAffairs(deleteAffair(affairs, _id)) // need to fix
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div id={'hw2'}>
|
<div id={'hw2'}>
|
||||||
|
|||||||
55
src/s2-homeworks/hw02/affairs/Affairs.module.css
Normal file
55
src/s2-homeworks/hw02/affairs/Affairs.module.css
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
.buttonContainer {
|
||||||
|
display: flex;
|
||||||
|
gap: 24px;
|
||||||
|
margin-bottom: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.all {
|
||||||
|
--color: #06c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.low {
|
||||||
|
--color: #0c2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.high {
|
||||||
|
--color: #c00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.middle {
|
||||||
|
--color: #cc9c00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button {
|
||||||
|
padding: 5px 15px;
|
||||||
|
|
||||||
|
background: transparent;
|
||||||
|
color: var(--color);
|
||||||
|
|
||||||
|
border: 1px solid var(--color);
|
||||||
|
border-radius: 15px;
|
||||||
|
outline: none;
|
||||||
|
|
||||||
|
font-family: 'Montserrat', sans-serif;
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 20px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button:active {
|
||||||
|
background: var(--color);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active {
|
||||||
|
background: var(--color);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.affairs {
|
||||||
|
display: flex;
|
||||||
|
gap: 17px;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
max-width: 450px;
|
||||||
|
}
|
||||||
77
src/s2-homeworks/hw02/affairs/Affairs.tsx
Normal file
77
src/s2-homeworks/hw02/affairs/Affairs.tsx
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
import React from 'react'
|
||||||
|
import Affair from './affair/Affair'
|
||||||
|
import {AffairType, FilterType} from '../HW2'
|
||||||
|
import s from './Affairs.module.css'
|
||||||
|
|
||||||
|
type AffairsPropsType = {
|
||||||
|
data: any // need to fix any
|
||||||
|
setFilter: any
|
||||||
|
deleteAffairCallback: any
|
||||||
|
filter: FilterType
|
||||||
|
}
|
||||||
|
|
||||||
|
function Affairs(props: AffairsPropsType) {
|
||||||
|
const setAll = () => {
|
||||||
|
props.setFilter('all') // создаёт студент
|
||||||
|
} // need to fix
|
||||||
|
const setHigh = () => {
|
||||||
|
props.setFilter('high') // создаёт студент
|
||||||
|
}
|
||||||
|
const setMiddle = () => {
|
||||||
|
props.setFilter('middle') // создаёт студент
|
||||||
|
}
|
||||||
|
const setLow = () => {
|
||||||
|
props.setFilter('low') // создаёт студент
|
||||||
|
}
|
||||||
|
|
||||||
|
const cnAll = s.button + ' ' + s.all + (props.filter === 'all' ? ' ' + s.active : '')
|
||||||
|
const cnHigh = s.button + ' ' + s.high + (props.filter === 'high' ? ' ' + s.active : '')
|
||||||
|
const cnMiddle = s.button + ' ' + s.middle + (props.filter === 'middle' ? ' ' + s.active : '')
|
||||||
|
const cnLow = s.button + ' ' + s.low + (props.filter === 'low' ? ' ' + s.active : '')
|
||||||
|
|
||||||
|
const mappedAffairs = props.data.map((a: AffairType) => (
|
||||||
|
<Affair
|
||||||
|
key={a._id} // кеи ОБЯЗАТЕЛЬНЫ в 99% - так что лучше их писать всегда при создании компонент в мапе
|
||||||
|
affair={a}
|
||||||
|
deleteAffairCallback={props.deleteAffairCallback}
|
||||||
|
/>
|
||||||
|
))
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<div className={s.buttonContainer}>
|
||||||
|
<button
|
||||||
|
id={'hw2-button-all'}
|
||||||
|
onClick={setAll}
|
||||||
|
className={cnAll}
|
||||||
|
>
|
||||||
|
All
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
id={'hw2-button-high'}
|
||||||
|
onClick={setHigh}
|
||||||
|
className={cnHigh}
|
||||||
|
>
|
||||||
|
High
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
id={'hw2-button-middle'}
|
||||||
|
onClick={setMiddle}
|
||||||
|
className={cnMiddle}
|
||||||
|
>
|
||||||
|
Middle
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
id={'hw2-button-low'}
|
||||||
|
onClick={setLow}
|
||||||
|
className={cnLow}
|
||||||
|
>
|
||||||
|
Low
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div className={s.affairs}>{mappedAffairs}</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Affairs
|
||||||
31
src/s2-homeworks/hw02/affairs/affair/Affair.module.css
Normal file
31
src/s2-homeworks/hw02/affairs/affair/Affair.module.css
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
.affair {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
width: 185px;
|
||||||
|
|
||||||
|
border: 1.5px solid var(--color);
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.name {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 145px;
|
||||||
|
height: 37px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.closeButton {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 40px;
|
||||||
|
height: 37px;
|
||||||
|
|
||||||
|
background-color: transparent;
|
||||||
|
border: none;
|
||||||
|
border-left: 1.5px solid var(--color);
|
||||||
|
|
||||||
|
font-weight: 900;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
50
src/s2-homeworks/hw02/affairs/affair/Affair.tsx
Normal file
50
src/s2-homeworks/hw02/affairs/affair/Affair.tsx
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
import React from 'react'
|
||||||
|
import { AffairType } from '../../HW2'
|
||||||
|
import s from './Affair.module.css'
|
||||||
|
import s2 from '../Affairs.module.css'
|
||||||
|
|
||||||
|
type AffairPropsType = {
|
||||||
|
// key не нужно типизировать
|
||||||
|
affair: AffairType
|
||||||
|
deleteAffairCallback: any // need to fix any
|
||||||
|
}
|
||||||
|
|
||||||
|
function Affair(props: AffairPropsType) {
|
||||||
|
const deleteCallback = () => {
|
||||||
|
props.deleteAffairCallback(props.affair._id)
|
||||||
|
} // need to fix // создаёт студент
|
||||||
|
|
||||||
|
const nameClass = s.name + ' ' + s2[props.affair.priority]
|
||||||
|
const buttonClass = s.closeButton + ' ' + s2[props.affair.priority]
|
||||||
|
const affairClass = s.affair + ' ' + s2[props.affair.priority]
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
id={'hw2-affair-' + props.affair._id}
|
||||||
|
className={affairClass}
|
||||||
|
>
|
||||||
|
<div id={'hw2-name-' + props.affair._id} className={nameClass}>
|
||||||
|
{/*создаёт студент*/}
|
||||||
|
{props.affair.name}
|
||||||
|
{/**/}
|
||||||
|
</div>
|
||||||
|
<div id={'hw2-priority-' + props.affair._id} hidden>
|
||||||
|
{/*создаёт студент*/}
|
||||||
|
{props.affair.priority}
|
||||||
|
{/**/}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button
|
||||||
|
id={'hw2-button-delete-' + props.affair._id}
|
||||||
|
className={buttonClass}
|
||||||
|
onClick={deleteCallback} // need to fix
|
||||||
|
>
|
||||||
|
{/*текст кнопки могут изменить студенты*/}
|
||||||
|
X
|
||||||
|
{/**/}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Affair
|
||||||
Reference in New Issue
Block a user