diff --git a/apps/client/package.json b/apps/client/package.json
index 3681f00..c5e2e60 100644
--- a/apps/client/package.json
+++ b/apps/client/package.json
@@ -30,6 +30,7 @@
"flowbite-svelte": "^0.47.1",
"flowbite-svelte-icons": "^1.6.2",
"globals": "^15.0.0",
+ "html2pdf.js": "^0.10.2",
"mdsvex": "^0.11.2",
"prettier": "^3.3.2",
"prettier-plugin-svelte": "^3.2.6",
@@ -44,6 +45,7 @@
"dependencies": {
"@sveltejs/adapter-node": "^5.2.8",
"axios": "^1.7.7",
+ "moment": "^2.30.1",
"svelte-qrcode-action": "^1.0.2"
}
}
diff --git a/apps/client/src/routes/(private)/new-vcv/+page.svelte b/apps/client/src/routes/(private)/new-vcv/+page.svelte
index 3162a12..18a5e96 100644
--- a/apps/client/src/routes/(private)/new-vcv/+page.svelte
+++ b/apps/client/src/routes/(private)/new-vcv/+page.svelte
@@ -15,6 +15,7 @@
import Step2 from './steps/step2.svelte';
import Step3 from './steps/step3.svelte';
import Step4 from './steps/step4.svelte';
+ import Step5 from './steps/step5.svelte';
import Button from '$lib/components/ui/Button.svelte';
import { goto } from '$app/navigation';
import { apiClient } from '$lib/axios/axios';
@@ -40,6 +41,10 @@
let editing = false;
let cvId: string;
+ let makePdf: HTMLDivElement;
+
+ let handlePdfSave: () => void;
+
function handleGoBack() {
if (step === 0) {
goto('/dashboard');
@@ -75,6 +80,19 @@
}
onMount(async () => {
+ const html2pdf = (await import('html2pdf.js')).default;
+
+ let html2PdfWorker = html2pdf();
+ handlePdfSave = () => {
+ let opt = {
+ margin: [0, 0, 0, 0],
+ filename: 'YourVCV.pdf',
+ image: { type: 'png' },
+ html2canvas: { scale: 3 },
+ jsPDF: { unit: 'mm', format: 'a4', orientation: 'p', putOnlyUsedFonts: true }
+ };
+ html2PdfWorker.from(makePdf).set(opt).save();
+ };
const urlParams = new URLSearchParams($page.url.search);
const urlContainerId = urlParams.get('id');
if (urlContainerId) {
@@ -91,6 +109,7 @@
credentials = data.credentials;
experiences = data.experiences;
}
+
});
@@ -105,18 +124,24 @@
{:else if step === 2}
{:else if step === 3}
-
+
+ {:else if step === 4}
+
{/if}
-
- Go Back
-
-
-
-
+ {#if step > 0}
+
+ Go Back
+
+ {/if}
+ {#if step < 4}
+
+
+
+ {/if}
diff --git a/apps/client/src/routes/(private)/new-vcv/steps/step5.svelte b/apps/client/src/routes/(private)/new-vcv/steps/step5.svelte
new file mode 100644
index 0000000..b6a8f24
--- /dev/null
+++ b/apps/client/src/routes/(private)/new-vcv/steps/step5.svelte
@@ -0,0 +1,13 @@
+
+
+Export your VCV
+
+
diff --git a/dev.docker-compose.yml b/dev.docker-compose.yml
index 618d303..a51388a 100644
--- a/dev.docker-compose.yml
+++ b/dev.docker-compose.yml
@@ -7,7 +7,7 @@ services:
context: .
dockerfile: ./docker/dev/Dockerfile.client
ports:
- - 5173:5173
+ - 51733:5173
env_file:
- .env
develop:
@@ -30,7 +30,7 @@ services:
context: .
dockerfile: ./docker/dev/Dockerfile.server
ports:
- - 1209:1209
+ - 12923:1209
develop:
watch:
- action: sync
@@ -56,7 +56,7 @@ services:
volumes:
- ~/data/vcv/db:/var/lib/postgresql/data
ports:
- - 5434:5432
+ - 5433:5432
networks:
host-bridge:
diff --git a/package.json b/package.json
index f353e17..93a1d75 100644
--- a/package.json
+++ b/package.json
@@ -17,10 +17,5 @@
"format": "pnpm -F=* format",
"lint": "pnpm -F=* lint",
"dev": "docker compose -f ./dev.docker-compose.yml up"
- },
- "dependencies": {
- "html2pdf": "^0.0.11",
- "jspdf": "^2.5.2",
- "moment": "^2.30.1"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e98e670..b2c5667 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -6,17 +6,7 @@ settings:
importers:
- .:
- dependencies:
- html2pdf:
- specifier: ^0.0.11
- version: 0.0.11
- jspdf:
- specifier: ^2.5.2
- version: 2.5.2
- moment:
- specifier: ^2.30.1
- version: 2.30.1
+ .: {}
apps/client:
dependencies:
@@ -26,6 +16,9 @@ importers:
axios:
specifier: ^1.7.7
version: 1.7.7
+ moment:
+ specifier: ^2.30.1
+ version: 2.30.1
svelte-qrcode-action:
specifier: ^1.0.2
version: 1.0.2(svelte@5.1.3)
@@ -84,6 +77,9 @@ importers:
globals:
specifier: ^15.0.0
version: 15.11.0
+ html2pdf.js:
+ specifier: ^0.10.2
+ version: 0.10.2
mdsvex:
specifier: ^0.11.2
version: 0.11.2(svelte@5.1.3)
@@ -2382,6 +2378,9 @@ packages:
resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
engines: {node: '>= 0.4'}
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
esbuild@0.21.5:
resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
engines: {node: '>=12'}
@@ -2848,8 +2847,8 @@ packages:
resolution: {integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==}
engines: {node: '>=8.0.0'}
- html2pdf@0.0.11:
- resolution: {integrity: sha512-Kx3I5r7lazHZzZv5lDk59jQoTxqaEGlf2BcGNvzWGPQVu0hE8jYCk4hboksuaCvmMJPa0S0A+156ZbE71Wdo2w==}
+ html2pdf.js@0.10.2:
+ resolution: {integrity: sha512-WyHVeMb18Bp7vYTmBv1GVsThH//K7SRfHdSdhHPkl4JvyQarNQXnailkYn0QUbRRmnN5rdbbmSIGEsPZtzPy2Q==}
http-errors@2.0.0:
resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
@@ -7216,7 +7215,6 @@ snapshots:
css-line-break@2.1.0:
dependencies:
utrie: 1.0.2
- optional: true
cssesc@3.0.0: {}
@@ -7479,6 +7477,8 @@ snapshots:
is-date-object: 1.0.5
is-symbol: 1.0.4
+ es6-promise@4.2.8: {}
+
esbuild@0.21.5:
optionalDependencies:
'@esbuild/aix-ppc64': 0.21.5
@@ -8052,9 +8052,12 @@ snapshots:
dependencies:
css-line-break: 2.1.0
text-segmentation: 1.0.3
- optional: true
- html2pdf@0.0.11: {}
+ html2pdf.js@0.10.2:
+ dependencies:
+ es6-promise: 4.2.8
+ html2canvas: 1.4.1
+ jspdf: 2.5.2
http-errors@2.0.0:
dependencies:
@@ -9874,7 +9877,6 @@ snapshots:
text-segmentation@1.0.3:
dependencies:
utrie: 1.0.2
- optional: true
text-table@0.2.0: {}
@@ -10135,7 +10137,6 @@ snapshots:
utrie@1.0.2:
dependencies:
base64-arraybuffer: 1.0.2
- optional: true
uuid@10.0.0: {}