diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4ddb0a8..f66a94b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,11 +1,6 @@ name: CI/CD on: - push: - branches: [ "main" , "dev" ] - pull_request: - branches: [ "main" ] - jobs: build_frontend_and_push_to_docker_hub: diff --git a/src/assets/images/2photo.png b/src/assets/images/2photo.png new file mode 100644 index 0000000..9dd2979 Binary files /dev/null and b/src/assets/images/2photo.png differ diff --git a/src/assets/images/Beautiful.png b/src/assets/images/Beautiful.png new file mode 100644 index 0000000..2eac6ad Binary files /dev/null and b/src/assets/images/Beautiful.png differ diff --git a/src/assets/images/Blonde.png b/src/assets/images/Blonde.png new file mode 100644 index 0000000..6a9f266 Binary files /dev/null and b/src/assets/images/Blonde.png differ diff --git a/src/assets/images/Entrepreneur.png b/src/assets/images/Entrepreneur.png new file mode 100644 index 0000000..dbba8cc Binary files /dev/null and b/src/assets/images/Entrepreneur.png differ diff --git a/src/assets/images/Front.png b/src/assets/images/Front.png new file mode 100644 index 0000000..5f8a924 Binary files /dev/null and b/src/assets/images/Front.png differ diff --git a/src/assets/images/Portrait.png b/src/assets/images/Portrait.png new file mode 100644 index 0000000..a63dba9 Binary files /dev/null and b/src/assets/images/Portrait.png differ diff --git a/src/assets/images/Smilin.png b/src/assets/images/Smilin.png new file mode 100644 index 0000000..60a3bd2 Binary files /dev/null and b/src/assets/images/Smilin.png differ diff --git a/src/assets/images/Studile.png b/src/assets/images/Studile.png new file mode 100644 index 0000000..dad3fa3 Binary files /dev/null and b/src/assets/images/Studile.png differ diff --git a/src/assets/images/Waie.png b/src/assets/images/Waie.png new file mode 100644 index 0000000..b637409 Binary files /dev/null and b/src/assets/images/Waie.png differ diff --git a/src/assets/images/Waistl.png b/src/assets/images/Waistl.png new file mode 100644 index 0000000..3ab5beb Binary files /dev/null and b/src/assets/images/Waistl.png differ diff --git a/src/assets/images/Woman6e.png b/src/assets/images/Woman6e.png new file mode 100644 index 0000000..0e1645c Binary files /dev/null and b/src/assets/images/Woman6e.png differ diff --git a/src/assets/images/amera.png b/src/assets/images/amera.png new file mode 100644 index 0000000..d9d8f56 Binary files /dev/null and b/src/assets/images/amera.png differ diff --git a/src/assets/images/c.png b/src/assets/images/c.png new file mode 100644 index 0000000..ef5605e Binary files /dev/null and b/src/assets/images/c.png differ diff --git a/src/assets/images/fident.png b/src/assets/images/fident.png new file mode 100644 index 0000000..0e5d503 Binary files /dev/null and b/src/assets/images/fident.png differ diff --git a/src/assets/images/ge3.jpeg b/src/assets/images/ge3.jpeg new file mode 100644 index 0000000..ccacf74 Binary files /dev/null and b/src/assets/images/ge3.jpeg differ diff --git a/src/assets/images/gen506.jpeg b/src/assets/images/gen506.jpeg new file mode 100644 index 0000000..6020bdd Binary files /dev/null and b/src/assets/images/gen506.jpeg differ diff --git a/src/assets/images/gen7d.jpeg b/src/assets/images/gen7d.jpeg new file mode 100644 index 0000000..dae76d8 Binary files /dev/null and b/src/assets/images/gen7d.jpeg differ diff --git a/src/assets/images/genera28.jpeg b/src/assets/images/genera28.jpeg new file mode 100644 index 0000000..e3ed8b9 Binary files /dev/null and b/src/assets/images/genera28.jpeg differ diff --git a/src/assets/images/generat.jpeg b/src/assets/images/generat.jpeg new file mode 100644 index 0000000..698c807 Binary files /dev/null and b/src/assets/images/generat.jpeg differ diff --git a/src/assets/images/generat6.jpeg b/src/assets/images/generat6.jpeg new file mode 100644 index 0000000..dbeb8ad Binary files /dev/null and b/src/assets/images/generat6.jpeg differ diff --git a/src/assets/images/generate9644e1857.jpeg b/src/assets/images/generate9644e1857.jpeg new file mode 100644 index 0000000..e57f57f Binary files /dev/null and b/src/assets/images/generate9644e1857.jpeg differ diff --git a/src/assets/images/generateb8.jpeg b/src/assets/images/generateb8.jpeg new file mode 100644 index 0000000..5bc37a4 Binary files /dev/null and b/src/assets/images/generateb8.jpeg differ diff --git a/src/assets/images/generated.jpeg b/src/assets/images/generated.jpeg new file mode 100644 index 0000000..0f3aef8 Binary files /dev/null and b/src/assets/images/generated.jpeg differ diff --git a/src/assets/images/generated0705.jpeg b/src/assets/images/generated0705.jpeg new file mode 100644 index 0000000..35a5f23 Binary files /dev/null and b/src/assets/images/generated0705.jpeg differ diff --git a/src/assets/images/generated120.jpeg b/src/assets/images/generated120.jpeg new file mode 100644 index 0000000..b68f31a Binary files /dev/null and b/src/assets/images/generated120.jpeg differ diff --git a/src/assets/images/generated1d6.jpeg b/src/assets/images/generated1d6.jpeg new file mode 100644 index 0000000..38a9476 Binary files /dev/null and b/src/assets/images/generated1d6.jpeg differ diff --git a/src/assets/images/generated3506.jpeg b/src/assets/images/generated3506.jpeg new file mode 100644 index 0000000..7bd759e Binary files /dev/null and b/src/assets/images/generated3506.jpeg differ diff --git a/src/assets/images/generated3823d.jpeg b/src/assets/images/generated3823d.jpeg new file mode 100644 index 0000000..88aaaae Binary files /dev/null and b/src/assets/images/generated3823d.jpeg differ diff --git a/src/assets/images/generated3ddbb.jpeg b/src/assets/images/generated3ddbb.jpeg new file mode 100644 index 0000000..05f1639 Binary files /dev/null and b/src/assets/images/generated3ddbb.jpeg differ diff --git a/src/assets/images/generated4c1.jpeg b/src/assets/images/generated4c1.jpeg new file mode 100644 index 0000000..1ddd8ab Binary files /dev/null and b/src/assets/images/generated4c1.jpeg differ diff --git a/src/assets/images/generated506.jpeg b/src/assets/images/generated506.jpeg new file mode 100644 index 0000000..591f7d9 Binary files /dev/null and b/src/assets/images/generated506.jpeg differ diff --git a/src/assets/images/generated749.jpeg b/src/assets/images/generated749.jpeg new file mode 100644 index 0000000..fee81d4 Binary files /dev/null and b/src/assets/images/generated749.jpeg differ diff --git a/src/assets/images/generated9.jpeg b/src/assets/images/generated9.jpeg new file mode 100644 index 0000000..1238cbe Binary files /dev/null and b/src/assets/images/generated9.jpeg differ diff --git a/src/assets/images/generated942fa.jpeg b/src/assets/images/generated942fa.jpeg new file mode 100644 index 0000000..3afd7f8 Binary files /dev/null and b/src/assets/images/generated942fa.jpeg differ diff --git a/src/assets/images/generatedb35.jpeg b/src/assets/images/generatedb35.jpeg new file mode 100644 index 0000000..5f8d567 Binary files /dev/null and b/src/assets/images/generatedb35.jpeg differ diff --git a/src/assets/images/generatedbed2.jpeg b/src/assets/images/generatedbed2.jpeg new file mode 100644 index 0000000..6597fc3 Binary files /dev/null and b/src/assets/images/generatedbed2.jpeg differ diff --git a/src/assets/images/generatedc1.jpeg b/src/assets/images/generatedc1.jpeg new file mode 100644 index 0000000..192c6f9 Binary files /dev/null and b/src/assets/images/generatedc1.jpeg differ diff --git a/src/assets/images/generatedc16c58.jpeg b/src/assets/images/generatedc16c58.jpeg new file mode 100644 index 0000000..d68b044 Binary files /dev/null and b/src/assets/images/generatedc16c58.jpeg differ diff --git a/src/assets/images/generatedd0506.jpeg b/src/assets/images/generatedd0506.jpeg new file mode 100644 index 0000000..6f989b5 Binary files /dev/null and b/src/assets/images/generatedd0506.jpeg differ diff --git a/src/assets/images/generateded2.jpeg b/src/assets/images/generateded2.jpeg new file mode 100644 index 0000000..52987db Binary files /dev/null and b/src/assets/images/generateded2.jpeg differ diff --git a/src/assets/images/image.jpeg b/src/assets/images/image.jpeg new file mode 100644 index 0000000..1037e81 Binary files /dev/null and b/src/assets/images/image.jpeg differ diff --git a/src/assets/images/lose.png b/src/assets/images/lose.png new file mode 100644 index 0000000..1cf6627 Binary files /dev/null and b/src/assets/images/lose.png differ diff --git a/src/assets/images/lowers.png b/src/assets/images/lowers.png new file mode 100644 index 0000000..c323302 Binary files /dev/null and b/src/assets/images/lowers.png differ diff --git a/src/assets/images/olated.png b/src/assets/images/olated.png new file mode 100644 index 0000000..f2bd8d1 Binary files /dev/null and b/src/assets/images/olated.png differ diff --git a/src/assets/images/unsash.png b/src/assets/images/unsash.png new file mode 100644 index 0000000..7fb751f Binary files /dev/null and b/src/assets/images/unsash.png differ diff --git a/src/assets/images/unsn6deo.png b/src/assets/images/unsn6deo.png new file mode 100644 index 0000000..f768f24 Binary files /dev/null and b/src/assets/images/unsn6deo.png differ diff --git a/src/assets/images/unspla66.png b/src/assets/images/unspla66.png new file mode 100644 index 0000000..ff76ac5 Binary files /dev/null and b/src/assets/images/unspla66.png differ diff --git a/src/assets/images/unsplash.png b/src/assets/images/unsplash.png new file mode 100644 index 0000000..56c8b9a Binary files /dev/null and b/src/assets/images/unsplash.png differ diff --git a/src/assets/images/unsplash654.png b/src/assets/images/unsplash654.png new file mode 100644 index 0000000..eb5b9ad Binary files /dev/null and b/src/assets/images/unsplash654.png differ diff --git a/src/assets/images/unsplash_kMJp7620W6U.png b/src/assets/images/unsplash_kMJp7620W6U.png new file mode 100644 index 0000000..862b52f Binary files /dev/null and b/src/assets/images/unsplash_kMJp7620W6U.png differ diff --git a/src/components/App/App.tsx b/src/components/App/App.tsx index c0cb0b9..0bd93f6 100644 --- a/src/components/App/App.tsx +++ b/src/components/App/App.tsx @@ -22,7 +22,6 @@ import { setLoggedIn, } from 'src/store/features/slice/userSlice'; - export default function App() { const { loggedIn, loading } = useAppSelector(selectUsers); const [droppedCards, setDroppedCards] = useState([]); @@ -37,8 +36,8 @@ export default function App() { dispatch(fetchRegisterUser({ email, password })) .unwrap() .then((data) => { - if (data.access) { - localStorage.setItem('token', data.access); + if (data.token) { + localStorage.setItem('token', data.token); dispatch(setLoggedIn(true)); navigate('/'); fetchTeamsId(); diff --git a/src/pages/Employees/Employees.tsx b/src/pages/Employees/Employees.tsx index 6beab17..171feff 100644 --- a/src/pages/Employees/Employees.tsx +++ b/src/pages/Employees/Employees.tsx @@ -118,6 +118,7 @@ export default function Employees() { title={card.position} full_name={card.full_name} department={card.department} + image={card.image} index={index} /> ))} diff --git a/src/pages/Profile/Profile.module.scss b/src/pages/Profile/Profile.module.scss index 60f78ed..44eb81f 100644 --- a/src/pages/Profile/Profile.module.scss +++ b/src/pages/Profile/Profile.module.scss @@ -167,6 +167,10 @@ cursor: pointer; } +.colorBlack { + color: $main-text-black; +} + .link { text-decoration: none; } \ No newline at end of file diff --git a/src/pages/Profile/Profile.tsx b/src/pages/Profile/Profile.tsx index 7cbf0cd..962de00 100644 --- a/src/pages/Profile/Profile.tsx +++ b/src/pages/Profile/Profile.tsx @@ -9,7 +9,6 @@ import { selectUsers, } from 'src/store/features/slice/userSlice'; import { useEffect } from 'react'; -import { BASE_URL } from 'src/store/api'; import DigramOne from 'src/assets/images/diagram1.png'; import DigramTwo from 'src/assets/images/diagram2.png'; import DigramThree from 'src/assets/images/diagram3.png'; @@ -25,14 +24,12 @@ export default function Profile() { dispatch(fetchGetProfile()); }, [dispatch]); - const imageUrl = profile?.image ? `${BASE_URL}${profile.image}` : ''; - return (
ваше фото @@ -105,7 +102,7 @@ export default function Profile() { ))} {cont.link} diff --git a/src/pages/Teams/Teams.tsx b/src/pages/Teams/Teams.tsx index fecff81..a12253d 100644 --- a/src/pages/Teams/Teams.tsx +++ b/src/pages/Teams/Teams.tsx @@ -96,6 +96,7 @@ export default function Teams() { } return card; }; + const renderCardsServer = (card: membersProps) => { if (!card.cellId || !card.subordinates) { return null; diff --git a/src/services/helpers.tsx b/src/services/helpers.tsx index 59f3eb2..e8024f2 100644 --- a/src/services/helpers.tsx +++ b/src/services/helpers.tsx @@ -89,6 +89,7 @@ export const renderCards = ( > ) => void; draggable?: boolean; isFilterOpen?: boolean; + positions?: string; +} + +export interface MembersResult { + count: number; + results: Member[]; +} + +export interface Member { + full_name: string; + position: string; + department: string; + city: string; + id: string; + image: string; +} + +export interface membersResultProps { + count: number; + results: { + id: string; + title?: string; + full_name?: string; + department?: string; + position?: string; + image?: string; + positions?: string; + city?: string; + }[]; } export interface SelectsProps { @@ -52,10 +81,13 @@ export interface ProfileProps { export interface ProjectseProps { name: string; id?: string; + description?: string; teams?: { name?: string; id?: string; }[]; + started?: string; + ended?: string; } export interface TeamsProps { @@ -63,6 +95,7 @@ export interface TeamsProps { id?: string; description?: string; employees?: any; + owner?: number; projects?: { name?: string; id?: string; @@ -74,3 +107,10 @@ export interface FiltersProps { departments: string[]; positions: string[]; } + +export interface FilterParams { + search: string; + position?: string; + department?: string; + city?: string; +} \ No newline at end of file diff --git a/src/store/api.ts b/src/store/api.ts index 44aeccb..9819987 100644 --- a/src/store/api.ts +++ b/src/store/api.ts @@ -1,118 +1,241 @@ -export const BASE_URL = 'https://gazprom.hopto.org'; -import { RegisterDataProps } from 'src/services/types'; +import { + FilterParams, + Member, + MembersResult, + ProfileProps, + ProjectseProps, + RegisterDataProps, + SelectsProps, + TeamsProps, +} from 'src/services/types'; +import { mockSearchFields } from 'src/services/mocks/mockSearchFields'; +import { mockProfile } from 'src/services/mocks/mockProfile'; +import { mockTeams } from 'src/services/mocks/mockTeams'; +import { mockProjects } from 'src/services/mocks/mockProjects'; +import { mockTeam } from 'src/services/mocks/mockTeamId'; +import { mockMembers } from 'src/services/mocks/mockMembers'; -const getToken = () => { - return localStorage.getItem('token'); -}; -const createHeaders = () => { - const TOKEN = getToken(); - return { - authorization: `Bearer ${TOKEN}`, - Accept: 'application/json', - 'Content-Type': 'application/json', - }; +const mockTokenResponse = { + token: + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzI1MTkxNzI1LCJpYXQiOjE3MjQ3NTk3MjUsImp0aSI6ImI2NmNmZTE3MzExMDQyYTY5NzQwMjM3MTQ5NGYyZjBkIiwidXNlcl9pZCI6ODJ9.JQ5H6uZ-EFLJQ4W4BW-Kgr1aPuC60KWUmJMbMIFl7p4', }; -type RequestOptionsType = RequestInit & { - headers: Record; +export const registration = async ({ email, password }: RegisterDataProps) => { + if (!email || !password) { + throw new Error('Email and password are required'); + } + await new Promise((resolve) => setTimeout(resolve, 1000)); + return mockTokenResponse; }; -export const checkResponse = (response: Response) => { - if (response.ok) { - return response.json(); - } - return response.json().then((data) => { - console.error('Ошибка ответа:', data); - return Promise.reject( - `Ошибка ${response.status}: ${data.message || 'Неизвестная ошибка'}` - ); +registration({ email: 'admin@admin.com', password: 'admin' }) + .then((response) => { + console.log('Registered successfully:', response); + }) + .catch((error) => { + console.error('Registration failed:', error); }); -}; -const buildQueryString = (params: Record) => { - return new URLSearchParams(params).toString(); +const filterMembers = ( + members: Member[], + { search, position, department, city }: FilterParams +): Member[] => { + return members.filter((member) => { + const matchesSearch = member.full_name + .toLowerCase() + .includes(search.toLowerCase()); + const matchesPosition = position ? member.position === position : true; + const matchesDepartment = department + ? member.department === department + : true; + const matchesCity = city ? member.city === city : true; + + return matchesSearch && matchesPosition && matchesDepartment && matchesCity; + }); }; -const request = (endpoint: string, options?: RequestOptionsType) => - fetch(`${BASE_URL}${endpoint}`, options).then(checkResponse); +export const getMembersData = ( + page: number = 1, + search: string = '', + position: string = '', + department: string = '', + city: string = '' +): Promise => { + const filteredMembers = filterMembers(mockMembers.results, { + search, + position, + department, + city, + }); -export const registration = async ({ email, password }: RegisterDataProps) => { - const options: RequestOptionsType = { - method: 'POST', - headers: createHeaders(), - body: JSON.stringify({ email, password }), - }; - return await request('/api/token/', options); + // Пагинация + const startIndex = (page - 1) * 12; + const paginatedMembers = filteredMembers.slice(startIndex, startIndex + 12); + + return Promise.resolve({ + count: filteredMembers.length, + results: paginatedMembers, + }); }; -export const getMembersData = ( - page: number, - search: string, - position: string, - department: string, - city: string, -) => { - return fetch( - `${BASE_URL}/api/v1/members/?${buildQueryString({ - page, - search, - position, - department, - city, - })}`, - { - method: 'GET', - headers: createHeaders(), - } - ).then(checkResponse); +export const getMemberId = async (id: number) => { + const selectedMember: MembersResult = mockMembers; + const res = await Promise.resolve( + selectedMember.results.find((element) => element.id === id.toString()) + ); + return res; +}; + +export const getSelects = async () => { + const searchFields: SelectsProps = mockSearchFields; + const res = await Promise.resolve(searchFields); + return res; }; export const getProfile = async () => { - const options: RequestOptionsType = { - method: 'GET', - headers: createHeaders(), - }; - const response = await request('/api/v1/users/me/', options); - return response; + const profile: ProfileProps = mockProfile; + const res = await Promise.resolve(profile); + return res; }; export const getTeams = async () => { - const options: RequestOptionsType = { - method: 'GET', - headers: createHeaders(), - }; - return await request('/api/v1/teams/', options); + const teams: TeamsProps[] = mockTeams; + const res = await Promise.resolve(teams); + return res; }; -export const getSelects = async () => { - const options: RequestOptionsType = { - method: 'GET', - headers: createHeaders(), - }; - return await request('/api/v1/filters/', options); +export const getTeamsId = async (id: number) => { + const team: TeamsProps[] = mockTeam; + const res = await Promise.resolve( + team.find((element) => element.id === id.toString()) + ); + return res; }; export const getProjects = async () => { - const options: RequestOptionsType = { - method: 'GET', - headers: createHeaders(), - }; - return await request('/api/v1/projects/', options); + const projects: ProjectseProps[] = mockProjects; + const res = await Promise.resolve(projects); + return res; }; -export const getTeamsId = async (id: number) => { - const options: RequestOptionsType = { - method: 'GET', - headers: createHeaders(), - }; - return await request(`/api/v1/teams/${id}/`, options); -}; -export const getMemberId = async (id: number) => { - const options: RequestOptionsType = { - method: 'GET', - headers: createHeaders(), - }; - return await request(`/api/v1/members/${id}/`, options); -}; +// Сервер: + +// export const BASE_URL = 'https://gazprom.hopto.org'; + +// const getToken = () => { +// return localStorage.getItem('token'); +// }; + +// const createHeaders = () => { +// const TOKEN = getToken(); +// return { +// authorization: `Bearer ${TOKEN}`, +// Accept: 'application/json', +// 'Content-Type': 'application/json', +// }; +// }; + +// type RequestOptionsType = RequestInit & { +// headers: Record; +// }; + +// export const checkResponse = (response: Response) => { +// if (response.ok) { +// return response.json(); +// } +// return response.json().then((data) => { +// console.error('Ошибка ответа:', data); +// return Promise.reject( +// `Ошибка ${response.status}: ${data.message || 'Неизвестная ошибка'}` +// ); +// }); +// }; + +// const request = (endpoint: string, options?: RequestOptionsType) => +// fetch(`${BASE_URL}${endpoint}`, options).then(checkResponse); + +// const buildQueryString = (params: Record) => { +// return new URLSearchParams(params).toString(); +// }; + +// export const getMembersData = ( +// page: number, +// search: string, +// position: string, +// department: string, +// city: string +// ) => { +// return fetch( +// `${BASE_URL}/api/v1/members/?${buildQueryString({ +// page, +// search, +// position, +// department, +// city, +// })}`, +// { +// method: 'GET', +// headers: createHeaders(), +// } +// ).then(checkResponse); +// }; + +// export const registration = async ({ email, password }: RegisterDataProps) => { +// const options: RequestOptionsType = { +// method: 'POST', +// headers: createHeaders(), +// body: JSON.stringify({ email, password }), +// }; +// return await request('/api/token/', options); +// }; + +// export const getProfile = async () => { +// const options: RequestOptionsType = { +// method: 'GET', +// headers: createHeaders(), +// }; +// const response = await request('/api/v1/users/me/', options); +// return response; +// }; + +// export const getTeams = async () => { +// const options: RequestOptionsType = { +// method: 'GET', +// headers: createHeaders(), +// }; +// return await request('/api/v1/teams/', options); +// }; + +// export const getSelects = async () => { +// const options: RequestOptionsType = { +// method: 'GET', +// headers: createHeaders(), +// }; +// return await request('/api/v1/filters/', options); +// }; + +// export const getProjects = async () => { +// const options: RequestOptionsType = { +// method: 'GET', +// headers: createHeaders(), +// }; +// return await request('/api/v1/projects/', options); +// }; + +// export const getTeamsId = async (id: number) => { +// const options: RequestOptionsType = { +// method: 'GET', +// headers: createHeaders(), +// }; +// return await request(`/api/v1/teams/${id}/`, options); +// }; + +// export const getMemberId = async (id: number) => { +// const options: RequestOptionsType = { +// method: 'GET', +// headers: createHeaders(), +// }; +// return await request(`/api/v1/members/${id}/`, options); +// }; diff --git a/src/store/features/slice/teamsSlice.ts b/src/store/features/slice/teamsSlice.ts index 1235e8a..463c114 100644 --- a/src/store/features/slice/teamsSlice.ts +++ b/src/store/features/slice/teamsSlice.ts @@ -6,7 +6,7 @@ import { RootStore } from 'src/store/store'; export interface StateType { teams: TeamsProps[]; - team: TeamsProps; + team: TeamsProps | undefined; isLoading: boolean; error: string | null | unknown; nameTeam: string; diff --git a/src/store/features/slice/userSlice.ts b/src/store/features/slice/userSlice.ts index 577ae9a..dcfa26e 100644 --- a/src/store/features/slice/userSlice.ts +++ b/src/store/features/slice/userSlice.ts @@ -31,8 +31,8 @@ const initialState: StateType = { isProfileOpen: false, selectedMember: null, showMore: true, - email: '', - password: '', + email: 'admin@admin.com', + password: 'admin', }; export const fetchRegisterUser = createAsyncThunk( @@ -42,6 +42,7 @@ export const fetchRegisterUser = createAsyncThunk( return response; } ); + export const fetchGetProfile = createAsyncThunk('fetch/profile', async () => { const response = await getProfile(); return response; @@ -85,7 +86,7 @@ const userSlice = createSlice({ state.isLoading = true; }) .addCase(fetchRegisterUser.fulfilled, (state, action) => { - state.access = action.payload.access; + state.access = action.payload.token; state.error = null; state.loggedIn = true; }) @@ -109,7 +110,11 @@ const userSlice = createSlice({ state.isLoading = true; }) .addCase(fetchGetMemberId.fulfilled, (state, action) => { - state.selectedMember = action.payload; + if (action.payload) { + state.selectedMember = action.payload; + } else { + state.selectedMember = null; + } state.isProfileOpen = false; }) .addCase(fetchGetMemberId.rejected, (state, action) => { diff --git a/src/ui/Card/Card.tsx b/src/ui/Card/Card.tsx index 0eba009..3ad8d66 100644 --- a/src/ui/Card/Card.tsx +++ b/src/ui/Card/Card.tsx @@ -1,5 +1,4 @@ import styles from 'src/ui/Card/Card.module.scss'; -import { BASE_URL } from 'src/store/api'; import { useState } from 'react'; import cn from 'classnames/bind'; import { membersProps } from 'src/services/types'; @@ -10,7 +9,6 @@ import { selectUsers, setIsProfileOpen, } from 'src/store/features/slice/userSlice'; -import Avatar from 'src/assets/images/Avatar.png'; const cx = cn.bind(styles); @@ -68,8 +66,9 @@ export default function Card({
Фото профиля console.error('Ошибка загрузки изображения:', image)} />