+
+ {categories.map(({ name, amount, active }, idx) => (
+
+ ))}
+
+
+
+ {layouts.map(({ name, active }, idx) => (
+
+ ))}
+
+
+ );
+}
+
+export default memo(PropertiesHeader);
diff --git a/src/app/main/navigationPages/shared-components/PropertyGridCard.js b/src/app/main/navigationPages/shared-components/PropertyGridCard.js
new file mode 100644
index 0000000..7a8424e
--- /dev/null
+++ b/src/app/main/navigationPages/shared-components/PropertyGridCard.js
@@ -0,0 +1,77 @@
+import FuseSvgIcon from '@fuse/core/FuseSvgIcon';
+import Typography from '@mui/material/Typography';
+import { memo } from 'react';
+import { Link } from 'react-router-dom';
+import DateMark from './DateMark';
+import FavoriteButton from './FavoriteButton';
+import MetaMark from './MetaMark';
+import StatisticsValue from './StatisticsValue';
+
+function PropertyGridCard({
+ id,
+ image,
+ title,
+ category,
+ status,
+ update,
+ favorite,
+ statistics,
+ onFavorite,
+ onDelete,
+}) {
+ return (
+
+
+
+
+
+ {title}
+
+

+
+ {statistics.map(({ subject, value, mode }, idx) => (
+
+ ))}
+
+
+
+
+
+
+ Details
+
+
+
+ );
+}
+
+export default memo(PropertyGridCard);
diff --git a/src/app/main/navigationPages/shared-components/PropertyListItem.js b/src/app/main/navigationPages/shared-components/PropertyListItem.js
new file mode 100644
index 0000000..f9baa0f
--- /dev/null
+++ b/src/app/main/navigationPages/shared-components/PropertyListItem.js
@@ -0,0 +1,83 @@
+import FuseSvgIcon from '@fuse/core/FuseSvgIcon';
+import Typography from '@mui/material/Typography';
+import { memo } from 'react';
+import { Link } from 'react-router-dom';
+import DateMark from './DateMark';
+import FavoriteButton from './FavoriteButton';
+import MetaMark from './MetaMark';
+import StatisticsValue from './StatisticsValue';
+
+function PropertyListItem({
+ id,
+ image,
+ title,
+ category,
+ status,
+ update,
+ favorite,
+ statistics,
+ onFavorite,
+ onDelete,
+}) {
+ return (
+
+
+
+
+
+
+ {statistics.map(
+ ({ subject, value, mode }, idx) =>
+ (idx === 0 || idx === 1) && (
+
+ )
+ )}
+
+
+
+
+
+ Details
+
+
+
+ );
+}
+
+export default memo(PropertyListItem);
diff --git a/src/app/main/navigationPages/shared-components/StatisticsValue.js b/src/app/main/navigationPages/shared-components/StatisticsValue.js
new file mode 100644
index 0000000..3839c7c
--- /dev/null
+++ b/src/app/main/navigationPages/shared-components/StatisticsValue.js
@@ -0,0 +1,38 @@
+import Typography from '@mui/material/Typography';
+import { STATISTICS_MODES } from 'app/configs/consts';
+import clsx from 'clsx';
+import { memo } from 'react';
+
+function StatisticsValue({ className, subject, value, mode }) {
+ const isPositive = mode === STATISTICS_MODES.positive;
+ const isExtraPositive = mode === STATISTICS_MODES.extra_positive;
+ const isNegative = mode === STATISTICS_MODES.negative;
+ const isExtraNegative = mode === STATISTICS_MODES.extra_negative;
+
+ return (
+