From 99645ec87419fecbe11ae7250216a0fc71a7d934 Mon Sep 17 00:00:00 2001 From: thiloho <123883702+thiloho@users.noreply.github.com> Date: Fri, 9 Aug 2024 16:17:33 +0200 Subject: [PATCH] Create nix derivations for building and running web app --- flake.nix | 35 +++++++++++++- web-app/.gitignore | 1 + web-app/src/app.css | 11 ++++- .../website/[websiteId]/+page.svelte | 47 ++++++++++++++----- .../articles/[articleId]/+page.server.ts | 17 ++++--- .../articles/[articleId]/+page.svelte | 19 ++++++-- .../{svelte.config.ts => svelte.config.js} | 4 +- 7 files changed, 105 insertions(+), 29 deletions(-) rename web-app/{svelte.config.ts => svelte.config.js} (90%) diff --git a/flake.nix b/flake.nix index 03aa1f3..2ac8daf 100644 --- a/flake.nix +++ b/flake.nix @@ -42,6 +42,8 @@ pkgs = nixpkgs.legacyPackages.${system}; in { + dev-vm = self.nixosConfigurations.${system}.dev-vm.config.system.build.vm; + api-setup = pkgs.writeShellScriptBin "api-setup" '' source .env @@ -53,7 +55,38 @@ PGRST_DB_URI="$PGRST_DB_URI" PGRST_JWT_SECRET="$JWT_SECRET" ${pkgs.postgrest}/bin/postgrest postgrest.conf ''; - dev-vm = self.nixosConfigurations.${system}.dev-vm.config.system.build.vm; + + web = pkgs.buildNpmPackage { + name = "archtika-web-app"; + src = ./web-app; + npmDepsHash = "sha256-DmIII/x5ANlEpKtnZC/JlbVAvhbgnSiNn8hkj+qVCZY="; + npmFlags = [ "--legacy-peer-deps" ]; + installPhase = '' + mkdir $out + cp package.json $out + cp -r node_modules $out + cp -r build/* $out + ''; + }; + } + ); + + apps = forAllSystems ( + system: + let + pkgs = nixpkgs.legacyPackages.${system}; + in + { + web = { + type = "app"; + program = "${pkgs.writeShellScriptBin "web-wrapper" '' + export ORIGIN=http://localhost:4000 + export HOST=127.0.0.1 + export PORT=4000 + + ${pkgs.nodejs_22}/bin/node ${self.packages.${system}.web} + ''}/bin/web-wrapper"; + }; } ); diff --git a/web-app/.gitignore b/web-app/.gitignore index f2b82b1..db048fc 100644 --- a/web-app/.gitignore +++ b/web-app/.gitignore @@ -1,6 +1,7 @@ node_modules user-uploads user-websites +result # Output .output diff --git a/web-app/src/app.css b/web-app/src/app.css index ebfe5c9..e01e5e4 100644 --- a/web-app/src/app.css +++ b/web-app/src/app.css @@ -161,13 +161,20 @@ form[method="GET"] > button[type="submit"] { align-self: end; } -form > label { +form label { display: flex; flex-direction: column; gap: 0.25rem; max-inline-size: 30ch; } -form > label:has(textarea) { +form label:has(textarea) { max-inline-size: 65ch; } + +form .file-field { + display: flex; + align-items: end; + gap: 0.5rem; + flex-wrap: wrap; +} diff --git a/web-app/src/routes/(authenticated)/website/[websiteId]/+page.svelte b/web-app/src/routes/(authenticated)/website/[websiteId]/+page.svelte index 6769e80..98f35fe 100644 --- a/web-app/src/routes/(authenticated)/website/[websiteId]/+page.svelte +++ b/web-app/src/routes/(authenticated)/website/[websiteId]/+page.svelte @@ -4,6 +4,7 @@ import { ALLOWED_MIME_TYPES } from "$lib/utils"; import SuccessOrError from "$lib/components/SuccessOrError.svelte"; import type { ActionData, PageServerData } from "./$types"; + import Modal from "$lib/components/Modal.svelte"; const { data, form } = $props<{ data: PageServerData; form: ActionData }>(); @@ -47,10 +48,20 @@ required /> - +