+ >
+ );
+};
diff --git a/apps/web/components/molecules/comments/comments.mock.tsx b/apps/web/components/molecules/comments/comments.mock.tsx
new file mode 100644
index 0000000..83b2e13
--- /dev/null
+++ b/apps/web/components/molecules/comments/comments.mock.tsx
@@ -0,0 +1,55 @@
+import type { Comment } from '../../../types/types';
+
+export const commentsMock: Comment[] = [
+ {
+ id: '1',
+ author: {
+ id: '1',
+ name: 'Adam Nowak',
+ avatar_URL:
+ 'https://images.unsplash.com/photo-1633332755192-727a05c4013d?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2960&q=80',
+ },
+ comment:
+ 'To zadanie frontendowe wydaje się bardzo wymagające, ale na pewno pozwoli na rozwinięcie umiejętności i poszerzenie wiedzy. Trzeba będzie zwrócić uwagę na każdy szczegół, aby stworzyć estetyczny i responsywny interfejs.',
+ timestamp: 1264938840000,
+ },
+
+ {
+ id: '2',
+ author: {
+ id: '2',
+ name: 'Maria Wójcik',
+ avatar_URL:
+ 'https://images.unsplash.com/photo-1509839862600-309617c3201e?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2070&q=80',
+ },
+ comment:
+ 'Mam nadzieję, że w tym zadaniu będzie można wykorzystać najnowsze technologie i narzędzia, co pozwoli na jeszcze lepsze efekty. Czekam na wyzwania, które pozwolą mi się rozwijać i poszerzać horyzonty.',
+ timestamp: 1678794840000,
+ },
+
+ {
+ id: '3',
+ author: {
+ id: '3',
+ name: 'Piotr Kowalczyk',
+ avatar_URL:
+ 'https://images.unsplash.com/photo-1556157382-97eda2d62296?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2070&q=80',
+ },
+ comment:
+ 'Zadanie frontendowe to wspaniała okazja, aby pokazać swoje umiejętności projektowania interfejsów użytkownika. Nie mogę się doczekać, aby zacząć pracę i zobaczyć, co uda mi się stworzyć.',
+ timestamp: 1672444800000,
+ },
+
+ {
+ id: '4',
+ author: {
+ id: '4',
+ name: 'Karolina Nowakowska',
+ avatar_URL:
+ 'https://images.unsplash.com/photo-1607982863027-0cb6818ee8b7?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2070&q=80',
+ },
+ comment:
+ 'Zadanie frontendowe może być trudne, ale warto podjąć wyzwanie. Będzie to okazja do nauki nowych technologii i rozwoju umiejętności, co na pewno będzie przydatne w dalszej karierze.',
+ timestamp: 1678808591856,
+ },
+];
diff --git a/apps/web/components/molecules/comments/comments.tsx b/apps/web/components/molecules/comments/comments.tsx
new file mode 100644
index 0000000..632fa1e
--- /dev/null
+++ b/apps/web/components/molecules/comments/comments.tsx
@@ -0,0 +1,27 @@
+import { Heading } from 'ui';
+import { ProtectedComponent } from 'organisms/protectedComponent/protectedComponent';
+import { AddComment } from 'organisms/addComment/addComment';
+import { CommentItem } from 'molecules/commentItem/commentItem';
+import { commentsMock } from 'molecules/comments/comments.mock';
+
+const comments = commentsMock.sort((a, b) => b.timestamp - a.timestamp);
+
+export const Comments = () => {
+ return (
+
+
+
+
+ Komentarze ({comments.length})
+
+
+
+
+
+
+ {comments.map((comment) => (
+
+ ))}
+
+ );
+};
diff --git a/apps/web/components/molecules/opinionItem/opinionItem.tsx b/apps/web/components/molecules/opinionItem/opinionItem.tsx
new file mode 100644
index 0000000..72dad53
--- /dev/null
+++ b/apps/web/components/molecules/opinionItem/opinionItem.tsx
@@ -0,0 +1,44 @@
+import { Card, Heading, Text } from 'ui';
+import clsx from 'clsx';
+import type { Opinion } from '../../../types/types';
+import { UserAvatar } from 'molecules/userAvatar/userAvatar';
+
+type OpinionItemProps = Opinion;
+
+export const OpinionItem = ({ author, rating, comment }: OpinionItemProps) => {
+ return (
+
+ );
+};
diff --git a/apps/web/components/molecules/opinions/opinions.mock.tsx b/apps/web/components/molecules/opinions/opinions.mock.tsx
new file mode 100644
index 0000000..b344028
--- /dev/null
+++ b/apps/web/components/molecules/opinions/opinions.mock.tsx
@@ -0,0 +1,40 @@
+import type { Opinion } from '../../../types/types';
+
+export const opinions: Opinion[] = [
+ {
+ id: '1',
+ author: {
+ id: '1',
+ name: 'Adam Nowak',
+ avatar_URL:
+ 'https://images.unsplash.com/photo-1633332755192-727a05c4013d?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2960&q=80',
+ },
+ rating: 5,
+ comment:
+ 'Zadanie programistyczne, które otrzymałem, było dobrze sformułowane i precyzyjnie opisywało wymagania dotyczące tworzenia aplikacji internetowej. Zadanie miało na celu zaimplementowanie funkcjonalności wyszukiwania produktów w bazie danych i wyświetlenia wyników na stronie internetowej.',
+ },
+ {
+ id: '2',
+ author: {
+ id: '2',
+ name: 'Maria Wójcik',
+ avatar_URL:
+ 'https://images.unsplash.com/photo-1509839862600-309617c3201e?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2070&q=80',
+ },
+ rating: 5,
+ comment:
+ 'Zadanie programistyczne, które otrzymałem, było dobrze sformułowane i precyzyjnie opisywało wymagania dotyczące tworzenia aplikacji internetowej. Zadanie miało na celu zaimplementowanie funkcjonalności wyszukiwania produktów w bazie danych i wyświetlenia wyników na stronie internetowej.',
+ },
+ {
+ id: '3',
+ author: {
+ id: '3',
+ name: 'Piotr Kowalczyk',
+ avatar_URL:
+ 'https://images.unsplash.com/photo-1556157382-97eda2d62296?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2070&q=80',
+ },
+ rating: 4,
+ comment:
+ 'Zadanie programistyczne, które otrzymałem, było dobrze sformułowane i precyzyjnie opisywało wymagania dotyczące tworzenia aplikacji internetowej. Zadanie miało na celu zaimplementowanie funkcjonalności wyszukiwania produktów w bazie danych i wyświetlenia wyników na stronie internetowej.',
+ },
+];
diff --git a/apps/web/components/molecules/opinions/opinions.tsx b/apps/web/components/molecules/opinions/opinions.tsx
new file mode 100644
index 0000000..8916cd4
--- /dev/null
+++ b/apps/web/components/molecules/opinions/opinions.tsx
@@ -0,0 +1,23 @@
+import { OpinionItem } from 'molecules/opinionItem/opinionItem';
+import { AddOpinion } from 'organisms/addOpinion/addOpinion';
+import { OpinionStats } from 'molecules/opinonStats/opinionStats';
+import { ProtectedComponent } from 'organisms/protectedComponent/protectedComponent';
+import { opinions } from 'molecules/opinions/opinions.mock';
+
+export const Opinions = () => {
+ return (
+ <>
+