mirror of
https://github.com/danbulant/Portfolio
synced 2026-05-26 13:31:45 +00:00
feat: massive layout refactor, redirect when cookie is not set
This commit is contained in:
parent
546a0047c0
commit
4040fa8bcb
19 changed files with 41 additions and 20 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
import axios, { type AxiosProgressEvent } from 'axios';
|
import axios, { type AxiosProgressEvent } from 'axios';
|
||||||
import type { CandidateData, CandidateLogin } from 'src/stores/candidate';
|
import type { CandidateData, CandidateLogin } from '$lib/stores/candidate';
|
||||||
import type { SubmissionProgress } from 'src/stores/portfolio';
|
import type { SubmissionProgress } from '$lib/stores/portfolio';
|
||||||
import { API_URL, errorHandler } from '.';
|
import { API_URL, errorHandler } from '.';
|
||||||
|
|
||||||
export async function apiWhoami(): Promise<string> {
|
export async function apiWhoami(): Promise<string> {
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { AxiosProgressEvent } from "axios";
|
import type { AxiosProgressEvent } from "axios";
|
||||||
import { fetchSubmProgress } from "../../../stores/portfolio";
|
import { fetchSubmProgress } from "$lib/stores/portfolio";
|
||||||
import { apiUploadCoverLetter } from "../../../@api/candidate";
|
import { apiUploadCoverLetter } from "$lib/@api/candidate";
|
||||||
import DashboardUploadCard from "./DashboardUploadCard.svelte";
|
import DashboardUploadCard from "./DashboardUploadCard.svelte";
|
||||||
|
|
||||||
const onFileDrop = async (file: File) => {
|
const onFileDrop = async (file: File) => {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import FileType from './FileType.svelte';
|
import FileType from './FileType.svelte';
|
||||||
import FileDrop from 'filedrop-svelte';
|
import FileDrop from 'filedrop-svelte';
|
||||||
import { submissionProgress, UploadStatus, type Status } from '../../../stores/portfolio';
|
import { submissionProgress, UploadStatus, type Status } from '$lib/stores/portfolio';
|
||||||
import { createEventDispatcher } from 'svelte';
|
import { createEventDispatcher } from 'svelte';
|
||||||
import StatusNotification from './StatusNotification.svelte';
|
import StatusNotification from './StatusNotification.svelte';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { AxiosProgressEvent } from "axios";
|
import type { AxiosProgressEvent } from "axios";
|
||||||
import { fetchSubmProgress } from "../../../stores/portfolio";
|
import { fetchSubmProgress } from "$lib/stores/portfolio";
|
||||||
import { apiUploadPortfolioLetter } from "../../../@api/candidate";
|
import { apiUploadPortfolioLetter } from "../../@api/candidate";
|
||||||
import DashboardUploadCard from "./DashboardUploadCard.svelte";
|
import DashboardUploadCard from "./DashboardUploadCard.svelte";
|
||||||
|
|
||||||
const onFileDrop = async (file: File) => {
|
const onFileDrop = async (file: File) => {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { AxiosProgressEvent } from "axios";
|
import type { AxiosProgressEvent } from "axios";
|
||||||
import { fetchSubmProgress } from "../../../stores/portfolio";
|
import { fetchSubmProgress } from "$lib/stores/portfolio";
|
||||||
import { apiUploadPortfolioZip } from "../../../@api/candidate";
|
import { apiUploadPortfolioZip } from "$lib/@api/candidate";
|
||||||
import DashboardUploadCard from "./DashboardUploadCard.svelte";
|
import DashboardUploadCard from "./DashboardUploadCard.svelte";
|
||||||
|
|
||||||
const onFileDrop = async (file: File) => {
|
const onFileDrop = async (file: File) => {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { Status } from "../../../stores/portfolio";
|
import type { Status } from "$lib/stores/portfolio";
|
||||||
|
|
||||||
|
|
||||||
export let status: Status;
|
export let status: Status;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
import type { LayoutServerLoad } from './$types';
|
||||||
|
|
||||||
|
import { redirect } from '@sveltejs/kit';
|
||||||
|
|
||||||
|
export const load: LayoutServerLoad = ({ cookies }) => {
|
||||||
|
const isAuthenticated = cookies.get('id');
|
||||||
|
if (!isAuthenticated) {
|
||||||
|
throw redirect(302, '/admin/auth/login');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
import type { LayoutServerLoad } from './$types';
|
||||||
|
|
||||||
|
import { redirect } from '@sveltejs/kit';
|
||||||
|
|
||||||
|
export const load: LayoutServerLoad = ({ cookies }) => {
|
||||||
|
const isAuthenticated = cookies.get('id');
|
||||||
|
if (!isAuthenticated) {
|
||||||
|
throw redirect(302, '/login');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
@ -6,11 +6,11 @@
|
||||||
|
|
||||||
import DashboardUploadCard from '$lib/components/dashboard/DashboardUploadCard.svelte';
|
import DashboardUploadCard from '$lib/components/dashboard/DashboardUploadCard.svelte';
|
||||||
import DashboardInfoCard from '$lib/components/dashboard/DashboardInfoCard.svelte';
|
import DashboardInfoCard from '$lib/components/dashboard/DashboardInfoCard.svelte';
|
||||||
import { candidateData, fetchDetails } from '../../stores/candidate';
|
import { candidateData, fetchDetails } from '$lib/stores/candidate';
|
||||||
import CoverLetterUploadCard from '$lib/components/dashboard/CoverLetterUploadCard.svelte';
|
import CoverLetterUploadCard from '$lib/components/dashboard/CoverLetterUploadCard.svelte';
|
||||||
import PortfolioLetterUploadCard from '$lib/components/dashboard/PortfolioLetterUploadCard.svelte';
|
import PortfolioLetterUploadCard from '$lib/components/dashboard/PortfolioLetterUploadCard.svelte';
|
||||||
import PortfolioZipUploadCard from '$lib/components/dashboard/PortfolioZipUploadCard.svelte';
|
import PortfolioZipUploadCard from '$lib/components/dashboard/PortfolioZipUploadCard.svelte';
|
||||||
import { fetchSubmProgress } from '../../stores/portfolio';
|
import { fetchSubmProgress } from '$lib/stores/portfolio';
|
||||||
|
|
||||||
|
|
||||||
let fullName = "";
|
let fullName = "";
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
import IdField from '$lib/components/textfield/IdField.svelte';
|
import IdField from '$lib/components/textfield/IdField.svelte';
|
||||||
import TelephoneField from '$lib/components/textfield/TelephoneField.svelte';
|
import TelephoneField from '$lib/components/textfield/TelephoneField.svelte';
|
||||||
import TextField from '$lib/components/textfield/TextField.svelte';
|
import TextField from '$lib/components/textfield/TextField.svelte';
|
||||||
import { fillDetails, candidateData, type CandidateData } from '../../stores/candidate';
|
import { fillDetails, candidateData, type CandidateData } from '$lib/stores/candidate';
|
||||||
|
|
||||||
import { createForm } from 'svelte-forms-lib';
|
import { createForm } from 'svelte-forms-lib';
|
||||||
import * as yup from 'yup';
|
import * as yup from 'yup';
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
import woman from '$lib/assets/woman.png';
|
import woman from '$lib/assets/woman.png';
|
||||||
import { onMount } from 'svelte';
|
import { onMount } from 'svelte';
|
||||||
import { page } from '$app/stores';
|
import { page } from '$app/stores';
|
||||||
import { login } from '../../../stores/candidate';
|
import { login } from '$lib/stores/candidate';
|
||||||
import { goto } from '$app/navigation';
|
import { goto } from '$app/navigation';
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
/** @type {import('./$types').PageLoad} */
|
|
||||||
export const load = async ({ url }) => {
|
|
||||||
return {
|
|
||||||
url: url.pathname
|
|
||||||
};
|
|
||||||
};
|
|
||||||
7
frontend/src/routes/+layout.ts
Normal file
7
frontend/src/routes/+layout.ts
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
import type { LayoutLoad } from './$types';
|
||||||
|
|
||||||
|
export const load: LayoutLoad = async ({ url }) => {
|
||||||
|
return {
|
||||||
|
url: url.pathname
|
||||||
|
};
|
||||||
|
};
|
||||||
Loading…
Reference in a new issue