diff --git a/README.md b/README.md
index f106b66ad..716484ee0 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.

-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:
+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/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)
+š„ 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 ā¤ļø

+[](https://argos-ci.com?utm_source=%5Bhomarr%5D&utm_campaign=oss)
diff --git a/next.config.js b/next.config.js
index c87a8ebb2..191310ecf 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 590c95722..46b6adf7a 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 000000000..051593223
--- /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 c76a4fae7..f7eacbbb2 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 cbf20088d..69f64f959 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 527c8dc97..d2480df66 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 88354cbf3..b1344cd5a 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 92593c986..19ba5f707 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 1562ab6e6..acbc09805 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 a190593eb..493455f10 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 6ece863de..6d2e2d2db 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 c37d5e132..493eec217 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 0ce4fcc65..f3e41152f 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 37046b5cf..333f3b542 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 84beeea59..5f8e671d5 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 cfbb998c9..ca39431c9 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 453131d1e..e9f90563f 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 9045676f2..bf3b6ef36 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 eecc45021..4ed9134f6 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 eb021a94c..21ad22500 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 7cf7abe4e..0f440f0bc 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<{}>) => {