Skip to content

Commit 5eeeda1

Browse files
authored
Change jobtype for reviews not role (#369)
* made most changes * made jobtype change * changed coop display * made change * misc fixes * fixed coop word
1 parent 0015f82 commit 5eeeda1

File tree

23 files changed

+1137
-91
lines changed

23 files changed

+1137
-91
lines changed

apps/auth-proxy/.output/nitro.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"date": "2025-11-14T23:53:58.107Z",
2+
"date": "2026-02-08T00:37:16.069Z",
33
"preset": "node-server",
44
"framework": {
55
"name": "nitro",

apps/auth-proxy/.output/server/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
"@panva/hkdf": "1.2.1",
99
"cookie": "0.6.0",
1010
"jose": "5.6.3",
11+
"node-mock-http": "1.0.4",
1112
"oauth4webapi": "2.11.1",
1213
"preact": "10.11.3",
1314
"preact-render-to-string": "5.2.3",

apps/web/src/app/(pages)/(protected)/profile/page.tsx

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,15 @@ export default function Profile() {
1717
const searchParams = useSearchParams();
1818
const tab = searchParams.get("tab") ?? "saved-roles";
1919

20-
const {
21-
data: session,
22-
isLoading: sessionLoading,
23-
error: sessionError,
24-
} = api.auth.getSession.useQuery();
25-
const {
26-
data: profile,
27-
isLoading: profileLoading,
28-
error: profileError,
29-
} = api.profile.getCurrentUser.useQuery();
20+
const sessionQuery = api.auth.getSession.useQuery();
21+
const session = sessionQuery.data;
22+
const sessionLoading = sessionQuery.isLoading;
23+
const sessionError = sessionQuery.error;
24+
25+
const profileQuery = api.profile.getCurrentUser.useQuery();
26+
const profile = profileQuery.data;
27+
const profileLoading = profileQuery.isLoading;
28+
const profileError = profileQuery.error;
3029

3130
useEffect(() => {
3231
if (!sessionLoading && !profileLoading) {

apps/web/src/app/(pages)/(protected)/review-form/page.tsx

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,12 @@ import {
1414
} from "~/app/_components/form/sections";
1515
import { z } from "zod";
1616
import { useCustomToast } from "@cooper/ui";
17-
import { Industry, WorkEnvironment, WorkTerm } from "@cooper/db/schema";
17+
import {
18+
Industry,
19+
WorkEnvironment,
20+
WorkTerm,
21+
JobType,
22+
} from "@cooper/db/schema";
1823
import { Filter } from "bad-words";
1924
import dayjs from "dayjs";
2025
import { Form } from "node_modules/@cooper/ui/src/form";
@@ -23,16 +28,6 @@ import { Button } from "@cooper/ui/button";
2328

2429
const filter = new Filter();
2530

26-
export const benefits = [
27-
{ field: "pto", label: "PTO" },
28-
{ field: "federalHolidays", label: "Federal holidays off" },
29-
{ field: "freeLunch", label: "Free lunch" },
30-
{ field: "travelBenefits", label: "Travel benefits" },
31-
{ field: "freeMerch", label: "Free merchandise" },
32-
{ field: "snackBar", label: "Snack bar" },
33-
{ field: "employeeLounge", label: "Employee lounge" },
34-
];
35-
3631
const formSchema = z.object({
3732
workTerm: z.nativeEnum(WorkTerm, {
3833
required_error: "You need to select a co-op cycle.",
@@ -113,7 +108,7 @@ const formSchema = z.object({
113108
locationId: z.string().min(1, {
114109
message: "You need to select a location.",
115110
}),
116-
jobType: z.string().min(1, {
111+
jobType: z.nativeEnum(JobType, {
117112
message: "You need to select a job type.",
118113
}),
119114
hourlyPay: z.coerce
@@ -184,6 +179,7 @@ export default function ReviewForm() {
184179
interviewReview: "",
185180
textReview: "",
186181
locationId: "",
182+
jobType: undefined,
187183
hourlyPay: "",
188184
workEnvironment: undefined,
189185
drugTest: undefined,

apps/web/src/app/_components/companies/company-reviews.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { calculateRatings } from "~/utils/reviewCountByStars";
77
import StarGraph from "../shared/star-graph";
88
import CompanyStatistics from "./company-statistics";
99
import {
10+
calculateJobTypes,
1011
calculatePay,
1112
calculatePayRange,
1213
calculateWorkModels,
@@ -28,6 +29,7 @@ export function CompanyReview({ companyObj }: CompanyReviewProps) {
2829

2930
const ratings = calculateRatings(reviews.data ?? []);
3031
const workModels = calculateWorkModels(reviews.data ?? []);
32+
const jobTypes = calculateJobTypes(reviews.data ?? []);
3133
const payStats = calculatePay(reviews.data ?? []);
3234
const payRange = calculatePayRange(reviews.data ?? []);
3335

@@ -56,9 +58,9 @@ export function CompanyReview({ companyObj }: CompanyReviewProps) {
5658
{(reviews.data?.length ?? 0) > 0 && (
5759
<CompanyStatistics
5860
workModels={workModels}
59-
reviews={reviews.data?.length ?? 0}
6061
payStats={payStats}
6162
payRange={payRange}
63+
jobTypes={jobTypes}
6264
/>
6365
)}
6466
</div>

apps/web/src/app/_components/companies/company-statistics.tsx

Lines changed: 67 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,36 @@
11
export default function CompanyStatistics({
22
workModels,
3-
reviews,
43
payStats,
54
payRange,
5+
jobTypes,
66
}: {
77
workModels: { name: string; percentage: number; count: number }[];
88
payStats: { pay: string; percentage: number; count: number }[];
9-
reviews: number;
109
payRange: { label?: string; min: number; max: number }[];
10+
jobTypes: { name: string; percentage: number; count: number }[];
1111
}) {
1212
const payRangeColors = [
1313
"cooper-yellow-200",
1414
"cooper-blue-400",
1515
"cooper-red-400",
1616
];
1717

18+
const payOrder: Record<string, number> = {
19+
Low: 0,
20+
Pay: 0,
21+
Mid: 1,
22+
High: 2,
23+
};
24+
const jobTypeOrder: Record<string, number> = {
25+
"Co-op": 0,
26+
Internship: 1,
27+
};
28+
const workModelOrder: Record<string, number> = {
29+
"In-person": 0,
30+
Hybrid: 1,
31+
Remote: 2,
32+
};
33+
1834
const payRangesWithData = payRange
1935
.map((range, rangeIndex) => {
2036
const statsInRange = payStats.filter((stat) => {
@@ -36,24 +52,63 @@ export default function CompanyStatistics({
3652
color: payRangeColors[rangeIndex],
3753
};
3854
})
39-
.filter((item) => item.count > 0);
55+
.filter((item) => item.count > 0)
56+
.sort(
57+
(a, b) =>
58+
(payOrder[a.range.label ?? 3] ?? 3) -
59+
(payOrder[b.range.label ?? 3] ?? 3),
60+
);
61+
62+
const sortedJobTypes = [...jobTypes].sort(
63+
(a, b) => (jobTypeOrder[a.name] ?? 2) - (jobTypeOrder[b.name] ?? 2),
64+
);
65+
const sortedWorkModels = [...workModels].sort(
66+
(a, b) => (workModelOrder[a.name] ?? 3) - (workModelOrder[b.name] ?? 3),
67+
);
4068
return (
4169
<div className="flex flex-col md:flex-row justify-between w-full pt-4 text-cooper-gray-400 gap-4 md:gap-0">
4270
<div className="md:w-[30%]">
4371
<p className="pb-2">Job type</p>
44-
<div className="h-7 flex-1 rounded-lg bg-cooper-yellow-200" />
45-
<div className="flex flex-row items-center pt-2 justify-between">
46-
<div className="flex flex-row items-center">
47-
<div className="w-3.5 h-3.5 rounded-full bg-cooper-yellow-200" />
48-
<div className="pl-2">Co-op</div>
49-
</div>
50-
<div className="pl-2">{reviews}</div>
72+
<div className="h-7 flex-1 rounded-lg flex overflow-hidden gap-0.5">
73+
{sortedJobTypes.map((job) => (
74+
<div
75+
key={job.name}
76+
className={`h-full rounded-lg ${
77+
job.name === "Co-op"
78+
? "bg-cooper-yellow-200"
79+
: job.name === "Internship"
80+
? "bg-cooper-blue-400"
81+
: "bg-cooper-red-400"
82+
}`}
83+
style={{ width: `${job.percentage}%` }}
84+
/>
85+
))}
5186
</div>
87+
{sortedJobTypes.map((job) => (
88+
<div
89+
key={job.name}
90+
className="flex flex-row items-center pt-2 justify-between"
91+
>
92+
<div className="flex flex-row items-center">
93+
<div
94+
className={`w-3.5 h-3.5 rounded-full ${
95+
job.name === "Co-op"
96+
? "bg-cooper-yellow-200"
97+
: job.name === "Internship"
98+
? "bg-cooper-blue-400"
99+
: "bg-cooper-red-400"
100+
}`}
101+
/>
102+
<div className="pl-2">{job.name}</div>
103+
</div>
104+
<div className="pl-2">{job.count}</div>
105+
</div>
106+
))}
52107
</div>
53108
<div className="md:w-[30%]">
54109
<p className="pb-2">Work model</p>
55110
<div className="h-7 flex-1 rounded-lg flex overflow-hidden gap-0.5">
56-
{workModels.map((model) => (
111+
{sortedWorkModels.map((model) => (
57112
<div
58113
key={model.name}
59114
className={`h-full rounded-lg ${
@@ -68,7 +123,7 @@ export default function CompanyStatistics({
68123
))}
69124
</div>
70125

71-
{workModels.map((workModel) => (
126+
{sortedWorkModels.map((workModel) => (
72127
<div
73128
key={workModel.name}
74129
className="flex flex-row items-center pt-2 justify-between"

apps/web/src/app/_components/form/sections/basic-info-section.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@ export function BasicInfoSection({
107107
options={[
108108
{ value: "Co-op", label: "Co-op" },
109109
{ value: "Internship", label: "Internship" },
110-
{ value: "Part time", label: "Part time" },
111110
]}
112111
className="w-full border-cooper-gray-150 text-cooper-gray-350 text-sm h-10"
113112
value={

apps/web/src/app/_components/form/sections/company-details-section.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import {
1010
import { RadioGroup, RadioGroupItem } from "@cooper/ui/radio-group";
1111

1212
import { FormSection } from "~/app/_components/form/form-section";
13-
import { benefits } from "~/app/(pages)/(protected)/review-form/page";
1413
import { Select } from "../../themed/onboarding/select";
1514
import FilterBody from "../../filters/filter-body";
1615

@@ -21,6 +20,16 @@ import FilterBody from "../../filters/filter-body";
2120
export function CompanyDetailsSection() {
2221
const form = useFormContext();
2322

23+
const benefits = [
24+
{ field: "pto", label: "PTO" },
25+
{ field: "federalHolidays", label: "Federal holidays off" },
26+
{ field: "freeLunch", label: "Free lunch" },
27+
{ field: "travelBenefits", label: "Travel benefits" },
28+
{ field: "freeMerch", label: "Free merchandise" },
29+
{ field: "snackBar", label: "Snack bar" },
30+
{ field: "employeeLounge", label: "Employee lounge" },
31+
];
32+
2433
return (
2534
<FormSection>
2635
<FormField

apps/web/src/app/_components/reviews/new-review/existing-company-content.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,6 @@ export default function ExistingCompanyContent({
240240
description: values.description,
241241
companyId: selectedCompanyId,
242242
createdBy: profileId ?? "",
243-
jobType: "CO-OP",
244243
});
245244
};
246245

apps/web/src/app/_components/reviews/review-card.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ export function ReviewCard({ reviewObj, className }: ReviewCardProps) {
7474
<div className="flex justify-between text-sm">
7575
<div className="flex md:gap-10 gap-6 bg-[#f4f4f4] p-3 md:pl-4 pr-4 rounded-lg">
7676
<div className="flex md:flex-row flex-col gap-2">
77-
<span className="text-cooper-gray-350">Job type</span> Co-op
77+
<span className="text-cooper-gray-350">Job type</span>{" "}
78+
{reviewObj.jobType === "CO-OP" ? "Co-op" : reviewObj.jobType}
7879
</div>
7980
<div className="flex md:flex-row flex-col gap-2">
8081
<span className="text-cooper-gray-350">Work model</span>

0 commit comments

Comments
 (0)