@appcorp/kismaa-web-ui 0.2.77 → 0.2.80
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/organisms/review-section/index.d.ts +2 -0
- package/organisms/review-section/index.js +18 -0
- package/organisms/review-section/props.d.ts +2 -0
- package/organisms/review-section/props.js +39 -0
- package/organisms/review-section/review-options.d.ts +7 -0
- package/organisms/review-section/review-options.js +113 -0
- package/organisms/review-section/review-section.d.ts +3 -0
- package/organisms/review-section/review-section.js +72 -0
- package/organisms/review-section/type.d.ts +19 -0
- package/organisms/review-section/type.js +2 -0
- package/package.json +4 -4
- package/templates/user-detail-page/user-detail-page.js +3 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./review-section"), exports);
|
|
18
|
+
__exportStar(require("./type"), exports);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.reviewSectionData = void 0;
|
|
4
|
+
exports.reviewSectionData = {
|
|
5
|
+
selectedRating: 5,
|
|
6
|
+
handleSelectRating: function (rating) { return console.log(rating); },
|
|
7
|
+
average: 4,
|
|
8
|
+
totalCount: 1624,
|
|
9
|
+
counts: [
|
|
10
|
+
{ rating: 5, count: 1019 },
|
|
11
|
+
{ rating: 4, count: 162 },
|
|
12
|
+
{ rating: 3, count: 97 },
|
|
13
|
+
{ rating: 2, count: 199 },
|
|
14
|
+
{ rating: 1, count: 147 },
|
|
15
|
+
],
|
|
16
|
+
items: [
|
|
17
|
+
{
|
|
18
|
+
id: '1',
|
|
19
|
+
rating: 5,
|
|
20
|
+
content: "\n This is the bag of my dreams. I took it on my last vacation and was able to fit an absurd amount of snacks for the many long and hungry flights.\n ",
|
|
21
|
+
name: 'Emily Selman',
|
|
22
|
+
avatar: 'https://images.unsplash.com/photo-1502685104226-ee32379fefbe?ixlib=rb-=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=8&w=256&h=256&q=80',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: '2',
|
|
26
|
+
rating: 5,
|
|
27
|
+
content: "\n Before getting the Ruck Snack, I struggled my whole life with pulverized snacks, endless crumbs, and other heartbreaking snack catastrophes. Now, I can stow my snacks with confidence and style!\n ",
|
|
28
|
+
name: 'Hector Gibbons',
|
|
29
|
+
avatar: 'https://images.unsplash.com/photo-1500648767791-00dcc994a43e?ixlib=rb-=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=8&w=256&h=256&q=80',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: '3',
|
|
33
|
+
rating: 4,
|
|
34
|
+
content: "\n I love how versatile this bag is. It can hold anything ranging from cookies that come in trays to cookies that come in tins.\n ",
|
|
35
|
+
name: 'Mark Edwards',
|
|
36
|
+
avatar: 'https://images.unsplash.com/photo-1519244703995-f4e0f30006d5?ixlib=rb-1.2.1&ixqx=oilqXxSqey&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80',
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
};
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
30
|
+
var ownKeys = function(o) {
|
|
31
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
32
|
+
var ar = [];
|
|
33
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
34
|
+
return ar;
|
|
35
|
+
};
|
|
36
|
+
return ownKeys(o);
|
|
37
|
+
};
|
|
38
|
+
return function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
})();
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
exports.ReviewOptions = void 0;
|
|
48
|
+
var react_1 = require("@headlessui/react");
|
|
49
|
+
var react_2 = __importStar(require("react"));
|
|
50
|
+
var react_popper_1 = require("react-popper");
|
|
51
|
+
var ReviewOptions = function (_a) {
|
|
52
|
+
var selectedRating = _a.selectedRating, handleSelectRating = _a.handleSelectRating;
|
|
53
|
+
var _b = (0, react_2.useState)(null), parentElement = _b[0], setParentElement = _b[1];
|
|
54
|
+
var _c = (0, react_2.useState)(null), dropdown = _c[0], setDropdown = _c[1];
|
|
55
|
+
var _d = (0, react_2.useState)([0, 8]), offset = _d[0], setOffset = _d[1];
|
|
56
|
+
(0, react_2.useEffect)(function () {
|
|
57
|
+
var calculateOffset = function () {
|
|
58
|
+
if (typeof window === 'undefined')
|
|
59
|
+
return [0, 8];
|
|
60
|
+
var w = window.innerWidth;
|
|
61
|
+
if (w >= 1536)
|
|
62
|
+
return [0, 10]; // 2xl
|
|
63
|
+
if (w >= 1280)
|
|
64
|
+
return [0, 10]; // xl
|
|
65
|
+
if (w >= 1024)
|
|
66
|
+
return [0, 10]; // lg
|
|
67
|
+
if (w >= 768)
|
|
68
|
+
return [0, 8]; // md
|
|
69
|
+
if (w >= 640)
|
|
70
|
+
return [0, 6]; // sm
|
|
71
|
+
return [0, 6]; // xs / mobile
|
|
72
|
+
};
|
|
73
|
+
setOffset(calculateOffset());
|
|
74
|
+
var handleResize = function () {
|
|
75
|
+
setOffset(calculateOffset());
|
|
76
|
+
};
|
|
77
|
+
window.addEventListener('resize', handleResize);
|
|
78
|
+
return function () { return window.removeEventListener('resize', handleResize); };
|
|
79
|
+
}, []);
|
|
80
|
+
var _e = (0, react_popper_1.usePopper)(parentElement, dropdown, {
|
|
81
|
+
placement: 'bottom-end',
|
|
82
|
+
modifiers: [
|
|
83
|
+
{
|
|
84
|
+
name: 'offset',
|
|
85
|
+
options: {
|
|
86
|
+
offset: offset,
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
name: 'preventOverflow',
|
|
91
|
+
options: { boundary: undefined },
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: 'flip',
|
|
95
|
+
options: { fallbackPlacements: ['top-end'] },
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
}), avatarStyles = _e.styles, avatarAttributes = _e.attributes;
|
|
99
|
+
return (react_2.default.createElement(react_1.Popover, { className: "relative" },
|
|
100
|
+
react_2.default.createElement("div", { className: "flex flex-col items-end justify-start" },
|
|
101
|
+
react_2.default.createElement(react_1.PopoverButton, { ref: setParentElement },
|
|
102
|
+
react_2.default.createElement("div", { className: "bg-secondary rounded-lg px-4 py-2 text-white" },
|
|
103
|
+
selectedRating,
|
|
104
|
+
" stars reviews"))),
|
|
105
|
+
react_2.default.createElement(react_1.PopoverPanel, __assign({ transition: true, className: "z-10 w-56 transition data-closed:translate-y-1 data-closed:opacity-0 data-enter:duration-200 data-enter:ease-out data-leave:duration-150 data-leave:ease-in", ref: setDropdown, style: avatarStyles.popper }, avatarAttributes.popper),
|
|
106
|
+
react_2.default.createElement("div", { className: "w-full shrink rounded-xl bg-white p-4 text-sm/6 font-semibold text-gray-900 shadow-lg outline-1 outline-gray-900/5 dark:bg-gray-800 dark:text-white dark:shadow-none dark:outline dark:-outline-offset-1 dark:outline-white/10" }, [5, 4, 3, 2, 1].map(function (star) { return (react_2.default.createElement("div", { className: "cursor-pointer rounded-md p-1 hover:bg-gray-100", key: star, onClick: function () { return handleSelectRating(star); } },
|
|
107
|
+
react_2.default.createElement("p", { key: star, className: "" },
|
|
108
|
+
star,
|
|
109
|
+
" star",
|
|
110
|
+
star > 1 ? 's' : '',
|
|
111
|
+
" reviews"))); })))));
|
|
112
|
+
};
|
|
113
|
+
exports.ReviewOptions = ReviewOptions;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ReviewSection = void 0;
|
|
7
|
+
var react_1 = __importDefault(require("react"));
|
|
8
|
+
var solid_1 = require("@heroicons/react/20/solid");
|
|
9
|
+
var review_options_1 = require("./review-options");
|
|
10
|
+
function classNames() {
|
|
11
|
+
var classes = [];
|
|
12
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
13
|
+
classes[_i] = arguments[_i];
|
|
14
|
+
}
|
|
15
|
+
return classes.filter(Boolean).join(' ');
|
|
16
|
+
}
|
|
17
|
+
var ReviewSection = function (_a) {
|
|
18
|
+
var average = _a.average, counts = _a.counts, handleSelectRating = _a.handleSelectRating, items = _a.items, selectedRating = _a.selectedRating, totalCount = _a.totalCount;
|
|
19
|
+
return (react_1.default.createElement("div", { className: "bg-white" },
|
|
20
|
+
react_1.default.createElement("div", { className: "mx-auto max-w-2xl px-4 py-16 sm:px-6 sm:py-24 lg:grid lg:max-w-7xl lg:grid-cols-12 lg:gap-x-8 lg:px-8 lg:py-32" },
|
|
21
|
+
react_1.default.createElement("div", { className: "lg:col-span-4" },
|
|
22
|
+
react_1.default.createElement("h2", { className: "text-2xl font-bold tracking-tight text-gray-900" }, "Customer Reviews"),
|
|
23
|
+
react_1.default.createElement("div", { className: "mt-3 flex items-center" },
|
|
24
|
+
react_1.default.createElement("div", { className: "flex flex-row" },
|
|
25
|
+
react_1.default.createElement("div", { className: "flex items-center" }, [0, 1, 2, 3, 4].map(function (rating) { return (react_1.default.createElement(solid_1.StarIcon, { key: rating, "aria-hidden": "true", className: classNames(average > rating ? 'text-yellow-400' : 'text-gray-300', 'size-5 shrink-0') })); })),
|
|
26
|
+
react_1.default.createElement("p", { className: "ml-2 text-sm text-gray-900" },
|
|
27
|
+
average,
|
|
28
|
+
" out of 5 stars,"),
|
|
29
|
+
react_1.default.createElement("p", { className: "sr-only" },
|
|
30
|
+
average,
|
|
31
|
+
" out of 5 stars")),
|
|
32
|
+
react_1.default.createElement("p", { className: "ml-2 text-sm text-gray-900" },
|
|
33
|
+
"based on ",
|
|
34
|
+
totalCount,
|
|
35
|
+
" reviews")),
|
|
36
|
+
react_1.default.createElement("div", { className: "mt-6" },
|
|
37
|
+
react_1.default.createElement("h3", { className: "sr-only" }, "Review data"),
|
|
38
|
+
react_1.default.createElement("dl", { className: "space-y-3" }, counts.map(function (count) { return (react_1.default.createElement("div", { key: count.rating, className: "flex items-center text-sm" },
|
|
39
|
+
react_1.default.createElement("dt", { className: "flex flex-1 items-center" },
|
|
40
|
+
react_1.default.createElement("p", { className: "w-3 font-medium text-gray-900" },
|
|
41
|
+
count.rating,
|
|
42
|
+
react_1.default.createElement("span", { className: "sr-only" }, " star reviews")),
|
|
43
|
+
react_1.default.createElement("div", { "aria-hidden": "true", className: "ml-1 flex flex-1 items-center" },
|
|
44
|
+
react_1.default.createElement(solid_1.StarIcon, { "aria-hidden": "true", className: classNames(count.count > 0 ? 'text-yellow-400' : 'text-gray-300', 'size-5 shrink-0') }),
|
|
45
|
+
react_1.default.createElement("div", { className: "relative ml-3 flex-1" },
|
|
46
|
+
react_1.default.createElement("div", { className: "h-3 rounded-full border border-gray-200 bg-gray-100" }),
|
|
47
|
+
count.count > 0 ? (react_1.default.createElement("div", { style: {
|
|
48
|
+
width: "calc(".concat(count.count, " / ").concat(totalCount, " * 100%)"),
|
|
49
|
+
}, className: "absolute inset-y-0 rounded-full border border-yellow-400 bg-yellow-400" })) : null))),
|
|
50
|
+
react_1.default.createElement("dd", { className: "ml-3 w-10 text-right text-sm text-gray-900 tabular-nums" },
|
|
51
|
+
Math.round((count.count / totalCount) * 100),
|
|
52
|
+
"%"))); })))),
|
|
53
|
+
react_1.default.createElement("div", { className: "mt-16 lg:col-span-7 lg:col-start-6 lg:mt-0" },
|
|
54
|
+
react_1.default.createElement("h3", { className: "sr-only" }, "Recent reviews"),
|
|
55
|
+
react_1.default.createElement("div", null,
|
|
56
|
+
react_1.default.createElement(review_options_1.ReviewOptions, { selectedRating: selectedRating, handleSelectRating: handleSelectRating }),
|
|
57
|
+
react_1.default.createElement("div", { className: "flow-root" },
|
|
58
|
+
react_1.default.createElement("div", { className: "divide-y divide-gray-200" }, items.map(function (review) { return (react_1.default.createElement("div", { key: review.id, className: "py-6" },
|
|
59
|
+
react_1.default.createElement("div", { className: "flex items-center" },
|
|
60
|
+
react_1.default.createElement("img", { alt: "".concat(review.name, "."), src: review.avatar, className: "size-12 rounded-full" }),
|
|
61
|
+
react_1.default.createElement("div", { className: "ml-4" },
|
|
62
|
+
react_1.default.createElement("h4", { className: "text-sm font-bold text-gray-900" }, review.name),
|
|
63
|
+
react_1.default.createElement("div", { className: "mt-1 flex items-center" }, [0, 1, 2, 3, 4].map(function (rating) { return (react_1.default.createElement(solid_1.StarIcon, { key: rating, "aria-hidden": "true", className: classNames(review.rating > rating
|
|
64
|
+
? 'text-yellow-400'
|
|
65
|
+
: 'text-gray-300', 'size-5 shrink-0') })); })),
|
|
66
|
+
react_1.default.createElement("p", { className: "sr-only" },
|
|
67
|
+
review.rating,
|
|
68
|
+
" out of 5 stars"))),
|
|
69
|
+
react_1.default.createElement("div", null,
|
|
70
|
+
react_1.default.createElement("p", { className: "mt-4 space-y-6 text-base text-gray-600 italic" }, review.content)))); }))))))));
|
|
71
|
+
};
|
|
72
|
+
exports.ReviewSection = ReviewSection;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface ReviewCountItem {
|
|
2
|
+
count: number;
|
|
3
|
+
rating: number;
|
|
4
|
+
}
|
|
5
|
+
export interface ReviewItem {
|
|
6
|
+
avatar: string;
|
|
7
|
+
content: string;
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
rating: number;
|
|
11
|
+
}
|
|
12
|
+
export interface ReviewSectionProps {
|
|
13
|
+
average: number;
|
|
14
|
+
totalCount: number;
|
|
15
|
+
counts: ReviewCountItem[];
|
|
16
|
+
items: ReviewItem[];
|
|
17
|
+
selectedRating: number;
|
|
18
|
+
handleSelectRating: (rating: number) => void;
|
|
19
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@appcorp/kismaa-web-ui",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.80",
|
|
4
4
|
"source": "src/index.ts",
|
|
5
5
|
"main": "lib/main.js",
|
|
6
6
|
"module": "lib/module.js",
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
}
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
|
-
"@appcorp/app-corp-vista": "^0.3.
|
|
48
|
-
"@appcorp/kismaa-utils": "^0.2.
|
|
47
|
+
"@appcorp/app-corp-vista": "^0.3.47",
|
|
48
|
+
"@appcorp/kismaa-utils": "^0.2.79",
|
|
49
49
|
"@chromatic-com/storybook": "^4",
|
|
50
50
|
"@headlessui/react": "^2",
|
|
51
51
|
"@headlessui/tailwindcss": "^0",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"@next/eslint-plugin-next": "^15",
|
|
56
56
|
"@next/mdx": "^15",
|
|
57
57
|
"@popperjs/core": "^2.11.8",
|
|
58
|
-
"@react-pakistan/util-functions": "^1.24.
|
|
58
|
+
"@react-pakistan/util-functions": "^1.24.60",
|
|
59
59
|
"@storybook/addon-docs": "^9",
|
|
60
60
|
"@storybook/addon-links": "^9",
|
|
61
61
|
"@storybook/addon-onboarding": "^9",
|
|
@@ -19,12 +19,15 @@ var user_details_1 = require("../../organisms/user-details/user-details");
|
|
|
19
19
|
var organisms_1 = require("../../organisms");
|
|
20
20
|
var react_1 = __importDefault(require("react"));
|
|
21
21
|
var disclaimer_1 = require("../../molecules/disclaimer/disclaimer");
|
|
22
|
+
var review_section_1 = require("../../organisms/review-section");
|
|
23
|
+
var props_1 = require("../../organisms/review-section/props");
|
|
22
24
|
var UserDetailPage = function (_a) {
|
|
23
25
|
var advisorSection = _a.advisorSection, banner = _a.banner, ctaBanner = _a.ctaBanner, footer = _a.footer, getAppBanner = _a.getAppBanner, navbar = _a.navbar, userDetails = _a.userDetails;
|
|
24
26
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
25
27
|
react_1.default.createElement(organisms_1.Navbar, __assign({}, navbar)),
|
|
26
28
|
react_1.default.createElement(organisms_1.Banner, __assign({}, banner)),
|
|
27
29
|
react_1.default.createElement(user_details_1.UserDetails, __assign({}, userDetails)),
|
|
30
|
+
react_1.default.createElement(review_section_1.ReviewSection, __assign({}, props_1.reviewSectionData)),
|
|
28
31
|
react_1.default.createElement(organisms_1.AdvisorsSection, __assign({}, advisorSection)),
|
|
29
32
|
react_1.default.createElement(organisms_1.GetAppBanner, __assign({}, getAppBanner)),
|
|
30
33
|
react_1.default.createElement(organisms_1.CtaBanner, __assign({}, ctaBanner)),
|