diff --git a/README.md b/README.md
index f106b66adde..716484ee042 100644
--- a/README.md
+++ b/README.md
@@ -53,34 +53,46 @@ Simplify the management of your server with Homarr - a sleek, modern dashboard t
- š¦ Comprehensive built-in icon picker with over 7000 icons
- š³ Easy deployment with Docker, unRAID, and Synology
- š Compatible with any major consumer hardware (x86, Raspberry Pi, old laptops, ...)
-- šµ Free and Open-Source - your data stays on your device. No telemetry data.
![Widgets & Integrations Section](docs/section-widgets-and-integrations.png)
-Homarr has a [built-in collection of widgets and integrations](https://homarr.dev/docs/integrations/), that connect to your applications and enable you to control them directly from the dashboard.
-Each widget and integration has a comprehensive documentation for your comfort.
-Homarr will integrate with the following applications of yours:
-
-- š„ Torrent clients
- - [Deluge](https://homarr.dev/docs/integrations/#deluge)
- - [Transmission](https://homarr.dev/docs/integrations/#transmission)
- - [qBittorent](https://homarr.dev/docs/integrations/#qbittorrent-integration)
-- š„ Usenet clients
- - [SABnzbd](https://homarr.dev/docs/integrations/#sabnzbd)
- - [NZBGet](https://homarr.dev/docs/integrations/#nzbget)
-- š Media collection managers
- - [Sonarr](https://homarr.dev/docs/integrations/#sonarr)
- - [Radarr](https://homarr.dev/docs/integrations/#radarr)
- - [Lidarr](https://homarr.dev/docs/integrations/#lidarr)
- - [Readarr](https://homarr.dev/docs/integrations/#readarr)
-- šļø Media request managers
- - [Overseerr](https://homarr.dev/docs/integrations/#overseerr--jellyseerr)
- - [Jellyseerr](https://homarr.dev/docs/integrations/#overseerr--jellyseerr)
-- š [Dash.](https://homarr.dev/docs/integrations/#dash)
-- š³ [Docker](https://homarr.dev/docs/integrations/#docker)
+Homarr has a [built-in collection of widgets and integrations](https://homarr.dev/docs/management/integrations/), that connect to your applications and enable you to control them directly from the dashboard.
+Each widget and integration has a comprehensive documentation
+Homarr will integrate with the following applications:
+
+š„ Torrent clients
+- [Deluge](https://homarr.dev/docs/management/integrations/torrent-deluge)
+- [Transmission](https://homarr.dev/docs/management/integrations/torrent-transmission)
+- [qBittorent](https://homarr.dev/docs/management/integrations/torrent-qbittorrent)
+
+š„ Usenet clients
+- [SABnzbd](https://homarr.dev/docs/management/integrations/usenet-sabnzbd)
+- [NZBGet](https://homarr.dev/docs/management/integrations/usenet-nzbget)
+
+šŗ Media servers
+- [Plex](https://homarr.dev/docs/management/integrations/media-server-plex)
+- [Jellyfin](https://homarr.dev/docs/management/integrations/media-server-jellyfin)
+
+š Media collection managers
+- [Sonarr](https://homarr.dev/docs/management/integrations/servarr-sonarr)
+- [Radarr](https://homarr.dev/docs/management/integrations/servarr-radarr)
+- [Lidarr](https://homarr.dev/docs/management/integrations/servarr-lidarr)
+- [Readarr](https://homarr.dev/docs/management/integrations/servarr-readarr)
+
+šļø Media request managers
+- [Overseerr](https://homarr.dev/docs/management/integrations/media-requester/)
+- [Jellyseerr](https://homarr.dev/docs/management/integrations/media-requester/)
+
+š« DNS ad-blockers
+- [Pihole](https://homarr.dev/docs/management/integrations/dns-pihole)
+- [AdGuard Home](https://homarr.dev/docs/management/integrations/dns-adguard-home)
+
+Other integrations
+- [š Dash.](https://homarr.dev/docs/management/integrations/hardware-dash)
+- [š³ Docker](https://homarr.dev/docs/management/integrations/containers-docker)
We're constantly adding new integrations and widgets, which will enhance your experience even further.
@@ -123,3 +135,4 @@ You can also support us by helping with [translating the entire project](https:/
All contributions, regardless of their size or scope, are welcome and highly appreciated! Thank you ā¤ļø
![Alt](https://repobeats.axiom.co/api/embed/60a6f68f193faf831f64221bdf90782adec51c93.svg "Repobeats analytics image")
+[![Covered by Argos Visual Testing](https://argos-ci.com/badge-large.svg)](https://argos-ci.com?utm_source=%5Bhomarr%5D&utm_campaign=oss)
diff --git a/next.config.js b/next.config.js
index c87a8ebb2dd..191310ecf92 100644
--- a/next.config.js
+++ b/next.config.js
@@ -6,6 +6,11 @@ const withBundleAnalyzer = require('@next/bundle-analyzer')({
});
module.exports = withBundleAnalyzer({
+ webpack: (config) => {
+ // for dynamic loading of auth providers
+ config.experiments = { ...config.experiments, topLevelAwait: true };
+ return config;
+ },
images: {
domains: ['cdn.jsdelivr.net'],
},
diff --git a/package.json b/package.json
index 590c9572296..46b6adf7a66 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "homarr",
- "version": "0.14.6",
+ "version": "0.15.0",
"description": "Homarr - A homepage for your server.",
"license": "MIT",
"repository": {
@@ -27,7 +27,6 @@
"db:migrate": "dotenv ts-node drizzle/migrate/migrate.ts ./drizzle"
},
"dependencies": {
- "@auth/drizzle-adapter": "^0.3.2",
"@ctrl/deluge": "^4.1.0",
"@ctrl/qbittorrent": "^6.0.0",
"@ctrl/shared-torrent": "^4.1.1",
@@ -92,9 +91,8 @@
"i18next": "^22.5.1",
"immer": "^10.0.2",
"js-file-download": "^0.4.12",
+ "ldapjs": "^3.0.5",
"mantine-react-table": "^1.3.4",
- "moment": "^2.29.4",
- "moment-timezone": "^0.5.43",
"next": "13.4.12",
"next-auth": "^4.23.0",
"next-i18next": "^14.0.0",
@@ -123,6 +121,7 @@
"@types/better-sqlite3": "^7.6.5",
"@types/cookies": "^0.7.7",
"@types/dockerode": "^3.3.9",
+ "@types/ldapjs": "^3.0.2",
"@types/node": "18.17.8",
"@types/prismjs": "^1.26.0",
"@types/react": "^18.2.11",
diff --git a/public/locales/en/modules/indexer-manager.json b/public/locales/en/modules/indexer-manager.json
new file mode 100644
index 00000000000..051593223e1
--- /dev/null
+++ b/public/locales/en/modules/indexer-manager.json
@@ -0,0 +1,19 @@
+{
+ "descriptor": {
+ "name": "Indexer manager status",
+ "description": "Status about your indexers",
+ "settings": {
+ "title": "Indexer manager status"
+ }
+ },
+ "indexersStatus": {
+ "title": "Indexer manager",
+ "testAllButton": "Test all"
+ },
+ "errors": {
+ "general": {
+ "title": "Unable to find a indexer manager",
+ "text": "There was a problem connecting to your indexer manager. Please verify your configuration/integration(s)."
+ }
+ }
+ }
\ No newline at end of file
diff --git a/public/locales/en/modules/smart-home/entity-state.json b/public/locales/en/modules/smart-home/entity-state.json
index c76a4fae7b7..f7eacbbb28c 100644
--- a/public/locales/en/modules/smart-home/entity-state.json
+++ b/public/locales/en/modules/smart-home/entity-state.json
@@ -9,12 +9,20 @@
"label": "Entity ID",
"info": "Unique entity ID in Home Assistant. Copy by clicking on entity > Click on cog icon > Click on copy button at 'Entity ID'. Some custom entities may not be supported."
},
+ "appendUnit": {
+ "label": "Append unit of measurement",
+ "info": "Append the unit of measurement attribute to the entity state."
+ },
"automationId": {
"label": "Optional automation ID",
"info": "Your unique automation ID. Always starts with automation.XXXXX. If not set, widget will not be clickable and only display state. After click, entity state will be refreshed."
},
"displayName": {
"label": "Display name"
+ },
+ "displayFriendlyName": {
+ "label": "Display friendly name",
+ "info": "Display friendly name from Home Assistant instead instead of display name"
}
}
}
diff --git a/public/locales/it/modules/rss.json b/public/locales/it/modules/rss.json
index cbf20088d7e..69f64f95964 100644
--- a/public/locales/it/modules/rss.json
+++ b/public/locales/it/modules/rss.json
@@ -22,10 +22,10 @@
"label": "Ordina per data di pubblicazione (ascendente)"
},
"sortPostsWithoutPublishDateToTheTop": {
- "label": ""
+ "label": "Metti i post senza data di pubblicazione in alto"
},
"maximumAmountOfPosts": {
- "label": ""
+ "label": "Numero massimo di post"
}
},
"card": {
diff --git a/public/locales/lv/common.json b/public/locales/lv/common.json
index 527c8dc9757..d2480df6651 100644
--- a/public/locales/lv/common.json
+++ b/public/locales/lv/common.json
@@ -13,7 +13,7 @@
"previous": "IepriekÅ”Äjais",
"confirm": "Apstipriniet",
"enabled": "IespÄjots",
- "duplicate": "",
+ "duplicate": "DublicÄt",
"disabled": "AtspÄjots",
"enableAll": "IespÄjot visu",
"disableAll": "AtspÄjot visu",
@@ -54,5 +54,5 @@
"height": "Augstums"
},
"public": "Publisks",
- "restricted": ""
+ "restricted": "Ierobežots"
}
\ No newline at end of file
diff --git a/public/locales/lv/layout/element-selector/selector.json b/public/locales/lv/layout/element-selector/selector.json
index 88354cbf32f..b1344cd5a39 100644
--- a/public/locales/lv/layout/element-selector/selector.json
+++ b/public/locales/lv/layout/element-selector/selector.json
@@ -22,5 +22,5 @@
"message": "Ir izveidota kategorija \"{{name}}\""
}
},
- "importFromDocker": ""
+ "importFromDocker": "ImportÄt no Docker"
}
diff --git a/public/locales/lv/manage/boards.json b/public/locales/lv/manage/boards.json
index 92593c986ac..19ba5f707f5 100644
--- a/public/locales/lv/manage/boards.json
+++ b/public/locales/lv/manage/boards.json
@@ -16,15 +16,15 @@
"label": "Neatgriezeniski dzÄst",
"disabled": "DzÄÅ”ana atspÄjota, jo vecÄki Homarr komponenti neļauj dzÄst noklusÄjuma konfigurÄciju. DzÄÅ”ana bÅ«s iespÄjama nÄkotnÄ."
},
- "duplicate": "",
+ "duplicate": "DublicÄt",
"rename": {
- "label": "",
+ "label": "PÄrdÄvÄt",
"modal": {
- "title": "",
+ "title": "PÄrdÄvÄt dÄli {{name}}",
"fields": {
"name": {
- "label": "",
- "placeholder": ""
+ "label": "Jauns nosaukums",
+ "placeholder": "Jauns dÄļa nosaukums"
}
}
}
diff --git a/public/locales/lv/manage/users.json b/public/locales/lv/manage/users.json
index 1562ab6e62b..acbc0980515 100644
--- a/public/locales/lv/manage/users.json
+++ b/public/locales/lv/manage/users.json
@@ -6,10 +6,10 @@
},
"filter": {
"roles": {
- "all": "",
- "normal": "",
- "admin": "",
- "owner": ""
+ "all": "Viss",
+ "normal": "NormÄls",
+ "admin": "Administrators",
+ "owner": "ÄŖpaÅ”nieks"
}
},
"table": {
diff --git a/public/locales/lv/manage/users/edit.json b/public/locales/lv/manage/users/edit.json
index a190593eb57..493455f10d3 100644
--- a/public/locales/lv/manage/users/edit.json
+++ b/public/locales/lv/manage/users/edit.json
@@ -1,6 +1,6 @@
{
- "metaTitle": "",
- "back": "",
+ "metaTitle": "LietotÄjs {{username}}",
+ "back": "Atgriezties uz lietotÄju pÄrvaldÄ«bu",
"sections": {
"general": {
"title": "VispÄrÄ«gi",
@@ -14,40 +14,40 @@
}
},
"security": {
- "title": "",
+ "title": "DroŔība",
"inputs": {
"password": {
- "label": ""
+ "label": "Jauna parole"
},
"terminateExistingSessions": {
- "label": "",
- "description": ""
+ "label": "PÄrtraukt esoÅ”Äs sesijas",
+ "description": "Piespiež lietotÄju no jauna pieteikties savÄs ierÄ«cÄs"
},
"confirm": {
"label": "Apstipriniet",
- "description": ""
+ "description": "Parole tiks atjauninÄta. Å o darbÄ«bu nevar atcelt."
}
}
},
"roles": {
- "title": "",
- "currentRole": "",
+ "title": "Lomas",
+ "currentRole": "PaÅ”reizÄjÄ loma: ",
"badges": {
- "owner": "",
- "admin": "",
- "normal": ""
+ "owner": "ÄŖpaÅ”nieks",
+ "admin": "Administrators",
+ "normal": "NormÄls"
}
},
"deletion": {
- "title": "",
+ "title": "Konta dzÄÅ”ana",
"inputs": {
"confirmUsername": {
- "label": "",
- "description": ""
+ "label": "ApstiprinÄt lietotÄjvÄrdu",
+ "description": "Ierakstiet lietotÄjvÄrdu, lai apstiprinÄtu dzÄÅ”anu"
},
"confirm": {
"label": "Neatgriezeniski dzÄst",
- "description": ""
+ "description": "Es apzinos, ka Ŕī darbÄ«ba ir neatgriezeniska un visi konta dati tiks zaudÄti."
}
}
}
diff --git a/public/locales/lv/modules/date.json b/public/locales/lv/modules/date.json
index 6ece863de0a..6d2e2d2db25 100644
--- a/public/locales/lv/modules/date.json
+++ b/public/locales/lv/modules/date.json
@@ -5,11 +5,11 @@
"settings": {
"title": "Datuma un Laika logrīka iestatījumi",
"timezone": {
- "label": "",
- "info": ""
+ "label": "Laika zona",
+ "info": "IzvÄlieties savas laika zonas nosaukumu, atrodiet savÄjo Å”eit: "
},
"customTitle": {
- "label": ""
+ "label": "PilsÄtas nosaukums vai pielÄgots nosaukums"
},
"display24HourFormat": {
"label": "RÄdÄ«t pilnu laiku (24 stundu)"
@@ -21,11 +21,11 @@
}
},
"titleState": {
- "label": "",
- "info": "",
+ "label": "PulksteÅa nosaukums",
+ "info": "PielÄgotais nosaukums un laika zonas kods var tikt parÄdÄ«ts jÅ«su logrÄ«kÄ. Varat arÄ« rÄdÄ«t tikai pilsÄtu, nerÄdÄ«t nevienu, vai pat rÄdÄ«t tikai laika joslu, gadÄ«jumÄ ja ir atlasÄ«ti abi, bet nav norÄdÄ«ts nosaukums.",
"data": {
- "both": "",
- "city": "",
+ "both": "PilsÄta un Laika zona",
+ "city": "Tikai nosaukums",
"none": "Nekas"
}
}
diff --git a/public/locales/lv/modules/rss.json b/public/locales/lv/modules/rss.json
index c37d5e1327e..493eec21730 100644
--- a/public/locales/lv/modules/rss.json
+++ b/public/locales/lv/modules/rss.json
@@ -19,13 +19,13 @@
"label": "Teksta līniju skava"
},
"sortByPublishDateAscending": {
- "label": ""
+ "label": "KÄrtot pÄc publicÄÅ”anas datuma (augoÅ”Ä secÄ«bÄ)"
},
"sortPostsWithoutPublishDateToTheTop": {
- "label": ""
+ "label": "Ievietot ziÅas bez publicÄÅ”anas datuma augÅ”pusÄ"
},
"maximumAmountOfPosts": {
- "label": ""
+ "label": "MaksimÄlais ierakstu skaits"
}
},
"card": {
diff --git a/public/locales/lv/modules/smart-home/entity-state.json b/public/locales/lv/modules/smart-home/entity-state.json
index 0ce4fcc65c6..f3e41152f44 100644
--- a/public/locales/lv/modules/smart-home/entity-state.json
+++ b/public/locales/lv/modules/smart-home/entity-state.json
@@ -1,20 +1,20 @@
{
- "entityNotFound": "",
+ "entityNotFound": "Vienība nav atrasta",
"descriptor": {
- "name": "",
- "description": "",
+ "name": "Home Assistant vienība",
+ "description": "VienÄ«bas paÅ”reizÄjais stÄvoklis pakalpojumÄ Home Assistant",
"settings": {
- "title": "",
+ "title": "VienÄ«bas stÄvoklis",
"entityId": {
- "label": "",
- "info": ""
+ "label": "Vienības ID",
+ "info": "UnikÄls vienÄ«bas ID pakalpojumÄ Home Assistant. Ievietojiet starpliktuvÄ, noklikŔķinot uz vienÄ«bu > NoklikŔķiniet uz zobrata ikonu > NoklikŔķiniet uz kopÄÅ”anas pogu pie \"VienÄ«bas ID\". Dažas pielÄgotas vienÄ«bas var nebÅ«t atbalstÄ«tas."
},
"automationId": {
- "label": "",
- "info": ""
+ "label": "IzvÄles automatizÄcijasĀ ID",
+ "info": "JÅ«su unikÄlais automatizÄcijasĀ ID. VienmÄr sÄkas ar automatizÄciju.XXXX. Ja tas nav iestatÄ«ts, logrÄ«ks nebÅ«s noklikŔķinÄms un tiks parÄdÄ«ts tikai statuss. PÄc noklikŔķinÄÅ”anas vienÄ«bas stÄvoklis tiks atsvaidzinÄts."
},
"displayName": {
- "label": ""
+ "label": "ParÄdÄmais nosaukums"
}
}
}
diff --git a/public/locales/lv/modules/smart-home/trigger-automation.json b/public/locales/lv/modules/smart-home/trigger-automation.json
index 37046b5cf74..333f3b542ae 100644
--- a/public/locales/lv/modules/smart-home/trigger-automation.json
+++ b/public/locales/lv/modules/smart-home/trigger-automation.json
@@ -1,15 +1,15 @@
{
"descriptor": {
- "name": "",
- "description": "",
+ "name": "Home Assistant automatizÄcija",
+ "description": "AutomatizÄcijas izpilde",
"settings": {
- "title": "",
+ "title": "AutomatizÄcijas izpilde",
"automationId": {
- "label": "",
- "info": ""
+ "label": "AutomatizÄcijas ID",
+ "info": "JÅ«su unikÄlais automatizÄcijas ID. VienmÄr sÄksies ar automation.XXXXX."
},
"displayName": {
- "label": ""
+ "label": "ParÄdÄmais nosaukums"
}
}
}
diff --git a/public/locales/lv/modules/torrents-status.json b/public/locales/lv/modules/torrents-status.json
index 84beeea59d5..5f8e671d56f 100644
--- a/public/locales/lv/modules/torrents-status.json
+++ b/public/locales/lv/modules/torrents-status.json
@@ -41,22 +41,22 @@
},
"table": {
"header": {
- "isCompleted": "",
+ "isCompleted": "LejupielÄdÄ",
"name": "Nosaukums",
- "dateAdded": "",
+ "dateAdded": "Pievienots",
"size": "Lielums",
"download": "LejupielÄde",
"upload": "AugÅ”upielÄde",
"estimatedTimeOfArrival": "ETA",
"progress": "Progress",
- "totalUploaded": "",
- "totalDownloaded": "",
- "ratio": "",
- "seeds": "",
- "peers": "",
- "label": "",
+ "totalUploaded": "KopÄjÄ AugÅ”upielÄde",
+ "totalDownloaded": "KopÄjÄ LejupielÄde",
+ "ratio": "Attiecība",
+ "seeds": "DevÄji (savienoti)",
+ "peers": "Å ÄmÄji (savienoti)",
+ "label": "Birka",
"state": "StÄvoklis",
- "stateMessage": ""
+ "stateMessage": "Statusa ZiÅojums"
},
"item": {
"text": "PÄrvalda {{appName}}, {{ratio}} attiecÄ«ba"
diff --git a/public/locales/lv/settings/customization/page-appearance.json b/public/locales/lv/settings/customization/page-appearance.json
index cfbb998c90e..ca39431c93b 100644
--- a/public/locales/lv/settings/customization/page-appearance.json
+++ b/public/locales/lv/settings/customization/page-appearance.json
@@ -19,26 +19,26 @@
"label": "Fons"
},
"backgroundImageAttachment": {
- "label": "",
+ "label": "Fona attÄla pielikums",
"options": {
- "fixed": "",
- "scroll": ""
+ "fixed": "FiksÄts - fons paliek nemainÄ«gÄ pozÄ«cijÄ (ieteicams)",
+ "scroll": "RitinÄÅ”ana - fons ritinÄs lÄ«dz ar kursora ritinÄÅ”anu"
}
},
"backgroundImageSize": {
- "label": "",
+ "label": "Fona attÄla izmÄrs",
"options": {
- "cover": "",
- "contain": ""
+ "cover": "PÄrklÄjums - pÄc iespÄjas mazÄks attÄla mÄrogs, lai, apgriežot lieko vietu, pÄrklÄtu visu logu. (ieteicams)",
+ "contain": "SaturÄt ā mÄrogo attÄlu pÄc iespÄjas lielÄku tÄ konteinerÄ, neapgriežot vai neizstiepjot attÄlu."
}
},
"backgroundImageRepeat": {
- "label": "",
+ "label": "Fona attÄla pielikums",
"options": {
- "repeat": "",
- "no-repeat": "",
- "repeat-x": "",
- "repeat-y": ""
+ "repeat": "AtkÄrtot ā attÄls tiek atkÄrtots tik daudz, cik nepiecieÅ”ams, lai aptvertu visu fona laukumu.",
+ "no-repeat": "Bez atkÄrtojuma - attÄls neatkÄrtojas un var neaizpildÄ«t visu fona laukumu (ieteicams)",
+ "repeat-x": "AtkÄrtot X - tÄpat kÄ \"AtkÄrtot\", bet tikai uz horizontÄlÄs ass.",
+ "repeat-y": "AtkÄrtot Y - tÄpat kÄ \"AtkÄrtot\", bet tikai uz vertikÄlÄs ass."
}
},
"customCSS": {
diff --git a/public/locales/lv/tools/docker.json b/public/locales/lv/tools/docker.json
index 453131d1e64..e9f90563f7a 100644
--- a/public/locales/lv/tools/docker.json
+++ b/public/locales/lv/tools/docker.json
@@ -2,7 +2,7 @@
"title": "Docker",
"alerts": {
"notConfigured": {
- "text": ""
+ "text": "JÅ«su Homarr instancÄ nav konfigurÄts Docker vai arÄ« nav izdevies iegÅ«tu konteinerus. LÅ«dzu, pÄrbaudiet dokumentÄciju par to, kÄ iestatÄ«t integrÄciju."
}
},
"modals": {
diff --git a/public/locales/sk/modules/rss.json b/public/locales/sk/modules/rss.json
index 9045676f29c..bf3b6ef3696 100644
--- a/public/locales/sk/modules/rss.json
+++ b/public/locales/sk/modules/rss.json
@@ -22,10 +22,10 @@
"label": "ZoradiÅ„ podľa dĆ”tumu vydania (vzostupne)"
},
"sortPostsWithoutPublishDateToTheTop": {
- "label": ""
+ "label": "Umiestnite prĆspevky bez dĆ”tumu uverejnenia na zaÄiatok"
},
"maximumAmountOfPosts": {
- "label": ""
+ "label": "MaximĆ”lny poÄet prĆspevkov"
}
},
"card": {
diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json
index eecc4502130..4ed9134f62d 100644
--- a/public/locales/tr/common.json
+++ b/public/locales/tr/common.json
@@ -17,8 +17,8 @@
"disabled": "Pasif",
"enableAll": "TĆ¼mĆ¼nĆ¼ etkinleÅtir",
"disableAll": "TĆ¼mĆ¼nĆ¼ pasifleÅtir",
- "version": "Versiyon",
- "changePosition": "Pozisyon deÄiÅtir",
+ "version": "SĆ¼rĆ¼m",
+ "changePosition": "Pozisyonu deÄiÅtir",
"remove": "Kaldır",
"removeConfirm": "{{item}}'i kaldırmak istediÄinizden emin misiniz?",
"createItem": "+ yeni {{item}}",
diff --git a/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/InputElements/IntegrationSelector.tsx b/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/InputElements/IntegrationSelector.tsx
index eb021a94c88..21ad225009c 100644
--- a/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/InputElements/IntegrationSelector.tsx
+++ b/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/InputElements/IntegrationSelector.tsx
@@ -163,6 +163,11 @@ export const availableIntegrations = [
image: 'https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/readarr.png',
label: 'Readarr',
},
+ {
+ value: 'prowlarr',
+ image: 'https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/prowlarr.png',
+ label: 'Prowlarr',
+ },
{
value: 'jellyfin',
image: 'https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/jellyfin.png',
@@ -186,6 +191,6 @@ export const availableIntegrations = [
{
value: 'homeAssistant',
image: 'https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/home-assistant.png',
- label: 'Home Assistant'
- }
+ label: 'Home Assistant',
+ },
] as const satisfies Readonly;
diff --git a/src/components/Manage/Board/create-board.modal.tsx b/src/components/Manage/Board/create-board.modal.tsx
index 7cf7abe4e66..0f440f0bc96 100644
--- a/src/components/Manage/Board/create-board.modal.tsx
+++ b/src/components/Manage/Board/create-board.modal.tsx
@@ -9,12 +9,15 @@ import { createBoardSchemaValidation } from '~/validations/boards';
export const CreateBoardModal = ({ id }: ContextModalProps<{}>) => {
const { t } = useTranslation('manage/boards');
- const utils = api.useContext();
+ const utils = api.useUtils();
const { isLoading, mutate } = api.config.save.useMutation({
onSuccess: async () => {
await utils.boards.all.invalidate();
modals.close(id);
},
+ onError: async (error) => {
+ form.setFieldError('name', error.message);
+ },
});
const { i18nZodResolver } = useI18nZodResolver();
@@ -31,6 +34,7 @@ export const CreateBoardModal = ({ id }: ContextModalProps<{}>) => {
mutate({
name: form.values.name,
config: fallbackConfig,
+ create: true,
});
};
@@ -59,7 +63,7 @@ export const CreateBoardModal = ({ id }: ContextModalProps<{}>) => {