@@ -6591,6 +6591,112 @@ tsconfig.json
6591
6591
36: }
6592
6592
````
6593
6593
6594
+ ## File: src/components/CV/CVContent.component.tsx
6595
+ ````typescript
6596
+ 1: import PageHeader from "@/components/UI/PageHeader.component";
6597
+ 2: import Button from "@/components/UI/Button.component";
6598
+ 3: import Tabs from "@/components/UI/Tabs.component";
6599
+ 4: import type { Cv } from "@/types/sanity.types";
6600
+ 5: /**
6601
+ 6: * CVContent component for rendering the CV page with tabs
6602
+ 7: * @param {Object} props - The props for the CVContent component
6603
+ 8: * @param {Cv} props.cvData - The CV data from Sanity
6604
+ 9: * @returns {JSX.Element} The rendered CVContent component
6605
+ 10: */
6606
+ 11: const CVContent = ({ cvData }: { cvData: Cv }) => {
6607
+ 12: const tabs = [
6608
+ 13: {
6609
+ 14: id: "qualifications",
6610
+ 15: label: "Nøkkelkvalifikasjoner",
6611
+ 16: content: (
6612
+ 17: <ul className="list-disc pl-5 text-slate-300/[0.9]">
6613
+ 18: {cvData.keyQualifications?.map((qual) => (
6614
+ 19: <li key={qual ?? ""} className="mb-2">
6615
+ 20: {qual ?? ""}
6616
+ 21: </li>
6617
+ 22: ))}
6618
+ 23: </ul>
6619
+ 24: ),
6620
+ 25: },
6621
+ 26: {
6622
+ 27: id: "experience",
6623
+ 28: label: "Erfaring",
6624
+ 29: content: (
6625
+ 30: <div className="text-slate-300/[0.9]">
6626
+ 31: {cvData.experience?.map((exp) => (
6627
+ 32: <div key={exp.description ?? ""} className="mb-6">
6628
+ 33: <h3 className="font-semibold text-slate-100">
6629
+ 34: {exp.period ?? ""} - {exp.company ?? ""}
6630
+ 35: </h3>
6631
+ 36: {exp.role && <p className="italic">{exp.role}</p>}
6632
+ 37: <p>{exp.description ?? ""}</p>
6633
+ 38: </div>
6634
+ 39: ))}
6635
+ 40: </div>
6636
+ 41: ),
6637
+ 42: },
6638
+ 43: {
6639
+ 44: id: "education",
6640
+ 45: label: "Utdanning",
6641
+ 46: content: (
6642
+ 47: <div className="text-slate-300/[0.9]">
6643
+ 48: {cvData.education?.map((edu) => (
6644
+ 49: <div key={edu.description ?? ""} className="mb-6">
6645
+ 50: <h3 className="font-semibold text-slate-100">
6646
+ 51: {edu.period ?? ""} - {edu.institution ?? ""}
6647
+ 52: </h3>
6648
+ 53: {edu.degree && <p className="italic">{edu.degree}</p>}
6649
+ 54: <p>{edu.description ?? ""}</p>
6650
+ 55: </div>
6651
+ 56: ))}
6652
+ 57: </div>
6653
+ 58: ),
6654
+ 59: },
6655
+ 60: {
6656
+ 61: id: "volunteerWork",
6657
+ 62: label: "Frivillig arbeid",
6658
+ 63: content: (
6659
+ 64: <div className="text-slate-300/[0.9]">
6660
+ 65: {cvData.volunteerWork?.map((vol) => (
6661
+ 66: <div key={vol.description ?? ""} className="mb-6">
6662
+ 67: <h3 className="font-semibold text-slate-100">
6663
+ 68: {vol.period ?? ""} - {vol.organization ?? ""}
6664
+ 69: </h3>
6665
+ 70: {vol.role && <p className="italic">{vol.role}</p>}
6666
+ 71: <p>{vol.description ?? ""}</p>
6667
+ 72: </div>
6668
+ 73: ))}
6669
+ 74: </div>
6670
+ 75: ),
6671
+ 76: },
6672
+ 77: ];
6673
+ 78: return (
6674
+ 79: <main id="maincontent">
6675
+ 80: <div className="mt-32 bg-graybg">
6676
+ 81: <PageHeader>CV</PageHeader>
6677
+ 82: <div className="px-4 lg:px-0 xl:px-0 md:px-0">
6678
+ 83: <div className="container mx-auto bg-slate-700 rounded-sm shadow-sm sm:mb-4">
6679
+ 84: <div className="p-4 mx-auto md:h-full mt-4 flex flex-col justify-center items-center md:min-h-[600px] min-h-[400px]">
6680
+ 85: <div className="p-4 text-lg rounded-sm md:w-full">
6681
+ 86: <div className="md:flex md:justify-center hidden">
6682
+ 87: <Tabs tabs={tabs} />
6683
+ 88: </div>
6684
+ 89: <div className="mx-auto text-center md:mt-8 md:hidden">
6685
+ 90: <Button href="./cv2.pdf" renderAs="a" type="button">
6686
+ 91: Last ned PDF
6687
+ 92: </Button>
6688
+ 93: </div>
6689
+ 94: </div>
6690
+ 95: </div>
6691
+ 96: </div>
6692
+ 97: </div>
6693
+ 98: </div>
6694
+ 99: </main>
6695
+ 100: );
6696
+ 101: };
6697
+ 102: export default CVContent;
6698
+ ````
6699
+
6594
6700
## File: src/components/ErrorBoundary/ErrorBoundary.tsx
6595
6701
````typescript
6596
6702
1: "use client";
@@ -12113,112 +12219,6 @@ tsconfig.json
12113
12219
24: }
12114
12220
````
12115
12221
12116
- ## File: src/components/CV/CVContent.component.tsx
12117
- ````typescript
12118
- 1: import PageHeader from "@/components/UI/PageHeader.component";
12119
- 2: import Button from "@/components/UI/Button.component";
12120
- 3: import Tabs from "@/components/UI/Tabs.component";
12121
- 4: import type { Cv } from "@/types/sanity.types";
12122
- 5: /**
12123
- 6: * CVContent component for rendering the CV page with tabs
12124
- 7: * @param {Object} props - The props for the CVContent component
12125
- 8: * @param {Cv} props.cvData - The CV data from Sanity
12126
- 9: * @returns {JSX.Element} The rendered CVContent component
12127
- 10: */
12128
- 11: const CVContent = ({ cvData }: { cvData: Cv }) => {
12129
- 12: const tabs = [
12130
- 13: {
12131
- 14: id: "qualifications",
12132
- 15: label: "Nøkkelkvalifikasjoner",
12133
- 16: content: (
12134
- 17: <ul className="list-disc pl-5 text-slate-300/[0.9]">
12135
- 18: {cvData.keyQualifications?.map((qual) => (
12136
- 19: <li key={qual ?? ""} className="mb-2">
12137
- 20: {qual ?? ""}
12138
- 21: </li>
12139
- 22: ))}
12140
- 23: </ul>
12141
- 24: ),
12142
- 25: },
12143
- 26: {
12144
- 27: id: "experience",
12145
- 28: label: "Erfaring",
12146
- 29: content: (
12147
- 30: <div className="text-slate-300/[0.9]">
12148
- 31: {cvData.experience?.map((exp) => (
12149
- 32: <div key={exp.description ?? ""} className="mb-6">
12150
- 33: <h3 className="font-semibold text-slate-100">
12151
- 34: {exp.period ?? ""} - {exp.company ?? ""}
12152
- 35: </h3>
12153
- 36: {exp.role && <p className="italic">{exp.role}</p>}
12154
- 37: <p>{exp.description ?? ""}</p>
12155
- 38: </div>
12156
- 39: ))}
12157
- 40: </div>
12158
- 41: ),
12159
- 42: },
12160
- 43: {
12161
- 44: id: "education",
12162
- 45: label: "Utdanning",
12163
- 46: content: (
12164
- 47: <div className="text-slate-300/[0.9]">
12165
- 48: {cvData.education?.map((edu) => (
12166
- 49: <div key={edu.description ?? ""} className="mb-6">
12167
- 50: <h3 className="font-semibold text-slate-100">
12168
- 51: {edu.period ?? ""} - {edu.institution ?? ""}
12169
- 52: </h3>
12170
- 53: {edu.degree && <p className="italic">{edu.degree}</p>}
12171
- 54: <p>{edu.description ?? ""}</p>
12172
- 55: </div>
12173
- 56: ))}
12174
- 57: </div>
12175
- 58: ),
12176
- 59: },
12177
- 60: {
12178
- 61: id: "volunteerWork",
12179
- 62: label: "Frivillig arbeid",
12180
- 63: content: (
12181
- 64: <div className="text-slate-300/[0.9]">
12182
- 65: {cvData.volunteerWork?.map((vol) => (
12183
- 66: <div key={vol.description ?? ""} className="mb-6">
12184
- 67: <h3 className="font-semibold text-slate-100">
12185
- 68: {vol.period ?? ""} - {vol.organization ?? ""}
12186
- 69: </h3>
12187
- 70: {vol.role && <p className="italic">{vol.role}</p>}
12188
- 71: <p>{vol.description ?? ""}</p>
12189
- 72: </div>
12190
- 73: ))}
12191
- 74: </div>
12192
- 75: ),
12193
- 76: },
12194
- 77: ];
12195
- 78: return (
12196
- 79: <main id="maincontent">
12197
- 80: <div className="mt-32 bg-graybg">
12198
- 81: <PageHeader>CV</PageHeader>
12199
- 82: <div className="px-4 lg:px-0 xl:px-0 md:px-0">
12200
- 83: <div className="container mx-auto bg-slate-700 rounded-sm shadow-sm sm:mb-4">
12201
- 84: <div className="p-4 mx-auto md:h-full mt-4 flex flex-col justify-center items-center md:min-h-[600px] min-h-[400px]">
12202
- 85: <div className="p-4 text-lg rounded-sm md:w-full">
12203
- 86: <div className="md:flex md:justify-center hidden">
12204
- 87: <Tabs tabs={tabs} />
12205
- 88: </div>
12206
- 89: <div className="mx-auto text-center md:mt-8 md:hidden">
12207
- 90: <Button href="./cv2.pdf" renderAs="a" type="button">
12208
- 91: Last ned PDF
12209
- 92: </Button>
12210
- 93: </div>
12211
- 94: </div>
12212
- 95: </div>
12213
- 96: </div>
12214
- 97: </div>
12215
- 98: </div>
12216
- 99: </main>
12217
- 100: );
12218
- 101: };
12219
- 102: export default CVContent;
12220
- ````
12221
-
12222
12222
## File: src/components/Layout/Footer.component.tsx
12223
12223
````typescript
12224
12224
1: "use client";
@@ -15092,7 +15092,7 @@ tsconfig.json
15092
15092
35: "cookie": ">=1.0.2",
15093
15093
36: "envalid": "^8.0.0",
15094
15094
37: "jest": "^29.7.0",
15095
- 38: "motion": "^12.10.4 ",
15095
+ 38: "motion": "^12.10.5 ",
15096
15096
39: "next": "15.3.1",
15097
15097
40: "next-sanity": "^9.11.0",
15098
15098
41: "path-to-regexp": "^8.2.0",
0 commit comments