mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-07-02 20:17:37 +00:00
Compare commits
12 Commits
2025-03-18
...
2025-03-19
Author | SHA1 | Date | |
---|---|---|---|
646aecc4da | |||
1035318f84 | |||
8c8412c7f8 | |||
9c2522630f | |||
6fa198147b | |||
6072e72974 | |||
1dc1165894 | |||
e58dcb7a04 | |||
da5b00359d | |||
a0eeeff67d | |||
392e2b5e79 | |||
02493d5048 |
21
CHANGELOG.md
21
CHANGELOG.md
@ -14,6 +14,27 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.
|
||||
|
||||
|
||||
## 2025-03-19
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- License url VED to VE [@bvdberg01](https://github.com/bvdberg01) ([#3258](https://github.com/community-scripts/ProxmoxVE/pull/3258))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Snipe-IT: Remove composer update & add no interaction for install [@MickLesk](https://github.com/MickLesk) ([#3256](https://github.com/community-scripts/ProxmoxVE/pull/3256))
|
||||
- Fluid-Calendar: Remove unneeded $STD in update [@MickLesk](https://github.com/MickLesk) ([#3250](https://github.com/community-scripts/ProxmoxVE/pull/3250))
|
||||
|
||||
- #### 💥 Breaking Changes
|
||||
|
||||
- FluidCalendar: Switch to safer DB operations [@vhsdream](https://github.com/vhsdream) ([#3270](https://github.com/community-scripts/ProxmoxVE/pull/3270))
|
||||
|
||||
### 🌐 Website
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- JSON editor note fix [@bvdberg01](https://github.com/bvdberg01) ([#3260](https://github.com/community-scripts/ProxmoxVE/pull/3260))
|
||||
|
||||
## 2025-03-18
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
@ -36,7 +36,7 @@ function update_script() {
|
||||
msg_ok "Stopped $APP"
|
||||
|
||||
msg_info "Creating Backup"
|
||||
$STD tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" /opt/fluid-calendar
|
||||
tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" /opt/fluid-calendar
|
||||
msg_ok "Backup Created"
|
||||
|
||||
msg_info "Updating $APP to v${RELEASE}"
|
||||
@ -48,7 +48,7 @@ function update_script() {
|
||||
export NEXT_TELEMETRY_DISABLED=1
|
||||
$STD npm install --legacy-peer-deps
|
||||
$STD npm run prisma:generate
|
||||
$STD npm run prisma:migrate
|
||||
$STD npx prisma migrate deploy
|
||||
$STD npm run build:os
|
||||
msg_ok "Updated $APP to v${RELEASE}"
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/ZoeyVid/NPMplus
|
||||
|
||||
APP="NPMplus"
|
||||
|
@ -2,7 +2,7 @@
|
||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/icereed/paperless-gpt
|
||||
|
||||
APP="Paperless-GPT"
|
||||
|
@ -49,7 +49,7 @@ function update_script() {
|
||||
cp -r /opt/snipe-it-backup/storage/private_uploads /opt/snipe-it/storage/private_uploads
|
||||
cd /opt/snipe-it/
|
||||
export COMPOSER_ALLOW_SUPERUSER=1
|
||||
$STD composer install --no-dev --prefer-source
|
||||
$STD composer install --no-dev --optimize-autoloader --no-interaction
|
||||
$STD composer dump-autoload
|
||||
$STD php artisan migrate --force
|
||||
$STD php artisan config:clear
|
||||
|
@ -1,13 +1,113 @@
|
||||
[
|
||||
{
|
||||
"name": "crowdsecurity/crowdsec",
|
||||
"version": "v1.6.6",
|
||||
"date": "2025-03-18T13:05:01Z"
|
||||
"name": "Luligu/matterbridge",
|
||||
"version": "2.2.5",
|
||||
"date": "2025-03-19T09:11:26Z"
|
||||
},
|
||||
{
|
||||
"name": "forgejo/forgejo",
|
||||
"version": "v7.0.14",
|
||||
"date": "2025-03-19T08:53:16Z"
|
||||
},
|
||||
{
|
||||
"name": "zwave-js/zwave-js-ui",
|
||||
"version": "v10.0.0",
|
||||
"date": "2025-03-19T08:16:12Z"
|
||||
},
|
||||
{
|
||||
"name": "Checkmk/checkmk",
|
||||
"version": "v2.3.0p29",
|
||||
"date": "2025-03-19T07:42:50Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.22.1665",
|
||||
"date": "2025-03-19T05:58:42Z"
|
||||
},
|
||||
{
|
||||
"name": "StarFleetCPTN/GoMFT",
|
||||
"version": "v0.1.16",
|
||||
"date": "2025-03-19T04:30:53Z"
|
||||
},
|
||||
{
|
||||
"name": "fhem/fhem-mirror",
|
||||
"version": "6.2",
|
||||
"date": "2025-03-19T01:59:46Z"
|
||||
},
|
||||
{
|
||||
"name": "pocket-id/pocket-id",
|
||||
"version": "v0.42.1",
|
||||
"date": "2025-03-18T22:03:53Z"
|
||||
},
|
||||
{
|
||||
"name": "Donkie/Spoolman",
|
||||
"version": "v0.22.1",
|
||||
"date": "2025-03-18T21:01:22Z"
|
||||
},
|
||||
{
|
||||
"name": "esphome/esphome",
|
||||
"version": "2025.2.2",
|
||||
"date": "2025-03-03T08:23:30Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.1.4",
|
||||
"date": "2025-03-13T15:41:42Z"
|
||||
},
|
||||
{
|
||||
"name": "dotnetfactory/fluid-calendar",
|
||||
"version": "v1.2.2",
|
||||
"date": "2025-03-18T18:47:36Z"
|
||||
},
|
||||
{
|
||||
"name": "zitadel/zitadel",
|
||||
"version": "v2.66.14",
|
||||
"date": "2025-03-18T16:05:48Z"
|
||||
},
|
||||
{
|
||||
"name": "prometheus/prometheus",
|
||||
"version": "v2.53.4",
|
||||
"date": "2025-03-18T15:50:39Z"
|
||||
},
|
||||
{
|
||||
"name": "syncthing/syncthing",
|
||||
"version": "v1.29.3",
|
||||
"date": "2025-03-12T11:56:30Z"
|
||||
},
|
||||
{
|
||||
"name": "jenkinsci/jenkins",
|
||||
"version": "jenkins-2.502",
|
||||
"date": "2025-03-18T15:02:59Z"
|
||||
},
|
||||
{
|
||||
"name": "element-hq/synapse",
|
||||
"version": "v1.126.0",
|
||||
"date": "2025-03-11T16:29:42Z"
|
||||
},
|
||||
{
|
||||
"name": "OctoPrint/OctoPrint",
|
||||
"version": "1.10.3",
|
||||
"date": "2024-11-05T09:20:50Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@1.83.2",
|
||||
"date": "2025-03-14T15:43:23Z"
|
||||
},
|
||||
{
|
||||
"name": "zabbix/zabbix",
|
||||
"version": "7.2.5rc1",
|
||||
"date": "2025-03-18T14:10:32Z"
|
||||
},
|
||||
{
|
||||
"name": "openobserve/openobserve",
|
||||
"version": "v0.14.5-rc4",
|
||||
"date": "2025-03-18T12:51:31Z"
|
||||
"date": "2025-03-18T13:51:56Z"
|
||||
},
|
||||
{
|
||||
"name": "crowdsecurity/crowdsec",
|
||||
"version": "v1.6.6",
|
||||
"date": "2025-03-18T13:05:01Z"
|
||||
},
|
||||
{
|
||||
"name": "Radarr/Radarr",
|
||||
@ -19,25 +119,10 @@
|
||||
"version": "3.4.3.post1",
|
||||
"date": "2025-03-18T09:44:59Z"
|
||||
},
|
||||
{
|
||||
"name": "zitadel/zitadel",
|
||||
"version": "v2.70.5",
|
||||
"date": "2025-03-18T08:08:16Z"
|
||||
},
|
||||
{
|
||||
"name": "nzbgetcom/nzbget",
|
||||
"version": "testing",
|
||||
"date": "2025-03-18T08:06:43Z"
|
||||
},
|
||||
{
|
||||
"name": "Checkmk/checkmk",
|
||||
"version": "v2.4.0b1",
|
||||
"date": "2025-03-18T08:03:25Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.22.1660",
|
||||
"date": "2025-03-18T06:10:42Z"
|
||||
"version": "v24.8",
|
||||
"date": "2025-03-18T07:33:51Z"
|
||||
},
|
||||
{
|
||||
"name": "authelia/authelia",
|
||||
@ -46,13 +131,8 @@
|
||||
},
|
||||
{
|
||||
"name": "ollama/ollama",
|
||||
"version": "v0.6.1",
|
||||
"date": "2025-03-14T15:57:59Z"
|
||||
},
|
||||
{
|
||||
"name": "StarFleetCPTN/GoMFT",
|
||||
"version": "v0.1.15",
|
||||
"date": "2025-03-18T02:30:29Z"
|
||||
"version": "v0.6.2",
|
||||
"date": "2025-03-18T03:11:33Z"
|
||||
},
|
||||
{
|
||||
"name": "advplyr/audiobookshelf",
|
||||
@ -64,11 +144,6 @@
|
||||
"version": "v25.03.3",
|
||||
"date": "2025-03-17T20:55:37Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.1.4",
|
||||
"date": "2025-03-13T15:41:42Z"
|
||||
},
|
||||
{
|
||||
"name": "semaphoreui/semaphore",
|
||||
"version": "v2.13.0",
|
||||
@ -99,11 +174,6 @@
|
||||
"version": "v5.34.3",
|
||||
"date": "2025-03-17T14:20:04Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@1.84.0",
|
||||
"date": "2025-03-17T13:58:36Z"
|
||||
},
|
||||
{
|
||||
"name": "Graylog2/graylog2-server",
|
||||
"version": "6.2.0-beta.1",
|
||||
@ -144,21 +214,11 @@
|
||||
"version": "v1.0.4",
|
||||
"date": "2025-03-16T22:19:31Z"
|
||||
},
|
||||
{
|
||||
"name": "Donkie/Spoolman",
|
||||
"version": "v0.22.0",
|
||||
"date": "2025-03-16T21:14:52Z"
|
||||
},
|
||||
{
|
||||
"name": "autobrr/autobrr",
|
||||
"version": "v1.60.0",
|
||||
"date": "2025-03-16T18:39:49Z"
|
||||
},
|
||||
{
|
||||
"name": "pocket-id/pocket-id",
|
||||
"version": "v0.40.1",
|
||||
"date": "2025-03-16T17:02:54Z"
|
||||
},
|
||||
{
|
||||
"name": "evcc-io/evcc",
|
||||
"version": "0.201.0",
|
||||
@ -194,11 +254,6 @@
|
||||
"version": "8.0-m04",
|
||||
"date": "2025-03-16T08:12:40Z"
|
||||
},
|
||||
{
|
||||
"name": "esphome/esphome",
|
||||
"version": "2025.3.0b3",
|
||||
"date": "2025-03-16T06:53:58Z"
|
||||
},
|
||||
{
|
||||
"name": "Kozea/Radicale",
|
||||
"version": "v3.5.0",
|
||||
@ -314,11 +369,6 @@
|
||||
"version": "1.26.1",
|
||||
"date": "2025-03-13T21:34:25Z"
|
||||
},
|
||||
{
|
||||
"name": "dotnetfactory/fluid-calendar",
|
||||
"version": "v1.2.1",
|
||||
"date": "2025-03-13T19:11:35Z"
|
||||
},
|
||||
{
|
||||
"name": "kimai/kimai",
|
||||
"version": "2.31.0",
|
||||
@ -336,8 +386,8 @@
|
||||
},
|
||||
{
|
||||
"name": "moghtech/komodo",
|
||||
"version": "v1.17.0-dev-7",
|
||||
"date": "2025-03-13T05:03:04Z"
|
||||
"version": "v1.16.12",
|
||||
"date": "2024-12-02T08:46:29Z"
|
||||
},
|
||||
{
|
||||
"name": "NodeBB/NodeBB",
|
||||
@ -349,35 +399,20 @@
|
||||
"version": "v4.0.1",
|
||||
"date": "2025-03-12T22:41:17Z"
|
||||
},
|
||||
{
|
||||
"name": "jenkinsci/jenkins",
|
||||
"version": "jenkins-2.501",
|
||||
"date": "2025-03-12T21:47:58Z"
|
||||
},
|
||||
{
|
||||
"name": "minio/minio",
|
||||
"version": "RELEASE.2025-03-12T18-04-18Z",
|
||||
"date": "2025-03-12T18:45:21Z"
|
||||
},
|
||||
{
|
||||
"name": "zwave-js/zwave-js-ui",
|
||||
"version": "v9.33.0",
|
||||
"date": "2025-03-12T16:29:52Z"
|
||||
},
|
||||
{
|
||||
"name": "cockpit-project/cockpit",
|
||||
"version": "335",
|
||||
"date": "2025-03-12T13:03:27Z"
|
||||
},
|
||||
{
|
||||
"name": "syncthing/syncthing",
|
||||
"version": "v1.29.3",
|
||||
"date": "2025-03-12T11:56:30Z"
|
||||
},
|
||||
{
|
||||
"name": "transmission/transmission",
|
||||
"version": "4.1.0-beta.2",
|
||||
"date": "2025-03-12T11:01:28Z"
|
||||
"version": "4.0.1-beta.1",
|
||||
"date": "2024-12-13T00:16:24Z"
|
||||
},
|
||||
{
|
||||
"name": "emqx/emqx",
|
||||
@ -389,21 +424,11 @@
|
||||
"version": "1.21.2",
|
||||
"date": "2025-03-12T04:19:30Z"
|
||||
},
|
||||
{
|
||||
"name": "element-hq/synapse",
|
||||
"version": "v1.126.0",
|
||||
"date": "2025-03-11T16:29:42Z"
|
||||
},
|
||||
{
|
||||
"name": "benjaminjonard/koillection",
|
||||
"version": "1.6.12",
|
||||
"date": "2025-03-11T15:04:43Z"
|
||||
},
|
||||
{
|
||||
"name": "OctoPrint/OctoPrint",
|
||||
"version": "1.11.0rc4",
|
||||
"date": "2025-03-11T13:37:12Z"
|
||||
},
|
||||
{
|
||||
"name": "excalidraw/excalidraw",
|
||||
"version": "v0.18.0",
|
||||
@ -439,11 +464,6 @@
|
||||
"version": "v0.107.57",
|
||||
"date": "2025-02-20T14:58:55Z"
|
||||
},
|
||||
{
|
||||
"name": "Luligu/matterbridge",
|
||||
"version": "2.2.4",
|
||||
"date": "2025-03-10T10:40:00Z"
|
||||
},
|
||||
{
|
||||
"name": "icereed/paperless-gpt",
|
||||
"version": "v0.13.0",
|
||||
@ -461,8 +481,8 @@
|
||||
},
|
||||
{
|
||||
"name": "caddyserver/caddy",
|
||||
"version": "v2.10.0-beta.2",
|
||||
"date": "2025-03-09T13:51:09Z"
|
||||
"version": "v2.9.1",
|
||||
"date": "2025-01-08T15:22:53Z"
|
||||
},
|
||||
{
|
||||
"name": "awawa-dev/HyperHDR",
|
||||
@ -471,13 +491,13 @@
|
||||
},
|
||||
{
|
||||
"name": "Lidarr/Lidarr",
|
||||
"version": "v2.10.1.4589",
|
||||
"date": "2025-03-09T09:51:41Z"
|
||||
"version": "v2.9.6.4552",
|
||||
"date": "2025-02-03T12:11:00Z"
|
||||
},
|
||||
{
|
||||
"name": "Readarr/Readarr",
|
||||
"version": "v0.4.12.2753",
|
||||
"date": "2025-03-09T09:50:51Z"
|
||||
"version": "v2.0.0.4645",
|
||||
"date": "2017-03-07T18:56:06Z"
|
||||
},
|
||||
{
|
||||
"name": "Brandawg93/PeaNUT",
|
||||
@ -654,11 +674,6 @@
|
||||
"version": "v1.16.1",
|
||||
"date": "2025-02-26T11:29:15Z"
|
||||
},
|
||||
{
|
||||
"name": "prometheus/prometheus",
|
||||
"version": "v3.2.1",
|
||||
"date": "2025-02-26T09:55:45Z"
|
||||
},
|
||||
{
|
||||
"name": "silverbulletmd/silverbullet",
|
||||
"version": "0.10.4",
|
||||
@ -684,11 +699,6 @@
|
||||
"version": "v3.3.4",
|
||||
"date": "2025-02-25T10:18:58Z"
|
||||
},
|
||||
{
|
||||
"name": "zabbix/zabbix",
|
||||
"version": "7.2.4",
|
||||
"date": "2025-02-25T09:35:54Z"
|
||||
},
|
||||
{
|
||||
"name": "schlagmichdoch/PairDrop",
|
||||
"version": "v1.11.2",
|
||||
@ -811,8 +821,8 @@
|
||||
},
|
||||
{
|
||||
"name": "MariaDB/server",
|
||||
"version": "mariadb-11.8.1",
|
||||
"date": "2025-02-13T04:14:39Z"
|
||||
"version": "mariadb-11.7.2",
|
||||
"date": "2025-02-13T04:13:46Z"
|
||||
},
|
||||
{
|
||||
"name": "glpi-project/glpi",
|
||||
@ -844,11 +854,6 @@
|
||||
"version": "v0.15.0",
|
||||
"date": "2025-02-08T18:45:30Z"
|
||||
},
|
||||
{
|
||||
"name": "forgejo/forgejo",
|
||||
"version": "v10.0.1",
|
||||
"date": "2025-02-08T13:17:20Z"
|
||||
},
|
||||
{
|
||||
"name": "bluenviron/mediamtx",
|
||||
"version": "v1.11.3",
|
||||
@ -1141,8 +1146,8 @@
|
||||
},
|
||||
{
|
||||
"name": "motioneye-project/motioneye",
|
||||
"version": "0.43.1b2",
|
||||
"date": "2024-05-29T20:32:35Z"
|
||||
"version": "0.42.1",
|
||||
"date": "2020-06-07T07:27:04Z"
|
||||
},
|
||||
{
|
||||
"name": "gnmyt/myspeed",
|
||||
@ -1193,10 +1198,5 @@
|
||||
"name": "sct/overseerr",
|
||||
"version": "preview-test-node-18",
|
||||
"date": "2023-11-06T10:21:37Z"
|
||||
},
|
||||
{
|
||||
"name": "deepch/RTSPtoWeb",
|
||||
"version": "v2.4.3",
|
||||
"date": "2023-03-29T12:05:02Z"
|
||||
}
|
||||
]
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Input } from "@/components/ui/input";
|
||||
import {
|
||||
Select,
|
||||
SelectContent,
|
||||
SelectItem,
|
||||
SelectTrigger,
|
||||
SelectValue,
|
||||
Select,
|
||||
SelectContent,
|
||||
SelectItem,
|
||||
SelectTrigger,
|
||||
SelectValue,
|
||||
} from "@/components/ui/select";
|
||||
import { AlertColors } from "@/config/siteConfig";
|
||||
import { cn } from "@/lib/utils";
|
||||
@ -15,116 +15,136 @@ import { ScriptSchema, type Script } from "../_schemas/schemas";
|
||||
import { memo, useCallback, useRef } from "react";
|
||||
|
||||
type NoteProps = {
|
||||
script: Script;
|
||||
setScript: (script: Script) => void;
|
||||
setIsValid: (isValid: boolean) => void;
|
||||
setZodErrors: (zodErrors: z.ZodError | null) => void;
|
||||
script: Script;
|
||||
setScript: (script: Script) => void;
|
||||
setIsValid: (isValid: boolean) => void;
|
||||
setZodErrors: (zodErrors: z.ZodError | null) => void;
|
||||
};
|
||||
|
||||
function Note({
|
||||
script,
|
||||
setScript,
|
||||
setIsValid,
|
||||
setZodErrors,
|
||||
script,
|
||||
setScript,
|
||||
setIsValid,
|
||||
setZodErrors,
|
||||
}: NoteProps) {
|
||||
const inputRefs = useRef<(HTMLInputElement | null)[]>([]);
|
||||
const inputRefs = useRef<(HTMLInputElement | null)[]>([]);
|
||||
|
||||
const addNote = useCallback(() => {
|
||||
setScript({
|
||||
...script,
|
||||
notes: [...script.notes, { text: "", type: "" }],
|
||||
});
|
||||
}, [script, setScript]);
|
||||
const addNote = useCallback(() => {
|
||||
setScript({
|
||||
...script,
|
||||
notes: [...script.notes, { text: "", type: "" }],
|
||||
});
|
||||
}, [script, setScript]);
|
||||
|
||||
const updateNote = useCallback((
|
||||
index: number,
|
||||
key: keyof Script["notes"][number],
|
||||
value: string,
|
||||
) => {
|
||||
const updated: Script = {
|
||||
...script,
|
||||
notes: script.notes.map((note, i) =>
|
||||
i === index ? { ...note, [key]: value } : note,
|
||||
),
|
||||
};
|
||||
const result = ScriptSchema.safeParse(updated);
|
||||
setIsValid(result.success);
|
||||
setZodErrors(result.success ? null : result.error);
|
||||
setScript(updated);
|
||||
// Restore focus after state update
|
||||
if (key === "text") {
|
||||
setTimeout(() => {
|
||||
inputRefs.current[index]?.focus();
|
||||
}, 0);
|
||||
}
|
||||
}, [script, setScript, setIsValid, setZodErrors]);
|
||||
const updateNote = useCallback((
|
||||
index: number,
|
||||
key: keyof Script["notes"][number],
|
||||
value: string,
|
||||
) => {
|
||||
const updated: Script = {
|
||||
...script,
|
||||
notes: script.notes.map((note, i) =>
|
||||
i === index ? { ...note, [key]: value } : note,
|
||||
),
|
||||
};
|
||||
const result = ScriptSchema.safeParse(updated);
|
||||
setIsValid(result.success);
|
||||
setZodErrors(result.success ? null : result.error);
|
||||
setScript(updated);
|
||||
// Restore focus after state update
|
||||
if (key === "text") {
|
||||
setTimeout(() => {
|
||||
inputRefs.current[index]?.focus();
|
||||
}, 0);
|
||||
}
|
||||
}, [script, setScript, setIsValid, setZodErrors]);
|
||||
|
||||
const removeNote = useCallback((index: number) => {
|
||||
setScript({
|
||||
...script,
|
||||
notes: script.notes.filter((_, i) => i !== index),
|
||||
});
|
||||
}, [script, setScript]);
|
||||
const removeNote = useCallback((index: number) => {
|
||||
setScript({
|
||||
...script,
|
||||
notes: script.notes.filter((_, i) => i !== index),
|
||||
});
|
||||
}, [script, setScript]);
|
||||
|
||||
const NoteItem = memo(
|
||||
({ note, index }: { note: Script["notes"][number]; index: number }) => (
|
||||
<div className="space-y-2 border p-4 rounded">
|
||||
<Input
|
||||
placeholder="Note Text"
|
||||
value={note.text}
|
||||
onChange={(e) => updateNote(index, "text", e.target.value)}
|
||||
ref={(el) => {
|
||||
inputRefs.current[index] = el;
|
||||
}}
|
||||
/>
|
||||
<Select
|
||||
value={note.type}
|
||||
onValueChange={(value) => updateNote(index, "type", value)}
|
||||
>
|
||||
<SelectTrigger className="flex-1">
|
||||
<SelectValue placeholder="Type" />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
{Object.keys(AlertColors).map((type) => (
|
||||
<SelectItem key={type} value={type}>
|
||||
<span className="flex items-center gap-2">
|
||||
{type.charAt(0).toUpperCase() + type.slice(1)}{" "}
|
||||
<div
|
||||
className={cn(
|
||||
"size-4 rounded-full border",
|
||||
AlertColors[type as keyof typeof AlertColors],
|
||||
)}
|
||||
/>
|
||||
</span>
|
||||
</SelectItem>
|
||||
return (
|
||||
<>
|
||||
<h3 className="text-xl font-semibold">Notes</h3>
|
||||
{script.notes.map((note, index) => (
|
||||
<NoteItem key={index} note={note} index={index} updateNote={updateNote} removeNote={removeNote} />
|
||||
))}
|
||||
</SelectContent>
|
||||
</Select>
|
||||
<Button
|
||||
size="sm"
|
||||
variant="destructive"
|
||||
type="button"
|
||||
onClick={() => removeNote(index)}
|
||||
>
|
||||
<Trash2 className="mr-2 h-4 w-4" /> Remove Note
|
||||
</Button>
|
||||
</div>
|
||||
),
|
||||
);
|
||||
|
||||
NoteItem.displayName = 'NoteItem';
|
||||
|
||||
return (
|
||||
<>
|
||||
<h3 className="text-xl font-semibold">Notes</h3>
|
||||
{script.notes.map((note, index) => (
|
||||
<NoteItem key={index} note={note} index={index} />
|
||||
))}
|
||||
<Button type="button" size="sm" onClick={addNote}>
|
||||
<PlusCircle className="mr-2 h-4 w-4" /> Add Note
|
||||
</Button>
|
||||
</>
|
||||
);
|
||||
<Button type="button" size="sm" onClick={addNote}>
|
||||
<PlusCircle className="mr-2 h-4 w-4" /> Add Note
|
||||
</Button>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default memo(Note);
|
||||
const NoteItem = memo(
|
||||
({
|
||||
note,
|
||||
index,
|
||||
updateNote,
|
||||
removeNote,
|
||||
}: {
|
||||
note: Script["notes"][number];
|
||||
index: number;
|
||||
updateNote: (index: number, key: keyof Script["notes"][number], value: string) => void;
|
||||
removeNote: (index: number) => void;
|
||||
}) => {
|
||||
const inputRef = useRef<HTMLInputElement | null>(null);
|
||||
|
||||
const handleTextChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {
|
||||
updateNote(index, "text", e.target.value);
|
||||
setTimeout(() => {
|
||||
inputRef.current?.focus();
|
||||
}, 0);
|
||||
}, [index, updateNote]);
|
||||
|
||||
return (
|
||||
<div className="space-y-2 border p-4 rounded">
|
||||
<Input
|
||||
placeholder="Note Text"
|
||||
value={note.text}
|
||||
onChange={handleTextChange}
|
||||
ref={inputRef}
|
||||
/>
|
||||
<Select
|
||||
value={note.type}
|
||||
onValueChange={(value) => updateNote(index, "type", value)}
|
||||
>
|
||||
<SelectTrigger className="flex-1">
|
||||
<SelectValue placeholder="Type" />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
{Object.keys(AlertColors).map((type) => (
|
||||
<SelectItem key={type} value={type}>
|
||||
<span className="flex items-center gap-2">
|
||||
{type.charAt(0).toUpperCase() + type.slice(1)}{" "}
|
||||
<div
|
||||
className={cn(
|
||||
"size-4 rounded-full border",
|
||||
AlertColors[type as keyof typeof AlertColors],
|
||||
)}
|
||||
/>
|
||||
</span>
|
||||
</SelectItem>
|
||||
))}
|
||||
</SelectContent>
|
||||
</Select>
|
||||
<Button
|
||||
size="sm"
|
||||
variant="destructive"
|
||||
type="button"
|
||||
onClick={() => removeNote(index)}
|
||||
>
|
||||
<Trash2 className="mr-2 h-4 w-4" /> Remove Note
|
||||
</Button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
NoteItem.displayName = 'NoteItem';
|
||||
|
||||
|
||||
export default memo(Note);
|
@ -74,7 +74,7 @@ export NEXT_TELEMETRY_DISABLED=1
|
||||
cd /opt/fluid-calendar
|
||||
$STD npm install --legacy-peer-deps
|
||||
$STD npm run prisma:generate
|
||||
$STD npm run prisma:migrate
|
||||
$STD npx prisma migrate deploy
|
||||
$STD npm run build:os
|
||||
msg_ok "Setup ${APPLICATION}"
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/icereed/paperless-gpt
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
|
@ -58,8 +58,8 @@ sed -i -e "s|^APP_URL=.*|APP_URL=http://$IPADDRESS|" \
|
||||
chown -R www-data: /opt/snipe-it
|
||||
chmod -R 755 /opt/snipe-it
|
||||
export COMPOSER_ALLOW_SUPERUSER=1
|
||||
$STD composer update --no-plugins --no-scripts
|
||||
$STD composer install --no-dev
|
||||
#$STD composer update --no-plugins --no-scripts
|
||||
$STD composer install --no-dev --optimize-autoloader --no-interaction
|
||||
$STD php artisan key:generate --force
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Installed SnipeIT"
|
||||
|
Reference in New Issue
Block a user