diff --git a/src/Umbraco.Web.UI.Client/docs/authentication.md b/src/Umbraco.Web.UI.Client/docs/authentication.md index 2b24ac2369..e0376e9c24 100644 --- a/src/Umbraco.Web.UI.Client/docs/authentication.md +++ b/src/Umbraco.Web.UI.Client/docs/authentication.md @@ -34,7 +34,7 @@ There are two ways to use this: ```json "Umbraco": { "CMS": { - "NewBackOffice":{ + "Security":{ "BackOfficeHost": "http://localhost:5173", "AuthorizeCallbackPathName": "/" }, diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index defe78bf69..b303bab2c8 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@openid/appauth": "^1.3.1", "@types/dompurify": "^3.0.5", - "@types/uuid": "^9.0.7", + "@types/uuid": "^9.0.8", "@umbraco-ui/uui": "1.6.0-rc.3", "@umbraco-ui/uui-css": "1.6.0-rc.3", "dompurify": "^3.0.6", @@ -29,7 +29,7 @@ "@babel/core": "^7.22.17", "@mdx-js/react": "^2.3.0", "@open-wc/testing": "^3.2.0", - "@playwright/test": "^1.40.1", + "@playwright/test": "^1.41.1", "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^15.2.3", @@ -70,7 +70,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "remark-gfm": "^3.0.1", - "rollup": "^4.9.4", + "rollup": "^4.9.6", "rollup-plugin-esbuild": "^6.1.0", "rollup-plugin-import-css": "^3.4.0", "rollup-plugin-web-worker-loader": "^1.6.1", @@ -80,7 +80,7 @@ "typescript": "^5.3.3", "typescript-json-schema": "^0.62.0", "vite": "^5.0.11", - "vite-plugin-static-copy": "^1.0.0", + "vite-plugin-static-copy": "^1.0.1", "vite-tsconfig-paths": "^4.2.3", "web-component-analyzer": "^2.0.0" }, @@ -3379,12 +3379,12 @@ } }, "node_modules/@playwright/test": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.41.0.tgz", - "integrity": "sha512-Grvzj841THwtpBOrfiHOeYTJQxDRnKofMSzCiV8XeyLWu3o89qftQ4BCKfkziJhSUQRd0utKhrddtIsiraIwmw==", + "version": "1.41.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.41.1.tgz", + "integrity": "sha512-9g8EWTjiQ9yFBXc6HjCWe41msLpxEX0KhmfmPl9RPLJdfzL4F0lg2BdJ91O9azFdl11y1pmpwdjBiSxvqc+btw==", "dev": true, "dependencies": { - "playwright": "1.41.0" + "playwright": "1.41.1" }, "bin": { "playwright": "cli.js" @@ -4217,9 +4217,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.5.tgz", - "integrity": "sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", + "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==", "cpu": [ "arm" ], @@ -4230,9 +4230,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.5.tgz", - "integrity": "sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz", + "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==", "cpu": [ "arm64" ], @@ -4243,9 +4243,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.5.tgz", - "integrity": "sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz", + "integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==", "cpu": [ "arm64" ], @@ -4256,9 +4256,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.5.tgz", - "integrity": "sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz", + "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==", "cpu": [ "x64" ], @@ -4269,9 +4269,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.5.tgz", - "integrity": "sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz", + "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==", "cpu": [ "arm" ], @@ -4282,9 +4282,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.5.tgz", - "integrity": "sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz", + "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==", "cpu": [ "arm64" ], @@ -4295,9 +4295,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.5.tgz", - "integrity": "sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz", + "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==", "cpu": [ "arm64" ], @@ -4308,9 +4308,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.5.tgz", - "integrity": "sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz", + "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==", "cpu": [ "riscv64" ], @@ -4321,9 +4321,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz", - "integrity": "sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz", + "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==", "cpu": [ "x64" ], @@ -4334,9 +4334,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.5.tgz", - "integrity": "sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz", + "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==", "cpu": [ "x64" ], @@ -4347,9 +4347,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.5.tgz", - "integrity": "sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz", + "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==", "cpu": [ "arm64" ], @@ -4360,9 +4360,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.5.tgz", - "integrity": "sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz", + "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==", "cpu": [ "ia32" ], @@ -4373,9 +4373,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.5.tgz", - "integrity": "sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz", + "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==", "cpu": [ "x64" ], @@ -6416,9 +6416,9 @@ "dev": true }, "node_modules/@types/uuid": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz", - "integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==" + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==" }, "node_modules/@types/ws": { "version": "7.4.7", @@ -17639,12 +17639,12 @@ } }, "node_modules/playwright": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.41.0.tgz", - "integrity": "sha512-XOsfl5ZtAik/T9oek4V0jAypNlaCNzuKOwVhqhgYT3os6kH34PzbRb74F0VWcLYa5WFdnmxl7qyAHBXvPv7lqQ==", + "version": "1.41.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.41.1.tgz", + "integrity": "sha512-gdZAWG97oUnbBdRL3GuBvX3nDDmUOuqzV/D24dytqlKt+eI5KbwusluZRGljx1YoJKZ2NRPaeWiFTeGZO7SosQ==", "dev": true, "dependencies": { - "playwright-core": "1.41.0" + "playwright-core": "1.41.1" }, "bin": { "playwright": "cli.js" @@ -17657,9 +17657,9 @@ } }, "node_modules/playwright-core": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.41.0.tgz", - "integrity": "sha512-UGKASUhXmvqm2Lxa1fNr8sFwAtqjpgBRr9jQ7XBI8Rn5uFiEowGUGwrruUQsVPIom4bk7Lt+oLGpXobnXzrBIw==", + "version": "1.41.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.41.1.tgz", + "integrity": "sha512-/KPO5DzXSMlxSX77wy+HihKGOunh3hqndhqeo/nMxfigiKzogn8kfL0ZBDu0L1RKgan5XHCPmn6zXd2NUJgjhg==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -18932,9 +18932,9 @@ } }, "node_modules/rollup": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.5.tgz", - "integrity": "sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz", + "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -18947,19 +18947,19 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.9.5", - "@rollup/rollup-android-arm64": "4.9.5", - "@rollup/rollup-darwin-arm64": "4.9.5", - "@rollup/rollup-darwin-x64": "4.9.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.9.5", - "@rollup/rollup-linux-arm64-gnu": "4.9.5", - "@rollup/rollup-linux-arm64-musl": "4.9.5", - "@rollup/rollup-linux-riscv64-gnu": "4.9.5", - "@rollup/rollup-linux-x64-gnu": "4.9.5", - "@rollup/rollup-linux-x64-musl": "4.9.5", - "@rollup/rollup-win32-arm64-msvc": "4.9.5", - "@rollup/rollup-win32-ia32-msvc": "4.9.5", - "@rollup/rollup-win32-x64-msvc": "4.9.5", + "@rollup/rollup-android-arm-eabi": "4.9.6", + "@rollup/rollup-android-arm64": "4.9.6", + "@rollup/rollup-darwin-arm64": "4.9.6", + "@rollup/rollup-darwin-x64": "4.9.6", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.6", + "@rollup/rollup-linux-arm64-gnu": "4.9.6", + "@rollup/rollup-linux-arm64-musl": "4.9.6", + "@rollup/rollup-linux-riscv64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-musl": "4.9.6", + "@rollup/rollup-win32-arm64-msvc": "4.9.6", + "@rollup/rollup-win32-ia32-msvc": "4.9.6", + "@rollup/rollup-win32-x64-msvc": "4.9.6", "fsevents": "~2.3.2" } }, @@ -21328,9 +21328,9 @@ } }, "node_modules/vite-plugin-static-copy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-1.0.0.tgz", - "integrity": "sha512-kMlrB3WDtC5GzFedNIPkpjnOAr8M11PfWOiUaONrUZ3AqogTsOmIhTt6w7Fh311wl8pN81ld7sfuOEogFJ9N8A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-1.0.1.tgz", + "integrity": "sha512-3eGL4mdZoPJMDBT68pv/XKIHR4MgVolStIxxv1gIBP4R8TpHn9C9EnaU0hesqlseJ4ycLGUxckFTu/jpuJXQlA==", "dev": true, "dependencies": { "chokidar": "^3.5.3", diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index a756f55069..30a36f3953 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -31,7 +31,6 @@ "./extension-registry": "./dist-cms/packages/core/extension-registry/index.js", "./id": "./dist-cms/packages/core/id/index.js", "./localization": "./dist-cms/packages/core/localization/index.js", - "./macro": "./dist-cms/packages/core/macro/index.js", "./menu": "./dist-cms/packages/core/menu/index.js", "./modal": "./dist-cms/packages/core/modal/index.js", "./notification": "./dist-cms/packages/core/notification/index.js", @@ -139,7 +138,7 @@ "dependencies": { "@openid/appauth": "^1.3.1", "@types/dompurify": "^3.0.5", - "@types/uuid": "^9.0.7", + "@types/uuid": "^9.0.8", "@umbraco-ui/uui": "1.6.0-rc.3", "@umbraco-ui/uui-css": "1.6.0-rc.3", "dompurify": "^3.0.6", @@ -157,7 +156,7 @@ "@babel/core": "^7.22.17", "@mdx-js/react": "^2.3.0", "@open-wc/testing": "^3.2.0", - "@playwright/test": "^1.40.1", + "@playwright/test": "^1.41.1", "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^15.2.3", @@ -198,7 +197,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "remark-gfm": "^3.0.1", - "rollup": "^4.9.4", + "rollup": "^4.9.6", "rollup-plugin-esbuild": "^6.1.0", "rollup-plugin-import-css": "^3.4.0", "rollup-plugin-web-worker-loader": "^1.6.1", @@ -208,7 +207,7 @@ "typescript": "^5.3.3", "typescript-json-schema": "^0.62.0", "vite": "^5.0.11", - "vite-plugin-static-copy": "^1.0.0", + "vite-plugin-static-copy": "^1.0.1", "vite-tsconfig-paths": "^4.2.3", "web-component-analyzer": "^2.0.0" }, diff --git a/src/Umbraco.Web.UI.Client/public-assets/css/rte-content.css b/src/Umbraco.Web.UI.Client/public-assets/css/rte-content.css deleted file mode 100644 index 34ea2b3c77..0000000000 --- a/src/Umbraco.Web.UI.Client/public-assets/css/rte-content.css +++ /dev/null @@ -1,42 +0,0 @@ -.umb-macro-holder { - border: 3px dotted var(--uui-palette-spanish-pink-light); - padding: 7px; - display: block; - margin: 3px; -} - -.umb-macro-holder.loading { - background: url(assets/img/loader.gif) right no-repeat; - background-size: 18px; - background-position-x: 99%; -} - -.umb-embed-holder { - position: relative; -} - -.umb-embed-holder>* { - user-select: none; - pointer-events: none; -} - -.umb-embed-holder[data-mce-selected] { - outline: 2px solid var(--uui-palette-spanish-pink-light); -} - -.umb-embed-holder::before { - z-index: 1000; - width: 100%; - height: 100%; - position: absolute; - content: ' '; -} - -.umb-embed-holder[data-mce-selected]::before { - background: rgba(0, 0, 0, 0.025); -} - -*[data-mce-selected='inline-boundary'] { - background: rgba(0, 0, 0, 0.025); - outline: 2px solid var(--uui-palette-spanish-pink-light); -} \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts index d3b00b4443..9a5db47c5d 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts @@ -3217,7 +3217,7 @@ export default { minimalLevelDescription: 'We will only send an anonymized site ID to let us know that the site exists.', basicLevelDescription: 'We will send an anonymized site ID, Umbraco version, and packages installed', detailedLevelDescription: - '\n We will send:\n \n We might change what we send on the Detailed level in the future. If so, it will be listed above.\n
By choosing "Detailed" you agree to current and future anonymized information being collected.
\n ', + '\n We will send:\n \n We might change what we send on the Detailed level in the future. If so, it will be listed above.\n
By choosing "Detailed" you agree to current and future anonymized information being collected.
\n ', }, umbId: { editProfile: 'Edit your Umbraco ID profile', diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts index 6dce152d56..1c05c9a743 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts @@ -1522,7 +1522,7 @@ export default { addGroup: 'Add group', inheritedFrom: 'Inherited from', addProperty: 'Add property', - editProperty : 'Edit property', + editProperty: 'Edit property', requiredLabel: 'Required label', enableListViewHeading: 'Enable list view', enableListViewDescription: @@ -2470,7 +2470,7 @@ export default { minimalLevelDescription: 'We will only send an anonymized site ID to let us know that the site exists.', basicLevelDescription: 'We will send an anonymized site ID, Umbraco version, and packages installed', detailedLevelDescription: - '\n We will send:\n \n We might change what we send on the Detailed level in the future. If so, it will be listed above.\n
By choosing "Detailed" you agree to current and future anonymized information being collected.
\n ', + '\n We will send:\n \n We might change what we send on the Detailed level in the future. If so, it will be listed above.\n
By choosing "Detailed" you agree to current and future anonymized information being collected.
\n ', }, umbId: { editProfile: 'Edit your Umbraco ID profile', diff --git a/src/Umbraco.Web.UI.Client/src/css/rte-content.css b/src/Umbraco.Web.UI.Client/src/css/rte-content.css new file mode 100644 index 0000000000..2e6d1c23dc --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/css/rte-content.css @@ -0,0 +1,49 @@ +.umb-macro-holder { + border: 3px dotted red; + padding: 7px; + margin: 3px; + display: block; + position: relative; +} + +.umb-macro-holder::after { + content: 'Macros are no longer supported. Please use the block picker instead.'; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + color: white; + background-color: rgba(0, 0, 0, 0.7); + padding: 10px; + border-radius: 5px; +} + +.umb-embed-holder { + position: relative; +} + +.umb-embed-holder > * { + user-select: none; + pointer-events: none; +} + +.umb-embed-holder[data-mce-selected] { + outline: 2px solid var(--uui-palette-spanish-pink-light); +} + +.umb-embed-holder::before { + z-index: 1000; + width: 100%; + height: 100%; + position: absolute; + content: ' '; +} + +.umb-embed-holder[data-mce-selected]::before { + background: rgba(0, 0, 0, 0.025); +} + +*[data-mce-selected='inline-boundary'] { + background: rgba(0, 0, 0, 0.025); + outline: 2px solid var(--uui-palette-spanish-pink-light); +} diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/index.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/index.ts index 74c14bcd08..161690f058 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/index.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/index.ts @@ -7,6 +7,9 @@ export { CancelablePromise, CancelError } from './core/CancelablePromise'; export { OpenAPI } from './core/OpenAPI'; export type { OpenAPIConfig } from './core/OpenAPI'; +export type { AllowedContentTypeModel } from './models/AllowedContentTypeModel'; +export type { AllowedDocumentTypeModel } from './models/AllowedDocumentTypeModel'; +export type { AllowedMediaTypeModel } from './models/AllowedMediaTypeModel'; export type { AuditLogBaseModel } from './models/AuditLogBaseModel'; export type { AuditLogResponseModel } from './models/AuditLogResponseModel'; export type { AuditLogWithUsernameResponseModel } from './models/AuditLogWithUsernameResponseModel'; @@ -15,18 +18,18 @@ export type { AvailableContentTypeCompositionResponseModelBaseModel } from './mo export type { AvailableDocumentTypeCompositionResponseModel } from './models/AvailableDocumentTypeCompositionResponseModel'; export type { AvailableMediaTypeCompositionResponseModel } from './models/AvailableMediaTypeCompositionResponseModel'; export type { ChangePasswordUserRequestModel } from './models/ChangePasswordUserRequestModel'; +export { CompositionTypeModel } from './models/CompositionTypeModel'; export type { ConsentLevelPresentationModel } from './models/ConsentLevelPresentationModel'; export type { ContentForDocumentResponseModel } from './models/ContentForDocumentResponseModel'; +export type { ContentForMediaResponseModel } from './models/ContentForMediaResponseModel'; export { ContentStateModel } from './models/ContentStateModel'; export type { ContentTreeItemResponseModel } from './models/ContentTreeItemResponseModel'; export type { ContentTypeCleanupModel } from './models/ContentTypeCleanupModel'; -export type { ContentTypeCompositionModel } from './models/ContentTypeCompositionModel'; export type { ContentTypeCompositionRequestModelBaseModel } from './models/ContentTypeCompositionRequestModelBaseModel'; export type { ContentTypeCompositionResponseModelBaseModel } from './models/ContentTypeCompositionResponseModelBaseModel'; -export { ContentTypeCompositionTypeModel } from './models/ContentTypeCompositionTypeModel'; export type { ContentTypeForDocumentTypeResponseModel } from './models/ContentTypeForDocumentTypeResponseModel'; export type { ContentTypeForMediaTypeResponseModel } from './models/ContentTypeForMediaTypeResponseModel'; -export type { ContentTypeSortModel } from './models/ContentTypeSortModel'; +export type { ContentTypeReferenceResponseModelBaseModel } from './models/ContentTypeReferenceResponseModelBaseModel'; export type { ContentUrlInfoModel } from './models/ContentUrlInfoModel'; export type { CopyDataTypeRequestModel } from './models/CopyDataTypeRequestModel'; export type { CopyDocumentRequestModel } from './models/CopyDocumentRequestModel'; @@ -66,6 +69,8 @@ export type { CurrentUserResponseModel } from './models/CurrentUserResponseModel export type { CurrenUserConfigurationResponseModel } from './models/CurrenUserConfigurationResponseModel'; export type { DatabaseInstallResponseModel } from './models/DatabaseInstallResponseModel'; export type { DatabaseSettingsPresentationModel } from './models/DatabaseSettingsPresentationModel'; +export { DataTypeChangeModeModel } from './models/DataTypeChangeModeModel'; +export type { DatatypeConfigurationResponseModel } from './models/DatatypeConfigurationResponseModel'; export type { DataTypeItemResponseModel } from './models/DataTypeItemResponseModel'; export type { DataTypeModelBaseModel } from './models/DataTypeModelBaseModel'; export type { DataTypePropertyPresentationModel } from './models/DataTypePropertyPresentationModel'; @@ -84,18 +89,25 @@ export { DirectionModel } from './models/DirectionModel'; export type { DisableUserRequestModel } from './models/DisableUserRequestModel'; export type { DocumentBlueprintResponseModel } from './models/DocumentBlueprintResponseModel'; export type { DocumentBlueprintTreeItemResponseModel } from './models/DocumentBlueprintTreeItemResponseModel'; +export type { DocumentConfigurationResponseModel } from './models/DocumentConfigurationResponseModel'; export type { DocumentItemResponseModel } from './models/DocumentItemResponseModel'; export type { DocumentNotificationResponseModel } from './models/DocumentNotificationResponseModel'; +export type { DocumentRecycleBinItemResponseModel } from './models/DocumentRecycleBinItemResponseModel'; export type { DocumentResponseModel } from './models/DocumentResponseModel'; export type { DocumentTreeItemResponseModel } from './models/DocumentTreeItemResponseModel'; +export type { DocumentTypeCompositionModel } from './models/DocumentTypeCompositionModel'; export type { DocumentTypeCompositionRequestModel } from './models/DocumentTypeCompositionRequestModel'; export type { DocumentTypeCompositionResponseModel } from './models/DocumentTypeCompositionResponseModel'; +export type { DocumentTypeConfigurationResponseModel } from './models/DocumentTypeConfigurationResponseModel'; export type { DocumentTypeItemResponseModel } from './models/DocumentTypeItemResponseModel'; export type { DocumentTypePropertyTypeContainerResponseModel } from './models/DocumentTypePropertyTypeContainerResponseModel'; export type { DocumentTypePropertyTypeResponseModel } from './models/DocumentTypePropertyTypeResponseModel'; +export type { DocumentTypeReferenceResponseModel } from './models/DocumentTypeReferenceResponseModel'; export type { DocumentTypeResponseModel } from './models/DocumentTypeResponseModel'; +export type { DocumentTypeSortModel } from './models/DocumentTypeSortModel'; export type { DocumentTypeTreeItemResponseModel } from './models/DocumentTypeTreeItemResponseModel'; export type { DocumentValueModel } from './models/DocumentValueModel'; +export type { DocumentVariantItemResponseModel } from './models/DocumentVariantItemResponseModel'; export type { DocumentVariantRequestModel } from './models/DocumentVariantRequestModel'; export type { DocumentVariantResponseModel } from './models/DocumentVariantResponseModel'; export type { DomainPresentationModel } from './models/DomainPresentationModel'; @@ -107,6 +119,7 @@ export type { DynamicRootQueryRequestModel } from './models/DynamicRootQueryRequ export type { DynamicRootQueryStepRequestModel } from './models/DynamicRootQueryStepRequestModel'; export type { DynamicRootRequestModel } from './models/DynamicRootRequestModel'; export type { DynamicRootResponseModel } from './models/DynamicRootResponseModel'; +export type { EnableTwoFactorRequestModel } from './models/EnableTwoFactorRequestModel'; export type { EnableUserRequestModel } from './models/EnableUserRequestModel'; export type { EntityTreeItemResponseModel } from './models/EntityTreeItemResponseModel'; export type { FieldPresentationModel } from './models/FieldPresentationModel'; @@ -139,6 +152,7 @@ export type { IndexResponseModel } from './models/IndexResponseModel'; export type { InstallSettingsResponseModel } from './models/InstallSettingsResponseModel'; export type { InstallVResponseModel } from './models/InstallVResponseModel'; export type { InviteUserRequestModel } from './models/InviteUserRequestModel'; +export type { ItemReferenceByIdResponseModel } from './models/ItemReferenceByIdResponseModel'; export type { ItemResponseModelBaseModel } from './models/ItemResponseModelBaseModel'; export type { ItemSortingRequestModel } from './models/ItemSortingRequestModel'; export type { LanguageItemResponseModel } from './models/LanguageItemResponseModel'; @@ -152,14 +166,20 @@ export { LogLevelModel } from './models/LogLevelModel'; export type { LogMessagePropertyPresentationModel } from './models/LogMessagePropertyPresentationModel'; export type { LogMessageResponseModel } from './models/LogMessageResponseModel'; export type { LogTemplateResponseModel } from './models/LogTemplateResponseModel'; +export type { MediaConfigurationResponseModel } from './models/MediaConfigurationResponseModel'; export type { MediaItemResponseModel } from './models/MediaItemResponseModel'; +export type { MediaRecycleBinItemResponseModel } from './models/MediaRecycleBinItemResponseModel'; +export type { MediaResponseModel } from './models/MediaResponseModel'; export type { MediaTreeItemResponseModel } from './models/MediaTreeItemResponseModel'; +export type { MediaTypeCompositionModel } from './models/MediaTypeCompositionModel'; export type { MediaTypeCompositionRequestModel } from './models/MediaTypeCompositionRequestModel'; export type { MediaTypeCompositionResponseModel } from './models/MediaTypeCompositionResponseModel'; export type { MediaTypeItemResponseModel } from './models/MediaTypeItemResponseModel'; export type { MediaTypePropertyTypeContainerResponseModel } from './models/MediaTypePropertyTypeContainerResponseModel'; export type { MediaTypePropertyTypeResponseModel } from './models/MediaTypePropertyTypeResponseModel'; +export type { MediaTypeReferenceResponseModel } from './models/MediaTypeReferenceResponseModel'; export type { MediaTypeResponseModel } from './models/MediaTypeResponseModel'; +export type { MediaTypeSortModel } from './models/MediaTypeSortModel'; export type { MediaTypeTreeItemResponseModel } from './models/MediaTypeTreeItemResponseModel'; export type { MediaValueModel } from './models/MediaValueModel'; export type { MediaVariantRequestModel } from './models/MediaVariantRequestModel'; @@ -175,25 +195,30 @@ export type { MoveDocumentRequestModel } from './models/MoveDocumentRequestModel export type { MoveDocumentTypeRequestModel } from './models/MoveDocumentTypeRequestModel'; export type { MoveMediaRequestModel } from './models/MoveMediaRequestModel'; export type { MoveMediaTypeRequestModel } from './models/MoveMediaTypeRequestModel'; +export type { NamedEntityTreeItemResponseModel } from './models/NamedEntityTreeItemResponseModel'; +export type { NamedItemResponseModelBaseModel } from './models/NamedItemResponseModelBaseModel'; +export type { NoopSetupTwoFactorModel } from './models/NoopSetupTwoFactorModel'; export type { ObjectTypeResponseModel } from './models/ObjectTypeResponseModel'; export type { OkResult } from './models/OkResult'; export { OperatorModel } from './models/OperatorModel'; export type { OutOfDateStatusResponseModel } from './models/OutOfDateStatusResponseModel'; export { OutOfDateTypeModel } from './models/OutOfDateTypeModel'; +export type { PackageConfigurationResponseModel } from './models/PackageConfigurationResponseModel'; export type { PackageDefinitionResponseModel } from './models/PackageDefinitionResponseModel'; export type { PackageManifestResponseModel } from './models/PackageManifestResponseModel'; export type { PackageMigrationStatusResponseModel } from './models/PackageMigrationStatusResponseModel'; export type { PackageModelBaseModel } from './models/PackageModelBaseModel'; +export type { PagedAllowedDocumentTypeModel } from './models/PagedAllowedDocumentTypeModel'; +export type { PagedAllowedMediaTypeModel } from './models/PagedAllowedMediaTypeModel'; export type { PagedAuditLogResponseModel } from './models/PagedAuditLogResponseModel'; export type { PagedAuditLogWithUsernameResponseModel } from './models/PagedAuditLogWithUsernameResponseModel'; export type { PagedCultureReponseModel } from './models/PagedCultureReponseModel'; export type { PagedDataTypeTreeItemResponseModel } from './models/PagedDataTypeTreeItemResponseModel'; export type { PagedDictionaryOverviewResponseModel } from './models/PagedDictionaryOverviewResponseModel'; export type { PagedDocumentBlueprintTreeItemResponseModel } from './models/PagedDocumentBlueprintTreeItemResponseModel'; +export type { PagedDocumentRecycleBinItemResponseModel } from './models/PagedDocumentRecycleBinItemResponseModel'; export type { PagedDocumentTreeItemResponseModel } from './models/PagedDocumentTreeItemResponseModel'; -export type { PagedDocumentTypeResponseModel } from './models/PagedDocumentTypeResponseModel'; export type { PagedDocumentTypeTreeItemResponseModel } from './models/PagedDocumentTypeTreeItemResponseModel'; -export type { PagedEntityTreeItemResponseModel } from './models/PagedEntityTreeItemResponseModel'; export type { PagedFileSystemTreeItemPresentationModel } from './models/PagedFileSystemTreeItemPresentationModel'; export type { PagedHealthCheckGroupResponseModel } from './models/PagedHealthCheckGroupResponseModel'; export type { PagedHelpPageResponseModel } from './models/PagedHelpPageResponseModel'; @@ -202,14 +227,15 @@ export type { PagedLanguageResponseModel } from './models/PagedLanguageResponseM export type { PagedLoggerResponseModel } from './models/PagedLoggerResponseModel'; export type { PagedLogMessageResponseModel } from './models/PagedLogMessageResponseModel'; export type { PagedLogTemplateResponseModel } from './models/PagedLogTemplateResponseModel'; +export type { PagedMediaRecycleBinItemResponseModel } from './models/PagedMediaRecycleBinItemResponseModel'; export type { PagedMediaTreeItemResponseModel } from './models/PagedMediaTreeItemResponseModel'; export type { PagedMediaTypeTreeItemResponseModel } from './models/PagedMediaTypeTreeItemResponseModel'; +export type { PagedNamedEntityTreeItemResponseModel } from './models/PagedNamedEntityTreeItemResponseModel'; export type { PagedObjectTypeResponseModel } from './models/PagedObjectTypeResponseModel'; export type { PagedPackageDefinitionResponseModel } from './models/PagedPackageDefinitionResponseModel'; export type { PagedPackageMigrationStatusResponseModel } from './models/PagedPackageMigrationStatusResponseModel'; export type { PagedPartialViewSnippetItemResponseModel } from './models/PagedPartialViewSnippetItemResponseModel'; export type { PagedProblemDetailsModel } from './models/PagedProblemDetailsModel'; -export type { PagedRecycleBinItemResponseModel } from './models/PagedRecycleBinItemResponseModel'; export type { PagedRedirectUrlResponseModel } from './models/PagedRedirectUrlResponseModel'; export type { PagedRelationItemResponseModel } from './models/PagedRelationItemResponseModel'; export type { PagedRelationResponseModel } from './models/PagedRelationResponseModel'; @@ -239,11 +265,11 @@ export type { PublicAccessRequestModel } from './models/PublicAccessRequestModel export type { PublicAccessResponseModel } from './models/PublicAccessResponseModel'; export type { PublishDocumentRequestModel } from './models/PublishDocumentRequestModel'; export type { PublishDocumentWithDescendantsRequestModel } from './models/PublishDocumentWithDescendantsRequestModel'; -export { PublishedStateModel } from './models/PublishedStateModel'; -export type { RecycleBinItemResponseModel } from './models/RecycleBinItemResponseModel'; +export type { RecycleBinItemResponseModelBaseModel } from './models/RecycleBinItemResponseModelBaseModel'; export { RedirectStatusModel } from './models/RedirectStatusModel'; export type { RedirectUrlResponseModel } from './models/RedirectUrlResponseModel'; export type { RedirectUrlStatusResponseModel } from './models/RedirectUrlStatusResponseModel'; +export type { ReferenceByIdModel } from './models/ReferenceByIdModel'; export type { RelationItemResponseModel } from './models/RelationItemResponseModel'; export type { RelationResponseModel } from './models/RelationResponseModel'; export type { RelationTypeBaseModel } from './models/RelationTypeBaseModel'; @@ -285,6 +311,7 @@ export { TelemetryLevelModel } from './models/TelemetryLevelModel'; export type { TelemetryRepresentationBaseModel } from './models/TelemetryRepresentationBaseModel'; export type { TelemetryRequestModel } from './models/TelemetryRequestModel'; export type { TelemetryResponseModel } from './models/TelemetryResponseModel'; +export type { TemplateConfigurationResponseModel } from './models/TemplateConfigurationResponseModel'; export type { TemplateItemResponseModel } from './models/TemplateItemResponseModel'; export type { TemplateModelBaseModel } from './models/TemplateModelBaseModel'; export type { TemplateQueryExecuteFilterPresentationModel } from './models/TemplateQueryExecuteFilterPresentationModel'; @@ -345,10 +372,12 @@ export type { UserResponseModel } from './models/UserResponseModel'; export type { UserSettingsModel } from './models/UserSettingsModel'; export { UserStateModel } from './models/UserStateModel'; export type { UserTourStatusesResponseModel } from './models/UserTourStatusesResponseModel'; +export type { UserTwoFactorProviderModel } from './models/UserTwoFactorProviderModel'; export type { ValueModelBaseModel } from './models/ValueModelBaseModel'; +export type { VariantItemResponseModel } from './models/VariantItemResponseModel'; +export type { VariantItemResponseModelBaseModel } from './models/VariantItemResponseModelBaseModel'; export type { VariantModelBaseModel } from './models/VariantModelBaseModel'; export type { VariantResponseModelBaseModel } from './models/VariantResponseModelBaseModel'; -export type { VariantTreeItemModel } from './models/VariantTreeItemModel'; export type { VerifyInviteUserRequestModel } from './models/VerifyInviteUserRequestModel'; export type { VerifyResetPasswordTokenRequestModel } from './models/VerifyResetPasswordTokenRequestModel'; diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RecycleBinItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/AllowedContentTypeModel.ts similarity index 51% rename from src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RecycleBinItemResponseModel.ts rename to src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/AllowedContentTypeModel.ts index 649ee88473..c7197ce531 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RecycleBinItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/AllowedContentTypeModel.ts @@ -3,12 +3,10 @@ /* tslint:disable */ /* eslint-disable */ -export type RecycleBinItemResponseModel = { +export type AllowedContentTypeModel = { id: string; name: string; - type: string; - icon: string; - hasChildren: boolean; - isContainer: boolean; - parentId?: string | null; + description?: string | null; + icon?: string | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/AllowedDocumentTypeModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/AllowedDocumentTypeModel.ts new file mode 100644 index 0000000000..1762891713 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/AllowedDocumentTypeModel.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { AllowedContentTypeModel } from './AllowedContentTypeModel'; + +export type AllowedDocumentTypeModel = AllowedContentTypeModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/AllowedMediaTypeModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/AllowedMediaTypeModel.ts new file mode 100644 index 0000000000..49ce218c3a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/AllowedMediaTypeModel.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { AllowedContentTypeModel } from './AllowedContentTypeModel'; + +export type AllowedMediaTypeModel = AllowedContentTypeModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/AuditLogBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/AuditLogBaseModel.ts index 6338db587b..e68127bc22 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/AuditLogBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/AuditLogBaseModel.ts @@ -14,3 +14,4 @@ export type AuditLogBaseModel = { comment?: string | null; parameters?: string | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/AuditLogResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/AuditLogResponseModel.ts index c9fed6801b..4ecddd6605 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/AuditLogResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/AuditLogResponseModel.ts @@ -6,3 +6,4 @@ import type { AuditLogBaseModel } from './AuditLogBaseModel'; export type AuditLogResponseModel = AuditLogBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/AuditLogWithUsernameResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/AuditLogWithUsernameResponseModel.ts index aa10559144..2ee1c4acc5 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/AuditLogWithUsernameResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/AuditLogWithUsernameResponseModel.ts @@ -6,6 +6,7 @@ import type { AuditLogBaseModel } from './AuditLogBaseModel'; export type AuditLogWithUsernameResponseModel = (AuditLogBaseModel & { -userName?: string | null; -userAvatars: Array; + userName?: string | null; + userAvatars: Array; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ChangePasswordUserRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ChangePasswordUserRequestModel.ts index ce2f7c5bab..9a435d14d3 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ChangePasswordUserRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ChangePasswordUserRequestModel.ts @@ -7,3 +7,4 @@ export type ChangePasswordUserRequestModel = { newPassword: string; oldPassword?: string | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeCompositionTypeModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CompositionTypeModel.ts similarity index 81% rename from src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeCompositionTypeModel.ts rename to src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CompositionTypeModel.ts index 5e0b6b596f..63dfdae1e6 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeCompositionTypeModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CompositionTypeModel.ts @@ -3,7 +3,7 @@ /* tslint:disable */ /* eslint-disable */ -export enum ContentTypeCompositionTypeModel { +export enum CompositionTypeModel { COMPOSITION = 'Composition', INHERITANCE = 'Inheritance', } diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ConsentLevelPresentationModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ConsentLevelPresentationModel.ts index ae6d68b1d2..1df32f48de 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ConsentLevelPresentationModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ConsentLevelPresentationModel.ts @@ -9,3 +9,4 @@ export type ConsentLevelPresentationModel = { level: TelemetryLevelModel; description: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentForDocumentResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentForDocumentResponseModel.ts index 863793e02e..e248810d0d 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentForDocumentResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentForDocumentResponseModel.ts @@ -10,5 +10,5 @@ export type ContentForDocumentResponseModel = { values: Array; variants: Array; id: string; - contentTypeId: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentForMediaResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentForMediaResponseModel.ts new file mode 100644 index 0000000000..5f4b42be51 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentForMediaResponseModel.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { MediaValueModel } from './MediaValueModel'; +import type { MediaVariantResponseModel } from './MediaVariantResponseModel'; + +export type ContentForMediaResponseModel = { + values: Array; + variants: Array; + id: string; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTreeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTreeItemResponseModel.ts index d1347bae1f..c9a0e89dc4 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTreeItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTreeItemResponseModel.ts @@ -6,7 +6,8 @@ import type { EntityTreeItemResponseModel } from './EntityTreeItemResponseModel'; export type ContentTreeItemResponseModel = (EntityTreeItemResponseModel & { -noAccess: boolean; -isTrashed: boolean; -id: string; + noAccess: boolean; + isTrashed: boolean; + id: string; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeCleanupModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeCleanupModel.ts index 9e03330e73..ba8199a31c 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeCleanupModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeCleanupModel.ts @@ -8,3 +8,4 @@ export type ContentTypeCleanupModel = { keepAllVersionsNewerThanDays?: number | null; keepLatestVersionPerDayForDays?: number | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeCompositionModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeCompositionModel.ts deleted file mode 100644 index 9812ade9ed..0000000000 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeCompositionModel.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -import type { ContentTypeCompositionTypeModel } from './ContentTypeCompositionTypeModel'; - -export type ContentTypeCompositionModel = { - id: string; - compositionType: ContentTypeCompositionTypeModel; -}; diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeCompositionResponseModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeCompositionResponseModelBaseModel.ts index 48bcb91f60..8de2c0f47e 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeCompositionResponseModelBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeCompositionResponseModelBaseModel.ts @@ -8,3 +8,4 @@ export type ContentTypeCompositionResponseModelBaseModel = { name: string; icon: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeForDocumentTypeResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeForDocumentTypeResponseModel.ts index f0f65e483c..f5b3816589 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeForDocumentTypeResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeForDocumentTypeResponseModel.ts @@ -3,8 +3,6 @@ /* tslint:disable */ /* eslint-disable */ -import type { ContentTypeCompositionModel } from './ContentTypeCompositionModel'; -import type { ContentTypeSortModel } from './ContentTypeSortModel'; import type { DocumentTypePropertyTypeContainerResponseModel } from './DocumentTypePropertyTypeContainerResponseModel'; import type { DocumentTypePropertyTypeResponseModel } from './DocumentTypePropertyTypeResponseModel'; @@ -19,7 +17,6 @@ export type ContentTypeForDocumentTypeResponseModel = { isElement: boolean; properties: Array; containers: Array; - allowedContentTypes: Array; - compositions: Array; id: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeForMediaTypeResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeForMediaTypeResponseModel.ts index 9d7e5d3f9d..457df240bc 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeForMediaTypeResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeForMediaTypeResponseModel.ts @@ -3,8 +3,6 @@ /* tslint:disable */ /* eslint-disable */ -import type { ContentTypeCompositionModel } from './ContentTypeCompositionModel'; -import type { ContentTypeSortModel } from './ContentTypeSortModel'; import type { MediaTypePropertyTypeContainerResponseModel } from './MediaTypePropertyTypeContainerResponseModel'; import type { MediaTypePropertyTypeResponseModel } from './MediaTypePropertyTypeResponseModel'; @@ -19,7 +17,6 @@ export type ContentTypeForMediaTypeResponseModel = { isElement: boolean; properties: Array; containers: Array; - allowedContentTypes: Array; - compositions: Array; id: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeReferenceResponseModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeReferenceResponseModelBaseModel.ts new file mode 100644 index 0000000000..a6e3ce7d8b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeReferenceResponseModelBaseModel.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type ContentTypeReferenceResponseModelBaseModel = { + id: string; + icon: string; + hasListView: boolean; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentUrlInfoModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentUrlInfoModel.ts index bdd424a485..435ff9dd73 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentUrlInfoModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentUrlInfoModel.ts @@ -7,3 +7,4 @@ export type ContentUrlInfoModel = { culture?: string | null; url: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CopyDataTypeRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CopyDataTypeRequestModel.ts index 17a312c5b2..0a4d58fe70 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CopyDataTypeRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CopyDataTypeRequestModel.ts @@ -6,3 +6,4 @@ export type CopyDataTypeRequestModel = { targetId?: string | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CopyDocumentRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CopyDocumentRequestModel.ts index 625a011400..828849c9ac 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CopyDocumentRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CopyDocumentRequestModel.ts @@ -3,8 +3,11 @@ /* tslint:disable */ /* eslint-disable */ +import type { ReferenceByIdModel } from './ReferenceByIdModel'; + export type CopyDocumentRequestModel = { - targetId?: string | null; + target?: ReferenceByIdModel | null; relateToOriginal: boolean; includeDescendants: boolean; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CopyDocumentTypeRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CopyDocumentTypeRequestModel.ts index 54a1580100..346920d256 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CopyDocumentTypeRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CopyDocumentTypeRequestModel.ts @@ -3,6 +3,9 @@ /* tslint:disable */ /* eslint-disable */ +import type { ReferenceByIdModel } from './ReferenceByIdModel'; + export type CopyDocumentTypeRequestModel = { - targetId?: string | null; + target?: ReferenceByIdModel | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CopyMediaTypeRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CopyMediaTypeRequestModel.ts index 03b5dbcb8e..943722db52 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CopyMediaTypeRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CopyMediaTypeRequestModel.ts @@ -3,7 +3,9 @@ /* tslint:disable */ /* eslint-disable */ +import type { ReferenceByIdModel } from './ReferenceByIdModel'; + export type CopyMediaTypeRequestModel = { - targetId?: string | null; + target?: ReferenceByIdModel | null; }; diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateContentForDocumentRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateContentForDocumentRequestModel.ts index eccb38a6ea..b8ab5e9b48 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateContentForDocumentRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateContentForDocumentRequestModel.ts @@ -5,10 +5,12 @@ import type { DocumentValueModel } from './DocumentValueModel'; import type { DocumentVariantRequestModel } from './DocumentVariantRequestModel'; +import type { ReferenceByIdModel } from './ReferenceByIdModel'; export type CreateContentForDocumentRequestModel = { values: Array; variants: Array; id?: string | null; - parentId?: string | null; + parent?: ReferenceByIdModel | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateContentForMediaRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateContentForMediaRequestModel.ts index 028bd92d74..252171141b 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateContentForMediaRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateContentForMediaRequestModel.ts @@ -5,10 +5,12 @@ import type { MediaValueModel } from './MediaValueModel'; import type { MediaVariantRequestModel } from './MediaVariantRequestModel'; +import type { ReferenceByIdModel } from './ReferenceByIdModel'; export type CreateContentForMediaRequestModel = { values: Array; variants: Array; id?: string | null; - parentId?: string | null; + parent?: ReferenceByIdModel | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateContentTypeForDocumentTypeRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateContentTypeForDocumentTypeRequestModel.ts index 9179609311..fa26c2f097 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateContentTypeForDocumentTypeRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateContentTypeForDocumentTypeRequestModel.ts @@ -3,10 +3,9 @@ /* tslint:disable */ /* eslint-disable */ -import type { ContentTypeCompositionModel } from './ContentTypeCompositionModel'; -import type { ContentTypeSortModel } from './ContentTypeSortModel'; import type { CreateDocumentTypePropertyTypeContainerRequestModel } from './CreateDocumentTypePropertyTypeContainerRequestModel'; import type { CreateDocumentTypePropertyTypeRequestModel } from './CreateDocumentTypePropertyTypeRequestModel'; +import type { ReferenceByIdModel } from './ReferenceByIdModel'; export type CreateContentTypeForDocumentTypeRequestModel = { alias: string; @@ -19,8 +18,7 @@ export type CreateContentTypeForDocumentTypeRequestModel = { isElement: boolean; properties: Array; containers: Array; - allowedContentTypes: Array; - compositions: Array; id?: string | null; - containerId?: string | null; + folder?: ReferenceByIdModel | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateContentTypeForMediaTypeRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateContentTypeForMediaTypeRequestModel.ts index 390ce03ac1..16d446f260 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateContentTypeForMediaTypeRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateContentTypeForMediaTypeRequestModel.ts @@ -3,10 +3,9 @@ /* tslint:disable */ /* eslint-disable */ -import type { ContentTypeCompositionModel } from './ContentTypeCompositionModel'; -import type { ContentTypeSortModel } from './ContentTypeSortModel'; import type { CreateMediaTypePropertyTypeContainerRequestModel } from './CreateMediaTypePropertyTypeContainerRequestModel'; import type { CreateMediaTypePropertyTypeRequestModel } from './CreateMediaTypePropertyTypeRequestModel'; +import type { ReferenceByIdModel } from './ReferenceByIdModel'; export type CreateContentTypeForMediaTypeRequestModel = { alias: string; @@ -19,8 +18,7 @@ export type CreateContentTypeForMediaTypeRequestModel = { isElement: boolean; properties: Array; containers: Array; - allowedContentTypes: Array; - compositions: Array; id?: string | null; - containerId?: string | null; + folder?: ReferenceByIdModel | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDataTypeRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDataTypeRequestModel.ts index 2c82e8c591..521fae8673 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDataTypeRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDataTypeRequestModel.ts @@ -6,6 +6,7 @@ import type { DataTypeModelBaseModel } from './DataTypeModelBaseModel'; export type CreateDataTypeRequestModel = (DataTypeModelBaseModel & { -id?: string | null; -parentId?: string | null; + id?: string | null; + parentId?: string | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDictionaryItemRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDictionaryItemRequestModel.ts index 7ee00666fb..ee60863e59 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDictionaryItemRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDictionaryItemRequestModel.ts @@ -6,6 +6,7 @@ import type { DictionaryItemModelBaseModel } from './DictionaryItemModelBaseModel'; export type CreateDictionaryItemRequestModel = (DictionaryItemModelBaseModel & { -id?: string | null; -parentId?: string | null; + id?: string | null; + parentId?: string | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDocumentRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDocumentRequestModel.ts index 6ce932dbba..72400483f3 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDocumentRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDocumentRequestModel.ts @@ -4,8 +4,10 @@ /* eslint-disable */ import type { CreateContentForDocumentRequestModel } from './CreateContentForDocumentRequestModel'; +import type { ReferenceByIdModel } from './ReferenceByIdModel'; export type CreateDocumentRequestModel = (CreateContentForDocumentRequestModel & { -contentTypeId: string; -templateId?: string | null; + documentType: ReferenceByIdModel; + template?: ReferenceByIdModel | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDocumentTypePropertyTypeContainerRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDocumentTypePropertyTypeContainerRequestModel.ts index e2b1b8b399..75695a9551 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDocumentTypePropertyTypeContainerRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDocumentTypePropertyTypeContainerRequestModel.ts @@ -6,3 +6,4 @@ import type { PropertyTypeContainerModelBaseModel } from './PropertyTypeContainerModelBaseModel'; export type CreateDocumentTypePropertyTypeContainerRequestModel = PropertyTypeContainerModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDocumentTypePropertyTypeRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDocumentTypePropertyTypeRequestModel.ts index 18d7d3dc9e..49c3e3cf95 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDocumentTypePropertyTypeRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDocumentTypePropertyTypeRequestModel.ts @@ -6,3 +6,4 @@ import type { PropertyTypeModelBaseModel } from './PropertyTypeModelBaseModel'; export type CreateDocumentTypePropertyTypeRequestModel = PropertyTypeModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDocumentTypeRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDocumentTypeRequestModel.ts index 6886b97810..297668404c 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDocumentTypeRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateDocumentTypeRequestModel.ts @@ -5,9 +5,15 @@ import type { ContentTypeCleanupModel } from './ContentTypeCleanupModel'; import type { CreateContentTypeForDocumentTypeRequestModel } from './CreateContentTypeForDocumentTypeRequestModel'; +import type { DocumentTypeCompositionModel } from './DocumentTypeCompositionModel'; +import type { DocumentTypeSortModel } from './DocumentTypeSortModel'; +import type { ReferenceByIdModel } from './ReferenceByIdModel'; export type CreateDocumentTypeRequestModel = (CreateContentTypeForDocumentTypeRequestModel & { -allowedTemplateIds: Array; -defaultTemplateId?: string | null; -cleanup: ContentTypeCleanupModel; + allowedTemplates: Array; + defaultTemplate?: ReferenceByIdModel | null; + cleanup: ContentTypeCleanupModel; + allowedDocumentTypes: Array; + compositions: Array; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateFolderRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateFolderRequestModel.ts index 02633cecba..2c2084a18d 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateFolderRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateFolderRequestModel.ts @@ -6,6 +6,7 @@ import type { FolderModelBaseModel } from './FolderModelBaseModel'; export type CreateFolderRequestModel = (FolderModelBaseModel & { -id?: string | null; -parentId?: string | null; + id?: string | null; + parentId?: string | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateInitialPasswordUserRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateInitialPasswordUserRequestModel.ts index e2c290678f..dbc957ff82 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateInitialPasswordUserRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateInitialPasswordUserRequestModel.ts @@ -6,5 +6,6 @@ import type { VerifyInviteUserRequestModel } from './VerifyInviteUserRequestModel'; export type CreateInitialPasswordUserRequestModel = (VerifyInviteUserRequestModel & { -password: string; + password: string; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateLanguageRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateLanguageRequestModel.ts index 00f1f81c25..456b4e4b83 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateLanguageRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateLanguageRequestModel.ts @@ -6,5 +6,6 @@ import type { LanguageModelBaseModel } from './LanguageModelBaseModel'; export type CreateLanguageRequestModel = (LanguageModelBaseModel & { -isoCode: string; + isoCode: string; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateMediaRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateMediaRequestModel.ts index d818f11e5a..937dcab69f 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateMediaRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateMediaRequestModel.ts @@ -4,7 +4,9 @@ /* eslint-disable */ import type { CreateContentForMediaRequestModel } from './CreateContentForMediaRequestModel'; +import type { ReferenceByIdModel } from './ReferenceByIdModel'; export type CreateMediaRequestModel = (CreateContentForMediaRequestModel & { -contentTypeId: string; + mediaType: ReferenceByIdModel; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateMediaTypePropertyTypeContainerRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateMediaTypePropertyTypeContainerRequestModel.ts index b95dddefa7..8fea33fee6 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateMediaTypePropertyTypeContainerRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateMediaTypePropertyTypeContainerRequestModel.ts @@ -6,3 +6,4 @@ import type { PropertyTypeContainerModelBaseModel } from './PropertyTypeContainerModelBaseModel'; export type CreateMediaTypePropertyTypeContainerRequestModel = PropertyTypeContainerModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateMediaTypePropertyTypeRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateMediaTypePropertyTypeRequestModel.ts index f7580ed396..344b1852fb 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateMediaTypePropertyTypeRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateMediaTypePropertyTypeRequestModel.ts @@ -6,3 +6,4 @@ import type { PropertyTypeModelBaseModel } from './PropertyTypeModelBaseModel'; export type CreateMediaTypePropertyTypeRequestModel = PropertyTypeModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateMediaTypeRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateMediaTypeRequestModel.ts index da2c267eaf..e143edb901 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateMediaTypeRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateMediaTypeRequestModel.ts @@ -4,5 +4,11 @@ /* eslint-disable */ import type { CreateContentTypeForMediaTypeRequestModel } from './CreateContentTypeForMediaTypeRequestModel'; +import type { MediaTypeCompositionModel } from './MediaTypeCompositionModel'; +import type { MediaTypeSortModel } from './MediaTypeSortModel'; + +export type CreateMediaTypeRequestModel = (CreateContentTypeForMediaTypeRequestModel & { + allowedMediaTypes: Array; + compositions: Array; +}); -export type CreateMediaTypeRequestModel = CreateContentTypeForMediaTypeRequestModel; diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreatePackageRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreatePackageRequestModel.ts index b0c95e7869..73977ee1aa 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreatePackageRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreatePackageRequestModel.ts @@ -6,3 +6,4 @@ import type { PackageModelBaseModel } from './PackageModelBaseModel'; export type CreatePackageRequestModel = PackageModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateRelationTypeRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateRelationTypeRequestModel.ts index 4f926f78c8..bc558b9331 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateRelationTypeRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateRelationTypeRequestModel.ts @@ -6,5 +6,6 @@ import type { RelationTypeBaseModel } from './RelationTypeBaseModel'; export type CreateRelationTypeRequestModel = (RelationTypeBaseModel & { -id?: string | null; + id?: string | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateUserGroupRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateUserGroupRequestModel.ts index 6cceedf7c3..1cceb76e9a 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateUserGroupRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateUserGroupRequestModel.ts @@ -6,3 +6,4 @@ import type { UserGroupBaseModel } from './UserGroupBaseModel'; export type CreateUserGroupRequestModel = UserGroupBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateUserRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateUserRequestModel.ts index 1ec757d5db..5d63724191 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateUserRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateUserRequestModel.ts @@ -6,3 +6,4 @@ import type { UserPresentationBaseModel } from './UserPresentationBaseModel'; export type CreateUserRequestModel = UserPresentationBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateUserResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateUserResponseModel.ts index 49afb950df..f2e0290598 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateUserResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateUserResponseModel.ts @@ -7,3 +7,4 @@ export type CreateUserResponseModel = { userId: string; initialPassword?: string | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CultureReponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CultureReponseModel.ts index 17052ff1a2..3bb48f8923 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CultureReponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CultureReponseModel.ts @@ -7,3 +7,4 @@ export type CultureReponseModel = { name: string; englishName: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CurrentUserResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CurrentUserResponseModel.ts index 99a514b3db..ac422494ea 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CurrentUserResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CurrentUserResponseModel.ts @@ -16,3 +16,4 @@ export type CurrentUserResponseModel = { hasAccessToAllLanguages: boolean; permissions: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeChangeModeModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeChangeModeModel.ts new file mode 100644 index 0000000000..fe470165fb --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeChangeModeModel.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export enum DataTypeChangeModeModel { + TRUE = 'True', + FALSE = 'False', + FALSE_WITH_HELP_TEXT = 'FalseWithHelpText', +} diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeItemResponseModel.ts index b0aded60d3..6c4fd4dbb3 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeItemResponseModel.ts @@ -3,8 +3,9 @@ /* tslint:disable */ /* eslint-disable */ -import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; +import type { NamedItemResponseModelBaseModel } from './NamedItemResponseModelBaseModel'; -export type DataTypeItemResponseModel = (ItemResponseModelBaseModel & { -editorUiAlias?: string | null; +export type DataTypeItemResponseModel = (NamedItemResponseModelBaseModel & { + editorUiAlias?: string | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeModelBaseModel.ts index 03fd1d95cd..7c3a1d770a 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeModelBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeModelBaseModel.ts @@ -11,3 +11,4 @@ export type DataTypeModelBaseModel = { editorUiAlias?: string | null; values: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypePropertyPresentationModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypePropertyPresentationModel.ts index dddd95ec38..5c6f1bf9a5 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypePropertyPresentationModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypePropertyPresentationModel.ts @@ -7,3 +7,4 @@ export type DataTypePropertyPresentationModel = { alias: string; value?: any; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypePropertyReferenceModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypePropertyReferenceModel.ts index d8e1cddc73..34599f578a 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypePropertyReferenceModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypePropertyReferenceModel.ts @@ -7,3 +7,4 @@ export type DataTypePropertyReferenceModel = { name: string; alias: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeReferenceResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeReferenceResponseModel.ts index dbe0455028..60b4ebf070 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeReferenceResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeReferenceResponseModel.ts @@ -10,3 +10,4 @@ export type DataTypeReferenceResponseModel = { type: string; properties: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeResponseModel.ts index 8bf0e63d81..f83939f738 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeResponseModel.ts @@ -6,6 +6,7 @@ import type { DataTypeModelBaseModel } from './DataTypeModelBaseModel'; export type DataTypeResponseModel = (DataTypeModelBaseModel & { -id: string; -parentId?: string | null; + id: string; + parentId?: string | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeTreeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeTreeItemResponseModel.ts index 6bc4619040..a24567b4f4 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeTreeItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DataTypeTreeItemResponseModel.ts @@ -6,5 +6,6 @@ import type { FolderTreeItemResponseModel } from './FolderTreeItemResponseModel'; export type DataTypeTreeItemResponseModel = (FolderTreeItemResponseModel & { -editorUiAlias?: string | null; + editorUiAlias?: string | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DatabaseInstallResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DatabaseInstallResponseModel.ts index 7a32527bf1..23baa81221 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DatabaseInstallResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DatabaseInstallResponseModel.ts @@ -14,3 +14,4 @@ export type DatabaseInstallResponseModel = { connectionString?: string | null; trustServerCertificate: boolean; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DatabaseSettingsPresentationModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DatabaseSettingsPresentationModel.ts index 54e12c5a4d..219b792647 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DatabaseSettingsPresentationModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DatabaseSettingsPresentationModel.ts @@ -16,3 +16,4 @@ export type DatabaseSettingsPresentationModel = { supportsIntegratedAuthentication: boolean; requiresConnectionTest: boolean; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DatatypeConfigurationResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DatatypeConfigurationResponseModel.ts new file mode 100644 index 0000000000..86aa086f3f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DatatypeConfigurationResponseModel.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { DataTypeChangeModeModel } from './DataTypeChangeModeModel'; + +export type DatatypeConfigurationResponseModel = { + canBeChanged: DataTypeChangeModeModel; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DeleteUserGroupsRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DeleteUserGroupsRequestModel.ts index 79839e50c1..6942407664 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DeleteUserGroupsRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DeleteUserGroupsRequestModel.ts @@ -6,3 +6,4 @@ export type DeleteUserGroupsRequestModel = { userGroupIds: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DeleteUsersRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DeleteUsersRequestModel.ts index 22c88d0c0e..c6f210a95c 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DeleteUsersRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DeleteUsersRequestModel.ts @@ -6,3 +6,4 @@ export type DeleteUsersRequestModel = { userIds: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DictionaryItemItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DictionaryItemItemResponseModel.ts index 7bbbdd7135..38f73f486d 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DictionaryItemItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DictionaryItemItemResponseModel.ts @@ -3,6 +3,7 @@ /* tslint:disable */ /* eslint-disable */ -import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; +import type { NamedItemResponseModelBaseModel } from './NamedItemResponseModelBaseModel'; + +export type DictionaryItemItemResponseModel = NamedItemResponseModelBaseModel; -export type DictionaryItemItemResponseModel = ItemResponseModelBaseModel; diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DictionaryItemModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DictionaryItemModelBaseModel.ts index 1862fe594e..3ab80babb0 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DictionaryItemModelBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DictionaryItemModelBaseModel.ts @@ -9,3 +9,4 @@ export type DictionaryItemModelBaseModel = { name: string; translations: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DictionaryItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DictionaryItemResponseModel.ts index 694b5af1d9..54a63654cf 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DictionaryItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DictionaryItemResponseModel.ts @@ -6,5 +6,6 @@ import type { DictionaryItemModelBaseModel } from './DictionaryItemModelBaseModel'; export type DictionaryItemResponseModel = (DictionaryItemModelBaseModel & { -id: string; + id: string; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DictionaryItemTranslationModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DictionaryItemTranslationModel.ts index 874d6d1e8d..2016bf3674 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DictionaryItemTranslationModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DictionaryItemTranslationModel.ts @@ -7,3 +7,4 @@ export type DictionaryItemTranslationModel = { isoCode: string; translation: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DictionaryOverviewResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DictionaryOverviewResponseModel.ts index 8f908da360..2a0228cec7 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DictionaryOverviewResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DictionaryOverviewResponseModel.ts @@ -9,3 +9,4 @@ export type DictionaryOverviewResponseModel = { parentId?: string | null; translatedIsoCodes: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DisableUserRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DisableUserRequestModel.ts index bb1b7f0d08..d761f29549 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DisableUserRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DisableUserRequestModel.ts @@ -6,3 +6,4 @@ export type DisableUserRequestModel = { userIds: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentBlueprintResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentBlueprintResponseModel.ts index 53df8b333c..e894f9e29f 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentBlueprintResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentBlueprintResponseModel.ts @@ -3,6 +3,7 @@ /* tslint:disable */ /* eslint-disable */ -import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; +import type { NamedItemResponseModelBaseModel } from './NamedItemResponseModelBaseModel'; + +export type DocumentBlueprintResponseModel = NamedItemResponseModelBaseModel; -export type DocumentBlueprintResponseModel = ItemResponseModelBaseModel; diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentBlueprintTreeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentBlueprintTreeItemResponseModel.ts index d325ee660e..cc1573f33e 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentBlueprintTreeItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentBlueprintTreeItemResponseModel.ts @@ -3,10 +3,11 @@ /* tslint:disable */ /* eslint-disable */ -import type { EntityTreeItemResponseModel } from './EntityTreeItemResponseModel'; +import type { NamedEntityTreeItemResponseModel } from './NamedEntityTreeItemResponseModel'; -export type DocumentBlueprintTreeItemResponseModel = (EntityTreeItemResponseModel & { -documentTypeId: string; -documentTypeAlias: string; -documentTypeName?: string | null; +export type DocumentBlueprintTreeItemResponseModel = (NamedEntityTreeItemResponseModel & { + documentTypeId: string; + documentTypeAlias: string; + documentTypeName?: string | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentConfigurationResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentConfigurationResponseModel.ts new file mode 100644 index 0000000000..78fb81d996 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentConfigurationResponseModel.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type DocumentConfigurationResponseModel = { + sanitizeTinyMce: boolean; + disableDeleteWhenReferenced: boolean; + disableUnpublishWhenReferenced: boolean; + allowEditInvariantFromNonDefault: boolean; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentItemResponseModel.ts index bcc5c4f8be..80630f509d 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentItemResponseModel.ts @@ -3,10 +3,14 @@ /* tslint:disable */ /* eslint-disable */ +import type { DocumentTypeReferenceResponseModel } from './DocumentTypeReferenceResponseModel'; +import type { DocumentVariantItemResponseModel } from './DocumentVariantItemResponseModel'; import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; export type DocumentItemResponseModel = (ItemResponseModelBaseModel & { -icon?: string | null; -contentTypeId: string; -isTrashed: boolean; + isTrashed: boolean; + isProtected: boolean; + documentType: DocumentTypeReferenceResponseModel; + variants: Array; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentNotificationResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentNotificationResponseModel.ts index c566759f76..72e7e8629d 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentNotificationResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentNotificationResponseModel.ts @@ -7,3 +7,4 @@ export type DocumentNotificationResponseModel = { actionId: string; subscribed: boolean; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentRecycleBinItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentRecycleBinItemResponseModel.ts new file mode 100644 index 0000000000..c594d375b0 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentRecycleBinItemResponseModel.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { DocumentTypeReferenceResponseModel } from './DocumentTypeReferenceResponseModel'; +import type { DocumentVariantItemResponseModel } from './DocumentVariantItemResponseModel'; +import type { RecycleBinItemResponseModelBaseModel } from './RecycleBinItemResponseModelBaseModel'; + +export type DocumentRecycleBinItemResponseModel = (RecycleBinItemResponseModelBaseModel & { + documentType: DocumentTypeReferenceResponseModel; + variants: Array; +}); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentResponseModel.ts index e0cfe042d9..049f9b077a 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentResponseModel.ts @@ -5,9 +5,13 @@ import type { ContentForDocumentResponseModel } from './ContentForDocumentResponseModel'; import type { ContentUrlInfoModel } from './ContentUrlInfoModel'; +import type { DocumentTypeReferenceResponseModel } from './DocumentTypeReferenceResponseModel'; +import type { ReferenceByIdModel } from './ReferenceByIdModel'; export type DocumentResponseModel = (ContentForDocumentResponseModel & { -urls: Array; -templateId?: string | null; -isTrashed: boolean; + urls: Array; + template?: ReferenceByIdModel | null; + isTrashed: boolean; + documentType: DocumentTypeReferenceResponseModel; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTreeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTreeItemResponseModel.ts index bb37e8f797..3f202d48c6 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTreeItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTreeItemResponseModel.ts @@ -4,13 +4,12 @@ /* eslint-disable */ import type { ContentTreeItemResponseModel } from './ContentTreeItemResponseModel'; -import type { VariantTreeItemModel } from './VariantTreeItemModel'; +import type { DocumentTypeReferenceResponseModel } from './DocumentTypeReferenceResponseModel'; +import type { DocumentVariantItemResponseModel } from './DocumentVariantItemResponseModel'; export type DocumentTreeItemResponseModel = (ContentTreeItemResponseModel & { -isProtected: boolean; -isPublished: boolean; -isEdited: boolean; -contentTypeId: string; -variants: Array; -icon: string; + isProtected: boolean; + documentType: DocumentTypeReferenceResponseModel; + variants: Array; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeCompositionModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeCompositionModel.ts new file mode 100644 index 0000000000..5cb10be1d0 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeCompositionModel.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { CompositionTypeModel } from './CompositionTypeModel'; +import type { ReferenceByIdModel } from './ReferenceByIdModel'; + +export type DocumentTypeCompositionModel = { + documentType: ReferenceByIdModel; + compositionType: CompositionTypeModel; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeConfigurationResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeConfigurationResponseModel.ts new file mode 100644 index 0000000000..b728fd3a12 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeConfigurationResponseModel.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { DataTypeChangeModeModel } from './DataTypeChangeModeModel'; + +export type DocumentTypeConfigurationResponseModel = { + dataTypesCanBeChanged: DataTypeChangeModeModel; + disableTemplates: boolean; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeItemResponseModel.ts index aeec0ee93a..1ed148dec1 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeItemResponseModel.ts @@ -3,9 +3,10 @@ /* tslint:disable */ /* eslint-disable */ -import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; +import type { NamedItemResponseModelBaseModel } from './NamedItemResponseModelBaseModel'; -export type DocumentTypeItemResponseModel = (ItemResponseModelBaseModel & { -isElement: boolean; -icon?: string | null; +export type DocumentTypeItemResponseModel = (NamedItemResponseModelBaseModel & { + isElement: boolean; + icon?: string | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypePropertyTypeContainerResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypePropertyTypeContainerResponseModel.ts index 68ddb36d34..f6a57aa6c7 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypePropertyTypeContainerResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypePropertyTypeContainerResponseModel.ts @@ -6,3 +6,4 @@ import type { PropertyTypeContainerModelBaseModel } from './PropertyTypeContainerModelBaseModel'; export type DocumentTypePropertyTypeContainerResponseModel = PropertyTypeContainerModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypePropertyTypeResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypePropertyTypeResponseModel.ts index 9c364f0fd7..14837ade42 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypePropertyTypeResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypePropertyTypeResponseModel.ts @@ -6,3 +6,4 @@ import type { PropertyTypeModelBaseModel } from './PropertyTypeModelBaseModel'; export type DocumentTypePropertyTypeResponseModel = PropertyTypeModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeReferenceResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeReferenceResponseModel.ts new file mode 100644 index 0000000000..1ce7ab1db8 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeReferenceResponseModel.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { ContentTypeReferenceResponseModelBaseModel } from './ContentTypeReferenceResponseModelBaseModel'; + +export type DocumentTypeReferenceResponseModel = ContentTypeReferenceResponseModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeResponseModel.ts index 60ae207871..376ad9d470 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeResponseModel.ts @@ -5,9 +5,15 @@ import type { ContentTypeCleanupModel } from './ContentTypeCleanupModel'; import type { ContentTypeForDocumentTypeResponseModel } from './ContentTypeForDocumentTypeResponseModel'; +import type { DocumentTypeCompositionModel } from './DocumentTypeCompositionModel'; +import type { DocumentTypeSortModel } from './DocumentTypeSortModel'; +import type { ReferenceByIdModel } from './ReferenceByIdModel'; export type DocumentTypeResponseModel = (ContentTypeForDocumentTypeResponseModel & { -allowedTemplateIds: Array; -defaultTemplateId?: string | null; -cleanup: ContentTypeCleanupModel; + allowedTemplates: Array; + defaultTemplate?: ReferenceByIdModel | null; + cleanup: ContentTypeCleanupModel; + allowedDocumentTypes: Array; + compositions: Array; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeSortModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeSortModel.ts new file mode 100644 index 0000000000..82dfba4614 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeSortModel.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { ReferenceByIdModel } from './ReferenceByIdModel'; + +export type DocumentTypeSortModel = { + documentType: ReferenceByIdModel; + sortOrder: number; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeTreeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeTreeItemResponseModel.ts index 93b2e6fc2c..cb9a379165 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeTreeItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentTypeTreeItemResponseModel.ts @@ -6,6 +6,7 @@ import type { FolderTreeItemResponseModel } from './FolderTreeItemResponseModel'; export type DocumentTypeTreeItemResponseModel = (FolderTreeItemResponseModel & { -isElement: boolean; -icon: string; + isElement: boolean; + icon: string; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentValueModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentValueModel.ts index 34f2807fbb..d97801007c 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentValueModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentValueModel.ts @@ -6,3 +6,4 @@ import type { ValueModelBaseModel } from './ValueModelBaseModel'; export type DocumentValueModel = ValueModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentVariantItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentVariantItemResponseModel.ts new file mode 100644 index 0000000000..e5dc852c8c --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentVariantItemResponseModel.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { ContentStateModel } from './ContentStateModel'; +import type { VariantItemResponseModelBaseModel } from './VariantItemResponseModelBaseModel'; + +export type DocumentVariantItemResponseModel = (VariantItemResponseModelBaseModel & { + state: ContentStateModel; +}); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentVariantRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentVariantRequestModel.ts index ba28f18d43..4d79c4109a 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentVariantRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentVariantRequestModel.ts @@ -6,3 +6,4 @@ import type { VariantModelBaseModel } from './VariantModelBaseModel'; export type DocumentVariantRequestModel = VariantModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentVariantResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentVariantResponseModel.ts index 53e68560d2..06775caaf6 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentVariantResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DocumentVariantResponseModel.ts @@ -7,6 +7,7 @@ import type { ContentStateModel } from './ContentStateModel'; import type { VariantResponseModelBaseModel } from './VariantResponseModelBaseModel'; export type DocumentVariantResponseModel = (VariantResponseModelBaseModel & { -state: ContentStateModel; -publishDate?: string | null; + state: ContentStateModel; + publishDate?: string | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DomainPresentationModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DomainPresentationModel.ts index cef67f0c14..497ce2ae8e 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DomainPresentationModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DomainPresentationModel.ts @@ -7,3 +7,4 @@ export type DomainPresentationModel = { domainName: string; isoCode: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DomainsPresentationModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DomainsPresentationModelBaseModel.ts index d8588d7c51..193e811957 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DomainsPresentationModelBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DomainsPresentationModelBaseModel.ts @@ -9,3 +9,4 @@ export type DomainsPresentationModelBaseModel = { defaultIsoCode?: string | null; domains: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DomainsResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DomainsResponseModel.ts index 4bbe922b91..f8d8a1ff18 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DomainsResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DomainsResponseModel.ts @@ -6,3 +6,4 @@ import type { DomainsPresentationModelBaseModel } from './DomainsPresentationModelBaseModel'; export type DomainsResponseModel = DomainsPresentationModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DynamicRootQueryOriginRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DynamicRootQueryOriginRequestModel.ts index 4754ad448d..916d280a5e 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DynamicRootQueryOriginRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DynamicRootQueryOriginRequestModel.ts @@ -7,3 +7,4 @@ export type DynamicRootQueryOriginRequestModel = { alias: string; key?: string | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DynamicRootResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DynamicRootResponseModel.ts index b048cbf692..da6a956c7b 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DynamicRootResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/DynamicRootResponseModel.ts @@ -6,3 +6,4 @@ export type DynamicRootResponseModel = { roots: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/EnableTwoFactorRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/EnableTwoFactorRequestModel.ts new file mode 100644 index 0000000000..7c49e5b473 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/EnableTwoFactorRequestModel.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type EnableTwoFactorRequestModel = { + code: string; + secret: string; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/EnableUserRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/EnableUserRequestModel.ts index cb57f8b665..149c8cb3b7 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/EnableUserRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/EnableUserRequestModel.ts @@ -6,3 +6,4 @@ export type EnableUserRequestModel = { userIds: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/EntityTreeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/EntityTreeItemResponseModel.ts index 5daf0cbbb8..d14eb5cc31 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/EntityTreeItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/EntityTreeItemResponseModel.ts @@ -3,10 +3,11 @@ /* tslint:disable */ /* eslint-disable */ +import type { ReferenceByIdModel } from './ReferenceByIdModel'; import type { TreeItemPresentationModel } from './TreeItemPresentationModel'; export type EntityTreeItemResponseModel = (TreeItemPresentationModel & { -id: string; -isContainer: boolean; -parentId?: string | null; + id: string; + parent?: ReferenceByIdModel | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FieldPresentationModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FieldPresentationModel.ts index 4ed1ba0696..5a39dbab7c 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FieldPresentationModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FieldPresentationModel.ts @@ -7,3 +7,4 @@ export type FieldPresentationModel = { name: string; values: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FileSystemFileCreateRequestModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FileSystemFileCreateRequestModelBaseModel.ts index 2084c0fb23..5b9eb3d4cf 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FileSystemFileCreateRequestModelBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FileSystemFileCreateRequestModelBaseModel.ts @@ -10,3 +10,4 @@ export type FileSystemFileCreateRequestModelBaseModel = { parent?: FileSystemFolderModel | null; content: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FileSystemFileUpdateRequestModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FileSystemFileUpdateRequestModelBaseModel.ts index 93afbb1b14..44ec79a002 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FileSystemFileUpdateRequestModelBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FileSystemFileUpdateRequestModelBaseModel.ts @@ -6,3 +6,4 @@ export type FileSystemFileUpdateRequestModelBaseModel = { content: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FileSystemItemViewModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FileSystemItemViewModelBaseModel.ts index 58d84613ee..d0153d4763 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FileSystemItemViewModelBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FileSystemItemViewModelBaseModel.ts @@ -6,3 +6,4 @@ export type FileSystemItemViewModelBaseModel = { path: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FileSystemRenameRequestModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FileSystemRenameRequestModelBaseModel.ts index 41e1c4965b..bc4534ef58 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FileSystemRenameRequestModelBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FileSystemRenameRequestModelBaseModel.ts @@ -6,3 +6,4 @@ export type FileSystemRenameRequestModelBaseModel = { name: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FileSystemTreeItemPresentationModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FileSystemTreeItemPresentationModel.ts index c1353be637..00ca2f7dc8 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FileSystemTreeItemPresentationModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FileSystemTreeItemPresentationModel.ts @@ -7,6 +7,7 @@ import type { FileSystemFolderModel } from './FileSystemFolderModel'; import type { TreeItemPresentationModel } from './TreeItemPresentationModel'; export type FileSystemTreeItemPresentationModel = (TreeItemPresentationModel & { + name: string; path: string; parent?: FileSystemFolderModel | null; isFolder: boolean; diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FolderModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FolderModelBaseModel.ts index cebc70b066..3d9275f495 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FolderModelBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FolderModelBaseModel.ts @@ -6,3 +6,4 @@ export type FolderModelBaseModel = { name: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FolderResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FolderResponseModel.ts index d85e8685d7..f06d96bc37 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FolderResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FolderResponseModel.ts @@ -6,6 +6,7 @@ import type { FolderModelBaseModel } from './FolderModelBaseModel'; export type FolderResponseModel = (FolderModelBaseModel & { -id: string; -parentId?: string | null; + id: string; + parentId?: string | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FolderTreeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FolderTreeItemResponseModel.ts index ce7dcb244f..0d2e87e29c 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FolderTreeItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/FolderTreeItemResponseModel.ts @@ -3,8 +3,9 @@ /* tslint:disable */ /* eslint-disable */ -import type { EntityTreeItemResponseModel } from './EntityTreeItemResponseModel'; +import type { NamedEntityTreeItemResponseModel } from './NamedEntityTreeItemResponseModel'; -export type FolderTreeItemResponseModel = (EntityTreeItemResponseModel & { -isFolder: boolean; +export type FolderTreeItemResponseModel = (NamedEntityTreeItemResponseModel & { + isFolder: boolean; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckActionRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckActionRequestModel.ts index 0ab9dde605..01fe6d187a 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckActionRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckActionRequestModel.ts @@ -13,3 +13,4 @@ export type HealthCheckActionRequestModel = { providedValueValidation?: string | null; providedValueValidationRegex?: string | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckGroupPresentationBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckGroupPresentationBaseModel.ts index 1ec78887e6..0fbcac06b9 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckGroupPresentationBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckGroupPresentationBaseModel.ts @@ -6,3 +6,4 @@ export type HealthCheckGroupPresentationBaseModel = { name: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckGroupPresentationModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckGroupPresentationModel.ts index e621053980..cdeff24d9a 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckGroupPresentationModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckGroupPresentationModel.ts @@ -7,5 +7,6 @@ import type { HealthCheckGroupPresentationBaseModel } from './HealthCheckGroupPr import type { HealthCheckModel } from './HealthCheckModel'; export type HealthCheckGroupPresentationModel = (HealthCheckGroupPresentationBaseModel & { -checks: Array; + checks: Array; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckGroupResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckGroupResponseModel.ts index db458845ae..4754ba19da 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckGroupResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckGroupResponseModel.ts @@ -6,3 +6,4 @@ import type { HealthCheckGroupPresentationBaseModel } from './HealthCheckGroupPresentationBaseModel'; export type HealthCheckGroupResponseModel = HealthCheckGroupPresentationBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckGroupWithResultResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckGroupWithResultResponseModel.ts index 64ac7ef25d..f2822cccbe 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckGroupWithResultResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckGroupWithResultResponseModel.ts @@ -8,3 +8,4 @@ import type { HealthCheckWithResultPresentationModel } from './HealthCheckWithRe export type HealthCheckGroupWithResultResponseModel = { checks: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckModel.ts index d97cef49e0..420710c538 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckModel.ts @@ -6,6 +6,7 @@ import type { HealthCheckModelBaseModel } from './HealthCheckModelBaseModel'; export type HealthCheckModel = (HealthCheckModelBaseModel & { -name: string; -description?: string | null; + name: string; + description?: string | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckModelBaseModel.ts index 54522c05d1..0721373257 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckModelBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckModelBaseModel.ts @@ -6,3 +6,4 @@ export type HealthCheckModelBaseModel = { id: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckResultResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckResultResponseModel.ts index 7aa91d8415..036976ee4e 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckResultResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckResultResponseModel.ts @@ -12,3 +12,4 @@ export type HealthCheckResultResponseModel = { actions?: Array | null; readMoreLink?: string | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckWithResultPresentationModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckWithResultPresentationModel.ts index f83989db5b..c9e64a9b6c 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckWithResultPresentationModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HealthCheckWithResultPresentationModel.ts @@ -7,5 +7,6 @@ import type { HealthCheckModelBaseModel } from './HealthCheckModelBaseModel'; import type { HealthCheckResultResponseModel } from './HealthCheckResultResponseModel'; export type HealthCheckWithResultPresentationModel = (HealthCheckModelBaseModel & { -results?: Array | null; + results?: Array | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HelpPageResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HelpPageResponseModel.ts index d469cebaa1..d5d81e8935 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HelpPageResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/HelpPageResponseModel.ts @@ -9,3 +9,4 @@ export type HelpPageResponseModel = { url?: string | null; type?: string | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ImportDictionaryRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ImportDictionaryRequestModel.ts index cecb204709..b848a6ea07 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ImportDictionaryRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ImportDictionaryRequestModel.ts @@ -7,3 +7,4 @@ export type ImportDictionaryRequestModel = { temporaryFileId: string; parentId?: string | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/IndexResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/IndexResponseModel.ts index cc64b67dd6..8c957644e5 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/IndexResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/IndexResponseModel.ts @@ -14,3 +14,4 @@ export type IndexResponseModel = { fieldCount: number; providerProperties?: Record | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/InstallSettingsResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/InstallSettingsResponseModel.ts index 05266c351d..812abfbd8f 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/InstallSettingsResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/InstallSettingsResponseModel.ts @@ -10,3 +10,4 @@ export type InstallSettingsResponseModel = { user: UserSettingsModel; databases: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/InstallVResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/InstallVResponseModel.ts index 92d9815dae..2208a896b3 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/InstallVResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/InstallVResponseModel.ts @@ -12,3 +12,4 @@ export type InstallVResponseModel = { database: DatabaseInstallResponseModel; telemetryLevel: TelemetryLevelModel; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/InviteUserRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/InviteUserRequestModel.ts index 3f7b3c62c1..2d27ef9b07 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/InviteUserRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/InviteUserRequestModel.ts @@ -6,5 +6,6 @@ import type { CreateUserRequestModel } from './CreateUserRequestModel'; export type InviteUserRequestModel = (CreateUserRequestModel & { -message?: string | null; + message?: string | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeSortModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ItemReferenceByIdResponseModel.ts similarity index 71% rename from src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeSortModel.ts rename to src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ItemReferenceByIdResponseModel.ts index 83239e1e12..94a2eb42bc 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ContentTypeSortModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ItemReferenceByIdResponseModel.ts @@ -3,7 +3,7 @@ /* tslint:disable */ /* eslint-disable */ -export type ContentTypeSortModel = { +export type ItemReferenceByIdResponseModel = { id: string; - sortOrder: number; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ItemResponseModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ItemResponseModelBaseModel.ts index b30b979409..28b7c0e199 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ItemResponseModelBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ItemResponseModelBaseModel.ts @@ -4,6 +4,6 @@ /* eslint-disable */ export type ItemResponseModelBaseModel = { - name: string; id: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ItemSortingRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ItemSortingRequestModel.ts index 680489338b..e5ef68e040 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ItemSortingRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ItemSortingRequestModel.ts @@ -7,3 +7,4 @@ export type ItemSortingRequestModel = { id: string; sortOrder: number; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LanguageItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LanguageItemResponseModel.ts index dbf066be1d..f503073ca4 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LanguageItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LanguageItemResponseModel.ts @@ -7,3 +7,4 @@ export type LanguageItemResponseModel = { name: string; isoCode: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LanguageModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LanguageModelBaseModel.ts index 8c83751024..f05063ce04 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LanguageModelBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LanguageModelBaseModel.ts @@ -9,3 +9,4 @@ export type LanguageModelBaseModel = { isMandatory: boolean; fallbackIsoCode?: string | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LanguageResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LanguageResponseModel.ts index 0d8878ef35..26700efd0d 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LanguageResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LanguageResponseModel.ts @@ -6,5 +6,6 @@ import type { LanguageModelBaseModel } from './LanguageModelBaseModel'; export type LanguageResponseModel = (LanguageModelBaseModel & { -isoCode: string; + isoCode: string; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LinkedLoginModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LinkedLoginModel.ts index 9967bf6b82..ed7be18fd3 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LinkedLoginModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LinkedLoginModel.ts @@ -7,3 +7,4 @@ export type LinkedLoginModel = { providerName: string; providerKey: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LinkedLoginsRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LinkedLoginsRequestModel.ts index 682d769b66..49f3947868 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LinkedLoginsRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LinkedLoginsRequestModel.ts @@ -8,3 +8,4 @@ import type { LinkedLoginModel } from './LinkedLoginModel'; export type LinkedLoginsRequestModel = { linkedLogins: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LogLevelCountsReponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LogLevelCountsReponseModel.ts index 5a4ad42345..d1d988ec8f 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LogLevelCountsReponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LogLevelCountsReponseModel.ts @@ -10,3 +10,4 @@ export type LogLevelCountsReponseModel = { error: number; fatal: number; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LogMessagePropertyPresentationModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LogMessagePropertyPresentationModel.ts index 043445e581..de18608397 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LogMessagePropertyPresentationModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LogMessagePropertyPresentationModel.ts @@ -7,3 +7,4 @@ export type LogMessagePropertyPresentationModel = { name: string; value?: string | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LogMessageResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LogMessageResponseModel.ts index 940fad309a..9a219c4245 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LogMessageResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LogMessageResponseModel.ts @@ -14,3 +14,4 @@ export type LogMessageResponseModel = { properties: Array; exception?: string | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LogTemplateResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LogTemplateResponseModel.ts index 78682e668d..90ef6d4318 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LogTemplateResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LogTemplateResponseModel.ts @@ -7,3 +7,4 @@ export type LogTemplateResponseModel = { messageTemplate?: string | null; count: number; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LoggerResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LoggerResponseModel.ts index dd5076b8c6..3c1f88ffd2 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LoggerResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/LoggerResponseModel.ts @@ -9,3 +9,4 @@ export type LoggerResponseModel = { name: string; level: LogLevelModel; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaConfigurationResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaConfigurationResponseModel.ts new file mode 100644 index 0000000000..fbe7b748eb --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaConfigurationResponseModel.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type MediaConfigurationResponseModel = { + disableDeleteWhenReferenced: boolean; + disableUnpublishWhenReferenced: boolean; + sanitizeTinyMce: boolean; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaItemResponseModel.ts index 55fa08258c..ec38113736 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaItemResponseModel.ts @@ -4,8 +4,12 @@ /* eslint-disable */ import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; +import type { MediaTypeReferenceResponseModel } from './MediaTypeReferenceResponseModel'; +import type { VariantItemResponseModel } from './VariantItemResponseModel'; export type MediaItemResponseModel = (ItemResponseModelBaseModel & { -icon?: string | null; -isTrashed: boolean; + isTrashed: boolean; + mediaType: MediaTypeReferenceResponseModel; + variants: Array; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaRecycleBinItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaRecycleBinItemResponseModel.ts new file mode 100644 index 0000000000..56467ffbc9 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaRecycleBinItemResponseModel.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { MediaTypeReferenceResponseModel } from './MediaTypeReferenceResponseModel'; +import type { RecycleBinItemResponseModelBaseModel } from './RecycleBinItemResponseModelBaseModel'; +import type { VariantItemResponseModel } from './VariantItemResponseModel'; + +export type MediaRecycleBinItemResponseModel = (RecycleBinItemResponseModelBaseModel & { + mediaType: MediaTypeReferenceResponseModel; + variants: Array; +}); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaResponseModel.ts new file mode 100644 index 0000000000..8943019dd2 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaResponseModel.ts @@ -0,0 +1,15 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { ContentForMediaResponseModel } from './ContentForMediaResponseModel'; +import type { ContentUrlInfoModel } from './ContentUrlInfoModel'; +import type { MediaTypeReferenceResponseModel } from './MediaTypeReferenceResponseModel'; + +export type MediaResponseModel = (ContentForMediaResponseModel & { + urls: Array; + isTrashed: boolean; + mediaType: MediaTypeReferenceResponseModel; +}); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTreeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTreeItemResponseModel.ts index 293cc652dc..24c7fad8f2 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTreeItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTreeItemResponseModel.ts @@ -4,7 +4,11 @@ /* eslint-disable */ import type { ContentTreeItemResponseModel } from './ContentTreeItemResponseModel'; +import type { MediaTypeReferenceResponseModel } from './MediaTypeReferenceResponseModel'; +import type { VariantItemResponseModel } from './VariantItemResponseModel'; export type MediaTreeItemResponseModel = (ContentTreeItemResponseModel & { -icon: string; + mediaType: MediaTypeReferenceResponseModel; + variants: Array; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypeCompositionModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypeCompositionModel.ts new file mode 100644 index 0000000000..26f74e7068 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypeCompositionModel.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { CompositionTypeModel } from './CompositionTypeModel'; +import type { ReferenceByIdModel } from './ReferenceByIdModel'; + +export type MediaTypeCompositionModel = { + mediaType: ReferenceByIdModel; + compositionType: CompositionTypeModel; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypeItemResponseModel.ts index ecf94a0e22..782e59631a 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypeItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypeItemResponseModel.ts @@ -3,8 +3,9 @@ /* tslint:disable */ /* eslint-disable */ -import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; +import type { NamedItemResponseModelBaseModel } from './NamedItemResponseModelBaseModel'; -export type MediaTypeItemResponseModel = (ItemResponseModelBaseModel & { -icon?: string | null; +export type MediaTypeItemResponseModel = (NamedItemResponseModelBaseModel & { + icon?: string | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypePropertyTypeContainerResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypePropertyTypeContainerResponseModel.ts index c1c13c2eed..8529996e90 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypePropertyTypeContainerResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypePropertyTypeContainerResponseModel.ts @@ -6,3 +6,4 @@ import type { PropertyTypeContainerModelBaseModel } from './PropertyTypeContainerModelBaseModel'; export type MediaTypePropertyTypeContainerResponseModel = PropertyTypeContainerModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypePropertyTypeResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypePropertyTypeResponseModel.ts index 256cf33f83..20a8e3efd5 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypePropertyTypeResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypePropertyTypeResponseModel.ts @@ -6,3 +6,4 @@ import type { PropertyTypeModelBaseModel } from './PropertyTypeModelBaseModel'; export type MediaTypePropertyTypeResponseModel = PropertyTypeModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypeReferenceResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypeReferenceResponseModel.ts new file mode 100644 index 0000000000..5aad862b1b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypeReferenceResponseModel.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { ContentTypeReferenceResponseModelBaseModel } from './ContentTypeReferenceResponseModelBaseModel'; + +export type MediaTypeReferenceResponseModel = ContentTypeReferenceResponseModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypeResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypeResponseModel.ts index 548bb4a336..a4e5cd2e89 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypeResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypeResponseModel.ts @@ -4,5 +4,11 @@ /* eslint-disable */ import type { ContentTypeForMediaTypeResponseModel } from './ContentTypeForMediaTypeResponseModel'; +import type { MediaTypeCompositionModel } from './MediaTypeCompositionModel'; +import type { MediaTypeSortModel } from './MediaTypeSortModel'; + +export type MediaTypeResponseModel = (ContentTypeForMediaTypeResponseModel & { + allowedMediaTypes: Array; + compositions: Array; +}); -export type MediaTypeResponseModel = ContentTypeForMediaTypeResponseModel; diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypeSortModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypeSortModel.ts new file mode 100644 index 0000000000..a6305256c5 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypeSortModel.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { ReferenceByIdModel } from './ReferenceByIdModel'; + +export type MediaTypeSortModel = { + mediaType: ReferenceByIdModel; + sortOrder: number; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypeTreeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypeTreeItemResponseModel.ts index 45aefb57cb..8455663b94 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypeTreeItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaTypeTreeItemResponseModel.ts @@ -6,5 +6,6 @@ import type { FolderTreeItemResponseModel } from './FolderTreeItemResponseModel'; export type MediaTypeTreeItemResponseModel = (FolderTreeItemResponseModel & { -icon: string; + icon: string; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaValueModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaValueModel.ts index 9f55e16553..c65ef62bb0 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaValueModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaValueModel.ts @@ -6,3 +6,4 @@ import type { ValueModelBaseModel } from './ValueModelBaseModel'; export type MediaValueModel = ValueModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaVariantRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaVariantRequestModel.ts index 74ab9ac92d..8b6bc1f2e4 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaVariantRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaVariantRequestModel.ts @@ -6,3 +6,4 @@ import type { VariantModelBaseModel } from './VariantModelBaseModel'; export type MediaVariantRequestModel = VariantModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaVariantResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaVariantResponseModel.ts index a00851d22c..5934131d3e 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaVariantResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MediaVariantResponseModel.ts @@ -6,3 +6,4 @@ import type { VariantResponseModelBaseModel } from './VariantResponseModelBaseModel'; export type MediaVariantResponseModel = VariantResponseModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MemberGroupItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MemberGroupItemResponseModel.ts index 81fa25eb8b..690f274951 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MemberGroupItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MemberGroupItemResponseModel.ts @@ -3,6 +3,7 @@ /* tslint:disable */ /* eslint-disable */ -import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; +import type { NamedItemResponseModelBaseModel } from './NamedItemResponseModelBaseModel'; + +export type MemberGroupItemResponseModel = NamedItemResponseModelBaseModel; -export type MemberGroupItemResponseModel = ItemResponseModelBaseModel; diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MemberItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MemberItemResponseModel.ts index 0643b30939..15607126e2 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MemberItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MemberItemResponseModel.ts @@ -3,8 +3,9 @@ /* tslint:disable */ /* eslint-disable */ -import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; +import type { NamedItemResponseModelBaseModel } from './NamedItemResponseModelBaseModel'; -export type MemberItemResponseModel = (ItemResponseModelBaseModel & { -icon?: string | null; +export type MemberItemResponseModel = (NamedItemResponseModelBaseModel & { + icon?: string | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MemberTypeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MemberTypeItemResponseModel.ts index 7f0d414a5b..846b1d2159 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MemberTypeItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MemberTypeItemResponseModel.ts @@ -3,8 +3,9 @@ /* tslint:disable */ /* eslint-disable */ -import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; +import type { NamedItemResponseModelBaseModel } from './NamedItemResponseModelBaseModel'; -export type MemberTypeItemResponseModel = (ItemResponseModelBaseModel & { -icon?: string | null; +export type MemberTypeItemResponseModel = (NamedItemResponseModelBaseModel & { + icon?: string | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ModelsBuilderResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ModelsBuilderResponseModel.ts index 492bf6420f..d5e29920fa 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ModelsBuilderResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ModelsBuilderResponseModel.ts @@ -14,3 +14,4 @@ export type ModelsBuilderResponseModel = { modelsNamespace?: string | null; trackingOutOfDateModels: boolean; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveDataTypeRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveDataTypeRequestModel.ts index be2bcd9a8b..9d63dde08c 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveDataTypeRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveDataTypeRequestModel.ts @@ -6,3 +6,4 @@ export type MoveDataTypeRequestModel = { targetId?: string | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveDictionaryRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveDictionaryRequestModel.ts index 0787659d09..a55c6877a2 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveDictionaryRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveDictionaryRequestModel.ts @@ -6,3 +6,4 @@ export type MoveDictionaryRequestModel = { targetId?: string | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveDocumentRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveDocumentRequestModel.ts index 36630780f9..0dd9fe3ca0 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveDocumentRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveDocumentRequestModel.ts @@ -3,6 +3,9 @@ /* tslint:disable */ /* eslint-disable */ +import type { ReferenceByIdModel } from './ReferenceByIdModel'; + export type MoveDocumentRequestModel = { - targetId?: string | null; + target?: ReferenceByIdModel | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveDocumentTypeRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveDocumentTypeRequestModel.ts index ac8f344a4f..b61b053f9d 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveDocumentTypeRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveDocumentTypeRequestModel.ts @@ -3,7 +3,9 @@ /* tslint:disable */ /* eslint-disable */ +import type { ReferenceByIdModel } from './ReferenceByIdModel'; + export type MoveDocumentTypeRequestModel = { - targetId?: string | null; + target?: ReferenceByIdModel | null; }; diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveMediaRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveMediaRequestModel.ts index 487a8e6911..caea949b55 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveMediaRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveMediaRequestModel.ts @@ -3,6 +3,9 @@ /* tslint:disable */ /* eslint-disable */ +import type { ReferenceByIdModel } from './ReferenceByIdModel'; + export type MoveMediaRequestModel = { - targetId?: string | null; + target?: ReferenceByIdModel | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveMediaTypeRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveMediaTypeRequestModel.ts index ea0f0e56ed..d3b5a7c349 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveMediaTypeRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/MoveMediaTypeRequestModel.ts @@ -3,7 +3,9 @@ /* tslint:disable */ /* eslint-disable */ +import type { ReferenceByIdModel } from './ReferenceByIdModel'; + export type MoveMediaTypeRequestModel = { - targetId?: string | null; + target?: ReferenceByIdModel | null; }; diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/NamedEntityTreeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/NamedEntityTreeItemResponseModel.ts new file mode 100644 index 0000000000..b46ea3126a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/NamedEntityTreeItemResponseModel.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { EntityTreeItemResponseModel } from './EntityTreeItemResponseModel'; + +export type NamedEntityTreeItemResponseModel = (EntityTreeItemResponseModel & { + name: string; +}); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/NamedItemResponseModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/NamedItemResponseModelBaseModel.ts new file mode 100644 index 0000000000..d7a2882b2c --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/NamedItemResponseModelBaseModel.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type NamedItemResponseModelBaseModel = { + id: string; + name: string; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/NoopSetupTwoFactorModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/NoopSetupTwoFactorModel.ts new file mode 100644 index 0000000000..f3b8fe2761 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/NoopSetupTwoFactorModel.ts @@ -0,0 +1,6 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type NoopSetupTwoFactorModel = Record; diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ObjectTypeResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ObjectTypeResponseModel.ts index cb92a099d4..c40acbeaf2 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ObjectTypeResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ObjectTypeResponseModel.ts @@ -7,3 +7,4 @@ export type ObjectTypeResponseModel = { name?: string | null; id: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/OkResult.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/OkResult.ts index 4f2455f202..a199ea6e61 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/OkResult.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/OkResult.ts @@ -6,3 +6,4 @@ export type OkResult = { statusCode: number; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/OutOfDateStatusResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/OutOfDateStatusResponseModel.ts index b213d4c4ef..59c7d9adab 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/OutOfDateStatusResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/OutOfDateStatusResponseModel.ts @@ -8,3 +8,4 @@ import type { OutOfDateTypeModel } from './OutOfDateTypeModel'; export type OutOfDateStatusResponseModel = { status: OutOfDateTypeModel; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PackageConfigurationResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PackageConfigurationResponseModel.ts new file mode 100644 index 0000000000..73634e2f42 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PackageConfigurationResponseModel.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type PackageConfigurationResponseModel = { + marketplaceUrl: string; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PackageDefinitionResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PackageDefinitionResponseModel.ts index f023f9d6eb..f5248ab237 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PackageDefinitionResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PackageDefinitionResponseModel.ts @@ -6,6 +6,7 @@ import type { PackageModelBaseModel } from './PackageModelBaseModel'; export type PackageDefinitionResponseModel = (PackageModelBaseModel & { -id: string; -packagePath: string; + id: string; + packagePath: string; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PackageManifestResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PackageManifestResponseModel.ts index 92a4b66230..c247a475af 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PackageManifestResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PackageManifestResponseModel.ts @@ -8,3 +8,4 @@ export type PackageManifestResponseModel = { version?: string | null; extensions: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PackageMigrationStatusResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PackageMigrationStatusResponseModel.ts index c5f667f4b2..fa38491d4b 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PackageMigrationStatusResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PackageMigrationStatusResponseModel.ts @@ -7,3 +7,4 @@ export type PackageMigrationStatusResponseModel = { packageName: string; hasPendingMigrations: boolean; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PackageModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PackageModelBaseModel.ts index 3c3ff2db0f..71ee36a68b 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PackageModelBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PackageModelBaseModel.ts @@ -19,3 +19,4 @@ export type PackageModelBaseModel = { languages: Array; dictionaryItems: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedAllowedDocumentTypeModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedAllowedDocumentTypeModel.ts new file mode 100644 index 0000000000..f0df413068 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedAllowedDocumentTypeModel.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { AllowedDocumentTypeModel } from './AllowedDocumentTypeModel'; + +export type PagedAllowedDocumentTypeModel = { + total: number; + items: Array; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedAllowedMediaTypeModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedAllowedMediaTypeModel.ts new file mode 100644 index 0000000000..48ca45fd60 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedAllowedMediaTypeModel.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { AllowedMediaTypeModel } from './AllowedMediaTypeModel'; + +export type PagedAllowedMediaTypeModel = { + total: number; + items: Array; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedAuditLogResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedAuditLogResponseModel.ts index 6a066f18fd..9dcaf0c733 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedAuditLogResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedAuditLogResponseModel.ts @@ -9,3 +9,4 @@ export type PagedAuditLogResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedAuditLogWithUsernameResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedAuditLogWithUsernameResponseModel.ts index 42efe9e7e1..5ff9186405 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedAuditLogWithUsernameResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedAuditLogWithUsernameResponseModel.ts @@ -9,3 +9,4 @@ export type PagedAuditLogWithUsernameResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedCultureReponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedCultureReponseModel.ts index 03f9ee5c18..437ec404fa 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedCultureReponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedCultureReponseModel.ts @@ -9,3 +9,4 @@ export type PagedCultureReponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDataTypeTreeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDataTypeTreeItemResponseModel.ts index b8cb650392..fd81a53b86 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDataTypeTreeItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDataTypeTreeItemResponseModel.ts @@ -9,3 +9,4 @@ export type PagedDataTypeTreeItemResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDictionaryOverviewResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDictionaryOverviewResponseModel.ts index 519036636d..7ce857aa31 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDictionaryOverviewResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDictionaryOverviewResponseModel.ts @@ -9,3 +9,4 @@ export type PagedDictionaryOverviewResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDocumentBlueprintTreeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDocumentBlueprintTreeItemResponseModel.ts index a29f7755d0..9bf8a5c863 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDocumentBlueprintTreeItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDocumentBlueprintTreeItemResponseModel.ts @@ -9,3 +9,4 @@ export type PagedDocumentBlueprintTreeItemResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDocumentRecycleBinItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDocumentRecycleBinItemResponseModel.ts new file mode 100644 index 0000000000..1a6958d31f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDocumentRecycleBinItemResponseModel.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { DocumentRecycleBinItemResponseModel } from './DocumentRecycleBinItemResponseModel'; + +export type PagedDocumentRecycleBinItemResponseModel = { + total: number; + items: Array; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDocumentTreeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDocumentTreeItemResponseModel.ts index 3e8adf405e..2399cfc00c 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDocumentTreeItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDocumentTreeItemResponseModel.ts @@ -9,3 +9,4 @@ export type PagedDocumentTreeItemResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDocumentTypeResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDocumentTypeResponseModel.ts deleted file mode 100644 index 062633b222..0000000000 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDocumentTypeResponseModel.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -import type { DocumentTypeResponseModel } from './DocumentTypeResponseModel'; - -export type PagedDocumentTypeResponseModel = { - total: number; - items: Array; -}; diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDocumentTypeTreeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDocumentTypeTreeItemResponseModel.ts index d7dd2018d4..4f40e9efe9 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDocumentTypeTreeItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedDocumentTypeTreeItemResponseModel.ts @@ -9,3 +9,4 @@ export type PagedDocumentTypeTreeItemResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedEntityTreeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedEntityTreeItemResponseModel.ts deleted file mode 100644 index d6bef5d912..0000000000 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedEntityTreeItemResponseModel.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -import type { ContentTreeItemResponseModel } from './ContentTreeItemResponseModel'; -import type { DataTypeTreeItemResponseModel } from './DataTypeTreeItemResponseModel'; -import type { DocumentBlueprintTreeItemResponseModel } from './DocumentBlueprintTreeItemResponseModel'; -import type { DocumentTreeItemResponseModel } from './DocumentTreeItemResponseModel'; -import type { DocumentTypeTreeItemResponseModel } from './DocumentTypeTreeItemResponseModel'; -import type { EntityTreeItemResponseModel } from './EntityTreeItemResponseModel'; -import type { FolderTreeItemResponseModel } from './FolderTreeItemResponseModel'; -import type { MediaTreeItemResponseModel } from './MediaTreeItemResponseModel'; -import type { MediaTypeTreeItemResponseModel } from './MediaTypeTreeItemResponseModel'; - -export type PagedEntityTreeItemResponseModel = { - total: number; - items: Array<(EntityTreeItemResponseModel | ContentTreeItemResponseModel | DataTypeTreeItemResponseModel | DocumentBlueprintTreeItemResponseModel | DocumentTreeItemResponseModel | DocumentTypeTreeItemResponseModel | FolderTreeItemResponseModel | MediaTreeItemResponseModel | MediaTypeTreeItemResponseModel)>; -}; diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedFileSystemTreeItemPresentationModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedFileSystemTreeItemPresentationModel.ts index 894c7f5407..443c23df29 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedFileSystemTreeItemPresentationModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedFileSystemTreeItemPresentationModel.ts @@ -9,3 +9,4 @@ export type PagedFileSystemTreeItemPresentationModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedHealthCheckGroupResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedHealthCheckGroupResponseModel.ts index 2d837be56f..d93685d9d4 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedHealthCheckGroupResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedHealthCheckGroupResponseModel.ts @@ -9,3 +9,4 @@ export type PagedHealthCheckGroupResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedHelpPageResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedHelpPageResponseModel.ts index 4fbc3ba672..04c50d6e85 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedHelpPageResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedHelpPageResponseModel.ts @@ -9,3 +9,4 @@ export type PagedHelpPageResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedIndexResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedIndexResponseModel.ts index eeadb6fd50..7c0c4638c3 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedIndexResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedIndexResponseModel.ts @@ -9,3 +9,4 @@ export type PagedIndexResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedLanguageResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedLanguageResponseModel.ts index 11ebfa641b..37fe3d3913 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedLanguageResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedLanguageResponseModel.ts @@ -9,3 +9,4 @@ export type PagedLanguageResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedLogMessageResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedLogMessageResponseModel.ts index 42537c99ff..cf4fc66449 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedLogMessageResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedLogMessageResponseModel.ts @@ -9,3 +9,4 @@ export type PagedLogMessageResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedLogTemplateResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedLogTemplateResponseModel.ts index 3d38f359b8..291011a872 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedLogTemplateResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedLogTemplateResponseModel.ts @@ -9,3 +9,4 @@ export type PagedLogTemplateResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedLoggerResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedLoggerResponseModel.ts index ca927c7b3e..77083fc931 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedLoggerResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedLoggerResponseModel.ts @@ -9,3 +9,4 @@ export type PagedLoggerResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedMediaRecycleBinItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedMediaRecycleBinItemResponseModel.ts new file mode 100644 index 0000000000..1918188011 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedMediaRecycleBinItemResponseModel.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { MediaRecycleBinItemResponseModel } from './MediaRecycleBinItemResponseModel'; + +export type PagedMediaRecycleBinItemResponseModel = { + total: number; + items: Array; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedMediaTreeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedMediaTreeItemResponseModel.ts index 148e0ef107..864dce738f 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedMediaTreeItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedMediaTreeItemResponseModel.ts @@ -9,3 +9,4 @@ export type PagedMediaTreeItemResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedMediaTypeTreeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedMediaTypeTreeItemResponseModel.ts index 9c79ecc991..d22af1c59c 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedMediaTypeTreeItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedMediaTypeTreeItemResponseModel.ts @@ -9,3 +9,4 @@ export type PagedMediaTypeTreeItemResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedNamedEntityTreeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedNamedEntityTreeItemResponseModel.ts new file mode 100644 index 0000000000..8af4c598e0 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedNamedEntityTreeItemResponseModel.ts @@ -0,0 +1,17 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { DataTypeTreeItemResponseModel } from './DataTypeTreeItemResponseModel'; +import type { DocumentBlueprintTreeItemResponseModel } from './DocumentBlueprintTreeItemResponseModel'; +import type { DocumentTypeTreeItemResponseModel } from './DocumentTypeTreeItemResponseModel'; +import type { FolderTreeItemResponseModel } from './FolderTreeItemResponseModel'; +import type { MediaTypeTreeItemResponseModel } from './MediaTypeTreeItemResponseModel'; +import type { NamedEntityTreeItemResponseModel } from './NamedEntityTreeItemResponseModel'; + +export type PagedNamedEntityTreeItemResponseModel = { + total: number; + items: Array<(NamedEntityTreeItemResponseModel | DataTypeTreeItemResponseModel | DocumentBlueprintTreeItemResponseModel | DocumentTypeTreeItemResponseModel | FolderTreeItemResponseModel | MediaTypeTreeItemResponseModel)>; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedObjectTypeResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedObjectTypeResponseModel.ts index fca658db05..77d8106b39 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedObjectTypeResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedObjectTypeResponseModel.ts @@ -9,3 +9,4 @@ export type PagedObjectTypeResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedPackageDefinitionResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedPackageDefinitionResponseModel.ts index f972bb31ad..e42eb299ee 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedPackageDefinitionResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedPackageDefinitionResponseModel.ts @@ -9,3 +9,4 @@ export type PagedPackageDefinitionResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedPackageMigrationStatusResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedPackageMigrationStatusResponseModel.ts index 96b1150422..aa3f4f4ced 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedPackageMigrationStatusResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedPackageMigrationStatusResponseModel.ts @@ -9,3 +9,4 @@ export type PagedPackageMigrationStatusResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedProblemDetailsModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedProblemDetailsModel.ts index 21dfd92bd2..5291741485 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedProblemDetailsModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedProblemDetailsModel.ts @@ -9,3 +9,4 @@ export type PagedProblemDetailsModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedRecycleBinItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedRecycleBinItemResponseModel.ts deleted file mode 100644 index c8a37e4108..0000000000 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedRecycleBinItemResponseModel.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -import type { RecycleBinItemResponseModel } from './RecycleBinItemResponseModel'; - -export type PagedRecycleBinItemResponseModel = { - total: number; - items: Array; -}; diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedRedirectUrlResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedRedirectUrlResponseModel.ts index 7aaabed52d..e749134ad3 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedRedirectUrlResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedRedirectUrlResponseModel.ts @@ -9,3 +9,4 @@ export type PagedRedirectUrlResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedRelationItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedRelationItemResponseModel.ts index 21c2842c64..47e1960065 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedRelationItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedRelationItemResponseModel.ts @@ -9,3 +9,4 @@ export type PagedRelationItemResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedRelationResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedRelationResponseModel.ts index f88c351073..377517e398 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedRelationResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedRelationResponseModel.ts @@ -9,3 +9,4 @@ export type PagedRelationResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedSavedLogSearchResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedSavedLogSearchResponseModel.ts index ab79aa441c..8eebf10ebc 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedSavedLogSearchResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedSavedLogSearchResponseModel.ts @@ -9,3 +9,4 @@ export type PagedSavedLogSearchResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedSearchResultResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedSearchResultResponseModel.ts index d3750e2f0a..233891717d 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedSearchResultResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedSearchResultResponseModel.ts @@ -9,3 +9,4 @@ export type PagedSearchResultResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedSearcherResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedSearcherResponseModel.ts index bf9894dada..c39bc2751e 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedSearcherResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedSearcherResponseModel.ts @@ -9,3 +9,4 @@ export type PagedSearcherResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedTagResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedTagResponseModel.ts index 85eefdb74c..3134a3ee4f 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedTagResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedTagResponseModel.ts @@ -9,3 +9,4 @@ export type PagedTagResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedTelemetryResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedTelemetryResponseModel.ts index c47f7fe12f..0bcd9b1d9a 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedTelemetryResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedTelemetryResponseModel.ts @@ -9,3 +9,4 @@ export type PagedTelemetryResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedUserGroupResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedUserGroupResponseModel.ts index 533352e2f3..a1bf825127 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedUserGroupResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedUserGroupResponseModel.ts @@ -9,3 +9,4 @@ export type PagedUserGroupResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedUserResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedUserResponseModel.ts index d365e899ae..06fbaf0d50 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedUserResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PagedUserResponseModel.ts @@ -9,3 +9,4 @@ export type PagedUserResponseModel = { total: number; items: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PartialViewSnippetItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PartialViewSnippetItemResponseModel.ts index 30611f68df..0e4707e702 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PartialViewSnippetItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PartialViewSnippetItemResponseModel.ts @@ -7,3 +7,4 @@ export type PartialViewSnippetItemResponseModel = { id: string; name: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ProfilingStatusRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ProfilingStatusRequestModel.ts index 0b74508810..5c48e0da66 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ProfilingStatusRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ProfilingStatusRequestModel.ts @@ -6,3 +6,4 @@ export type ProfilingStatusRequestModel = { enabled: boolean; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ProfilingStatusResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ProfilingStatusResponseModel.ts index 52924fa000..8717638558 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ProfilingStatusResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ProfilingStatusResponseModel.ts @@ -6,3 +6,4 @@ export type ProfilingStatusResponseModel = { enabled: boolean; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PropertyTypeAppearanceModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PropertyTypeAppearanceModel.ts index 6762244b28..f690a3f46c 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PropertyTypeAppearanceModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PropertyTypeAppearanceModel.ts @@ -6,3 +6,4 @@ export type PropertyTypeAppearanceModel = { labelOnTop: boolean; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PropertyTypeContainerModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PropertyTypeContainerModelBaseModel.ts index ec8efe30de..6009b9eefb 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PropertyTypeContainerModelBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PropertyTypeContainerModelBaseModel.ts @@ -3,10 +3,13 @@ /* tslint:disable */ /* eslint-disable */ +import type { ReferenceByIdModel } from './ReferenceByIdModel'; + export type PropertyTypeContainerModelBaseModel = { id: string; - parentId?: string | null; + parent?: ReferenceByIdModel | null; name?: string | null; type: string; sortOrder: number; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PropertyTypeModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PropertyTypeModelBaseModel.ts index 0f4e010b14..46d414389d 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PropertyTypeModelBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PropertyTypeModelBaseModel.ts @@ -5,17 +5,19 @@ import type { PropertyTypeAppearanceModel } from './PropertyTypeAppearanceModel'; import type { PropertyTypeValidationModel } from './PropertyTypeValidationModel'; +import type { ReferenceByIdModel } from './ReferenceByIdModel'; export type PropertyTypeModelBaseModel = { id: string; - containerId?: string | null; + container?: ReferenceByIdModel | null; sortOrder: number; alias: string; name: string; description?: string | null; - dataTypeId: string; + dataType: ReferenceByIdModel; variesByCulture: boolean; variesBySegment: boolean; validation: PropertyTypeValidationModel; appearance: PropertyTypeAppearanceModel; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PropertyTypeValidationModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PropertyTypeValidationModel.ts index cf34459c15..fda613e272 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PropertyTypeValidationModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PropertyTypeValidationModel.ts @@ -9,3 +9,4 @@ export type PropertyTypeValidationModel = { regEx?: string | null; regExMessage?: string | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublicAccessBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublicAccessBaseModel.ts index bbae480c80..95c376a9b8 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublicAccessBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublicAccessBaseModel.ts @@ -7,3 +7,4 @@ export type PublicAccessBaseModel = { loginPageId: string; errorPageId: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublicAccessRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublicAccessRequestModel.ts index 31fc5d5e4a..60f518c835 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublicAccessRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublicAccessRequestModel.ts @@ -6,6 +6,7 @@ import type { PublicAccessBaseModel } from './PublicAccessBaseModel'; export type PublicAccessRequestModel = (PublicAccessBaseModel & { -memberUserNames: Array; -memberGroupNames: Array; + memberUserNames: Array; + memberGroupNames: Array; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublicAccessResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublicAccessResponseModel.ts index 5504449d82..f6b2145385 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublicAccessResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublicAccessResponseModel.ts @@ -8,6 +8,7 @@ import type { MemberItemResponseModel } from './MemberItemResponseModel'; import type { PublicAccessBaseModel } from './PublicAccessBaseModel'; export type PublicAccessResponseModel = (PublicAccessBaseModel & { -members: Array; -groups: Array; + members: Array; + groups: Array; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublishDocumentRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublishDocumentRequestModel.ts index 3057b14eb9..18355d089b 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublishDocumentRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublishDocumentRequestModel.ts @@ -6,3 +6,4 @@ export type PublishDocumentRequestModel = { cultures: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublishDocumentWithDescendantsRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublishDocumentWithDescendantsRequestModel.ts index 141737e557..270f4d9c43 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublishDocumentWithDescendantsRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublishDocumentWithDescendantsRequestModel.ts @@ -6,5 +6,6 @@ import type { PublishDocumentRequestModel } from './PublishDocumentRequestModel'; export type PublishDocumentWithDescendantsRequestModel = (PublishDocumentRequestModel & { -includeUnpublishedDescendants: boolean; + includeUnpublishedDescendants: boolean; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublishedStateModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublishedStateModel.ts deleted file mode 100644 index 30b0c07b45..0000000000 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/PublishedStateModel.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -export enum PublishedStateModel { - PUBLISHED = 'Published', - UNPUBLISHED = 'Unpublished', - PUBLISHING = 'Publishing', - UNPUBLISHING = 'Unpublishing', -} diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RecycleBinItemResponseModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RecycleBinItemResponseModelBaseModel.ts new file mode 100644 index 0000000000..2666184305 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RecycleBinItemResponseModelBaseModel.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { ItemReferenceByIdResponseModel } from './ItemReferenceByIdResponseModel'; + +export type RecycleBinItemResponseModelBaseModel = { + id: string; + type: string; + hasChildren: boolean; + parent?: ItemReferenceByIdResponseModel | null; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RedirectUrlResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RedirectUrlResponseModel.ts index 59247cb71f..22d2ff41b8 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RedirectUrlResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RedirectUrlResponseModel.ts @@ -11,3 +11,4 @@ export type RedirectUrlResponseModel = { contentId: string; culture?: string | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RedirectUrlStatusResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RedirectUrlStatusResponseModel.ts index b508ad3c69..ee5065a2a0 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RedirectUrlStatusResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RedirectUrlStatusResponseModel.ts @@ -9,3 +9,4 @@ export type RedirectUrlStatusResponseModel = { status: RedirectStatusModel; userIsAdmin: boolean; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ReferenceByIdModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ReferenceByIdModel.ts new file mode 100644 index 0000000000..5085db2e12 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ReferenceByIdModel.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type ReferenceByIdModel = { + id: string; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RelationItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RelationItemResponseModel.ts index d416deaada..48a8302000 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RelationItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RelationItemResponseModel.ts @@ -15,3 +15,4 @@ export type RelationItemResponseModel = { relationTypeIsBidirectional: boolean; relationTypeIsDependency: boolean; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RelationResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RelationResponseModel.ts index 7aadac76cd..af7f600b3c 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RelationResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RelationResponseModel.ts @@ -11,3 +11,4 @@ export type RelationResponseModel = { createDate: string; comment?: string | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RelationTypeBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RelationTypeBaseModel.ts index 4bc295f8e7..93275aa12f 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RelationTypeBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RelationTypeBaseModel.ts @@ -10,3 +10,4 @@ export type RelationTypeBaseModel = { childObjectType?: string | null; isDependency: boolean; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RelationTypeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RelationTypeItemResponseModel.ts index a24ffdf31d..f156f0987d 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RelationTypeItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RelationTypeItemResponseModel.ts @@ -3,6 +3,7 @@ /* tslint:disable */ /* eslint-disable */ -import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; +import type { NamedItemResponseModelBaseModel } from './NamedItemResponseModelBaseModel'; + +export type RelationTypeItemResponseModel = NamedItemResponseModelBaseModel; -export type RelationTypeItemResponseModel = ItemResponseModelBaseModel; diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RelationTypeResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RelationTypeResponseModel.ts index 631cd5bc22..990febe8b7 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RelationTypeResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/RelationTypeResponseModel.ts @@ -6,10 +6,11 @@ import type { RelationTypeBaseModel } from './RelationTypeBaseModel'; export type RelationTypeResponseModel = (RelationTypeBaseModel & { -id: string; -alias?: string | null; -path: string; -isSystemRelationType: boolean; -parentObjectTypeName?: string | null; -childObjectTypeName?: string | null; + id: string; + alias?: string | null; + path: string; + isSystemRelationType: boolean; + parentObjectTypeName?: string | null; + childObjectTypeName?: string | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ResendInviteUserRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ResendInviteUserRequestModel.ts index be55852f21..08258d5a05 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ResendInviteUserRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ResendInviteUserRequestModel.ts @@ -7,3 +7,4 @@ export type ResendInviteUserRequestModel = { userId: string; message?: string | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ResetPasswordRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ResetPasswordRequestModel.ts index 39cb212ef6..efe0818403 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ResetPasswordRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ResetPasswordRequestModel.ts @@ -6,3 +6,4 @@ export type ResetPasswordRequestModel = { email: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ResetPasswordTokenRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ResetPasswordTokenRequestModel.ts index e0f4c93d93..513669862d 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ResetPasswordTokenRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ResetPasswordTokenRequestModel.ts @@ -6,5 +6,6 @@ import type { VerifyResetPasswordTokenRequestModel } from './VerifyResetPasswordTokenRequestModel'; export type ResetPasswordTokenRequestModel = (VerifyResetPasswordTokenRequestModel & { -password: string; + password: string; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SavedLogSearchPresenationBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SavedLogSearchPresenationBaseModel.ts index 7621584428..8e8e032cf0 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SavedLogSearchPresenationBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SavedLogSearchPresenationBaseModel.ts @@ -7,3 +7,4 @@ export type SavedLogSearchPresenationBaseModel = { name: string; query: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SavedLogSearchRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SavedLogSearchRequestModel.ts index 82c8b8cc7d..c73ea6edcf 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SavedLogSearchRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SavedLogSearchRequestModel.ts @@ -6,3 +6,4 @@ import type { SavedLogSearchPresenationBaseModel } from './SavedLogSearchPresenationBaseModel'; export type SavedLogSearchRequestModel = SavedLogSearchPresenationBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SavedLogSearchResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SavedLogSearchResponseModel.ts index a50bec2f5b..764e26b616 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SavedLogSearchResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SavedLogSearchResponseModel.ts @@ -6,3 +6,4 @@ import type { SavedLogSearchPresenationBaseModel } from './SavedLogSearchPresenationBaseModel'; export type SavedLogSearchResponseModel = SavedLogSearchPresenationBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SearchResultResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SearchResultResponseModel.ts index 4754293aa4..4e44168a7a 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SearchResultResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SearchResultResponseModel.ts @@ -11,3 +11,4 @@ export type SearchResultResponseModel = { readonly fieldCount: number; fields: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SearcherResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SearcherResponseModel.ts index 503de69d84..0515d91ea8 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SearcherResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SearcherResponseModel.ts @@ -6,3 +6,4 @@ export type SearcherResponseModel = { name: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ServerConfigurationItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ServerConfigurationItemResponseModel.ts index d7d0f128a2..4e97e60583 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ServerConfigurationItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ServerConfigurationItemResponseModel.ts @@ -7,3 +7,4 @@ export type ServerConfigurationItemResponseModel = { name: string; data: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ServerInformationResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ServerInformationResponseModel.ts index 443adf3c64..3625d63958 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ServerInformationResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ServerInformationResponseModel.ts @@ -11,3 +11,4 @@ export type ServerInformationResponseModel = { baseUtcOffset: string; runtimeMode: RuntimeModeModel; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ServerStatusResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ServerStatusResponseModel.ts index 2927fb1143..2c92b763bf 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ServerStatusResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ServerStatusResponseModel.ts @@ -8,3 +8,4 @@ import type { RuntimeLevelModel } from './RuntimeLevelModel'; export type ServerStatusResponseModel = { serverStatus: RuntimeLevelModel; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SetAvatarRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SetAvatarRequestModel.ts index f6f631ba60..767ffe2809 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SetAvatarRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SetAvatarRequestModel.ts @@ -6,3 +6,4 @@ export type SetAvatarRequestModel = { fileId: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SetTourStatusRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SetTourStatusRequestModel.ts index d9dd413b92..b92400222f 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SetTourStatusRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SetTourStatusRequestModel.ts @@ -6,3 +6,4 @@ import type { TourStatusModel } from './TourStatusModel'; export type SetTourStatusRequestModel = TourStatusModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SortingRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SortingRequestModel.ts index 1b54b780a7..794198a0d3 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SortingRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/SortingRequestModel.ts @@ -9,3 +9,4 @@ export type SortingRequestModel = { parentId?: string | null; sorting: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TagResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TagResponseModel.ts index 0b577c8dd1..4b2b6a2bcc 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TagResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TagResponseModel.ts @@ -9,3 +9,4 @@ export type TagResponseModel = { group?: string | null; nodeCount: number; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TelemetryRepresentationBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TelemetryRepresentationBaseModel.ts index 2283988342..fb7b6286a9 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TelemetryRepresentationBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TelemetryRepresentationBaseModel.ts @@ -8,3 +8,4 @@ import type { TelemetryLevelModel } from './TelemetryLevelModel'; export type TelemetryRepresentationBaseModel = { telemetryLevel: TelemetryLevelModel; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TelemetryRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TelemetryRequestModel.ts index 3a745afcd8..4038ab5922 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TelemetryRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TelemetryRequestModel.ts @@ -6,3 +6,4 @@ import type { TelemetryRepresentationBaseModel } from './TelemetryRepresentationBaseModel'; export type TelemetryRequestModel = TelemetryRepresentationBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TelemetryResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TelemetryResponseModel.ts index 57aef89262..6845564be7 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TelemetryResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TelemetryResponseModel.ts @@ -6,3 +6,4 @@ import type { TelemetryRepresentationBaseModel } from './TelemetryRepresentationBaseModel'; export type TelemetryResponseModel = TelemetryRepresentationBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateConfigurationResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateConfigurationResponseModel.ts new file mode 100644 index 0000000000..1236e86306 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateConfigurationResponseModel.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type TemplateConfigurationResponseModel = { + disabled: boolean; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateItemResponseModel.ts index 3efc90c12f..dc6a62ed51 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateItemResponseModel.ts @@ -3,8 +3,9 @@ /* tslint:disable */ /* eslint-disable */ -import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; +import type { NamedItemResponseModelBaseModel } from './NamedItemResponseModelBaseModel'; -export type TemplateItemResponseModel = (ItemResponseModelBaseModel & { -alias: string; +export type TemplateItemResponseModel = (NamedItemResponseModelBaseModel & { + alias: string; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateModelBaseModel.ts index ad404247f4..788f0cfcd9 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateModelBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateModelBaseModel.ts @@ -8,3 +8,4 @@ export type TemplateModelBaseModel = { alias: string; content?: string | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryExecuteFilterPresentationModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryExecuteFilterPresentationModel.ts index 25b146a205..fa39f4da74 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryExecuteFilterPresentationModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryExecuteFilterPresentationModel.ts @@ -10,3 +10,4 @@ export type TemplateQueryExecuteFilterPresentationModel = { constraintValue: string; operator: OperatorModel; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryExecuteModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryExecuteModel.ts index ade50a2bc6..f241c088f5 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryExecuteModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryExecuteModel.ts @@ -13,3 +13,4 @@ export type TemplateQueryExecuteModel = { sort?: TemplateQueryExecuteSortModel | null; take: number; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryExecuteSortModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryExecuteSortModel.ts index 5f7404651e..7632a9c9a9 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryExecuteSortModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryExecuteSortModel.ts @@ -7,3 +7,4 @@ export type TemplateQueryExecuteSortModel = { propertyAlias: string; direction?: string | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryOperatorModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryOperatorModel.ts index 1ee2791623..1b5dbb4fbd 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryOperatorModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryOperatorModel.ts @@ -10,3 +10,4 @@ export type TemplateQueryOperatorModel = { operator: OperatorModel; applicableTypes: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryPropertyPresentationModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryPropertyPresentationModel.ts index 25ce716c8e..7d5c5c3d80 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryPropertyPresentationModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryPropertyPresentationModel.ts @@ -9,3 +9,4 @@ export type TemplateQueryPropertyPresentationModel = { alias: string; type: TemplateQueryPropertyTypeModel; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryResultItemPresentationModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryResultItemPresentationModel.ts index 5e2f20d647..428789e6e3 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryResultItemPresentationModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryResultItemPresentationModel.ts @@ -7,3 +7,4 @@ export type TemplateQueryResultItemPresentationModel = { icon: string; name: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryResultResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryResultResponseModel.ts index d4b8842068..6031658215 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryResultResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQueryResultResponseModel.ts @@ -11,3 +11,4 @@ export type TemplateQueryResultResponseModel = { resultCount: number; executionTime: number; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQuerySettingsResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQuerySettingsResponseModel.ts index b95e719a09..bd203fffaf 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQuerySettingsResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateQuerySettingsResponseModel.ts @@ -11,3 +11,4 @@ export type TemplateQuerySettingsResponseModel = { properties: Array; operators: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateResponseModel.ts index fdedddabc2..8bb31d576a 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateResponseModel.ts @@ -6,6 +6,7 @@ import type { TemplateModelBaseModel } from './TemplateModelBaseModel'; export type TemplateResponseModel = (TemplateModelBaseModel & { -id: string; -masterTemplateId?: string | null; + id: string; + masterTemplateId?: string | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateScaffoldResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateScaffoldResponseModel.ts index 5c469e0c80..ca6dd8badb 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateScaffoldResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemplateScaffoldResponseModel.ts @@ -6,3 +6,4 @@ export type TemplateScaffoldResponseModel = { content: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemporaryFileResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemporaryFileResponseModel.ts index d9b46f7b5b..81b830ed48 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemporaryFileResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TemporaryFileResponseModel.ts @@ -8,3 +8,4 @@ export type TemporaryFileResponseModel = { availableUntil?: string | null; fileName: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TourStatusModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TourStatusModel.ts index 9f3b56bf68..cc941f5b6e 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TourStatusModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TourStatusModel.ts @@ -8,3 +8,4 @@ export type TourStatusModel = { completed: boolean; disabled: boolean; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TreeItemPresentationModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TreeItemPresentationModel.ts index f10812b402..b6e40540ce 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TreeItemPresentationModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/TreeItemPresentationModel.ts @@ -4,7 +4,7 @@ /* eslint-disable */ export type TreeItemPresentationModel = { - name: string; type: string; hasChildren: boolean; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UnlockUsersRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UnlockUsersRequestModel.ts index c2a505eb89..b3b7422b4d 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UnlockUsersRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UnlockUsersRequestModel.ts @@ -6,3 +6,4 @@ export type UnlockUsersRequestModel = { userIds: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UnpublishDocumentRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UnpublishDocumentRequestModel.ts index 60b14d8e2a..9d603f6694 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UnpublishDocumentRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UnpublishDocumentRequestModel.ts @@ -6,3 +6,4 @@ export type UnpublishDocumentRequestModel = { culture?: string | null; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateContentForDocumentRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateContentForDocumentRequestModel.ts index db20ebd0cf..914404a689 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateContentForDocumentRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateContentForDocumentRequestModel.ts @@ -10,3 +10,4 @@ export type UpdateContentForDocumentRequestModel = { values: Array; variants: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateContentForMediaRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateContentForMediaRequestModel.ts index afe323d4ea..9abbcea7e2 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateContentForMediaRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateContentForMediaRequestModel.ts @@ -10,3 +10,4 @@ export type UpdateContentForMediaRequestModel = { values: Array; variants: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateContentTypeForDocumentTypeRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateContentTypeForDocumentTypeRequestModel.ts index a129a8ada5..752409e225 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateContentTypeForDocumentTypeRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateContentTypeForDocumentTypeRequestModel.ts @@ -3,8 +3,6 @@ /* tslint:disable */ /* eslint-disable */ -import type { ContentTypeCompositionModel } from './ContentTypeCompositionModel'; -import type { ContentTypeSortModel } from './ContentTypeSortModel'; import type { UpdateDocumentTypePropertyTypeContainerRequestModel } from './UpdateDocumentTypePropertyTypeContainerRequestModel'; import type { UpdateDocumentTypePropertyTypeRequestModel } from './UpdateDocumentTypePropertyTypeRequestModel'; @@ -19,6 +17,5 @@ export type UpdateContentTypeForDocumentTypeRequestModel = { isElement: boolean; properties: Array; containers: Array; - allowedContentTypes: Array; - compositions: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateContentTypeForMediaTypeRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateContentTypeForMediaTypeRequestModel.ts index 22c061ac82..40e766fdcc 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateContentTypeForMediaTypeRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateContentTypeForMediaTypeRequestModel.ts @@ -3,8 +3,6 @@ /* tslint:disable */ /* eslint-disable */ -import type { ContentTypeCompositionModel } from './ContentTypeCompositionModel'; -import type { ContentTypeSortModel } from './ContentTypeSortModel'; import type { UpdateMediaTypePropertyTypeContainerRequestModel } from './UpdateMediaTypePropertyTypeContainerRequestModel'; import type { UpdateMediaTypePropertyTypeRequestModel } from './UpdateMediaTypePropertyTypeRequestModel'; @@ -19,6 +17,5 @@ export type UpdateContentTypeForMediaTypeRequestModel = { isElement: boolean; properties: Array; containers: Array; - allowedContentTypes: Array; - compositions: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDataTypeRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDataTypeRequestModel.ts index 9978aba3e3..635cf63785 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDataTypeRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDataTypeRequestModel.ts @@ -6,3 +6,4 @@ import type { DataTypeModelBaseModel } from './DataTypeModelBaseModel'; export type UpdateDataTypeRequestModel = DataTypeModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDictionaryItemRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDictionaryItemRequestModel.ts index c40356ac92..1348c0ca10 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDictionaryItemRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDictionaryItemRequestModel.ts @@ -6,3 +6,4 @@ import type { DictionaryItemModelBaseModel } from './DictionaryItemModelBaseModel'; export type UpdateDictionaryItemRequestModel = DictionaryItemModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDocumentNotificationsRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDocumentNotificationsRequestModel.ts index 87870af9b6..d8f77ed0ec 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDocumentNotificationsRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDocumentNotificationsRequestModel.ts @@ -6,3 +6,4 @@ export type UpdateDocumentNotificationsRequestModel = { subscribedActionIds: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDocumentRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDocumentRequestModel.ts index 610cc928b7..75b04656c5 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDocumentRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDocumentRequestModel.ts @@ -3,8 +3,10 @@ /* tslint:disable */ /* eslint-disable */ +import type { ReferenceByIdModel } from './ReferenceByIdModel'; import type { UpdateContentForDocumentRequestModel } from './UpdateContentForDocumentRequestModel'; export type UpdateDocumentRequestModel = (UpdateContentForDocumentRequestModel & { -templateId?: string | null; + template?: ReferenceByIdModel | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDocumentTypePropertyTypeContainerRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDocumentTypePropertyTypeContainerRequestModel.ts index 7e7ff1927e..a5b9b39f26 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDocumentTypePropertyTypeContainerRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDocumentTypePropertyTypeContainerRequestModel.ts @@ -6,3 +6,4 @@ import type { PropertyTypeContainerModelBaseModel } from './PropertyTypeContainerModelBaseModel'; export type UpdateDocumentTypePropertyTypeContainerRequestModel = PropertyTypeContainerModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDocumentTypePropertyTypeRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDocumentTypePropertyTypeRequestModel.ts index 0b2283049e..ef34f46fe6 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDocumentTypePropertyTypeRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDocumentTypePropertyTypeRequestModel.ts @@ -6,3 +6,4 @@ import type { PropertyTypeModelBaseModel } from './PropertyTypeModelBaseModel'; export type UpdateDocumentTypePropertyTypeRequestModel = PropertyTypeModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDocumentTypeRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDocumentTypeRequestModel.ts index 3cf434f50d..100ddcc421 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDocumentTypeRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDocumentTypeRequestModel.ts @@ -4,10 +4,16 @@ /* eslint-disable */ import type { ContentTypeCleanupModel } from './ContentTypeCleanupModel'; +import type { DocumentTypeCompositionModel } from './DocumentTypeCompositionModel'; +import type { DocumentTypeSortModel } from './DocumentTypeSortModel'; +import type { ReferenceByIdModel } from './ReferenceByIdModel'; import type { UpdateContentTypeForDocumentTypeRequestModel } from './UpdateContentTypeForDocumentTypeRequestModel'; export type UpdateDocumentTypeRequestModel = (UpdateContentTypeForDocumentTypeRequestModel & { -allowedTemplateIds: Array; -defaultTemplateId?: string | null; -cleanup: ContentTypeCleanupModel; + allowedTemplates: Array; + defaultTemplate?: ReferenceByIdModel | null; + cleanup: ContentTypeCleanupModel; + allowedDocumentTypes: Array; + compositions: Array; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDomainsRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDomainsRequestModel.ts index 3d3c549ae7..2b35548f52 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDomainsRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateDomainsRequestModel.ts @@ -6,3 +6,4 @@ import type { DomainsPresentationModelBaseModel } from './DomainsPresentationModelBaseModel'; export type UpdateDomainsRequestModel = DomainsPresentationModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateFolderResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateFolderResponseModel.ts index edc45ec4b7..d5efa20832 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateFolderResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateFolderResponseModel.ts @@ -6,3 +6,4 @@ import type { FolderModelBaseModel } from './FolderModelBaseModel'; export type UpdateFolderResponseModel = FolderModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateLanguageRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateLanguageRequestModel.ts index d615a63913..9b4c7f6c2a 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateLanguageRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateLanguageRequestModel.ts @@ -6,3 +6,4 @@ import type { LanguageModelBaseModel } from './LanguageModelBaseModel'; export type UpdateLanguageRequestModel = LanguageModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateMediaRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateMediaRequestModel.ts index 83d3b927f1..66f8fcd3ca 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateMediaRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateMediaRequestModel.ts @@ -6,3 +6,4 @@ import type { UpdateContentForMediaRequestModel } from './UpdateContentForMediaRequestModel'; export type UpdateMediaRequestModel = UpdateContentForMediaRequestModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateMediaTypePropertyTypeContainerRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateMediaTypePropertyTypeContainerRequestModel.ts index 72a97d0889..784c0540ad 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateMediaTypePropertyTypeContainerRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateMediaTypePropertyTypeContainerRequestModel.ts @@ -6,3 +6,4 @@ import type { PropertyTypeContainerModelBaseModel } from './PropertyTypeContainerModelBaseModel'; export type UpdateMediaTypePropertyTypeContainerRequestModel = PropertyTypeContainerModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateMediaTypePropertyTypeRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateMediaTypePropertyTypeRequestModel.ts index e4c5ceba6c..01c5dca483 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateMediaTypePropertyTypeRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateMediaTypePropertyTypeRequestModel.ts @@ -6,3 +6,4 @@ import type { PropertyTypeModelBaseModel } from './PropertyTypeModelBaseModel'; export type UpdateMediaTypePropertyTypeRequestModel = PropertyTypeModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateMediaTypeRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateMediaTypeRequestModel.ts index f6c10d3ed6..25341fe97d 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateMediaTypeRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateMediaTypeRequestModel.ts @@ -3,6 +3,12 @@ /* tslint:disable */ /* eslint-disable */ +import type { MediaTypeCompositionModel } from './MediaTypeCompositionModel'; +import type { MediaTypeSortModel } from './MediaTypeSortModel'; import type { UpdateContentTypeForMediaTypeRequestModel } from './UpdateContentTypeForMediaTypeRequestModel'; -export type UpdateMediaTypeRequestModel = UpdateContentTypeForMediaTypeRequestModel; +export type UpdateMediaTypeRequestModel = (UpdateContentTypeForMediaTypeRequestModel & { + allowedMediaTypes: Array; + compositions: Array; +}); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdatePackageRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdatePackageRequestModel.ts index 7e2707f1ab..c77502d8d6 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdatePackageRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdatePackageRequestModel.ts @@ -6,5 +6,6 @@ import type { PackageModelBaseModel } from './PackageModelBaseModel'; export type UpdatePackageRequestModel = (PackageModelBaseModel & { -packagePath: string; + packagePath: string; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateRelationTypeRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateRelationTypeRequestModel.ts index 736db188a2..9311e54c4c 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateRelationTypeRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateRelationTypeRequestModel.ts @@ -6,3 +6,4 @@ import type { RelationTypeBaseModel } from './RelationTypeBaseModel'; export type UpdateRelationTypeRequestModel = RelationTypeBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateTemplateRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateTemplateRequestModel.ts index 70dd58fe7f..a4a734154c 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateTemplateRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateTemplateRequestModel.ts @@ -6,3 +6,4 @@ import type { TemplateModelBaseModel } from './TemplateModelBaseModel'; export type UpdateTemplateRequestModel = TemplateModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateUserGroupRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateUserGroupRequestModel.ts index 64311e6d95..f6f7cecb2d 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateUserGroupRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateUserGroupRequestModel.ts @@ -6,3 +6,4 @@ import type { UserGroupBaseModel } from './UserGroupBaseModel'; export type UpdateUserGroupRequestModel = UserGroupBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateUserGroupsOnUserRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateUserGroupsOnUserRequestModel.ts index cec0d70470..181ce870fe 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateUserGroupsOnUserRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateUserGroupsOnUserRequestModel.ts @@ -7,3 +7,4 @@ export type UpdateUserGroupsOnUserRequestModel = { userIds: Array; userGroupIds: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateUserRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateUserRequestModel.ts index 2550ddccb0..7be15f116c 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateUserRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateUserRequestModel.ts @@ -6,7 +6,8 @@ import type { UserPresentationBaseModel } from './UserPresentationBaseModel'; export type UpdateUserRequestModel = (UserPresentationBaseModel & { -languageIsoCode: string; -contentStartNodeIds: Array; -mediaStartNodeIds: Array; + languageIsoCode: string; + contentStartNodeIds: Array; + mediaStartNodeIds: Array; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpgradeSettingsResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpgradeSettingsResponseModel.ts index df5d70e8a8..8c003c6cc2 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpgradeSettingsResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpgradeSettingsResponseModel.ts @@ -10,3 +10,4 @@ export type UpgradeSettingsResponseModel = { oldVersion: string; readonly reportUrl: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserGroupBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserGroupBaseModel.ts index 3c96586b12..571c24d641 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserGroupBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserGroupBaseModel.ts @@ -15,3 +15,4 @@ export type UserGroupBaseModel = { mediaRootAccess: boolean; permissions: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserGroupItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserGroupItemResponseModel.ts index b0670f6efa..8ded3fdf6e 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserGroupItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserGroupItemResponseModel.ts @@ -3,8 +3,9 @@ /* tslint:disable */ /* eslint-disable */ -import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; +import type { NamedItemResponseModelBaseModel } from './NamedItemResponseModelBaseModel'; -export type UserGroupItemResponseModel = (ItemResponseModelBaseModel & { -icon?: string | null; +export type UserGroupItemResponseModel = (NamedItemResponseModelBaseModel & { + icon?: string | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserGroupResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserGroupResponseModel.ts index a82a10312a..04526f66a1 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserGroupResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserGroupResponseModel.ts @@ -6,6 +6,7 @@ import type { UserGroupBaseModel } from './UserGroupBaseModel'; export type UserGroupResponseModel = (UserGroupBaseModel & { -id: string; -isSystemGroup: boolean; + id: string; + isSystemGroup: boolean; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserInstallResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserInstallResponseModel.ts index 7849e52242..b43964ffd1 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserInstallResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserInstallResponseModel.ts @@ -9,3 +9,4 @@ export type UserInstallResponseModel = { password: string; readonly subscribeToNewsletter: boolean; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserItemResponseModel.ts index 9333611789..fbe9a652d8 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserItemResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserItemResponseModel.ts @@ -3,6 +3,7 @@ /* tslint:disable */ /* eslint-disable */ -import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; +import type { NamedItemResponseModelBaseModel } from './NamedItemResponseModelBaseModel'; + +export type UserItemResponseModel = NamedItemResponseModelBaseModel; -export type UserItemResponseModel = ItemResponseModelBaseModel; diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserPermissionModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserPermissionModel.ts index 5333844056..d154d2e05d 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserPermissionModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserPermissionModel.ts @@ -7,3 +7,4 @@ export type UserPermissionModel = { nodeKey: string; permissions: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserPermissionsResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserPermissionsResponseModel.ts index 3e63759f0f..7dfc2edb5a 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserPermissionsResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserPermissionsResponseModel.ts @@ -8,3 +8,4 @@ import type { UserPermissionModel } from './UserPermissionModel'; export type UserPermissionsResponseModel = { permissions: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserPresentationBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserPresentationBaseModel.ts index 7e559d5e69..13a3b9e8a7 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserPresentationBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserPresentationBaseModel.ts @@ -9,3 +9,4 @@ export type UserPresentationBaseModel = { name: string; userGroupIds: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserResponseModel.ts index eaf45f25dc..476b3a92b1 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserResponseModel.ts @@ -7,16 +7,17 @@ import type { UserPresentationBaseModel } from './UserPresentationBaseModel'; import type { UserStateModel } from './UserStateModel'; export type UserResponseModel = (UserPresentationBaseModel & { -id: string; -languageIsoCode?: string | null; -contentStartNodeIds: Array; -mediaStartNodeIds: Array; -avatarUrls: Array; -state: UserStateModel; -failedLoginAttempts: number; -createDate: string; -updateDate: string; -lastLoginDate?: string | null; -lastLockoutDate?: string | null; -lastPasswordChangeDate?: string | null; + id: string; + languageIsoCode?: string | null; + contentStartNodeIds: Array; + mediaStartNodeIds: Array; + avatarUrls: Array; + state: UserStateModel; + failedLoginAttempts: number; + createDate: string; + updateDate: string; + lastLoginDate?: string | null; + lastLockoutDate?: string | null; + lastPasswordChangeDate?: string | null; }); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserSettingsModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserSettingsModel.ts index 470aa4c5b9..b09ce82075 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserSettingsModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserSettingsModel.ts @@ -10,3 +10,4 @@ export type UserSettingsModel = { minNonAlphaNumericLength: number; consentLevels: Array; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserTourStatusesResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserTourStatusesResponseModel.ts index 3d3aefe868..be820dec20 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserTourStatusesResponseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserTourStatusesResponseModel.ts @@ -9,3 +9,4 @@ import type { TourStatusModel } from './TourStatusModel'; export type UserTourStatusesResponseModel = { tourStatuses: Array<(TourStatusModel | SetTourStatusRequestModel)>; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserTwoFactorProviderModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserTwoFactorProviderModel.ts new file mode 100644 index 0000000000..be0c9fc780 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UserTwoFactorProviderModel.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type UserTwoFactorProviderModel = { + providerName: string; + isEnabledOnUser: boolean; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ValueModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ValueModelBaseModel.ts index a54ec8de85..6fef1698f5 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ValueModelBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/ValueModelBaseModel.ts @@ -9,3 +9,4 @@ export type ValueModelBaseModel = { alias: string; value?: any; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VariantItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VariantItemResponseModel.ts new file mode 100644 index 0000000000..803621a39c --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VariantItemResponseModel.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { VariantItemResponseModelBaseModel } from './VariantItemResponseModelBaseModel'; + +export type VariantItemResponseModel = VariantItemResponseModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VariantTreeItemModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VariantItemResponseModelBaseModel.ts similarity index 57% rename from src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VariantTreeItemModel.ts rename to src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VariantItemResponseModelBaseModel.ts index 51552fb5f9..955c49c60c 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VariantTreeItemModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VariantItemResponseModelBaseModel.ts @@ -3,10 +3,8 @@ /* tslint:disable */ /* eslint-disable */ -import type { PublishedStateModel } from './PublishedStateModel'; - -export type VariantTreeItemModel = { +export type VariantItemResponseModelBaseModel = { name: string; culture?: string | null; - state: PublishedStateModel; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VariantModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VariantModelBaseModel.ts index 9ef0deddd0..fc747713b2 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VariantModelBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VariantModelBaseModel.ts @@ -8,3 +8,4 @@ export type VariantModelBaseModel = { segment?: string | null; name: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VariantResponseModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VariantResponseModelBaseModel.ts index 812dfa9056..62e1eea854 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VariantResponseModelBaseModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VariantResponseModelBaseModel.ts @@ -10,3 +10,4 @@ export type VariantResponseModelBaseModel = { createDate: string; updateDate: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VerifyInviteUserRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VerifyInviteUserRequestModel.ts index c5f8063e84..591a6e44ef 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VerifyInviteUserRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VerifyInviteUserRequestModel.ts @@ -7,3 +7,4 @@ export type VerifyInviteUserRequestModel = { userId: string; token: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VerifyResetPasswordTokenRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VerifyResetPasswordTokenRequestModel.ts index 3450fd521c..f0c283b399 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VerifyResetPasswordTokenRequestModel.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/VerifyResetPasswordTokenRequestModel.ts @@ -7,3 +7,4 @@ export type VerifyResetPasswordTokenRequestModel = { userId: string; resetCode: string; }; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/AuditLogResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/AuditLogResource.ts index 115a88e983..b83d457350 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/AuditLogResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/AuditLogResource.ts @@ -18,16 +18,16 @@ export class AuditLogResource { * @throws ApiError */ public static getAuditLog({ -orderDirection, -sinceDate, -skip, -take = 100, -}: { -orderDirection?: DirectionModel, -sinceDate?: string, -skip?: number, -take?: number, -}): CancelablePromise { + orderDirection, + sinceDate, + skip, + take = 100, + }: { + orderDirection?: DirectionModel, + sinceDate?: string, + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/audit-log', @@ -48,18 +48,18 @@ take?: number, * @throws ApiError */ public static getAuditLogById({ -id, -orderDirection, -sinceDate, -skip, -take = 100, -}: { -id: string, -orderDirection?: DirectionModel, -sinceDate?: string, -skip?: number, -take?: number, -}): CancelablePromise { + id, + orderDirection, + sinceDate, + skip, + take = 100, + }: { + id: string, + orderDirection?: DirectionModel, + sinceDate?: string, + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/audit-log/{id}', @@ -83,16 +83,16 @@ take?: number, * @throws ApiError */ public static getAuditLogTypeByLogType({ -logType, -sinceDate, -skip, -take = 100, -}: { -logType: AuditTypeModel, -sinceDate?: string, -skip?: number, -take?: number, -}): CancelablePromise { + logType, + sinceDate, + skip, + take = 100, + }: { + logType: AuditTypeModel, + sinceDate?: string, + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/audit-log/type/{logType}', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/CultureResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/CultureResource.ts index 7f4634a035..9147291447 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/CultureResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/CultureResource.ts @@ -15,12 +15,12 @@ export class CultureResource { * @throws ApiError */ public static getCulture({ -skip, -take = 100, -}: { -skip?: number, -take?: number, -}): CancelablePromise { + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/culture', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DataTypeResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DataTypeResource.ts index f7ebd3ff5e..f4fb9f85a5 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DataTypeResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DataTypeResource.ts @@ -5,6 +5,7 @@ import type { CopyDataTypeRequestModel } from '../models/CopyDataTypeRequestModel'; import type { CreateDataTypeRequestModel } from '../models/CreateDataTypeRequestModel'; import type { CreateFolderRequestModel } from '../models/CreateFolderRequestModel'; +import type { DatatypeConfigurationResponseModel } from '../models/DatatypeConfigurationResponseModel'; import type { DataTypeItemResponseModel } from '../models/DataTypeItemResponseModel'; import type { DataTypeReferenceResponseModel } from '../models/DataTypeReferenceResponseModel'; import type { DataTypeResponseModel } from '../models/DataTypeResponseModel'; @@ -212,6 +213,20 @@ export class DataTypeResource { }); } + /** + * @returns any Success + * @throws ApiError + */ + public static getDataTypeConfiguration(): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/data-type/configuration', + errors: { + 401: `The resource is protected and requires an authentication token`, + }, + }); + } + /** * @returns string Created * @throws ApiError diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DictionaryResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DictionaryResource.ts index 6e230f7b52..fc9a4bc384 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DictionaryResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DictionaryResource.ts @@ -8,7 +8,7 @@ import type { DictionaryItemResponseModel } from '../models/DictionaryItemRespon import type { ImportDictionaryRequestModel } from '../models/ImportDictionaryRequestModel'; import type { MoveDictionaryRequestModel } from '../models/MoveDictionaryRequestModel'; import type { PagedDictionaryOverviewResponseModel } from '../models/PagedDictionaryOverviewResponseModel'; -import type { PagedEntityTreeItemResponseModel } from '../models/PagedEntityTreeItemResponseModel'; +import type { PagedNamedEntityTreeItemResponseModel } from '../models/PagedNamedEntityTreeItemResponseModel'; import type { UpdateDictionaryItemRequestModel } from '../models/UpdateDictionaryItemRequestModel'; import type { CancelablePromise } from '../core/CancelablePromise'; @@ -59,6 +59,7 @@ export class DictionaryResource { errors: { 400: `Bad Request`, 401: `The resource is protected and requires an authentication token`, + 403: `The authenticated user do not have access to this resource`, 404: `Not Found`, 409: `Conflict`, }, @@ -132,6 +133,7 @@ export class DictionaryResource { errors: { 400: `Bad Request`, 401: `The resource is protected and requires an authentication token`, + 403: `The authenticated user do not have access to this resource`, 404: `Not Found`, }, }); @@ -236,7 +238,7 @@ export class DictionaryResource { } /** - * @returns PagedEntityTreeItemResponseModel Success + * @returns PagedNamedEntityTreeItemResponseModel Success * @throws ApiError */ public static getTreeDictionaryChildren({ @@ -247,7 +249,7 @@ export class DictionaryResource { parentId?: string, skip?: number, take?: number, - }): CancelablePromise { + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/tree/dictionary/children', @@ -263,7 +265,7 @@ export class DictionaryResource { } /** - * @returns PagedEntityTreeItemResponseModel Success + * @returns PagedNamedEntityTreeItemResponseModel Success * @throws ApiError */ public static getTreeDictionaryRoot({ @@ -272,7 +274,7 @@ export class DictionaryResource { }: { skip?: number, take?: number, - }): CancelablePromise { + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/tree/dictionary/root', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DocumentBlueprintResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DocumentBlueprintResource.ts index 0b4be9a492..d9db2af0ed 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DocumentBlueprintResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DocumentBlueprintResource.ts @@ -16,10 +16,10 @@ export class DocumentBlueprintResource { * @throws ApiError */ public static getDocumentBlueprintItem({ -id, -}: { -id?: Array, -}): CancelablePromise> { + id, + }: { + id?: Array, + }): CancelablePromise> { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/document-blueprint/item', @@ -37,12 +37,12 @@ id?: Array, * @throws ApiError */ public static getTreeDocumentBlueprintRoot({ -skip, -take = 100, -}: { -skip?: number, -take?: number, -}): CancelablePromise { + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/tree/document-blueprint/root', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DocumentResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DocumentResource.ts index 4f29ffa5b1..02787a6afd 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DocumentResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DocumentResource.ts @@ -4,14 +4,14 @@ /* eslint-disable */ import type { CopyDocumentRequestModel } from '../models/CopyDocumentRequestModel'; import type { CreateDocumentRequestModel } from '../models/CreateDocumentRequestModel'; +import type { DocumentConfigurationResponseModel } from '../models/DocumentConfigurationResponseModel'; import type { DocumentItemResponseModel } from '../models/DocumentItemResponseModel'; import type { DocumentNotificationResponseModel } from '../models/DocumentNotificationResponseModel'; import type { DocumentResponseModel } from '../models/DocumentResponseModel'; import type { DomainsResponseModel } from '../models/DomainsResponseModel'; import type { MoveDocumentRequestModel } from '../models/MoveDocumentRequestModel'; +import type { PagedDocumentRecycleBinItemResponseModel } from '../models/PagedDocumentRecycleBinItemResponseModel'; import type { PagedDocumentTreeItemResponseModel } from '../models/PagedDocumentTreeItemResponseModel'; -import type { PagedDocumentTypeResponseModel } from '../models/PagedDocumentTypeResponseModel'; -import type { PagedRecycleBinItemResponseModel } from '../models/PagedRecycleBinItemResponseModel'; import type { PublicAccessRequestModel } from '../models/PublicAccessRequestModel'; import type { PublishDocumentRequestModel } from '../models/PublishDocumentRequestModel'; import type { PublishDocumentWithDescendantsRequestModel } from '../models/PublishDocumentWithDescendantsRequestModel'; @@ -32,10 +32,10 @@ export class DocumentResource { * @throws ApiError */ public static postDocument({ -requestBody, -}: { -requestBody?: CreateDocumentRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: CreateDocumentRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/document', @@ -55,10 +55,10 @@ requestBody?: CreateDocumentRequestModel, * @throws ApiError */ public static getDocumentById({ -id, -}: { -id: string, -}): CancelablePromise { + id, + }: { + id: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/document/{id}', @@ -73,17 +73,41 @@ id: string, }); } + /** + * @returns any Success + * @throws ApiError + */ + public static deleteDocumentById({ + id, + }: { + id: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/umbraco/management/api/v1/document/{id}', + path: { + 'id': id, + }, + errors: { + 400: `Bad Request`, + 401: `The resource is protected and requires an authentication token`, + 403: `The authenticated user do not have access to this resource`, + 404: `Not Found`, + }, + }); + } + /** * @returns any Success * @throws ApiError */ public static putDocumentById({ -id, -requestBody, -}: { -id: string, -requestBody?: UpdateDocumentRequestModel, -}): CancelablePromise { + id, + requestBody, + }: { + id: string, + requestBody?: UpdateDocumentRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'PUT', url: '/umbraco/management/api/v1/document/{id}', @@ -105,12 +129,12 @@ requestBody?: UpdateDocumentRequestModel, * @throws ApiError */ public static postDocumentByIdCopy({ -id, -requestBody, -}: { -id: string, -requestBody?: CopyDocumentRequestModel, -}): CancelablePromise { + id, + requestBody, + }: { + id: string, + requestBody?: CopyDocumentRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/document/{id}/copy', @@ -133,10 +157,10 @@ requestBody?: CopyDocumentRequestModel, * @throws ApiError */ public static getDocumentByIdDomains({ -id, -}: { -id: string, -}): CancelablePromise { + id, + }: { + id: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/document/{id}/domains', @@ -155,12 +179,12 @@ id: string, * @throws ApiError */ public static putDocumentByIdDomains({ -id, -requestBody, -}: { -id: string, -requestBody?: UpdateDomainsRequestModel, -}): CancelablePromise { + id, + requestBody, + }: { + id: string, + requestBody?: UpdateDomainsRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'PUT', url: '/umbraco/management/api/v1/document/{id}/domains', @@ -180,12 +204,12 @@ requestBody?: UpdateDomainsRequestModel, * @throws ApiError */ public static putDocumentByIdMove({ -id, -requestBody, -}: { -id: string, -requestBody?: MoveDocumentRequestModel, -}): CancelablePromise { + id, + requestBody, + }: { + id: string, + requestBody?: MoveDocumentRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'PUT', url: '/umbraco/management/api/v1/document/{id}/move', @@ -207,10 +231,10 @@ requestBody?: MoveDocumentRequestModel, * @throws ApiError */ public static putDocumentByIdMoveToRecycleBin({ -id, -}: { -id: string, -}): CancelablePromise { + id, + }: { + id: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'PUT', url: '/umbraco/management/api/v1/document/{id}/move-to-recycle-bin', @@ -231,10 +255,10 @@ id: string, * @throws ApiError */ public static getDocumentByIdNotifications({ -id, -}: { -id: string, -}): CancelablePromise> { + id, + }: { + id: string, + }): CancelablePromise> { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/document/{id}/notifications', @@ -254,12 +278,12 @@ id: string, * @throws ApiError */ public static putDocumentByIdNotifications({ -id, -requestBody, -}: { -id: string, -requestBody?: UpdateDocumentNotificationsRequestModel, -}): CancelablePromise { + id, + requestBody, + }: { + id: string, + requestBody?: UpdateDocumentNotificationsRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'PUT', url: '/umbraco/management/api/v1/document/{id}/notifications', @@ -280,12 +304,12 @@ requestBody?: UpdateDocumentNotificationsRequestModel, * @throws ApiError */ public static postDocumentByIdPublicAccess({ -id, -requestBody, -}: { -id: string, -requestBody?: PublicAccessRequestModel, -}): CancelablePromise { + id, + requestBody, + }: { + id: string, + requestBody?: PublicAccessRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/document/{id}/public-access', @@ -308,10 +332,10 @@ requestBody?: PublicAccessRequestModel, * @throws ApiError */ public static deleteDocumentByIdPublicAccess({ -id, -}: { -id: string, -}): CancelablePromise { + id, + }: { + id: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'DELETE', url: '/umbraco/management/api/v1/document/{id}/public-access', @@ -327,14 +351,14 @@ id: string, } /** - * @returns void + * @returns void * @throws ApiError */ public static getDocumentByIdPublicAccess({ -id, -}: { -id: string, -}): CancelablePromise { + id, + }: { + id: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/document/{id}/public-access', @@ -354,12 +378,12 @@ id: string, * @throws ApiError */ public static putDocumentByIdPublicAccess({ -id, -requestBody, -}: { -id: string, -requestBody?: PublicAccessRequestModel, -}): CancelablePromise { + id, + requestBody, + }: { + id: string, + requestBody?: PublicAccessRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'PUT', url: '/umbraco/management/api/v1/document/{id}/public-access', @@ -381,12 +405,12 @@ requestBody?: PublicAccessRequestModel, * @throws ApiError */ public static putDocumentByIdPublish({ -id, -requestBody, -}: { -id: string, -requestBody?: (PublishDocumentRequestModel | PublishDocumentWithDescendantsRequestModel), -}): CancelablePromise { + id, + requestBody, + }: { + id: string, + requestBody?: (PublishDocumentRequestModel | PublishDocumentWithDescendantsRequestModel), + }): CancelablePromise { return __request(OpenAPI, { method: 'PUT', url: '/umbraco/management/api/v1/document/{id}/publish', @@ -409,12 +433,12 @@ requestBody?: (PublishDocumentRequestModel | PublishDocumentWithDescendantsReque * @throws ApiError */ public static putDocumentByIdPublishWithDescendants({ -id, -requestBody, -}: { -id: string, -requestBody?: PublishDocumentWithDescendantsRequestModel, -}): CancelablePromise { + id, + requestBody, + }: { + id: string, + requestBody?: PublishDocumentWithDescendantsRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'PUT', url: '/umbraco/management/api/v1/document/{id}/publish-with-descendants', @@ -437,12 +461,12 @@ requestBody?: PublishDocumentWithDescendantsRequestModel, * @throws ApiError */ public static putDocumentByIdUnpublish({ -id, -requestBody, -}: { -id: string, -requestBody?: UnpublishDocumentRequestModel, -}): CancelablePromise { + id, + requestBody, + }: { + id: string, + requestBody?: UnpublishDocumentRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'PUT', url: '/umbraco/management/api/v1/document/{id}/unpublish', @@ -461,29 +485,15 @@ requestBody?: UnpublishDocumentRequestModel, } /** - * @returns PagedDocumentTypeResponseModel Success + * @returns any Success * @throws ApiError */ - public static getDocumentAllowedDocumentTypes({ -parentId, -skip, -take = 100, -}: { -parentId?: string, -skip?: number, -take?: number, -}): CancelablePromise { + public static getDocumentConfiguration(): CancelablePromise { return __request(OpenAPI, { method: 'GET', - url: '/umbraco/management/api/v1/document/allowed-document-types', - query: { - 'parentId': parentId, - 'skip': skip, - 'take': take, - }, + url: '/umbraco/management/api/v1/document/configuration', errors: { 401: `The resource is protected and requires an authentication token`, - 404: `Not Found`, }, }); } @@ -493,21 +503,15 @@ take?: number, * @throws ApiError */ public static getDocumentItem({ -id, -dataTypeId, -culture, -}: { -id?: Array, -dataTypeId?: string, -culture?: string, -}): CancelablePromise> { + id, + }: { + id?: Array, + }): CancelablePromise> { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/document/item', query: { 'id': id, - 'dataTypeId': dataTypeId, - 'culture': culture, }, errors: { 401: `The resource is protected and requires an authentication token`, @@ -520,10 +524,10 @@ culture?: string, * @throws ApiError */ public static putDocumentSort({ -requestBody, -}: { -requestBody?: SortingRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: SortingRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'PUT', url: '/umbraco/management/api/v1/document/sort', @@ -539,18 +543,58 @@ requestBody?: SortingRequestModel, } /** - * @returns PagedRecycleBinItemResponseModel Success + * @returns any Success + * @throws ApiError + */ + public static deleteRecycleBinDocument(): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/umbraco/management/api/v1/recycle-bin/document', + errors: { + 400: `Bad Request`, + 401: `The resource is protected and requires an authentication token`, + 403: `The authenticated user do not have access to this resource`, + }, + }); + } + + /** + * @returns any Success + * @throws ApiError + */ + public static deleteRecycleBinDocumentById({ + id, + }: { + id: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/umbraco/management/api/v1/recycle-bin/document/{id}', + path: { + 'id': id, + }, + errors: { + 400: `Bad Request`, + 401: `The resource is protected and requires an authentication token`, + 403: `The authenticated user do not have access to this resource`, + 404: `Not Found`, + }, + }); + } + + /** + * @returns PagedDocumentRecycleBinItemResponseModel Success * @throws ApiError */ public static getRecycleBinDocumentChildren({ -parentId, -skip, -take = 100, -}: { -parentId?: string, -skip?: number, -take?: number, -}): CancelablePromise { + parentId, + skip, + take = 100, + }: { + parentId?: string, + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/recycle-bin/document/children', @@ -566,16 +610,16 @@ take?: number, } /** - * @returns PagedRecycleBinItemResponseModel Success + * @returns PagedDocumentRecycleBinItemResponseModel Success * @throws ApiError */ public static getRecycleBinDocumentRoot({ -skip, -take = 100, -}: { -skip?: number, -take?: number, -}): CancelablePromise { + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/recycle-bin/document/root', @@ -594,18 +638,16 @@ take?: number, * @throws ApiError */ public static getTreeDocumentChildren({ -parentId, -skip, -take = 100, -dataTypeId, -culture, -}: { -parentId?: string, -skip?: number, -take?: number, -dataTypeId?: string, -culture?: string, -}): CancelablePromise { + parentId, + skip, + take = 100, + dataTypeId, + }: { + parentId?: string, + skip?: number, + take?: number, + dataTypeId?: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/tree/document/children', @@ -614,7 +656,6 @@ culture?: string, 'skip': skip, 'take': take, 'dataTypeId': dataTypeId, - 'culture': culture, }, errors: { 401: `The resource is protected and requires an authentication token`, @@ -627,16 +668,14 @@ culture?: string, * @throws ApiError */ public static getTreeDocumentRoot({ -skip, -take = 100, -dataTypeId, -culture, -}: { -skip?: number, -take?: number, -dataTypeId?: string, -culture?: string, -}): CancelablePromise { + skip, + take = 100, + dataTypeId, + }: { + skip?: number, + take?: number, + dataTypeId?: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/tree/document/root', @@ -644,7 +683,6 @@ culture?: string, 'skip': skip, 'take': take, 'dataTypeId': dataTypeId, - 'culture': culture, }, errors: { 401: `The resource is protected and requires an authentication token`, diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DocumentTypeResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DocumentTypeResource.ts index 6a71d5699f..2c82079ef4 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DocumentTypeResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DocumentTypeResource.ts @@ -8,10 +8,12 @@ import type { CreateDocumentTypeRequestModel } from '../models/CreateDocumentTyp import type { CreateFolderRequestModel } from '../models/CreateFolderRequestModel'; import type { DocumentTypeCompositionRequestModel } from '../models/DocumentTypeCompositionRequestModel'; import type { DocumentTypeCompositionResponseModel } from '../models/DocumentTypeCompositionResponseModel'; +import type { DocumentTypeConfigurationResponseModel } from '../models/DocumentTypeConfigurationResponseModel'; import type { DocumentTypeItemResponseModel } from '../models/DocumentTypeItemResponseModel'; import type { DocumentTypeResponseModel } from '../models/DocumentTypeResponseModel'; import type { FolderResponseModel } from '../models/FolderResponseModel'; import type { MoveDocumentTypeRequestModel } from '../models/MoveDocumentTypeRequestModel'; +import type { PagedAllowedDocumentTypeModel } from '../models/PagedAllowedDocumentTypeModel'; import type { PagedDocumentTypeTreeItemResponseModel } from '../models/PagedDocumentTypeTreeItemResponseModel'; import type { UpdateDocumentTypeRequestModel } from '../models/UpdateDocumentTypeRequestModel'; import type { UpdateFolderResponseModel } from '../models/UpdateFolderResponseModel'; @@ -116,6 +118,36 @@ export class DocumentTypeResource { }); } + /** + * @returns PagedAllowedDocumentTypeModel Success + * @throws ApiError + */ + public static getDocumentTypeByIdAllowedChildren({ + id, + skip, + take = 100, + }: { + id: string, + skip?: number, + take?: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/document-type/{id}/allowed-children', + path: { + 'id': id, + }, + query: { + 'skip': skip, + 'take': take, + }, + errors: { + 401: `The resource is protected and requires an authentication token`, + 404: `Not Found`, + }, + }); + } + /** * @returns any Success * @throws ApiError @@ -194,6 +226,30 @@ export class DocumentTypeResource { }); } + /** + * @returns PagedAllowedDocumentTypeModel Success + * @throws ApiError + */ + public static getDocumentTypeAllowedAtRoot({ + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/document-type/allowed-at-root', + query: { + 'skip': skip, + 'take': take, + }, + errors: { + 401: `The resource is protected and requires an authentication token`, + }, + }); + } + /** * @returns any Success * @throws ApiError @@ -214,6 +270,20 @@ export class DocumentTypeResource { }); } + /** + * @returns any Success + * @throws ApiError + */ + public static getDocumentTypeConfiguration(): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/document-type/configuration', + errors: { + 401: `The resource is protected and requires an authentication token`, + }, + }); + } + /** * @returns string Created * @throws ApiError diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/HealthCheckResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/HealthCheckResource.ts index 50cb70b19b..a7ba30030a 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/HealthCheckResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/HealthCheckResource.ts @@ -19,12 +19,12 @@ export class HealthCheckResource { * @throws ApiError */ public static getHealthCheckGroup({ -skip, -take = 100, -}: { -skip?: number, -take?: number, -}): CancelablePromise { + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/health-check-group', @@ -43,10 +43,10 @@ take?: number, * @throws ApiError */ public static getHealthCheckGroupByName({ -name, -}: { -name: string, -}): CancelablePromise { + name, + }: { + name: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/health-check-group/{name}', @@ -65,10 +65,10 @@ name: string, * @throws ApiError */ public static postHealthCheckGroupByNameCheck({ -name, -}: { -name: string, -}): CancelablePromise { + name, + }: { + name: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/health-check-group/{name}/check', @@ -87,10 +87,10 @@ name: string, * @throws ApiError */ public static postHealthCheckExecuteAction({ -requestBody, -}: { -requestBody?: HealthCheckActionRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: HealthCheckActionRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/health-check/execute-action', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/HelpResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/HelpResource.ts index 5401131d77..5a8f103da5 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/HelpResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/HelpResource.ts @@ -15,18 +15,18 @@ export class HelpResource { * @throws ApiError */ public static getHelp({ -section, -tree, -skip, -take = 100, -baseUrl = 'https://our.umbraco.com', -}: { -section?: string, -tree?: string, -skip?: number, -take?: number, -baseUrl?: string, -}): CancelablePromise { + section, + tree, + skip, + take = 100, + baseUrl = 'https://our.umbraco.com', + }: { + section?: string, + tree?: string, + skip?: number, + take?: number, + baseUrl?: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/help', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/IndexerResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/IndexerResource.ts index 74b8ef2abd..edd9f9661c 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/IndexerResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/IndexerResource.ts @@ -17,12 +17,12 @@ export class IndexerResource { * @throws ApiError */ public static getIndexer({ -skip, -take = 100, -}: { -skip?: number, -take?: number, -}): CancelablePromise { + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/indexer', @@ -41,10 +41,10 @@ take?: number, * @throws ApiError */ public static getIndexerByIndexName({ -indexName, -}: { -indexName: string, -}): CancelablePromise { + indexName, + }: { + indexName: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/indexer/{indexName}', @@ -63,10 +63,10 @@ indexName: string, * @throws ApiError */ public static postIndexerByIndexNameRebuild({ -indexName, -}: { -indexName: string, -}): CancelablePromise { + indexName, + }: { + indexName: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/indexer/{indexName}/rebuild', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/InstallResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/InstallResource.ts index 325dd1bf2a..822d97c535 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/InstallResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/InstallResource.ts @@ -32,10 +32,10 @@ export class InstallResource { * @throws ApiError */ public static postInstallSetup({ -requestBody, -}: { -requestBody?: InstallVResponseModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: InstallVResponseModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/install/setup', @@ -53,10 +53,10 @@ requestBody?: InstallVResponseModel, * @throws ApiError */ public static postInstallValidateDatabase({ -requestBody, -}: { -requestBody?: DatabaseInstallResponseModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: DatabaseInstallResponseModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/install/validate-database', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/LanguageResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/LanguageResource.ts index f4c5729553..5125a1feba 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/LanguageResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/LanguageResource.ts @@ -19,12 +19,12 @@ export class LanguageResource { * @throws ApiError */ public static getLanguage({ -skip, -take = 100, -}: { -skip?: number, -take?: number, -}): CancelablePromise { + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/language', @@ -43,10 +43,10 @@ take?: number, * @throws ApiError */ public static postLanguage({ -requestBody, -}: { -requestBody?: CreateLanguageRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: CreateLanguageRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/language', @@ -66,10 +66,10 @@ requestBody?: CreateLanguageRequestModel, * @throws ApiError */ public static getLanguageByIsoCode({ -isoCode, -}: { -isoCode: string, -}): CancelablePromise { + isoCode, + }: { + isoCode: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/language/{isoCode}', @@ -88,10 +88,10 @@ isoCode: string, * @throws ApiError */ public static deleteLanguageByIsoCode({ -isoCode, -}: { -isoCode: string, -}): CancelablePromise { + isoCode, + }: { + isoCode: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'DELETE', url: '/umbraco/management/api/v1/language/{isoCode}', @@ -111,12 +111,12 @@ isoCode: string, * @throws ApiError */ public static putLanguageByIsoCode({ -isoCode, -requestBody, -}: { -isoCode: string, -requestBody?: UpdateLanguageRequestModel, -}): CancelablePromise { + isoCode, + requestBody, + }: { + isoCode: string, + requestBody?: UpdateLanguageRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'PUT', url: '/umbraco/management/api/v1/language/{isoCode}', @@ -138,10 +138,10 @@ requestBody?: UpdateLanguageRequestModel, * @throws ApiError */ public static getLanguageItem({ -isoCode, -}: { -isoCode?: Array, -}): CancelablePromise> { + isoCode, + }: { + isoCode?: Array, + }): CancelablePromise> { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/language/item', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/LogViewerResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/LogViewerResource.ts index 5a4cacd57a..136e84a465 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/LogViewerResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/LogViewerResource.ts @@ -23,12 +23,12 @@ export class LogViewerResource { * @throws ApiError */ public static getLogViewerLevel({ -skip, -take = 100, -}: { -skip?: number, -take?: number, -}): CancelablePromise { + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/log-viewer/level', @@ -47,12 +47,12 @@ take?: number, * @throws ApiError */ public static getLogViewerLevelCount({ -startDate, -endDate, -}: { -startDate?: string, -endDate?: string, -}): CancelablePromise { + startDate, + endDate, + }: { + startDate?: string, + endDate?: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/log-viewer/level-count', @@ -72,22 +72,22 @@ endDate?: string, * @throws ApiError */ public static getLogViewerLog({ -skip, -take = 100, -orderDirection, -filterExpression, -logLevel, -startDate, -endDate, -}: { -skip?: number, -take?: number, -orderDirection?: DirectionModel, -filterExpression?: string, -logLevel?: Array, -startDate?: string, -endDate?: string, -}): CancelablePromise { + skip, + take = 100, + orderDirection, + filterExpression, + logLevel, + startDate, + endDate, + }: { + skip?: number, + take?: number, + orderDirection?: DirectionModel, + filterExpression?: string, + logLevel?: Array, + startDate?: string, + endDate?: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/log-viewer/log', @@ -111,16 +111,16 @@ endDate?: string, * @throws ApiError */ public static getLogViewerMessageTemplate({ -skip, -take = 100, -startDate, -endDate, -}: { -skip?: number, -take?: number, -startDate?: string, -endDate?: string, -}): CancelablePromise { + skip, + take = 100, + startDate, + endDate, + }: { + skip?: number, + take?: number, + startDate?: string, + endDate?: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/log-viewer/message-template', @@ -142,12 +142,12 @@ endDate?: string, * @throws ApiError */ public static getLogViewerSavedSearch({ -skip, -take = 100, -}: { -skip?: number, -take?: number, -}): CancelablePromise { + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/log-viewer/saved-search', @@ -166,10 +166,10 @@ take?: number, * @throws ApiError */ public static postLogViewerSavedSearch({ -requestBody, -}: { -requestBody?: SavedLogSearchRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: SavedLogSearchRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/log-viewer/saved-search', @@ -188,10 +188,10 @@ requestBody?: SavedLogSearchRequestModel, * @throws ApiError */ public static getLogViewerSavedSearchByName({ -name, -}: { -name: string, -}): CancelablePromise { + name, + }: { + name: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/log-viewer/saved-search/{name}', @@ -210,10 +210,10 @@ name: string, * @throws ApiError */ public static deleteLogViewerSavedSearchByName({ -name, -}: { -name: string, -}): CancelablePromise { + name, + }: { + name: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'DELETE', url: '/umbraco/management/api/v1/log-viewer/saved-search/{name}', @@ -232,12 +232,12 @@ name: string, * @throws ApiError */ public static getLogViewerValidateLogsSize({ -startDate, -endDate, -}: { -startDate?: string, -endDate?: string, -}): CancelablePromise { + startDate, + endDate, + }: { + startDate?: string, + endDate?: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/log-viewer/validate-logs-size', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/MediaResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/MediaResource.ts index 3924f325bf..2fe94bcc8c 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/MediaResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/MediaResource.ts @@ -3,12 +3,12 @@ /* tslint:disable */ /* eslint-disable */ import type { CreateMediaRequestModel } from '../models/CreateMediaRequestModel'; -import type { DocumentResponseModel } from '../models/DocumentResponseModel'; +import type { MediaConfigurationResponseModel } from '../models/MediaConfigurationResponseModel'; import type { MediaItemResponseModel } from '../models/MediaItemResponseModel'; -import type { MediaTreeItemResponseModel } from '../models/MediaTreeItemResponseModel'; +import type { MediaResponseModel } from '../models/MediaResponseModel'; import type { MoveMediaRequestModel } from '../models/MoveMediaRequestModel'; +import type { PagedMediaRecycleBinItemResponseModel } from '../models/PagedMediaRecycleBinItemResponseModel'; import type { PagedMediaTreeItemResponseModel } from '../models/PagedMediaTreeItemResponseModel'; -import type { PagedRecycleBinItemResponseModel } from '../models/PagedRecycleBinItemResponseModel'; import type { SortingRequestModel } from '../models/SortingRequestModel'; import type { UpdateMediaRequestModel } from '../models/UpdateMediaRequestModel'; @@ -23,10 +23,10 @@ export class MediaResource { * @throws ApiError */ public static postMedia({ -requestBody, -}: { -requestBody?: CreateMediaRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: CreateMediaRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/media', @@ -46,10 +46,10 @@ requestBody?: CreateMediaRequestModel, * @throws ApiError */ public static getMediaById({ -id, -}: { -id: string, -}): CancelablePromise { + id, + }: { + id: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/media/{id}', @@ -69,12 +69,12 @@ id: string, * @throws ApiError */ public static putMediaById({ -id, -requestBody, -}: { -id: string, -requestBody?: UpdateMediaRequestModel, -}): CancelablePromise { + id, + requestBody, + }: { + id: string, + requestBody?: UpdateMediaRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'PUT', url: '/umbraco/management/api/v1/media/{id}', @@ -96,12 +96,12 @@ requestBody?: UpdateMediaRequestModel, * @throws ApiError */ public static putMediaByIdMove({ -id, -requestBody, -}: { -id: string, -requestBody?: MoveMediaRequestModel, -}): CancelablePromise { + id, + requestBody, + }: { + id: string, + requestBody?: MoveMediaRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'PUT', url: '/umbraco/management/api/v1/media/{id}/move', @@ -123,10 +123,10 @@ requestBody?: MoveMediaRequestModel, * @throws ApiError */ public static putMediaByIdMoveToRecycleBin({ -id, -}: { -id: string, -}): CancelablePromise { + id, + }: { + id: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'PUT', url: '/umbraco/management/api/v1/media/{id}/move-to-recycle-bin', @@ -142,23 +142,34 @@ id: string, }); } + /** + * @returns any Success + * @throws ApiError + */ + public static getMediaConfiguration(): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/media/configuration', + errors: { + 401: `The resource is protected and requires an authentication token`, + }, + }); + } + /** * @returns any Success * @throws ApiError */ public static getMediaItem({ -id, -dataTypeId, -}: { -id?: Array, -dataTypeId?: string, -}): CancelablePromise> { + id, + }: { + id?: Array, + }): CancelablePromise> { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/media/item', query: { 'id': id, - 'dataTypeId': dataTypeId, }, errors: { 401: `The resource is protected and requires an authentication token`, @@ -171,10 +182,10 @@ dataTypeId?: string, * @throws ApiError */ public static putMediaSort({ -requestBody, -}: { -requestBody?: SortingRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: SortingRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'PUT', url: '/umbraco/management/api/v1/media/sort', @@ -190,18 +201,34 @@ requestBody?: SortingRequestModel, } /** - * @returns PagedRecycleBinItemResponseModel Success + * @returns any Success + * @throws ApiError + */ + public static deleteRecycleBinMedia(): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/umbraco/management/api/v1/recycle-bin/media', + errors: { + 400: `Bad Request`, + 401: `The resource is protected and requires an authentication token`, + 403: `The authenticated user do not have access to this resource`, + }, + }); + } + + /** + * @returns PagedMediaRecycleBinItemResponseModel Success * @throws ApiError */ public static getRecycleBinMediaChildren({ -parentId, -skip, -take = 100, -}: { -parentId?: string, -skip?: number, -take?: number, -}): CancelablePromise { + parentId, + skip, + take = 100, + }: { + parentId?: string, + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/recycle-bin/media/children', @@ -217,16 +244,16 @@ take?: number, } /** - * @returns PagedRecycleBinItemResponseModel Success + * @returns PagedMediaRecycleBinItemResponseModel Success * @throws ApiError */ public static getRecycleBinMediaRoot({ -skip, -take = 100, -}: { -skip?: number, -take?: number, -}): CancelablePromise { + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/recycle-bin/media/root', @@ -245,16 +272,16 @@ take?: number, * @throws ApiError */ public static getTreeMediaChildren({ -parentId, -skip, -take = 100, -dataTypeId, -}: { -parentId?: string, -skip?: number, -take?: number, -dataTypeId?: string, -}): CancelablePromise { + parentId, + skip, + take = 100, + dataTypeId, + }: { + parentId?: string, + skip?: number, + take?: number, + dataTypeId?: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/tree/media/children', @@ -270,43 +297,19 @@ dataTypeId?: string, }); } - /** - * @returns any Success - * @throws ApiError - */ - public static getTreeMediaItem({ -id, -dataTypeId, -}: { -id?: Array, -dataTypeId?: string, -}): CancelablePromise> { - return __request(OpenAPI, { - method: 'GET', - url: '/umbraco/management/api/v1/tree/media/item', - query: { - 'id': id, - 'dataTypeId': dataTypeId, - }, - errors: { - 401: `The resource is protected and requires an authentication token`, - }, - }); - } - /** * @returns PagedMediaTreeItemResponseModel Success * @throws ApiError */ public static getTreeMediaRoot({ -skip, -take = 100, -dataTypeId, -}: { -skip?: number, -take?: number, -dataTypeId?: string, -}): CancelablePromise { + skip, + take = 100, + dataTypeId, + }: { + skip?: number, + take?: number, + dataTypeId?: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/tree/media/root', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/MediaTypeResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/MediaTypeResource.ts index ba99baec61..ff19715b0f 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/MediaTypeResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/MediaTypeResource.ts @@ -12,6 +12,7 @@ import type { MediaTypeCompositionResponseModel } from '../models/MediaTypeCompo import type { MediaTypeItemResponseModel } from '../models/MediaTypeItemResponseModel'; import type { MediaTypeResponseModel } from '../models/MediaTypeResponseModel'; import type { MoveMediaTypeRequestModel } from '../models/MoveMediaTypeRequestModel'; +import type { PagedAllowedMediaTypeModel } from '../models/PagedAllowedMediaTypeModel'; import type { PagedMediaTypeTreeItemResponseModel } from '../models/PagedMediaTypeTreeItemResponseModel'; import type { UpdateFolderResponseModel } from '../models/UpdateFolderResponseModel'; import type { UpdateMediaTypeRequestModel } from '../models/UpdateMediaTypeRequestModel'; @@ -116,6 +117,36 @@ export class MediaTypeResource { }); } + /** + * @returns PagedAllowedMediaTypeModel Success + * @throws ApiError + */ + public static getMediaTypeByIdAllowedChildren({ + id, + skip, + take = 100, + }: { + id: string, + skip?: number, + take?: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/media-type/{id}/allowed-children', + path: { + 'id': id, + }, + query: { + 'skip': skip, + 'take': take, + }, + errors: { + 401: `The resource is protected and requires an authentication token`, + 404: `Not Found`, + }, + }); + } + /** * @returns any Success * @throws ApiError @@ -194,6 +225,30 @@ export class MediaTypeResource { }); } + /** + * @returns PagedAllowedMediaTypeModel Success + * @throws ApiError + */ + public static getMediaTypeAllowedAtRoot({ + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/media-type/allowed-at-root', + query: { + 'skip': skip, + 'take': take, + }, + errors: { + 401: `The resource is protected and requires an authentication token`, + }, + }); + } + /** * @returns any Success * @throws ApiError diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/MemberGroupResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/MemberGroupResource.ts index 914320853e..0e0c2a9a84 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/MemberGroupResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/MemberGroupResource.ts @@ -3,7 +3,7 @@ /* tslint:disable */ /* eslint-disable */ import type { MemberGroupItemResponseModel } from '../models/MemberGroupItemResponseModel'; -import type { PagedEntityTreeItemResponseModel } from '../models/PagedEntityTreeItemResponseModel'; +import type { PagedNamedEntityTreeItemResponseModel } from '../models/PagedNamedEntityTreeItemResponseModel'; import type { CancelablePromise } from '../core/CancelablePromise'; import { OpenAPI } from '../core/OpenAPI'; @@ -16,10 +16,10 @@ export class MemberGroupResource { * @throws ApiError */ public static getMemberGroupItem({ -id, -}: { -id?: Array, -}): CancelablePromise> { + id, + }: { + id?: Array, + }): CancelablePromise> { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/member-group/item', @@ -33,16 +33,16 @@ id?: Array, } /** - * @returns PagedEntityTreeItemResponseModel Success + * @returns PagedNamedEntityTreeItemResponseModel Success * @throws ApiError */ public static getTreeMemberGroupRoot({ -skip, -take = 100, -}: { -skip?: number, -take?: number, -}): CancelablePromise { + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/tree/member-group/root', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/MemberResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/MemberResource.ts index 0116e9d963..46ecade882 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/MemberResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/MemberResource.ts @@ -15,10 +15,10 @@ export class MemberResource { * @throws ApiError */ public static getMemberItem({ -id, -}: { -id?: Array, -}): CancelablePromise> { + id, + }: { + id?: Array, + }): CancelablePromise> { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/member/item', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/MemberTypeResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/MemberTypeResource.ts index fa54ddbb8f..5ca33add00 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/MemberTypeResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/MemberTypeResource.ts @@ -3,7 +3,7 @@ /* tslint:disable */ /* eslint-disable */ import type { MemberTypeItemResponseModel } from '../models/MemberTypeItemResponseModel'; -import type { PagedEntityTreeItemResponseModel } from '../models/PagedEntityTreeItemResponseModel'; +import type { PagedNamedEntityTreeItemResponseModel } from '../models/PagedNamedEntityTreeItemResponseModel'; import type { CancelablePromise } from '../core/CancelablePromise'; import { OpenAPI } from '../core/OpenAPI'; @@ -16,10 +16,10 @@ export class MemberTypeResource { * @throws ApiError */ public static getMemberTypeItem({ -id, -}: { -id?: Array, -}): CancelablePromise> { + id, + }: { + id?: Array, + }): CancelablePromise> { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/member-type/item', @@ -33,16 +33,16 @@ id?: Array, } /** - * @returns PagedEntityTreeItemResponseModel Success + * @returns PagedNamedEntityTreeItemResponseModel Success * @throws ApiError */ public static getTreeMemberTypeRoot({ -skip, -take = 100, -}: { -skip?: number, -take?: number, -}): CancelablePromise { + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/tree/member-type/root', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/ObjectTypesResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/ObjectTypesResource.ts index e9d12b691a..e22032ecde 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/ObjectTypesResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/ObjectTypesResource.ts @@ -15,12 +15,12 @@ export class ObjectTypesResource { * @throws ApiError */ public static getObjectTypes({ -skip, -take = 100, -}: { -skip?: number, -take?: number, -}): CancelablePromise { + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/object-types', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/PackageResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/PackageResource.ts index 5a0d75fe70..fc72c5b016 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/PackageResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/PackageResource.ts @@ -3,6 +3,7 @@ /* tslint:disable */ /* eslint-disable */ import type { CreatePackageRequestModel } from '../models/CreatePackageRequestModel'; +import type { PackageConfigurationResponseModel } from '../models/PackageConfigurationResponseModel'; import type { PackageDefinitionResponseModel } from '../models/PackageDefinitionResponseModel'; import type { PackageManifestResponseModel } from '../models/PackageManifestResponseModel'; import type { PagedPackageDefinitionResponseModel } from '../models/PagedPackageDefinitionResponseModel'; @@ -20,10 +21,10 @@ export class PackageResource { * @throws ApiError */ public static postPackageByNameRunMigration({ -name, -}: { -name: string, -}): CancelablePromise { + name, + }: { + name: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/package/{name}/run-migration', @@ -38,17 +39,31 @@ name: string, }); } + /** + * @returns any Success + * @throws ApiError + */ + public static getPackageConfiguration(): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/package/configuration', + errors: { + 401: `The resource is protected and requires an authentication token`, + }, + }); + } + /** * @returns PagedPackageDefinitionResponseModel Success * @throws ApiError */ public static getPackageCreated({ -skip, -take = 100, -}: { -skip?: number, -take?: number, -}): CancelablePromise { + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/package/created', @@ -67,10 +82,10 @@ take?: number, * @throws ApiError */ public static postPackageCreated({ -requestBody, -}: { -requestBody?: CreatePackageRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: CreatePackageRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/package/created', @@ -90,10 +105,10 @@ requestBody?: CreatePackageRequestModel, * @throws ApiError */ public static getPackageCreatedById({ -id, -}: { -id: string, -}): CancelablePromise { + id, + }: { + id: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/package/created/{id}', @@ -112,10 +127,10 @@ id: string, * @throws ApiError */ public static deletePackageCreatedById({ -id, -}: { -id: string, -}): CancelablePromise { + id, + }: { + id: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'DELETE', url: '/umbraco/management/api/v1/package/created/{id}', @@ -134,12 +149,12 @@ id: string, * @throws ApiError */ public static putPackageCreatedById({ -id, -requestBody, -}: { -id: string, -requestBody?: UpdatePackageRequestModel, -}): CancelablePromise { + id, + requestBody, + }: { + id: string, + requestBody?: UpdatePackageRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'PUT', url: '/umbraco/management/api/v1/package/created/{id}', @@ -160,10 +175,10 @@ requestBody?: UpdatePackageRequestModel, * @throws ApiError */ public static getPackageCreatedByIdDownload({ -id, -}: { -id: string, -}): CancelablePromise { + id, + }: { + id: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/package/created/{id}/download', @@ -196,12 +211,12 @@ id: string, * @throws ApiError */ public static getPackageMigrationStatus({ -skip, -take = 100, -}: { -skip?: number, -take?: number, -}): CancelablePromise { + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/package/migration-status', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/ProfilingResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/ProfilingResource.ts index 94f49fee69..3c9e655507 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/ProfilingResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/ProfilingResource.ts @@ -30,10 +30,10 @@ export class ProfilingResource { * @throws ApiError */ public static putProfilingStatus({ -requestBody, -}: { -requestBody?: ProfilingStatusRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: ProfilingStatusRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'PUT', url: '/umbraco/management/api/v1/profiling/status', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/PropertyTypeResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/PropertyTypeResource.ts index 9c57e03e47..36cf7b48cc 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/PropertyTypeResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/PropertyTypeResource.ts @@ -13,12 +13,12 @@ export class PropertyTypeResource { * @throws ApiError */ public static getPropertyTypeIsUsed({ -contentTypeId, -propertyAlias, -}: { -contentTypeId?: string, -propertyAlias?: string, -}): CancelablePromise { + contentTypeId, + propertyAlias, + }: { + contentTypeId?: string, + propertyAlias?: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/property-type/is-used', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/RedirectManagementResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/RedirectManagementResource.ts index 948f368b96..935e6c6a62 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/RedirectManagementResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/RedirectManagementResource.ts @@ -17,14 +17,14 @@ export class RedirectManagementResource { * @throws ApiError */ public static getRedirectManagement({ -filter, -skip, -take = 100, -}: { -filter?: string, -skip?: number, -take?: number, -}): CancelablePromise { + filter, + skip, + take = 100, + }: { + filter?: string, + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/redirect-management', @@ -45,14 +45,14 @@ take?: number, * @throws ApiError */ public static getRedirectManagementById({ -id, -skip, -take = 100, -}: { -id: string, -skip?: number, -take?: number, -}): CancelablePromise { + id, + skip, + take = 100, + }: { + id: string, + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/redirect-management/{id}', @@ -74,10 +74,10 @@ take?: number, * @throws ApiError */ public static deleteRedirectManagementById({ -id, -}: { -id: string, -}): CancelablePromise { + id, + }: { + id: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'DELETE', url: '/umbraco/management/api/v1/redirect-management/{id}', @@ -109,10 +109,10 @@ id: string, * @throws ApiError */ public static postRedirectManagementStatus({ -status, -}: { -status?: RedirectStatusModel, -}): CancelablePromise { + status, + }: { + status?: RedirectStatusModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/redirect-management/status', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/RelationResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/RelationResource.ts index 7779f7cd6a..76bbbb9de5 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/RelationResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/RelationResource.ts @@ -15,16 +15,16 @@ export class RelationResource { * @throws ApiError */ public static getRelationChildRelationByChildId({ -childId, -skip, -take = 100, -relationTypeAlias = '', -}: { -childId: string, -skip?: number, -take?: number, -relationTypeAlias?: string, -}): CancelablePromise { + childId, + skip, + take = 100, + relationTypeAlias = '', + }: { + childId: string, + skip?: number, + take?: number, + relationTypeAlias?: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/relation/child-relation/{childId}', @@ -47,14 +47,14 @@ relationTypeAlias?: string, * @throws ApiError */ public static getRelationTypeById({ -id, -skip, -take = 100, -}: { -id: string, -skip?: number, -take?: number, -}): CancelablePromise { + id, + skip, + take = 100, + }: { + id: string, + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/relation/type/{id}', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/RelationTypeResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/RelationTypeResource.ts index 557ca7ea20..af3b1727a2 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/RelationTypeResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/RelationTypeResource.ts @@ -3,7 +3,7 @@ /* tslint:disable */ /* eslint-disable */ import type { CreateRelationTypeRequestModel } from '../models/CreateRelationTypeRequestModel'; -import type { PagedEntityTreeItemResponseModel } from '../models/PagedEntityTreeItemResponseModel'; +import type { PagedNamedEntityTreeItemResponseModel } from '../models/PagedNamedEntityTreeItemResponseModel'; import type { RelationTypeItemResponseModel } from '../models/RelationTypeItemResponseModel'; import type { RelationTypeResponseModel } from '../models/RelationTypeResponseModel'; import type { UpdateRelationTypeRequestModel } from '../models/UpdateRelationTypeRequestModel'; @@ -19,10 +19,10 @@ export class RelationTypeResource { * @throws ApiError */ public static postRelationType({ -requestBody, -}: { -requestBody?: CreateRelationTypeRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: CreateRelationTypeRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/relation-type', @@ -41,10 +41,10 @@ requestBody?: CreateRelationTypeRequestModel, * @throws ApiError */ public static getRelationTypeById({ -id, -}: { -id: string, -}): CancelablePromise { + id, + }: { + id: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/relation-type/{id}', @@ -63,10 +63,10 @@ id: string, * @throws ApiError */ public static deleteRelationTypeById({ -id, -}: { -id: string, -}): CancelablePromise { + id, + }: { + id: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'DELETE', url: '/umbraco/management/api/v1/relation-type/{id}', @@ -85,12 +85,12 @@ id: string, * @throws ApiError */ public static putRelationTypeById({ -id, -requestBody, -}: { -id: string, -requestBody?: UpdateRelationTypeRequestModel, -}): CancelablePromise { + id, + requestBody, + }: { + id: string, + requestBody?: UpdateRelationTypeRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'PUT', url: '/umbraco/management/api/v1/relation-type/{id}', @@ -112,10 +112,10 @@ requestBody?: UpdateRelationTypeRequestModel, * @throws ApiError */ public static getRelationTypeItem({ -id, -}: { -id?: Array, -}): CancelablePromise> { + id, + }: { + id?: Array, + }): CancelablePromise> { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/relation-type/item', @@ -129,16 +129,16 @@ id?: Array, } /** - * @returns PagedEntityTreeItemResponseModel Success + * @returns PagedNamedEntityTreeItemResponseModel Success * @throws ApiError */ public static getTreeRelationTypeRoot({ -skip, -take = 100, -}: { -skip?: number, -take?: number, -}): CancelablePromise { + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/tree/relation-type/root', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/SearcherResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/SearcherResource.ts index 47b980d484..ff805a23dd 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/SearcherResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/SearcherResource.ts @@ -16,12 +16,12 @@ export class SearcherResource { * @throws ApiError */ public static getSearcher({ -skip, -take = 100, -}: { -skip?: number, -take?: number, -}): CancelablePromise { + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/searcher', @@ -40,16 +40,16 @@ take?: number, * @throws ApiError */ public static getSearcherBySearcherNameQuery({ -searcherName, -term, -skip, -take = 100, -}: { -searcherName: string, -term?: string, -skip?: number, -take?: number, -}): CancelablePromise { + searcherName, + term, + skip, + take = 100, + }: { + searcherName: string, + term?: string, + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/searcher/{searcherName}/query', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/SecurityResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/SecurityResource.ts index 12f1676ff5..ac7de89f58 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/SecurityResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/SecurityResource.ts @@ -32,10 +32,10 @@ export class SecurityResource { * @throws ApiError */ public static postSecurityForgotPassword({ -requestBody, -}: { -requestBody?: ResetPasswordRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: ResetPasswordRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/security/forgot-password', @@ -48,14 +48,14 @@ requestBody?: ResetPasswordRequestModel, } /** - * @returns void + * @returns void * @throws ApiError */ public static postSecurityForgotPasswordReset({ -requestBody, -}: { -requestBody?: ResetPasswordTokenRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: ResetPasswordTokenRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/security/forgot-password/reset', @@ -70,14 +70,14 @@ requestBody?: ResetPasswordTokenRequestModel, } /** - * @returns void + * @returns void * @throws ApiError */ public static postSecurityForgotPasswordVerify({ -requestBody, -}: { -requestBody?: (VerifyResetPasswordTokenRequestModel | ResetPasswordTokenRequestModel), -}): CancelablePromise { + requestBody, + }: { + requestBody?: (VerifyResetPasswordTokenRequestModel | ResetPasswordTokenRequestModel), + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/security/forgot-password/verify', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TagResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TagResource.ts index 26eb859912..2d0c9675f7 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TagResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TagResource.ts @@ -15,18 +15,18 @@ export class TagResource { * @throws ApiError */ public static getTag({ -query, -tagGroup, -culture, -skip, -take = 100, -}: { -query?: string, -tagGroup?: string, -culture?: string, -skip?: number, -take?: number, -}): CancelablePromise { + query, + tagGroup, + culture, + skip, + take = 100, + }: { + query?: string, + tagGroup?: string, + culture?: string, + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/tag', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TelemetryResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TelemetryResource.ts index bc536d38e2..89b241dcf0 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TelemetryResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TelemetryResource.ts @@ -17,12 +17,12 @@ export class TelemetryResource { * @throws ApiError */ public static getTelemetry({ -skip, -take = 100, -}: { -skip?: number, -take?: number, -}): CancelablePromise { + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/telemetry', @@ -55,10 +55,10 @@ take?: number, * @throws ApiError */ public static postTelemetryLevel({ -requestBody, -}: { -requestBody?: TelemetryRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: TelemetryRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/telemetry/level', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TemplateResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TemplateResource.ts index c73e01176c..b2e7170953 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TemplateResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TemplateResource.ts @@ -3,7 +3,8 @@ /* tslint:disable */ /* eslint-disable */ import type { CreateTemplateRequestModel } from '../models/CreateTemplateRequestModel'; -import type { PagedEntityTreeItemResponseModel } from '../models/PagedEntityTreeItemResponseModel'; +import type { PagedNamedEntityTreeItemResponseModel } from '../models/PagedNamedEntityTreeItemResponseModel'; +import type { TemplateConfigurationResponseModel } from '../models/TemplateConfigurationResponseModel'; import type { TemplateItemResponseModel } from '../models/TemplateItemResponseModel'; import type { TemplateQueryExecuteModel } from '../models/TemplateQueryExecuteModel'; import type { TemplateQueryResultResponseModel } from '../models/TemplateQueryResultResponseModel'; @@ -23,10 +24,10 @@ export class TemplateResource { * @throws ApiError */ public static postTemplate({ -requestBody, -}: { -requestBody?: CreateTemplateRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: CreateTemplateRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/template', @@ -46,10 +47,10 @@ requestBody?: CreateTemplateRequestModel, * @throws ApiError */ public static getTemplateById({ -id, -}: { -id: string, -}): CancelablePromise { + id, + }: { + id: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/template/{id}', @@ -68,10 +69,10 @@ id: string, * @throws ApiError */ public static deleteTemplateById({ -id, -}: { -id: string, -}): CancelablePromise { + id, + }: { + id: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'DELETE', url: '/umbraco/management/api/v1/template/{id}', @@ -91,12 +92,12 @@ id: string, * @throws ApiError */ public static putTemplateById({ -id, -requestBody, -}: { -id: string, -requestBody?: UpdateTemplateRequestModel, -}): CancelablePromise { + id, + requestBody, + }: { + id: string, + requestBody?: UpdateTemplateRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'PUT', url: '/umbraco/management/api/v1/template/{id}', @@ -113,15 +114,29 @@ requestBody?: UpdateTemplateRequestModel, }); } + /** + * @returns any Success + * @throws ApiError + */ + public static getTemplateConfiguration(): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/template/configuration', + errors: { + 401: `The resource is protected and requires an authentication token`, + }, + }); + } + /** * @returns any Success * @throws ApiError */ public static getTemplateItem({ -id, -}: { -id?: Array, -}): CancelablePromise> { + id, + }: { + id?: Array, + }): CancelablePromise> { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/template/item', @@ -139,10 +154,10 @@ id?: Array, * @throws ApiError */ public static postTemplateQueryExecute({ -requestBody, -}: { -requestBody?: TemplateQueryExecuteModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: TemplateQueryExecuteModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/template/query/execute', @@ -173,10 +188,10 @@ requestBody?: TemplateQueryExecuteModel, * @throws ApiError */ public static getTemplateScaffold({ -masterTemplateId, -}: { -masterTemplateId?: string, -}): CancelablePromise { + masterTemplateId, + }: { + masterTemplateId?: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/template/scaffold', @@ -191,18 +206,18 @@ masterTemplateId?: string, } /** - * @returns PagedEntityTreeItemResponseModel Success + * @returns PagedNamedEntityTreeItemResponseModel Success * @throws ApiError */ public static getTreeTemplateChildren({ -parentId, -skip, -take = 100, -}: { -parentId?: string, -skip?: number, -take?: number, -}): CancelablePromise { + parentId, + skip, + take = 100, + }: { + parentId?: string, + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/tree/template/children', @@ -218,16 +233,16 @@ take?: number, } /** - * @returns PagedEntityTreeItemResponseModel Success + * @returns PagedNamedEntityTreeItemResponseModel Success * @throws ApiError */ public static getTreeTemplateRoot({ -skip, -take = 100, -}: { -skip?: number, -take?: number, -}): CancelablePromise { + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/tree/template/root', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TemporaryFileResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TemporaryFileResource.ts index a8998922a1..28ccb40cf5 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TemporaryFileResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TemporaryFileResource.ts @@ -15,13 +15,13 @@ export class TemporaryFileResource { * @throws ApiError */ public static postTemporaryfile({ -formData, -}: { -formData?: { -Id?: string; -File?: Blob; -}, -}): CancelablePromise { + formData, + }: { + formData?: { + Id?: string; + File?: Blob; + }, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/temporaryfile', @@ -40,10 +40,10 @@ File?: Blob; * @throws ApiError */ public static getTemporaryfileById({ -id, -}: { -id: string, -}): CancelablePromise { + id, + }: { + id: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/temporaryfile/{id}', @@ -63,10 +63,10 @@ id: string, * @throws ApiError */ public static deleteTemporaryfileById({ -id, -}: { -id: string, -}): CancelablePromise { + id, + }: { + id: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'DELETE', url: '/umbraco/management/api/v1/temporaryfile/{id}', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TourResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TourResource.ts index cd79bd81b3..563a77950b 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TourResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TourResource.ts @@ -30,10 +30,10 @@ export class TourResource { * @throws ApiError */ public static postTour({ -requestBody, -}: { -requestBody?: SetTourStatusRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: SetTourStatusRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/tour', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TrackedReferenceResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TrackedReferenceResource.ts index 0765570b15..040c7a1345 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TrackedReferenceResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/TrackedReferenceResource.ts @@ -15,16 +15,16 @@ export class TrackedReferenceResource { * @throws ApiError */ public static getTrackedReferenceById({ -id, -skip, -take = 20, -filterMustBeIsDependency = false, -}: { -id: string, -skip?: number, -take?: number, -filterMustBeIsDependency?: boolean, -}): CancelablePromise { + id, + skip, + take = 20, + filterMustBeIsDependency = false, + }: { + id: string, + skip?: number, + take?: number, + filterMustBeIsDependency?: boolean, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/tracked-reference/{id}', @@ -47,16 +47,16 @@ filterMustBeIsDependency?: boolean, * @throws ApiError */ public static getTrackedReferenceDescendantsByParentId({ -parentId, -skip, -take = 20, -filterMustBeIsDependency = true, -}: { -parentId: string, -skip?: number, -take?: number, -filterMustBeIsDependency?: boolean, -}): CancelablePromise { + parentId, + skip, + take = 20, + filterMustBeIsDependency = true, + }: { + parentId: string, + skip?: number, + take?: number, + filterMustBeIsDependency?: boolean, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/tracked-reference/descendants/{parentId}', @@ -79,16 +79,16 @@ filterMustBeIsDependency?: boolean, * @throws ApiError */ public static getTrackedReferenceItem({ -id, -skip, -take = 20, -filterMustBeIsDependency = true, -}: { -id?: Array, -skip?: number, -take?: number, -filterMustBeIsDependency?: boolean, -}): CancelablePromise { + id, + skip, + take = 20, + filterMustBeIsDependency = true, + }: { + id?: Array, + skip?: number, + take?: number, + filterMustBeIsDependency?: boolean, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/tracked-reference/item', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/UserResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/UserResource.ts index b333cd0208..09ed5b23ed 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/UserResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/UserResource.ts @@ -11,9 +11,11 @@ import type { CurrenUserConfigurationResponseModel } from '../models/CurrenUserC import type { DeleteUsersRequestModel } from '../models/DeleteUsersRequestModel'; import type { DirectionModel } from '../models/DirectionModel'; import type { DisableUserRequestModel } from '../models/DisableUserRequestModel'; +import type { EnableTwoFactorRequestModel } from '../models/EnableTwoFactorRequestModel'; import type { EnableUserRequestModel } from '../models/EnableUserRequestModel'; import type { InviteUserRequestModel } from '../models/InviteUserRequestModel'; import type { LinkedLoginsRequestModel } from '../models/LinkedLoginsRequestModel'; +import type { NoopSetupTwoFactorModel } from '../models/NoopSetupTwoFactorModel'; import type { PagedUserResponseModel } from '../models/PagedUserResponseModel'; import type { ResendInviteUserRequestModel } from '../models/ResendInviteUserRequestModel'; import type { SetAvatarRequestModel } from '../models/SetAvatarRequestModel'; @@ -26,6 +28,7 @@ import type { UserOrderModel } from '../models/UserOrderModel'; import type { UserPermissionsResponseModel } from '../models/UserPermissionsResponseModel'; import type { UserResponseModel } from '../models/UserResponseModel'; import type { UserStateModel } from '../models/UserStateModel'; +import type { UserTwoFactorProviderModel } from '../models/UserTwoFactorProviderModel'; import type { VerifyInviteUserRequestModel } from '../models/VerifyInviteUserRequestModel'; import type { CancelablePromise } from '../core/CancelablePromise'; @@ -39,10 +42,10 @@ export class UserResource { * @throws ApiError */ public static postUser({ -requestBody, -}: { -requestBody?: (CreateUserRequestModel | InviteUserRequestModel), -}): CancelablePromise { + requestBody, + }: { + requestBody?: (CreateUserRequestModel | InviteUserRequestModel), + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/user', @@ -60,10 +63,10 @@ requestBody?: (CreateUserRequestModel | InviteUserRequestModel), * @throws ApiError */ public static deleteUser({ -requestBody, -}: { -requestBody?: DeleteUsersRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: DeleteUsersRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'DELETE', url: '/umbraco/management/api/v1/user', @@ -82,12 +85,12 @@ requestBody?: DeleteUsersRequestModel, * @throws ApiError */ public static getUser({ -skip, -take = 100, -}: { -skip?: number, -take?: number, -}): CancelablePromise { + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/user', @@ -106,10 +109,10 @@ take?: number, * @throws ApiError */ public static getUserById({ -id, -}: { -id: string, -}): CancelablePromise { + id, + }: { + id: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/user/{id}', @@ -129,10 +132,10 @@ id: string, * @throws ApiError */ public static deleteUserById({ -id, -}: { -id: string, -}): CancelablePromise { + id, + }: { + id: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'DELETE', url: '/umbraco/management/api/v1/user/{id}', @@ -151,12 +154,12 @@ id: string, * @throws ApiError */ public static putUserById({ -id, -requestBody, -}: { -id: string, -requestBody?: UpdateUserRequestModel, -}): CancelablePromise { + id, + requestBody, + }: { + id: string, + requestBody?: UpdateUserRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'PUT', url: '/umbraco/management/api/v1/user/{id}', @@ -171,15 +174,65 @@ requestBody?: UpdateUserRequestModel, }); } + /** + * @returns any Success + * @throws ApiError + */ + public static getUserById2Fa({ + id, + }: { + id: string, + }): CancelablePromise> { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/user/{id}/2fa', + path: { + 'id': id, + }, + errors: { + 401: `The resource is protected and requires an authentication token`, + 403: `The authenticated user do not have access to this resource`, + 404: `Not Found`, + }, + }); + } + + /** + * @returns any Success + * @throws ApiError + */ + public static deleteUserById2FaByProviderName({ + id, + providerName, + }: { + id: string, + providerName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/umbraco/management/api/v1/user/{id}/2fa/{providerName}', + path: { + 'id': id, + 'providerName': providerName, + }, + errors: { + 400: `Bad Request`, + 401: `The resource is protected and requires an authentication token`, + 403: `The authenticated user do not have access to this resource`, + 404: `Not Found`, + }, + }); + } + /** * @returns any Success * @throws ApiError */ public static deleteUserAvatarById({ -id, -}: { -id: string, -}): CancelablePromise { + id, + }: { + id: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'DELETE', url: '/umbraco/management/api/v1/user/avatar/{id}', @@ -198,12 +251,12 @@ id: string, * @throws ApiError */ public static postUserAvatarById({ -id, -requestBody, -}: { -id: string, -requestBody?: SetAvatarRequestModel, -}): CancelablePromise { + id, + requestBody, + }: { + id: string, + requestBody?: SetAvatarRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/user/avatar/{id}', @@ -225,12 +278,12 @@ requestBody?: SetAvatarRequestModel, * @throws ApiError */ public static postUserChangePasswordById({ -id, -requestBody, -}: { -id: string, -requestBody?: ChangePasswordUserRequestModel, -}): CancelablePromise { + id, + requestBody, + }: { + id: string, + requestBody?: ChangePasswordUserRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/user/change-password/{id}', @@ -274,15 +327,107 @@ requestBody?: ChangePasswordUserRequestModel, }); } + /** + * @returns any Success + * @throws ApiError + */ + public static getUserCurrent2Fa(): CancelablePromise> { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/user/current/2fa', + errors: { + 401: `The resource is protected and requires an authentication token`, + }, + }); + } + + /** + * @returns any Success + * @throws ApiError + */ + public static deleteUserCurrent2FaByProviderName({ + providerName, + code, + }: { + providerName: string, + code?: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/umbraco/management/api/v1/user/current/2fa/{providerName}', + path: { + 'providerName': providerName, + }, + query: { + 'code': code, + }, + errors: { + 400: `Bad Request`, + 401: `The resource is protected and requires an authentication token`, + 404: `Not Found`, + }, + }); + } + + /** + * @returns any Success + * @throws ApiError + */ + public static postUserCurrent2FaByProviderName({ + providerName, + requestBody, + }: { + providerName: string, + requestBody?: EnableTwoFactorRequestModel, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/umbraco/management/api/v1/user/current/2fa/{providerName}', + path: { + 'providerName': providerName, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Bad Request`, + 401: `The resource is protected and requires an authentication token`, + 404: `Not Found`, + }, + }); + } + + /** + * @returns any Success + * @throws ApiError + */ + public static getUserCurrent2FaByProviderName({ + providerName, + }: { + providerName: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/user/current/2fa/{providerName}', + path: { + 'providerName': providerName, + }, + errors: { + 400: `Bad Request`, + 401: `The resource is protected and requires an authentication token`, + 404: `Not Found`, + }, + }); + } + /** * @returns any Success * @throws ApiError */ public static postUserCurrentAvatar({ -requestBody, -}: { -requestBody?: SetAvatarRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: SetAvatarRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/user/current/avatar', @@ -300,10 +445,10 @@ requestBody?: SetAvatarRequestModel, * @throws ApiError */ public static postUserCurrentChangePassword({ -requestBody, -}: { -requestBody?: ChangePasswordUserRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: ChangePasswordUserRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/user/current/change-password', @@ -348,10 +493,10 @@ requestBody?: ChangePasswordUserRequestModel, * @throws ApiError */ public static getUserCurrentPermissions({ -id, -}: { -id?: Array, -}): CancelablePromise> { + id, + }: { + id?: Array, + }): CancelablePromise> { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/user/current/permissions', @@ -369,10 +514,10 @@ id?: Array, * @throws ApiError */ public static getUserCurrentPermissionsDocument({ -id, -}: { -id?: Array, -}): CancelablePromise> { + id, + }: { + id?: Array, + }): CancelablePromise> { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/user/current/permissions/document', @@ -390,10 +535,10 @@ id?: Array, * @throws ApiError */ public static getUserCurrentPermissionsMedia({ -id, -}: { -id?: Array, -}): CancelablePromise> { + id, + }: { + id?: Array, + }): CancelablePromise> { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/user/current/permissions/media', @@ -411,10 +556,10 @@ id?: Array, * @throws ApiError */ public static postUserDisable({ -requestBody, -}: { -requestBody?: DisableUserRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: DisableUserRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/user/disable', @@ -433,10 +578,10 @@ requestBody?: DisableUserRequestModel, * @throws ApiError */ public static postUserEnable({ -requestBody, -}: { -requestBody?: EnableUserRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: EnableUserRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/user/enable', @@ -455,22 +600,22 @@ requestBody?: EnableUserRequestModel, * @throws ApiError */ public static getUserFilter({ -skip, -take = 100, -orderBy, -orderDirection, -userGroupIds, -userStates, -filter = '', -}: { -skip?: number, -take?: number, -orderBy?: UserOrderModel, -orderDirection?: DirectionModel, -userGroupIds?: Array, -userStates?: Array, -filter?: string, -}): CancelablePromise { + skip, + take = 100, + orderBy, + orderDirection, + userGroupIds, + userStates, + filter = '', + }: { + skip?: number, + take?: number, + orderBy?: UserOrderModel, + orderDirection?: DirectionModel, + userGroupIds?: Array, + userStates?: Array, + filter?: string, + }): CancelablePromise { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/user/filter', @@ -494,10 +639,10 @@ filter?: string, * @throws ApiError */ public static postUserInvite({ -requestBody, -}: { -requestBody?: InviteUserRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: InviteUserRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/user/invite', @@ -515,10 +660,10 @@ requestBody?: InviteUserRequestModel, * @throws ApiError */ public static postUserInviteCreatePassword({ -requestBody, -}: { -requestBody?: CreateInitialPasswordUserRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: CreateInitialPasswordUserRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/user/invite/create-password', @@ -536,10 +681,10 @@ requestBody?: CreateInitialPasswordUserRequestModel, * @throws ApiError */ public static postUserInviteResend({ -requestBody, -}: { -requestBody?: ResendInviteUserRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: ResendInviteUserRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/user/invite/resend', @@ -557,10 +702,10 @@ requestBody?: ResendInviteUserRequestModel, * @throws ApiError */ public static postUserInviteVerify({ -requestBody, -}: { -requestBody?: (VerifyInviteUserRequestModel | CreateInitialPasswordUserRequestModel), -}): CancelablePromise { + requestBody, + }: { + requestBody?: (VerifyInviteUserRequestModel | CreateInitialPasswordUserRequestModel), + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/user/invite/verify', @@ -578,10 +723,10 @@ requestBody?: (VerifyInviteUserRequestModel | CreateInitialPasswordUserRequestMo * @throws ApiError */ public static getUserItem({ -id, -}: { -id?: Array, -}): CancelablePromise> { + id, + }: { + id?: Array, + }): CancelablePromise> { return __request(OpenAPI, { method: 'GET', url: '/umbraco/management/api/v1/user/item', @@ -599,10 +744,10 @@ id?: Array, * @throws ApiError */ public static postUserSetUserGroups({ -requestBody, -}: { -requestBody?: UpdateUserGroupsOnUserRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: UpdateUserGroupsOnUserRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/user/set-user-groups', @@ -620,10 +765,10 @@ requestBody?: UpdateUserGroupsOnUserRequestModel, * @throws ApiError */ public static postUserUnlock({ -requestBody, -}: { -requestBody?: UnlockUsersRequestModel, -}): CancelablePromise { + requestBody, + }: { + requestBody?: UnlockUsersRequestModel, + }): CancelablePromise { return __request(OpenAPI, { method: 'POST', url: '/umbraco/management/api/v1/user/unlock', diff --git a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/extensions-element-initializer.controller.ts b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/extensions-element-initializer.controller.ts index d12714c73b..a40f574a34 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/extensions-element-initializer.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/extensions-element-initializer.controller.ts @@ -27,7 +27,7 @@ export class UmbExtensionsElementInitializer< > { // #extensionRegistry; - private _defaultElement?: string; + #defaultElement?: string; #props?: Record; public get properties() { @@ -50,7 +50,7 @@ export class UmbExtensionsElementInitializer< ) { super(host, extensionRegistry, type, filter, onChange); this.#extensionRegistry = extensionRegistry; - this._defaultElement = defaultElement; + this.#defaultElement = defaultElement; this._init(); } @@ -60,7 +60,7 @@ export class UmbExtensionsElementInitializer< this.#extensionRegistry, manifest.alias, this._extensionChanged, - this._defaultElement, + this.#defaultElement, ) as ControllerType; extController.properties = this.#props; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/browser-handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/browser-handlers.ts index e23b274607..cde1bb1640 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/browser-handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/browser-handlers.ts @@ -16,7 +16,7 @@ import { handlers as objectTypeHandlers } from './handlers/object-type/index.js' import { handlers as healthCheckHandlers } from './handlers/health-check.handlers.js'; import { handlers as profilingHandlers } from './handlers/performance-profiling.handlers.js'; import { handlers as documentHandlers } from './handlers/document/index.js'; -import { handlers as mediaHandlers } from './handlers/media.handlers.js'; +import { handlers as mediaHandlers } from './handlers/media/index.js'; import { handlers as dictionaryHandlers } from './handlers/dictionary.handlers.js'; import { handlers as mediaTypeHandlers } from './handlers/media-type/index.js'; import { handlers as memberGroupHandlers } from './handlers/member-group.handlers.js'; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/audit-log.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/audit-log.data.ts index 730cd6943a..c925d90bb3 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/audit-log.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/audit-log.data.ts @@ -1,11 +1,7 @@ import { data as userData } from './user/user.data.js'; -import { data as documentData } from './document.data.js'; -import type { - AuditLogResponseModel, - AuditLogWithUsernameResponseModel} from '@umbraco-cms/backoffice/backend-api'; -import { - AuditTypeModel, -} from '@umbraco-cms/backoffice/backend-api'; +import { data as documentData } from './document/document.data.js'; +import type { AuditLogResponseModel, AuditLogWithUsernameResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import { AuditTypeModel } from '@umbraco-cms/backoffice/backend-api'; const userId = userData[0].id; const userName = userData[0].name; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts index e8623bad5e..a9976a2bda 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts @@ -14,42 +14,38 @@ export const data: Array = [ { name: 'Folder 1', id: 'dt-folder1', - parentId: null, + parent: null, isFolder: true, hasChildren: false, - isContainer: false, editorAlias: '', values: [], }, { name: 'Folder 2', id: 'dt-folder2', - parentId: null, + parent: null, isFolder: true, hasChildren: true, - isContainer: false, editorAlias: '', values: [], }, { id: '0cc0eba1-9960-42c9-bf9b-60e150b429ae', - parentId: null, + parent: null, name: 'Textstring', editorAlias: 'Umbraco.TextBox', editorUiAlias: 'Umb.PropertyEditorUi.TextBox', values: [], hasChildren: false, - isContainer: false, isFolder: false, }, { name: 'Text', id: 'dt-textBox', - parentId: null, + parent: null, editorAlias: 'Umbraco.TextBox', editorUiAlias: 'Umb.PropertyEditorUi.TextBox', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -61,33 +57,30 @@ export const data: Array = [ { name: 'Text Area', id: 'dt-textArea', - parentId: null, + parent: null, editorAlias: 'Umbraco.TextArea', editorUiAlias: 'Umb.PropertyEditorUi.TextArea', hasChildren: false, - isContainer: false, isFolder: false, values: [], }, { name: 'My JS Property Editor', id: 'dt-custom', - parentId: null, + parent: null, editorAlias: 'Umbraco.Label', editorUiAlias: 'My.PropertyEditorUI.Custom', hasChildren: false, - isContainer: false, isFolder: false, values: [], }, { name: 'Color Picker', id: 'dt-colorPicker', - parentId: null, + parent: null, editorAlias: 'Umbraco.ColorPicker', editorUiAlias: 'Umb.PropertyEditorUi.ColorPicker', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -140,11 +133,10 @@ export const data: Array = [ { name: 'Content Picker', id: 'dt-contentPicker', - parentId: null, + parent: null, editorAlias: 'Umbraco.ContentPicker', editorUiAlias: 'Umb.PropertyEditorUi.DocumentPicker', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -156,11 +148,10 @@ export const data: Array = [ { name: 'Eye Dropper', id: 'dt-eyeDropper', - parentId: null, + parent: null, editorAlias: 'Umbraco.ColorPicker.EyeDropper', editorUiAlias: 'Umb.PropertyEditorUi.EyeDropper', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -194,11 +185,10 @@ export const data: Array = [ { name: 'Multi URL Picker', id: 'dt-multiUrlPicker', - parentId: null, + parent: null, editorAlias: 'Umbraco.MultiUrlPicker', editorUiAlias: 'Umb.PropertyEditorUi.MultiUrlPicker', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -226,11 +216,10 @@ export const data: Array = [ { name: 'Multi Node Tree Picker', id: 'dt-multiNodeTreePicker', - parentId: null, + parent: null, editorAlias: 'Umbraco.MultiNodeTreePicker', editorUiAlias: 'Umb.PropertyEditorUi.TreePicker', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -265,11 +254,10 @@ export const data: Array = [ { name: 'Date Picker', id: 'dt-datePicker', - parentId: null, + parent: null, editorAlias: 'Umbraco.DateTime', editorUiAlias: 'Umb.PropertyEditorUi.DatePicker', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -289,10 +277,9 @@ export const data: Array = [ { name: 'Date Picker With Time', id: 'dt-datePicker-time', - parentId: null, + parent: null, editorAlias: 'Umbraco.DateTime', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -308,11 +295,10 @@ export const data: Array = [ { name: 'Time', id: 'dt-time', - parentId: null, + parent: null, editorAlias: 'Umbraco.DateTime', editorUiAlias: 'Umb.PropertyEditorUi.DatePicker', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -328,11 +314,10 @@ export const data: Array = [ { name: 'Email', id: 'dt-email', - parentId: null, + parent: null, editorAlias: 'Umbraco.EmailAddress', editorUiAlias: 'Umb.PropertyEditorUi.Email', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -344,11 +329,10 @@ export const data: Array = [ { name: 'Multiple Text String', id: 'dt-multipleTextString', - parentId: null, + parent: null, editorAlias: 'Umbraco.MultipleTextString', editorUiAlias: 'Umb.PropertyEditorUi.MultipleTextString', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -364,11 +348,10 @@ export const data: Array = [ { name: 'Dropdown', id: 'dt-dropdown', - parentId: null, + parent: null, editorAlias: 'Umbraco.DropDown.Flexible', editorUiAlias: 'Umb.PropertyEditorUi.Dropdown', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -388,11 +371,10 @@ export const data: Array = [ { name: 'Slider', id: 'dt-slider', - parentId: null, + parent: null, editorAlias: 'Umbraco.Slider', editorUiAlias: 'Umb.PropertyEditorUi.Slider', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -424,11 +406,10 @@ export const data: Array = [ { name: 'Toggle', id: 'dt-toggle', - parentId: null, + parent: null, editorAlias: 'Umbraco.TrueFalse', editorUiAlias: 'Umb.PropertyEditorUi.Toggle', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -452,11 +433,10 @@ export const data: Array = [ { name: 'Tags', id: 'dt-tags', - parentId: null, + parent: null, editorAlias: 'Umbraco.Tags', editorUiAlias: 'Umb.PropertyEditorUi.Tags', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -472,22 +452,20 @@ export const data: Array = [ { name: 'Markdown Editor', id: 'dt-markdownEditor', - parentId: null, + parent: null, editorAlias: 'Umbraco.MarkdownEditor', editorUiAlias: 'Umb.PropertyEditorUi.MarkdownEditor', hasChildren: false, - isContainer: false, isFolder: false, values: [], }, { name: 'Radio Button List', id: 'dt-radioButtonList', - parentId: null, + parent: null, editorAlias: 'Umbraco.RadioButtonList', editorUiAlias: 'Umb.PropertyEditorUi.RadioButtonList', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -503,11 +481,10 @@ export const data: Array = [ { name: 'Checkbox List', id: 'dt-checkboxList', - parentId: null, + parent: null, editorAlias: 'Umbraco.CheckboxList', editorUiAlias: 'Umb.PropertyEditorUi.CheckboxList', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -523,11 +500,10 @@ export const data: Array = [ { name: 'Block List', id: 'dt-blockList', - parentId: null, + parent: null, editorAlias: 'Umbraco.BlockList', editorUiAlias: 'Umb.PropertyEditorUi.BlockList', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -536,6 +512,7 @@ export const data: Array = [ { label: 'Mocked Block Type for Block List', contentElementTypeKey: '4f68ba66-6fb2-4778-83b8-6ab4ca3a7c5c', + settingsElementTypeKey: 'all-property-editors-document-type-id', icon: 'icon-server-alt', }, { @@ -575,7 +552,7 @@ export const data: Array = [ }, { alias: 'useInlineEditingAsDefault', - value: true, + value: false, }, { alias: 'useLiveEditing', @@ -586,22 +563,20 @@ export const data: Array = [ { name: 'Media Picker', id: 'dt-mediaPicker', - parentId: null, + parent: null, editorAlias: 'Umbraco.MediaPicker3', editorUiAlias: 'Umb.PropertyEditorUi.MediaPicker', hasChildren: false, - isContainer: false, isFolder: false, values: [], }, { name: 'Image Cropper', id: 'dt-imageCropper', - parentId: null, + parent: null, editorAlias: 'Umbraco.ImageCropper', editorUiAlias: 'Umb.PropertyEditorUi.ImageCropper', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -629,11 +604,10 @@ export const data: Array = [ { name: 'Upload Field', id: 'dt-uploadField', - parentId: null, + parent: null, editorAlias: 'Umbraco.UploadField', editorUiAlias: 'Umb.PropertyEditorUi.UploadField', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -649,11 +623,10 @@ export const data: Array = [ { name: 'Block Grid', id: 'dt-blockGrid', - parentId: null, + parent: null, editorAlias: 'Umbraco.BlockGrid', editorUiAlias: 'Umb.PropertyEditorUi.BlockGrid', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -720,33 +693,30 @@ export const data: Array = [ { name: 'Collection View', id: 'dt-collectionView', - parentId: null, + parent: null, editorAlias: 'Umbraco.ListView', editorUiAlias: 'Umb.PropertyEditorUi.CollectionView', hasChildren: false, - isContainer: false, isFolder: false, values: [], }, { name: 'Icon Picker', id: 'dt-iconPicker', - parentId: null, + parent: null, editorAlias: 'Umbraco.IconPicker', editorUiAlias: 'Umb.PropertyEditorUi.IconPicker', hasChildren: false, - isContainer: false, isFolder: false, values: [], }, { name: 'Rich Text Editor', id: 'dt-richTextEditor', - parentId: null, + parent: null, editorAlias: 'Umbraco.RichText', editorUiAlias: 'Umb.PropertyEditorUi.TinyMCE', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -762,7 +732,7 @@ export const data: Array = [ '+a[id|style|rel|data-id|data-udi|rev|charset|hreflang|dir|lang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],-strong/-b[class|style],-em/-i[class|style],-strike[class|style],-s[class|style],-u[class|style],#p[id|style|dir|class|align],-ol[class|reversed|start|style|type],-ul[class|style],-li[class|style],br[class],img[id|dir|lang|longdesc|usemap|style|class|src|onmouseover|onmouseout|border|alt=|title|hspace|vspace|width|height|align|umbracoorgwidth|umbracoorgheight|onresize|onresizestart|onresizeend|rel|data-id],-sub[style|class],-sup[style|class],-blockquote[dir|style|class],-table[border=0|cellspacing|cellpadding|width|height|class|align|summary|style|dir|id|lang|bgcolor|background|bordercolor],-tr[id|lang|dir|class|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor],tbody[id|class],thead[id|class],tfoot[id|class],#td[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor|scope],-th[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|scope],caption[id|lang|dir|class|style],-div[id|dir|class|align|style],-span[class|align|style],-pre[class|align|style],address[class|align|style],-h1[id|dir|class|align|style],-h2[id|dir|class|align|style],-h3[id|dir|class|align|style],-h4[id|dir|class|align|style],-h5[id|dir|class|align|style],-h6[id|style|dir|class|align|style],hr[class|style],small[class|style],dd[id|class|title|style|dir|lang],dl[id|class|title|style|dir|lang],dt[id|class|title|style|dir|lang],object[class|id|width|height|codebase|*],param[name|value|_value|class],embed[type|width|height|src|class|*],map[name|class],area[shape|coords|href|alt|target|class],bdo[class],button[class],iframe[*],figure,figcaption,video[*],audio[*],picture[*],source[*],canvas[*]', }, { alias: 'invalidElements', value: 'font' }, - // { alias: 'stylesheets', value: ['/css/rte-content.css'] }, + { alias: 'stylesheets', value: [] }, { alias: 'toolbar', value: [ @@ -784,7 +754,6 @@ export const data: Array = [ 'anchor', 'table', 'umbmediapicker', - 'umbmacro', 'umbembeddialog', ], }, @@ -822,33 +791,30 @@ export const data: Array = [ { name: 'Label', id: 'dt-label', - parentId: null, + parent: null, editorAlias: 'Umbraco.Label', editorUiAlias: 'Umb.PropertyEditorUi.Label', hasChildren: false, - isContainer: false, isFolder: false, values: [], }, { name: 'Integer', id: 'dt-integer', - parentId: null, + parent: null, editorAlias: 'Umbraco.Integer', editorUiAlias: 'Umb.PropertyEditorUi.Integer', hasChildren: false, - isContainer: false, isFolder: false, values: [], }, { name: 'Decimal', id: 'dt-decimal', - parentId: null, + parent: null, editorAlias: 'Umbraco.Decimal', editorUiAlias: 'Umb.PropertyEditorUi.Decimal', hasChildren: false, - isContainer: false, isFolder: false, values: [ { @@ -860,55 +826,50 @@ export const data: Array = [ { name: 'User Picker', id: 'dt-userPicker', - parentId: null, + parent: null, editorAlias: 'Umbraco.UserPicker', editorUiAlias: 'Umb.PropertyEditorUi.UserPicker', hasChildren: false, - isContainer: false, isFolder: false, values: [], }, { name: 'Member Picker', id: 'dt-memberPicker', - parentId: null, + parent: null, editorAlias: 'Umbraco.MemberPicker', editorUiAlias: 'Umb.PropertyEditorUi.MemberPicker', hasChildren: false, - isContainer: false, isFolder: false, values: [], }, { name: 'Member Group Picker', id: 'dt-memberGroupPicker', - parentId: null, + parent: null, editorAlias: 'Umbraco.MemberGroupPicker', editorUiAlias: 'Umb.PropertyEditorUi.MemberGroupPicker', hasChildren: false, - isContainer: false, isFolder: false, values: [], }, { name: 'Data Type in folder', id: 'dt-data-type-in-folder', - parentId: 'dt-folder2', + parent: { id: 'dt-folder2' }, editorAlias: 'Umbraco.MemberGroupPicker', editorUiAlias: 'Umb.PropertyEditorUi.MemberGroupPicker', hasChildren: false, - isContainer: false, isFolder: false, values: [], }, { name: 'Static File Picker', id: 'dt-staticFilePicker', - parentId: null, + parent: null, editorAlias: 'Umbraco.Label', editorUiAlias: 'Umb.PropertyEditorUi.StaticFilePicker', hasChildren: false, - isContainer: false, isFolder: false, values: [], }, diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.db.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.db.ts index 907d85b5cc..95b7562944 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.db.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.db.ts @@ -32,7 +32,6 @@ const createMockDataTypeFolderMapper = (request: CreateFolderRequestModel): UmbM parentId: request.parentId, isFolder: true, hasChildren: false, - isContainer: false, editorAlias: '', values: [], }; @@ -48,7 +47,6 @@ const createMockDataTypeMapper = (request: CreateDataTypeRequestModel): UmbMockD values: request.values, isFolder: false, hasChildren: false, - isContainer: false, }; }; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/dictionary.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/dictionary.data.ts index 72570e8dcd..0f44a4bdb0 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/dictionary.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/dictionary.data.ts @@ -1,6 +1,9 @@ import { UmbEntityData } from './entity.data.js'; import { createEntityTreeItem } from './utils.js'; -import type { DictionaryItemResponseModel, EntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { + DictionaryItemResponseModel, + NamedEntityTreeItemResponseModel, +} from '@umbraco-cms/backoffice/backend-api'; export const data: Array = [ { @@ -33,22 +36,20 @@ export const data: Array = [ }, ]; -const dictionaryTree: Array = [ +const dictionaryTree: Array = [ { - parentId: null, + parent: null, name: 'Hello', id: 'aae7d0ab-53ba-485d-b8bd-12537f9925cb', hasChildren: true, type: 'dictionary-item', - isContainer: false, }, { - parentId: 'aae7d0ab-53ba-485d-b8bd-12537f9925cb', + parent: null, name: 'Hello again', id: 'bbe7d0ab-53bb-485d-b8bd-12537f9925cb', hasChildren: false, type: 'dictionary-item', - isContainer: false, }, ]; @@ -61,18 +62,18 @@ class UmbDictionaryData extends UmbEntityData { super(data); } - getTreeRoot(): Array { - const rootItems = dictionaryTree.filter((item) => item.parentId === null); + getTreeRoot(): Array { + const rootItems = dictionaryTree.filter((item) => item.parent === null); return rootItems.map((item) => createEntityTreeItem(item)); } - getTreeItemChildren(id: string): Array { - const childItems = dictionaryTree.filter((item) => item.parentId === id); + getTreeItemChildren(id: string): Array { + const childItems = dictionaryTree.filter((item) => item.parent?.id === id); return childItems.map((item) => createEntityTreeItem(item)); } - getTreeItem(ids: Array): Array { - const items = dictionaryTree.filter((item) => ids.includes(item.id ?? '')); + getTreeItem(ids: Array): Array { + const items = dictionaryTree.filter((item) => ids.includes(item.id)); return items.map((item) => createEntityTreeItem(item)); } } diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/document-type/document-type.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/document-type/document-type.data.ts index 1deda0dd40..c03f4b5dd5 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/document-type/document-type.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/document-type/document-type.data.ts @@ -1,9 +1,8 @@ +import { CompositionTypeModel } from '@umbraco-cms/backoffice/backend-api'; import type { DocumentTypeItemResponseModel, DocumentTypeResponseModel, - DocumentTypeTreeItemResponseModel} from '@umbraco-cms/backoffice/backend-api'; -import { - ContentTypeCompositionTypeModel + DocumentTypeTreeItemResponseModel, } from '@umbraco-cms/backoffice/backend-api'; export type UmbMockDocumentTypeModelHack = DocumentTypeResponseModel & @@ -14,8 +13,8 @@ export interface UmbMockDocumentTypeModel extends Omit = [ { - allowedTemplateIds: [], - defaultTemplateId: null, + allowedTemplates: [], + defaultTemplate: null, id: 'all-property-editors-document-type-id', alias: 'blogPost', name: 'All property editors document type', @@ -26,17 +25,20 @@ export const data: Array = [ variesBySegment: false, isElement: false, hasChildren: false, - isContainer: false, - parentId: null, + parent: null, isFolder: false, properties: [ { id: '1', - containerId: 'all-properties-group-key', + container: { + id: 'all-properties-group-key', + }, alias: 'richTextEditor', name: 'Rich Text editor', description: 'Some description to test with a long description.', - dataTypeId: 'dt-richTextEditor', + dataType: { + id: 'dt-richTextEditor', + }, variesByCulture: false, variesBySegment: false, sortOrder: 0, @@ -52,11 +54,15 @@ export const data: Array = [ }, { id: '2', - containerId: 'all-properties-group-id', + container: { + id: 'all-properties-group-key', + }, alias: 'colorPicker', name: 'Color Picker', description: '', - dataTypeId: 'dt-colorPicker', + dataType: { + id: 'dt-colorPicker', + }, variesByCulture: false, variesBySegment: false, sortOrder: 1, @@ -72,11 +78,15 @@ export const data: Array = [ }, { id: '3', - containerId: 'all-properties-group-key', + container: { + id: 'all-properties-group-key', + }, alias: 'contentPicker', name: 'Content Picker', description: '', - dataTypeId: 'dt-contentPicker', + dataType: { + id: 'dt-contentPicker', + }, variesByCulture: false, variesBySegment: false, sortOrder: 2, @@ -92,11 +102,11 @@ export const data: Array = [ }, { id: '4', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'eyeDropper', name: 'Eye Dropper', description: '', - dataTypeId: 'dt-eyeDropper', + dataType: { id: 'dt-eyeDropper' }, variesByCulture: false, variesBySegment: false, sortOrder: 3, @@ -112,11 +122,11 @@ export const data: Array = [ }, { id: '5', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'multiUrlPicker', name: 'Multi URL Picker', description: '', - dataTypeId: 'dt-multiUrlPicker', + dataType: { id: 'dt-multiUrlPicker' }, variesByCulture: true, variesBySegment: false, sortOrder: 4, @@ -132,11 +142,11 @@ export const data: Array = [ }, { id: '6', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'multiNodeTreePicker', name: 'Multi Node Tree Picker', description: '', - dataTypeId: 'dt-multiNodeTreePicker', + dataType: { id: 'dt-multiNodeTreePicker' }, variesByCulture: false, variesBySegment: false, sortOrder: 5, @@ -152,11 +162,11 @@ export const data: Array = [ }, { id: '7', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'datePicker', name: 'Date Picker', description: '', - dataTypeId: 'dt-datePicker', + dataType: { id: 'dt-datePicker' }, variesByCulture: false, variesBySegment: false, sortOrder: 6, @@ -172,11 +182,11 @@ export const data: Array = [ }, { id: '7b', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'datePicker-b', name: 'Date Picker With Time', description: '', - dataTypeId: 'dt-datePicker-time', + dataType: { id: 'dt-datePicker-time' }, variesByCulture: false, variesBySegment: false, sortOrder: 7, @@ -192,11 +202,11 @@ export const data: Array = [ }, { id: '8', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'email', name: 'Email', description: '', - dataTypeId: 'dt-email', + dataType: { id: 'dt-email' }, variesByCulture: false, variesBySegment: false, sortOrder: 9, @@ -212,11 +222,11 @@ export const data: Array = [ }, { id: '9', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'textBox', name: 'Text Box', description: '', - dataTypeId: 'dt-textBox', + dataType: { id: 'dt-textBox' }, variesByCulture: false, variesBySegment: false, sortOrder: 10, @@ -232,11 +242,11 @@ export const data: Array = [ }, { id: '19', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'dropdown', name: 'Dropdown', description: '', - dataTypeId: 'dt-dropdown', + dataType: { id: 'dt-dropdown' }, variesByCulture: false, variesBySegment: false, sortOrder: 11, @@ -252,11 +262,11 @@ export const data: Array = [ }, { id: '11', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'textArea', name: 'Text Area', description: '', - dataTypeId: 'dt-textArea', + dataType: { id: 'dt-textArea' }, variesByCulture: false, variesBySegment: false, sortOrder: 12, @@ -272,11 +282,11 @@ export const data: Array = [ }, { id: '12', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'slider', name: 'Slider', description: '', - dataTypeId: 'dt-slider', + dataType: { id: 'dt-slider' }, variesByCulture: false, variesBySegment: false, sortOrder: 13, @@ -292,11 +302,11 @@ export const data: Array = [ }, { id: '13', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'toggle', name: 'Toggle', description: '', - dataTypeId: 'dt-toggle', + dataType: { id: 'dt-toggle' }, variesByCulture: false, variesBySegment: false, sortOrder: 14, @@ -312,11 +322,11 @@ export const data: Array = [ }, { id: '14', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'tags', name: 'Tags', description: '', - dataTypeId: 'dt-tags', + dataType: { id: 'dt-tags' }, variesByCulture: false, variesBySegment: false, sortOrder: 15, @@ -332,11 +342,11 @@ export const data: Array = [ }, { id: '15', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'markdownEditor', name: 'MarkdownEditor', description: '', - dataTypeId: 'dt-markdownEditor', + dataType: { id: 'dt-markdownEditor' }, variesByCulture: false, variesBySegment: false, sortOrder: 16, @@ -352,11 +362,11 @@ export const data: Array = [ }, { id: '16', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'radioButtonList', name: 'Radio Button List', description: '', - dataTypeId: 'dt-radioButtonList', + dataType: { id: 'dt-radioButtonList' }, variesByCulture: false, variesBySegment: false, sortOrder: 17, @@ -372,11 +382,11 @@ export const data: Array = [ }, { id: '17', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'checkboxList', name: 'Checkbox List', description: '', - dataTypeId: 'dt-checkboxList', + dataType: { id: 'dt-checkboxList' }, variesByCulture: false, variesBySegment: false, sortOrder: 18, @@ -392,11 +402,11 @@ export const data: Array = [ }, { id: '18', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'blockList', name: 'Block List', description: '', - dataTypeId: 'dt-blockList', + dataType: { id: 'dt-blockList' }, variesByCulture: false, variesBySegment: false, sortOrder: -2, @@ -412,11 +422,11 @@ export const data: Array = [ }, { id: '19', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'mediaPicker', name: 'Media Picker', description: '', - dataTypeId: 'dt-mediaPicker', + dataType: { id: 'dt-mediaPicker' }, variesByCulture: false, variesBySegment: false, sortOrder: 20, @@ -432,11 +442,11 @@ export const data: Array = [ }, { id: '20', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'imageCropper', name: 'Image Cropper', description: '', - dataTypeId: 'dt-imageCropper', + dataType: { id: 'dt-imageCropper' }, variesByCulture: false, variesBySegment: false, sortOrder: 21, @@ -452,11 +462,11 @@ export const data: Array = [ }, { id: '21', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'uploadField', name: 'Upload Field', description: '', - dataTypeId: 'dt-uploadField', + dataType: { id: 'dt-uploadField' }, variesByCulture: false, variesBySegment: false, sortOrder: 22, @@ -472,11 +482,11 @@ export const data: Array = [ }, { id: '22', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'blockGrid', name: 'Block Grid', description: '', - dataTypeId: 'dt-blockGrid', + dataType: { id: 'dt-blockGrid' }, variesByCulture: false, variesBySegment: false, sortOrder: -1, @@ -492,11 +502,11 @@ export const data: Array = [ }, { id: '23', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'iconPicker', name: 'Icon Picker', description: '', - dataTypeId: 'dt-iconPicker', + dataType: { id: 'dt-iconPicker' }, variesByCulture: false, variesBySegment: false, sortOrder: 24, @@ -512,11 +522,11 @@ export const data: Array = [ }, { id: '27', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'label', name: 'Label', description: '', - dataTypeId: 'dt-label', + dataType: { id: 'dt-label' }, variesByCulture: false, variesBySegment: false, sortOrder: 25, @@ -532,11 +542,11 @@ export const data: Array = [ }, { id: '28', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'integer', name: 'Integer', description: '', - dataTypeId: 'dt-integer', + dataType: { id: 'dt-integer' }, variesByCulture: false, variesBySegment: false, sortOrder: 26, @@ -552,11 +562,11 @@ export const data: Array = [ }, { id: '29', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'decimal', name: 'Decimal', description: '', - dataTypeId: 'dt-decimal', + dataType: { id: 'dt-decimal' }, variesByCulture: false, variesBySegment: false, sortOrder: 27, @@ -572,11 +582,11 @@ export const data: Array = [ }, { id: '30', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'memberPicker', name: 'Member Picker', description: '', - dataTypeId: 'dt-memberPicker', + dataType: { id: 'dt-memberPicker' }, variesByCulture: false, variesBySegment: false, sortOrder: 29, @@ -592,11 +602,11 @@ export const data: Array = [ }, { id: '31', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'memberGroupPicker', name: 'Member Group Picker', description: '', - dataTypeId: 'dt-memberGroupPicker', + dataType: { id: 'dt-memberGroupPicker' }, variesByCulture: false, variesBySegment: false, sortOrder: 30, @@ -612,11 +622,11 @@ export const data: Array = [ }, { id: '32', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'userPicker', name: 'User Picker', description: '', - dataTypeId: 'dt-userPicker', + dataType: { id: 'dt-userPicker' }, variesByCulture: false, variesBySegment: false, sortOrder: 31, @@ -632,11 +642,11 @@ export const data: Array = [ }, { id: '33', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'staticFilePicker', name: 'Static File Picker', description: '', - dataTypeId: 'dt-staticFilePicker', + dataType: { id: 'dt-staticFilePicker' }, variesByCulture: false, variesBySegment: false, sortOrder: 32, @@ -654,13 +664,13 @@ export const data: Array = [ containers: [ { id: 'all-properties-group-key', - parentId: null, + parent: null, name: 'Content', type: 'Group', sortOrder: 0, }, ], - allowedContentTypes: [], + allowedDocumentTypes: [], compositions: [], cleanup: { preventCleanup: false, @@ -669,8 +679,8 @@ export const data: Array = [ }, }, { - allowedTemplateIds: [], - defaultTemplateId: null, + allowedTemplates: [], + defaultTemplate: null, id: 'simple-document-type-id', alias: 'blogPost', name: 'All property editors document type', @@ -681,17 +691,16 @@ export const data: Array = [ variesBySegment: false, isElement: false, hasChildren: false, - isContainer: false, - parentId: null, + parent: null, isFolder: false, properties: [ { id: '6', - containerId: 'all-properties-group-key', + container: { id: 'all-properties-group-key' }, alias: 'multiNodeTreePicker', name: 'Multi Node Tree Picker', description: '', - dataTypeId: 'dt-multiNodeTreePicker', + dataType: { id: 'dt-multiNodeTreePicker' }, variesByCulture: false, variesBySegment: false, sortOrder: 0, @@ -709,13 +718,13 @@ export const data: Array = [ containers: [ { id: 'all-properties-group-key', - parentId: null, + parent: null, name: 'Content', type: 'Group', sortOrder: 0, }, ], - allowedContentTypes: [], + allowedDocumentTypes: [{ documentType: { id: 'simple-document-type-id' }, sortOrder: 0 }], compositions: [], cleanup: { preventCleanup: false, @@ -725,8 +734,8 @@ export const data: Array = [ }, { - allowedTemplateIds: [], - defaultTemplateId: null, + allowedTemplates: [], + defaultTemplate: null, id: '29643452-cff9-47f2-98cd-7de4b6807681', alias: 'blogPost', name: 'Page Document Type', @@ -737,17 +746,16 @@ export const data: Array = [ variesBySegment: false, isElement: false, hasChildren: false, - isContainer: false, - parentId: null, + parent: null, isFolder: false, properties: [ { id: '5b4ca208-134e-4865-b423-06e5e97adf3c', - containerId: 'c3cd2f12-b7c4-4206-8d8b-27c061589f75', + container: { id: 'c3cd2f12-b7c4-4206-8d8b-27c061589f75' }, alias: 'blogPostText', name: 'Blog Post Text', description: null, - dataTypeId: '0cc0eba1-9960-42c9-bf9b-60e150b429ae', + dataType: { id: '0cc0eba1-9960-42c9-bf9b-60e150b429ae' }, variesByCulture: false, variesBySegment: false, sortOrder: 0, @@ -763,11 +771,11 @@ export const data: Array = [ }, { id: 'ef7096b6-7c9e-49ba-8d49-395111e65ea2', - containerId: '227d6ed2-e118-4494-b8f2-deb69854a56a', + container: { id: '227d6ed2-e118-4494-b8f2-deb69854a56a' }, alias: 'blogTextStringUnderMasterTab', name: 'Blog text string under master tab', description: null, - dataTypeId: '0cc0eba1-9960-42c9-bf9b-60e150b429ae', + dataType: { id: '0cc0eba1-9960-42c9-bf9b-60e150b429ae' }, variesByCulture: true, variesBySegment: false, sortOrder: 1, @@ -783,11 +791,11 @@ export const data: Array = [ }, { id: 'e010c429-b298-499a-9bfe-79687af8972a', - containerId: '22177c49-ecba-4f2e-b7fa-3f2c04d02cfb', + container: { id: '22177c49-ecba-4f2e-b7fa-3f2c04d02cfb' }, alias: 'blogTextStringUnderGroupUnderMasterTab', name: 'Blog text string under group under master tab', description: null, - dataTypeId: '0cc0eba1-9960-42c9-bf9b-60e150b429ae', + dataType: { id: '0cc0eba1-9960-42c9-bf9b-60e150b429ae' }, variesByCulture: true, variesBySegment: false, sortOrder: 2, @@ -803,11 +811,11 @@ export const data: Array = [ }, { id: '1a22749a-c7d2-44bb-b36b-c977c2ced6ef', - containerId: '2c943997-b685-432d-a6c5-601d8e7a298a', + container: { id: '2c943997-b685-432d-a6c5-601d8e7a298a' }, alias: 'localBlogTabString', name: 'Local Blog Tab String', description: null, - dataTypeId: '0cc0eba1-9960-42c9-bf9b-60e150b429ae', + dataType: { id: '0cc0eba1-9960-42c9-bf9b-60e150b429ae' }, variesByCulture: false, variesBySegment: false, sortOrder: 3, @@ -823,11 +831,11 @@ export const data: Array = [ }, { id: '22', - containerId: '2c943997-b685-432d-a6c5-601d8e7a298a', + container: { id: '2c943997-b685-432d-a6c5-601d8e7a298a' }, alias: 'blockGrid', name: 'Block Grid', description: '', - dataTypeId: 'dt-blockGrid', + dataType: { id: 'dt-blockGrid' }, variesByCulture: false, variesBySegment: false, sortOrder: 4, @@ -845,47 +853,47 @@ export const data: Array = [ containers: [ { id: 'c3cd2f12-b7c4-4206-8d8b-27c061589f75', - parentId: null, + parent: null, name: 'Content-group', type: 'Group', sortOrder: 0, }, { id: '227d6ed2-e118-4494-b8f2-deb69854a56a', - parentId: null, + parent: null, name: 'Master Tab', type: 'Tab', sortOrder: 0, }, { id: '22177c49-ecba-4f2e-b7fa-3f2c04d02cfb', - parentId: '227d6ed2-e118-4494-b8f2-deb69854a56a', + parent: { id: '227d6ed2-e118-4494-b8f2-deb69854a56a' }, name: 'Blog Group under master tab', type: 'Group', sortOrder: 0, }, { id: '2c943997-b685-432d-a6c5-601d8e7a298a', - parentId: null, + parent: null, name: 'Local blog tab', type: 'Tab', sortOrder: 1, }, ], - allowedContentTypes: [ + allowedDocumentTypes: [ { - id: '29643452-cff9-47f2-98cd-7de4b6807681', + documentType: { id: '29643452-cff9-47f2-98cd-7de4b6807681' }, sortOrder: 0, }, ], compositions: [ { - id: '8f68ba66-6fb2-4778-83b8-6ab4ca3a7c5d', - compositionType: ContentTypeCompositionTypeModel.INHERITANCE, + documentType: { id: '8f68ba66-6fb2-4778-83b8-6ab4ca3a7c5d' }, + compositionType: CompositionTypeModel.INHERITANCE, }, { - id: '5035d7d9-0a63-415c-9e75-ee2cf931db92', - compositionType: ContentTypeCompositionTypeModel.COMPOSITION, + documentType: { id: '5035d7d9-0a63-415c-9e75-ee2cf931db92' }, + compositionType: CompositionTypeModel.COMPOSITION, }, ], cleanup: { @@ -895,8 +903,10 @@ export const data: Array = [ }, }, { - allowedTemplateIds: ['916cfecc-3295-490c-a16d-c41fa9f72980'], - defaultTemplateId: '916cfecc-3295-490c-a16d-c41fa9f72980', + allowedTemplates: [{ id: '916cfecc-3295-490c-a16d-c41fa9f72980' }], + defaultTemplate: { + id: '916cfecc-3295-490c-a16d-c41fa9f72980', + }, id: '5035d7d9-0a63-415c-9e75-ee2cf931db92', alias: 'masterPage', name: 'Master Page', @@ -907,17 +917,16 @@ export const data: Array = [ variesBySegment: false, isElement: false, hasChildren: false, - isContainer: false, - parentId: null, + parent: null, isFolder: false, properties: [ { id: '5e5f7456-c751-4846-9f2b-47965cc96ec6', - containerId: '6f281e5a-0242-4649-bd9e-d6bf87f92b41', + container: { id: '6f281e5a-0242-4649-bd9e-d6bf87f92b41' }, alias: 'masterText', name: 'Master text', description: null, - dataTypeId: '0cc0eba1-9960-42c9-bf9b-60e150b429ae', + dataType: { id: '0cc0eba1-9960-42c9-bf9b-60e150b429ae' }, variesByCulture: false, variesBySegment: false, sortOrder: 0, @@ -935,13 +944,13 @@ export const data: Array = [ containers: [ { id: '6f281e5a-0242-4649-bd9e-d6bf87f92b41', - parentId: null, + parent: null, name: 'Master Tab', type: 'Tab', sortOrder: 0, }, ], - allowedContentTypes: [], + allowedDocumentTypes: [], compositions: [], cleanup: { preventCleanup: false, @@ -950,8 +959,8 @@ export const data: Array = [ }, }, { - allowedTemplateIds: [], - defaultTemplateId: null, + allowedTemplates: [], + defaultTemplate: null, id: '8f68ba66-6fb2-4778-83b8-6ab4ca3a7c5d', alias: 'baseElementType', name: 'Base Element Type', @@ -962,17 +971,16 @@ export const data: Array = [ variesBySegment: false, isElement: true, hasChildren: false, - isContainer: false, - parentId: null, + parent: null, isFolder: false, properties: [ { id: 'b92de6ac-1a22-4a45-a481-b6cae1cccbbf', - containerId: '1e845ca8-1e3e-4b03-be1d-0b4149ce2129', + container: { id: '1e845ca8-1e3e-4b03-be1d-0b4149ce2129' }, alias: 'pageTitle', name: 'Page title', description: null, - dataTypeId: '0cc0eba1-9960-42c9-bf9b-60e150b429ae', + dataType: { id: '0cc0eba1-9960-42c9-bf9b-60e150b429ae' }, variesByCulture: false, variesBySegment: false, sortOrder: 0, @@ -990,13 +998,13 @@ export const data: Array = [ containers: [ { id: '1e845ca8-1e3e-4b03-be1d-0b4149ce2129', - parentId: null, + parent: null, name: 'Content-group', type: 'Group', sortOrder: 0, }, ], - allowedContentTypes: [], + allowedDocumentTypes: [], compositions: [], cleanup: { preventCleanup: false, @@ -1005,8 +1013,8 @@ export const data: Array = [ }, }, { - allowedTemplateIds: [], - defaultTemplateId: null, + allowedTemplates: [], + defaultTemplate: null, id: '4f68ba66-6fb2-4778-83b8-6ab4ca3a7c5c', alias: 'simpleElementType', name: 'Simple Element Type', @@ -1017,17 +1025,16 @@ export const data: Array = [ variesBySegment: false, isElement: true, hasChildren: false, - isContainer: false, - parentId: null, + parent: null, isFolder: false, properties: [ { id: 'b92de6ac-1a22-4a45-a481-b6cae1cccbb0', - containerId: '1e845ca8-1e3e-4b03-be1d-0b4149ce2120', + container: { id: '1e845ca8-1e3e-4b03-be1d-0b4149ce2120' }, alias: 'elementProperty', name: 'Element property', description: null, - dataTypeId: '0cc0eba1-9960-42c9-bf9b-60e150b429ae', + dataType: { id: '0cc0eba1-9960-42c9-bf9b-60e150b429ae' }, variesByCulture: false, variesBySegment: false, sortOrder: 0, @@ -1045,13 +1052,13 @@ export const data: Array = [ containers: [ { id: '1e845ca8-1e3e-4b03-be1d-0b4149ce2120', - parentId: null, + parent: null, name: 'Content-group', type: 'Group', sortOrder: 0, }, ], - allowedContentTypes: [], + allowedDocumentTypes: [], compositions: [], cleanup: { preventCleanup: false, @@ -1060,12 +1067,18 @@ export const data: Array = [ }, }, { - allowedTemplateIds: [ - '2bf464b6-3aca-4388-b043-4eb439cc2643', - '9a84c0b3-03b4-4dd4-84ac-706740ac0f71', - '9a84c0b3-03b4-4dd4-84ac-706740ac0f72', + allowedTemplates: [ + { + id: '2bf464b6-3aca-4388-b043-4eb439cc2643', + }, + { + id: '9a84c0b3-03b4-4dd4-84ac-706740ac0f71', + }, + { + id: '9a84c0b3-03b4-4dd4-84ac-706740ac0f72', + }, ], - defaultTemplateId: '2bf464b6-3aca-4388-b043-4eb439cc2643', + defaultTemplate: { id: '2bf464b6-3aca-4388-b043-4eb439cc2643' }, id: 'simple-document-type-key', alias: 'simpleDocumentType', name: 'Simple Document Type', @@ -1076,17 +1089,16 @@ export const data: Array = [ variesBySegment: false, isElement: false, hasChildren: false, - isContainer: false, - parentId: null, + parent: null, isFolder: false, properties: [ { id: '1680d4d2-cda8-4ac2-affd-a69fc10382b1', - containerId: '341b8521-fd43-4333-ae7a-a10cbbc6f4b0', + container: { id: '341b8521-fd43-4333-ae7a-a10cbbc6f4b0' }, alias: 'prop1', name: 'Prop 1', description: null, - dataTypeId: '0cc0eba1-9960-42c9-bf9b-60e150b429ae', + dataType: { id: '0cc0eba1-9960-42c9-bf9b-60e150b429ae' }, variesByCulture: false, variesBySegment: false, sortOrder: 0, @@ -1104,15 +1116,15 @@ export const data: Array = [ containers: [ { id: '341b8521-fd43-4333-ae7a-a10cbbc6f4b0', - parentId: null, + parent: null, name: 'Content', type: 'Group', sortOrder: 0, }, ], - allowedContentTypes: [ - { id: 'simple-document-type-key', sortOrder: 0 }, - { id: 'simple-document-type-2-key', sortOrder: 0 }, + allowedDocumentTypes: [ + { documentType: { id: 'simple-document-type-key' }, sortOrder: 0 }, + { documentType: { id: 'simple-document-type-2-key' }, sortOrder: 0 }, ], compositions: [], cleanup: { @@ -1122,8 +1134,8 @@ export const data: Array = [ }, }, { - allowedTemplateIds: [], - defaultTemplateId: null, + allowedTemplates: [], + defaultTemplate: null, id: 'simple-document-type-2-key', alias: 'simpleDocumentType2', name: 'Simple Document Type 2', @@ -1134,17 +1146,16 @@ export const data: Array = [ variesBySegment: false, isElement: false, hasChildren: false, - isContainer: false, - parentId: null, + parent: null, isFolder: false, properties: [ { id: '82d4b050-b128-42fe-ac8e-d5586e533592', - containerId: 'b275052a-1868-4901-bc8c-2b35b78a9ab2', + container: { id: 'b275052a-1868-4901-bc8c-2b35b78a9ab2' }, alias: 'prop1', name: 'Prop 1', description: null, - dataTypeId: '0cc0eba1-9960-42c9-bf9b-60e150b429ae', + dataType: { id: '0cc0eba1-9960-42c9-bf9b-60e150b429ae' }, variesByCulture: false, variesBySegment: false, sortOrder: 0, @@ -1160,11 +1171,11 @@ export const data: Array = [ }, { id: 'beadc69a-d669-4d01-9919-98bafba31e57', - containerId: 'b275052a-1868-4901-bc8c-2b35b78a9ab2', + container: { id: 'b275052a-1868-4901-bc8c-2b35b78a9ab2' }, alias: 'prop2', name: 'Prop 2', description: null, - dataTypeId: '0cc0eba1-9960-42c9-bf9b-60e150b429ae', + dataType: { id: '0cc0eba1-9960-42c9-bf9b-60e150b429ae' }, variesByCulture: false, variesBySegment: false, sortOrder: 1, @@ -1182,13 +1193,13 @@ export const data: Array = [ containers: [ { id: 'b275052a-1868-4901-bc8c-2b35b78a9ab2', - parentId: null, + parent: null, name: 'Content', type: 'Group', sortOrder: 0, }, ], - allowedContentTypes: [{ id: 'simple-document-type-key', sortOrder: 0 }], + allowedDocumentTypes: [{ documentType: { id: 'simple-document-type-key' }, sortOrder: 0 }], compositions: [], cleanup: { preventCleanup: false, @@ -1197,8 +1208,8 @@ export const data: Array = [ }, }, { - allowedTemplateIds: [], - defaultTemplateId: null, + allowedTemplates: [], + defaultTemplate: null, id: 'folder-umbraco-demo-blocks-id', alias: 'folderUmbracoDemoBlocks', name: 'Umbraco Demo Blocks', @@ -1209,10 +1220,9 @@ export const data: Array = [ variesBySegment: false, isElement: false, hasChildren: true, - isContainer: false, - parentId: null, + parent: null, isFolder: true, - allowedContentTypes: [], + allowedDocumentTypes: [], compositions: [], cleanup: { preventCleanup: false, @@ -1223,8 +1233,8 @@ export const data: Array = [ containers: [], }, { - allowedTemplateIds: [], - defaultTemplateId: null, + allowedTemplates: [], + defaultTemplate: null, id: 'coffee-umbraco-demo-block-id', alias: 'coffeeUmbracoDemoBlock', name: 'Favorite Coffee', @@ -1235,10 +1245,9 @@ export const data: Array = [ variesBySegment: false, isElement: true, hasChildren: false, - isContainer: false, - parentId: 'folder-umbraco-demo-blocks-id', + parent: { id: 'folder-umbraco-demo-blocks-id' }, isFolder: false, - allowedContentTypes: [], + allowedDocumentTypes: [], compositions: [], cleanup: { preventCleanup: false, @@ -1248,11 +1257,11 @@ export const data: Array = [ properties: [ { id: 'coffee-name-id', - containerId: 'coffee-content-group-key', + container: { id: 'coffee-content-group-key' }, alias: 'coffeeName', name: 'Name of Coffee', description: '', - dataTypeId: 'dt-textBox', + dataType: { id: 'dt-textBox' }, variesByCulture: false, variesBySegment: false, sortOrder: 10, @@ -1268,11 +1277,11 @@ export const data: Array = [ }, { id: 'coffee-size-id', - containerId: 'coffee-content-group-key', + container: { id: 'coffee-content-group-key' }, alias: 'coffeeSize', name: 'Amount (deciliter)', description: '', - dataTypeId: 'dt-integer', + dataType: { id: 'dt-integer' }, variesByCulture: false, variesBySegment: false, sortOrder: 10, @@ -1290,7 +1299,7 @@ export const data: Array = [ containers: [ { id: 'coffee-content-group-key', - parentId: null, + parent: null, name: 'Content', type: 'Group', sortOrder: 0, @@ -1298,8 +1307,8 @@ export const data: Array = [ ], }, { - allowedTemplateIds: [], - defaultTemplateId: null, + allowedTemplates: [], + defaultTemplate: null, id: 'headline-umbraco-demo-block-id', alias: 'headlineUmbracoDemoBlock', name: 'Headline', @@ -1310,10 +1319,9 @@ export const data: Array = [ variesBySegment: false, isElement: true, hasChildren: false, - isContainer: false, - parentId: 'folder-umbraco-demo-blocks-id', + parent: { id: 'folder-umbraco-demo-blocks-id' }, isFolder: false, - allowedContentTypes: [], + allowedDocumentTypes: [], compositions: [], cleanup: { preventCleanup: false, @@ -1323,11 +1331,11 @@ export const data: Array = [ properties: [ { id: 'headline-id', - containerId: 'headline-content-group-key', + container: { id: 'headline-content-group-key' }, alias: 'headline', name: 'Headline', description: '', - dataTypeId: 'dt-textBox', + dataType: { id: 'dt-textBox' }, variesByCulture: false, variesBySegment: false, sortOrder: 10, @@ -1345,7 +1353,7 @@ export const data: Array = [ containers: [ { id: 'headline-content-group-key', - parentId: null, + parent: null, name: 'Content', type: 'Group', sortOrder: 0, @@ -1353,8 +1361,8 @@ export const data: Array = [ ], }, { - allowedTemplateIds: [], - defaultTemplateId: null, + allowedTemplates: [], + defaultTemplate: null, id: 'image-umbraco-demo-block-id', alias: 'imageUmbracoDemoBlock', name: 'Image', @@ -1365,10 +1373,9 @@ export const data: Array = [ variesBySegment: false, isElement: true, hasChildren: false, - isContainer: false, - parentId: 'folder-umbraco-demo-blocks-id', + parent: { id: 'folder-umbraco-demo-blocks-id' }, isFolder: false, - allowedContentTypes: [], + allowedDocumentTypes: [], compositions: [], cleanup: { preventCleanup: false, @@ -1378,11 +1385,11 @@ export const data: Array = [ properties: [ { id: 'image-id', - containerId: 'image-content-group-key', + container: { id: 'image-content-group-key' }, alias: 'image', name: 'Image', description: '', - dataTypeId: 'dt-mediaPicker', + dataType: { id: 'dt-mediaPicker' }, variesByCulture: false, variesBySegment: false, sortOrder: 10, @@ -1400,7 +1407,7 @@ export const data: Array = [ containers: [ { id: 'image-content-group-key', - parentId: null, + parent: null, name: 'Content', type: 'Group', sortOrder: 0, @@ -1408,8 +1415,8 @@ export const data: Array = [ ], }, { - allowedTemplateIds: [], - defaultTemplateId: null, + allowedTemplates: [], + defaultTemplate: null, id: 'rich-text-umbraco-demo-block-id', alias: 'richTextUmbracoDemoBlock', name: 'Rich Text', @@ -1420,10 +1427,9 @@ export const data: Array = [ variesBySegment: false, isElement: true, hasChildren: false, - isContainer: false, - parentId: 'folder-umbraco-demo-blocks-id', + parent: { id: 'folder-umbraco-demo-blocks-id' }, isFolder: false, - allowedContentTypes: [], + allowedDocumentTypes: [], compositions: [], cleanup: { preventCleanup: false, @@ -1433,11 +1439,11 @@ export const data: Array = [ properties: [ { id: 'rich-text-id', - containerId: 'rich-text-content-group-key', + container: { id: 'rich-text-content-group-key' }, alias: 'richText', name: 'Text', description: '', - dataTypeId: 'dt-richTextEditor', + dataType: { id: 'dt-richTextEditor' }, variesByCulture: false, variesBySegment: false, sortOrder: 10, @@ -1455,7 +1461,7 @@ export const data: Array = [ containers: [ { id: 'rich-text-content-group-key', - parentId: null, + parent: null, name: 'Content', type: 'Group', sortOrder: 0, @@ -1463,8 +1469,8 @@ export const data: Array = [ ], }, { - allowedTemplateIds: [], - defaultTemplateId: null, + allowedTemplates: [], + defaultTemplate: null, id: 'two-column-layout-umbraco-demo-block-id', alias: 'twoColumnLayoutUmbracoDemoBlock', name: 'Two Column Layout', @@ -1475,10 +1481,11 @@ export const data: Array = [ variesBySegment: false, isElement: true, hasChildren: false, - isContainer: false, - parentId: 'folder-umbraco-demo-blocks-id', + parent: { + id: 'folder-umbraco-demo-blocks-id', + }, isFolder: false, - allowedContentTypes: [], + allowedDocumentTypes: [], compositions: [], cleanup: { preventCleanup: false, @@ -1489,8 +1496,8 @@ export const data: Array = [ containers: [], }, { - allowedTemplateIds: [], - defaultTemplateId: null, + allowedTemplates: [], + defaultTemplate: null, id: 'test-block-id', alias: 'testBlock', name: 'Test broken group key', @@ -1501,10 +1508,9 @@ export const data: Array = [ variesBySegment: false, isElement: true, hasChildren: false, - isContainer: false, - parentId: null, + parent: null, isFolder: false, - allowedContentTypes: [], + allowedDocumentTypes: [], compositions: [], cleanup: { preventCleanup: false, diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/document-type/document-type.db.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/document-type/document-type.db.ts index 17d38a17c8..2a8d456990 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/document-type/document-type.db.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/document-type/document-type.db.ts @@ -3,15 +3,18 @@ import { UmbMockEntityFolderManager } from '../entity/entity-folder.manager.js'; import { UmbMockEntityTreeManager } from '../entity/entity-tree.manager.js'; import { UmbMockEntityItemManager } from '../entity/entity-item.manager.js'; import { UmbMockEntityDetailManager } from '../entity/entity-detail.manager.js'; -import type { UmbMockDocumentTypeModel} from './document-type.data.js'; +import type { UmbMockDocumentTypeModel } from './document-type.data.js'; import { data } from './document-type.data.js'; import { UmbId } from '@umbraco-cms/backoffice/id'; import type { + AllowedDocumentTypeModel, CreateDocumentTypeRequestModel, CreateFolderRequestModel, DocumentTypeItemResponseModel, DocumentTypeResponseModel, + DocumentTypeSortModel, DocumentTypeTreeItemResponseModel, + PagedAllowedDocumentTypeModel, } from '@umbraco-cms/backoffice/backend-api'; class UmbDocumentTypeMockDB extends UmbEntityMockDbBase { @@ -27,13 +30,28 @@ class UmbDocumentTypeMockDB extends UmbEntityMockDbBase) { super(data); } + + getAllowedChildren(id: string): PagedAllowedDocumentTypeModel { + const documentType = this.detail.read(id); + const allowedDocumentTypes = documentType.allowedDocumentTypes.map((sortModel: DocumentTypeSortModel) => + this.detail.read(sortModel.documentType.id), + ); + const mappedItems = allowedDocumentTypes.map((item: UmbMockDocumentTypeModel) => allowedDocumentTypeMapper(item)); + return { items: mappedItems, total: mappedItems.length }; + } + + getAllowedAtRoot(): PagedAllowedDocumentTypeModel { + const mockItems = this.data.filter((item) => item.allowedAsRoot); + const mappedItems = mockItems.map((item) => allowedDocumentTypeMapper(item)); + return { items: mappedItems, total: mappedItems.length }; + } } const createMockDocumentTypeFolderMapper = (request: CreateFolderRequestModel): UmbMockDocumentTypeModel => { return { name: request.name, id: request.id ? request.id : UmbId.new(), - parentId: request.parentId, + parent: request.parentId ? { id: request.parentId } : null, description: '', alias: '', icon: '', @@ -43,12 +61,11 @@ const createMockDocumentTypeFolderMapper = (request: CreateFolderRequestModel): variesByCulture: false, variesBySegment: false, isElement: false, - allowedContentTypes: [], + allowedDocumentTypes: [], compositions: [], isFolder: true, hasChildren: false, - isContainer: false, - allowedTemplateIds: [], + allowedTemplates: [], cleanup: { preventCleanup: false, keepAllVersionsNewerThanDays: null, @@ -70,13 +87,12 @@ const createMockDocumentTypeMapper = (request: CreateDocumentTypeRequestModel): variesByCulture: request.variesByCulture, variesBySegment: request.variesBySegment, isElement: request.isElement, - allowedContentTypes: request.allowedContentTypes, + allowedDocumentTypes: request.allowedDocumentTypes, compositions: request.compositions, - parentId: request.containerId, + parent: request.folder, isFolder: false, hasChildren: false, - isContainer: false, - allowedTemplateIds: [], + allowedTemplates: [], cleanup: { preventCleanup: false, keepAllVersionsNewerThanDays: null, @@ -98,9 +114,9 @@ const documentTypeDetailMapper = (item: UmbMockDocumentTypeModel): DocumentTypeR variesByCulture: item.variesByCulture, variesBySegment: item.variesBySegment, isElement: item.isElement, - allowedContentTypes: item.allowedContentTypes, + allowedDocumentTypes: item.allowedDocumentTypes, compositions: item.compositions, - allowedTemplateIds: item.allowedTemplateIds, + allowedTemplates: item.allowedTemplates, cleanup: item.cleanup, }; }; @@ -112,8 +128,7 @@ const documentTypeTreeItemMapper = ( name: item.name, hasChildren: item.hasChildren, id: item.id, - isContainer: item.isContainer, - parentId: item.parentId, + parent: item.parent, isFolder: item.isFolder, icon: item.icon, isElement: item.isElement, @@ -129,4 +144,13 @@ const documentTypeItemMapper = (item: UmbMockDocumentTypeModel): DocumentTypeIte }; }; +const allowedDocumentTypeMapper = (item: UmbMockDocumentTypeModel): AllowedDocumentTypeModel => { + return { + id: item.id, + name: item.name, + description: item.description, + icon: item.icon, + }; +}; + export const umbDocumentTypeMockDb = new UmbDocumentTypeMockDB(data); diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/document/document-publishing.manager.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document-publishing.manager.ts new file mode 100644 index 0000000000..52af46c503 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document-publishing.manager.ts @@ -0,0 +1,40 @@ +import type { UmbMockDocumentModel } from './document.data.js'; +import type { UmbDocumentMockDB } from './document.db.js'; +import type { PublishDocumentRequestModel, UnpublishDocumentRequestModel } from '@umbraco-cms/backoffice/backend-api'; +import { ContentStateModel } from '@umbraco-cms/backoffice/backend-api'; + +export class UmbMockDocumentPublishingManager { + #documentDb: UmbDocumentMockDB; + + constructor(documentDb: UmbDocumentMockDB) { + this.#documentDb = documentDb; + } + + publish(id: string, data: PublishDocumentRequestModel) { + const document: UmbMockDocumentModel = this.#documentDb.detail.read(id); + + document?.variants?.forEach((variant) => { + const hasCulture = variant.culture && data.cultures?.includes(variant.culture); + + if (hasCulture) { + variant.state = ContentStateModel.PUBLISHED; + } + }); + + this.#documentDb.detail.update(id, document); + } + + unpublish(id: string, data: UnpublishDocumentRequestModel) { + const document: UmbMockDocumentModel = this.#documentDb.detail.read(id); + + document?.variants?.forEach((variant) => { + const hasCulture = variant.culture && data.culture === variant.culture; + + if (hasCulture) { + variant.state = ContentStateModel.DRAFT; + } + }); + + this.#documentDb.detail.update(id, document); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/document.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.data.ts similarity index 90% rename from src/Umbraco.Web.UI.Client/src/mocks/data/document.data.ts rename to src/Umbraco.Web.UI.Client/src/mocks/data/document/document.data.ts index ad24090e2a..a42d05d47d 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/document.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.data.ts @@ -1,24 +1,17 @@ -import { umbDocumentTypeMockDb } from './document-type/document-type.db.js'; -import { umbUserPermissionData } from './user-permission.data.js'; -import { UmbEntityData } from './entity.data.js'; -import { createDocumentTreeItem } from './utils.js'; -import type { UmbMockDocumentTypeModel } from './document-type/document-type.data.js'; import type { DocumentItemResponseModel, DocumentResponseModel, DocumentTreeItemResponseModel, - DocumentTypeResponseModel, - PagedDocumentTreeItemResponseModel, - PagedDocumentTypeResponseModel, - PagedRecycleBinItemResponseModel, - PublishDocumentRequestModel} from '@umbraco-cms/backoffice/backend-api'; -import { - ContentStateModel, - PublishedStateModel, } from '@umbraco-cms/backoffice/backend-api'; -import { UMB_DOCUMENT_ENTITY_TYPE } from '@umbraco-cms/backoffice/document'; +import { ContentStateModel } from '@umbraco-cms/backoffice/backend-api'; -export const data: Array = [ +export type UmbMockDocumentTypeModelHack = DocumentResponseModel & + DocumentTreeItemResponseModel & + DocumentItemResponseModel; + +export interface UmbMockDocumentModel extends Omit {} + +export const data: Array = [ { urls: [ { @@ -26,17 +19,35 @@ export const data: Array = [ url: '/', }, ], - isTrashed: false, - templateId: null, + template: null, id: 'all-property-editors-document-id', - contentTypeId: 'all-property-editors-document-type-id', + parent: null, + documentType: { + id: 'all-property-editors-document-type-id', + icon: 'icon-document', + hasListView: false, + }, + hasChildren: false, + noAccess: false, + isProtected: false, + isTrashed: false, values: [ { alias: 'richTextEditor', culture: null, segment: null, - value: - 'Some value for the RTE with an external link and an internal link foo foo
Macro alias: TestMacro
', + value: { + blocks: {}, + markup: ` +

+ Some value for the RTE with an external link and an internal link foo foo +

+
Macro alias: TestMacro
+

The following tests the embed plugin:

+
+

End of test content

+ `, + }, }, { alias: 'email', @@ -177,6 +188,7 @@ export const data: Array = [ 'Umbraco.BlockList': [ { contentUdi: '1234', + settingsUdi: '5678', }, ], }, @@ -187,7 +199,13 @@ export const data: Array = [ elementProperty: 'Hello world', }, ], - settingsData: [], + settingsData: [ + { + udi: '5678', + contentTypeKey: 'all-property-editors-document-type-id', + elementProperty: 'Hello world', + }, + ], }, }, { @@ -377,9 +395,17 @@ export const data: Array = [ url: '/', }, ], - templateId: null, + template: null, id: 'c05da24d-7740-447b-9cdc-bd8ce2172e38', - contentTypeId: '29643452-cff9-47f2-98cd-7de4b6807681', + parent: null, + documentType: { + id: '29643452-cff9-47f2-98cd-7de4b6807681', + icon: 'icon-document', + hasListView: false, + }, + hasChildren: false, + noAccess: false, + isProtected: false, isTrashed: false, values: [ { @@ -493,9 +519,17 @@ export const data: Array = [ }, { urls: [], - templateId: null, + template: null, id: 'fd56a0b5-01a0-4da2-b428-52773bfa9cc4', - contentTypeId: '29643452-cff9-47f2-98cd-7de4b6807681', + parent: null, + documentType: { + id: '29643452-cff9-47f2-98cd-7de4b6807681', + icon: 'icon-document', + hasListView: false, + }, + hasChildren: false, + noAccess: false, + isProtected: false, isTrashed: false, values: [ { @@ -566,9 +600,17 @@ export const data: Array = [ url: '/', }, ], - templateId: null, + template: null, id: 'simple-document-id', - contentTypeId: 'simple-document-type-id', + parent: null, + documentType: { + id: 'simple-document-type-id', + icon: 'icon-document', + hasListView: false, + }, + hasChildren: false, + noAccess: false, + isProtected: false, isTrashed: false, variants: [ { @@ -591,312 +633,3 @@ export const data: Array = [ ], }, ]; - -export const treeData: Array = [ - { - isProtected: false, - isPublished: true, - isEdited: false, - noAccess: false, - isTrashed: false, - id: 'all-property-editors-document-id', - contentTypeId: 'all-property-editors-document-type-id', - isContainer: false, - parentId: null, - name: 'All property editors', - type: 'document', - icon: 'document', - hasChildren: false, - variants: [ - { - name: 'All property editors', - culture: 'en-us', - state: PublishedStateModel.PUBLISHED, - }, - { - name: 'All property editors', - culture: 'da-dk', - state: PublishedStateModel.PUBLISHED, - }, - ], - }, - { - isProtected: false, - isPublished: true, - isEdited: false, - noAccess: false, - isTrashed: false, - id: 'c05da24d-7740-447b-9cdc-bd8ce2172e38', - contentTypeId: '29643452-cff9-47f2-98cd-7de4b6807681', - isContainer: false, - parentId: null, - name: 'Article in english', - type: 'document', - icon: 'document', - hasChildren: true, - variants: [ - { - state: PublishedStateModel.PUBLISHED, - culture: 'en-us', - name: 'Article in english', - }, - { - state: PublishedStateModel.PUBLISHED, - culture: 'da-dk', - name: 'Artikel på Dansk', - }, - { - state: PublishedStateModel.PUBLISHED, - culture: 'no-no', - name: 'Artikel på Norsk', - }, - { - state: PublishedStateModel.PUBLISHED, - culture: 'es-es', - name: 'Articulo en ingles', - }, - { - state: PublishedStateModel.PUBLISHED, - culture: 'pl-pl', - name: 'Artykuł w języku polskim', - }, - ], - }, - { - isProtected: false, - isPublished: false, - isEdited: false, - noAccess: false, - isTrashed: false, - id: 'fd56a0b5-01a0-4da2-b428-52773bfa9cc4', - contentTypeId: '29643452-cff9-47f2-98cd-7de4b6807681', - isContainer: false, - parentId: 'c05da24d-7740-447b-9cdc-bd8ce2172e38', - name: 'Blog post B', - type: 'document', - icon: 'document', - hasChildren: false, - variants: [ - { - state: PublishedStateModel.UNPUBLISHED, - culture: 'en-us', - name: 'Blog post B', - }, - ], - }, - { - name: 'Simple', - type: 'document', - icon: 'document', - hasChildren: false, - id: 'simple-document-id', - contentTypeId: 'simple-document-type-id', - isContainer: false, - parentId: null, - noAccess: false, - isProtected: false, - isPublished: false, - isEdited: false, - isTrashed: false, - variants: [ - { - state: PublishedStateModel.UNPUBLISHED, - culture: 'en-us', - name: 'Simple Document', - }, - ], - }, -]; - -const createDocumentItem = (item: DocumentResponseModel): DocumentItemResponseModel => { - return { - id: item.id, - name: item.variants?.[0].name, // Hack: TODO: we need to get all variants as part of the document - contentTypeId: item.contentTypeId, - isTrashed: item.isTrashed, - }; -}; - -// TODO: look into making a combined document model so we don't need to maintain two+ data sets. -// Temp mocked database -// TODO: all properties are optional in the server schema. I don't think this is correct. -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -class UmbDocumentData extends UmbEntityData { - private treeData = treeData; - - constructor() { - super(data); - } - - // TODO: Can we do this smarter so we don't need to make this for each mock data: - insert(item: DocumentResponseModel) { - super.insert(item); - this.treeData.push(createDocumentTreeItem(item)); - } - - update(id: string, item: DocumentResponseModel) { - super.save(id, item); - this.treeData = this.treeData.map((x) => { - if (x.id === id) { - return createDocumentTreeItem(item); - } else { - return x; - } - }); - } - - publish(id: string, data: PublishDocumentRequestModel) { - // Update detail data: - const foundIndex = this.data.findIndex((item) => item.id === id); - if (foundIndex !== -1) { - // update - this.data[foundIndex].variants?.forEach((variant) => { - if (data.cultures?.includes(variant.culture ?? '')) { - variant.state = ContentStateModel.PUBLISHED; - } - }); - } - - // TODO: Tree data is not aware about variants and status of variants: so this is not good enough: - this.treeData = this.treeData.map((x) => { - if (x.id && x.id === id) { - return { ...x, isPublished: true }; - } else { - return x; - } - }); - return true; - } - - unpublish(id: string, data: PublishDocumentRequestModel) { - // Update detail data: - const foundIndex = this.data.findIndex((item) => item.id === id); - if (foundIndex !== -1) { - // update - this.data[foundIndex].variants?.forEach((variant) => { - if (data.cultures?.includes(variant.culture ?? '')) { - variant.state = ContentStateModel.DRAFT; - } - }); - } - - // TODO: Tree data is not aware about variants and status of variants: so this is not good enough: - this.treeData = this.treeData.map((x) => { - if (x.id && x.id === id) { - return { ...x, isPublished: false }; - } else { - return x; - } - }); - - return true; - } - - trash(ids: string[]): DocumentResponseModel[] { - const result = super.trash(ids); - this.treeData = this.treeData.map((x) => { - if (x.id && ids.includes(x.id)) { - return { ...x, isTrashed: true }; - } else { - return x; - } - }); - return result; - } - - getTreeRoot(): PagedDocumentTreeItemResponseModel { - const items = this.treeData.filter((item) => item.parentId === null && item.isTrashed === false); - const treeItems = items.map((item) => item); - const total = items.length; - return { items: treeItems, total }; - } - - getTreeItemChildrenOf(id: string): PagedDocumentTreeItemResponseModel { - const items = this.treeData.filter((item) => item.parentId === id && item.isTrashed === false); - const treeItems = items.map((item) => item); - const total = items.length; - return { items: treeItems, total }; - } - - getTreeItem(ids: Array): Array { - const items = this.treeData.filter((item) => ids.includes(item.id ?? '')); - return items.map((item) => item); - } - - getItems(ids: Array): Array { - const items = this.data.filter((item) => ids.includes(item.id ?? '')); - return items.map((item) => createDocumentItem(item)); - } - - getDocumentByIdAllowedDocumentTypes(id: string): PagedDocumentTypeResponseModel { - const item = this.getById(id); - if (item?.contentTypeId) { - const docType = umbDocumentTypeMockDb.read(item.contentTypeId); - - if (docType) { - const allowedTypes = docType?.allowedContentTypes ?? []; - const mockedTypes = allowedTypes - .map((allowedType) => umbDocumentTypeMockDb.read(allowedType.id)) - .filter((item) => item !== undefined) as Array; - const items = mockedTypes.map((item) => mapToDocumentType(item)); - const total = items.length; - return { items, total }; - } - } - return { items: [], total: 0 }; - } - - getAllowedDocumentTypesAtRoot(): PagedDocumentTypeResponseModel { - const items = umbDocumentTypeMockDb.getData(); //.filter((docType) => docType.allowedAsRoot); - return { items, total: items.length }; - } - - getRecycleBinRoot(): PagedRecycleBinItemResponseModel { - const items = this.treeData.filter((item) => item.parentId === null && item.isTrashed === true); - const treeItems = items.map((item) => item); - const total = items.length; - return { items: treeItems, total }; - } - - getRecycleBinChildrenOf(parentId: string): PagedRecycleBinItemResponseModel { - const items = this.treeData.filter((item) => item.parentId === parentId && item.isTrashed === true); - const treeItems = items.map((item) => item); - const total = items.length; - return { items: treeItems, total }; - } - - // permissions - - getUserPermissionsForDocument(id: string): Array { - return umbUserPermissionData - .getAll() - .items.filter( - (permission: any) => - permission.target.entityType === UMB_DOCUMENT_ENTITY_TYPE && permission.target.documentId === id, - ); - } -} - -const mapToDocumentType = (item: UmbMockDocumentTypeModel): DocumentTypeResponseModel => { - return { - alias: item.alias, - name: item.name, - description: item.description, - icon: item.icon, - allowedAsRoot: item.allowedAsRoot, - variesByCulture: item.variesByCulture, - variesBySegment: item.variesBySegment, - isElement: item.isElement, - properties: item.properties, - containers: item.containers, - allowedContentTypes: item.allowedContentTypes, - compositions: item.compositions, - id: item.id, - allowedTemplateIds: item.allowedTemplateIds, - defaultTemplateId: item.defaultTemplateId, - cleanup: item.cleanup, - }; -}; - -export const umbDocumentData = new UmbDocumentData(); diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.db.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.db.ts new file mode 100644 index 0000000000..c723893218 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.db.ts @@ -0,0 +1,116 @@ +import { UmbMockEntityTreeManager } from '../entity/entity-tree.manager.js'; +import { UmbMockEntityItemManager } from '../entity/entity-item.manager.js'; +import { UmbMockEntityDetailManager } from '../entity/entity-detail.manager.js'; +import { umbDocumentTypeMockDb } from '../document-type/document-type.db.js'; +import { UmbEntityMockDbBase } from '../entity/entity-base.js'; +import { UmbEntityRecycleBin } from '../entity/entity-recycle-bin.js'; +import type { UmbMockDocumentModel } from './document.data.js'; +import { data } from './document.data.js'; +import { UmbMockDocumentPublishingManager } from './document-publishing.manager.js'; +import { + ContentStateModel, + type CreateDocumentRequestModel, + type DocumentItemResponseModel, + type DocumentResponseModel, + type DocumentTreeItemResponseModel, +} from '@umbraco-cms/backoffice/backend-api'; +import { UmbId } from '@umbraco-cms/backoffice/id'; + +export class UmbDocumentMockDB extends UmbEntityMockDbBase { + tree = new UmbMockEntityTreeManager(this, treeItemMapper); + item = new UmbMockEntityItemManager(this, itemMapper); + detail = new UmbMockEntityDetailManager(this, createMockDocumentMapper, detailResponseMapper); + recycleBin = new UmbEntityRecycleBin(this.data, treeItemMapper); + publishing = new UmbMockDocumentPublishingManager(this); + + constructor(data: Array) { + super(data); + } + + // permissions + getUserPermissionsForDocument(id: string): Array { + return []; + } +} + +const treeItemMapper = (model: UmbMockDocumentModel): Omit => { + const documentType = umbDocumentTypeMockDb.read(model.documentType.id); + if (!documentType) throw new Error(`Document type with id ${model.documentType.id} not found`); + + return { + documentType: { + hasListView: false, + icon: documentType.icon, + id: documentType.id, + }, + hasChildren: model.hasChildren, + id: model.id, + isProtected: model.isProtected, + isTrashed: model.isTrashed, + noAccess: model.noAccess, + parent: model.parent, + variants: model.variants, + }; +}; + +const createMockDocumentMapper = (request: CreateDocumentRequestModel): UmbMockDocumentModel => { + const documentType = umbDocumentTypeMockDb.read(request.documentType.id); + if (!documentType) throw new Error(`Document type with id ${request.documentType.id} not found`); + + const now = new Date().toString(); + + return { + documentType: { + id: documentType.id, + icon: documentType.icon, + hasListView: false, // TODO: get list from doc type when ready + }, + hasChildren: false, + id: request.id ? request.id : UmbId.new(), + isProtected: false, + isTrashed: false, + noAccess: false, + parent: request.parent, + values: request.values, + variants: request.variants.map((variantRequest) => { + return { + culture: variantRequest.culture, + segment: variantRequest.segment, + name: variantRequest.name, + createDate: now, + updateDate: now, + state: ContentStateModel.DRAFT, + publishDate: null, + }; + }), + urls: [], + }; +}; + +const detailResponseMapper = (model: UmbMockDocumentModel): DocumentResponseModel => { + return { + documentType: model.documentType, + id: model.id, + isTrashed: model.isTrashed, + template: model.template, + urls: model.urls, + values: model.values, + variants: model.variants, + }; +}; + +const itemMapper = (model: UmbMockDocumentModel): DocumentItemResponseModel => { + return { + documentType: { + hasListView: model.documentType.hasListView, + icon: model.documentType.icon, + id: model.documentType.id, + }, + id: model.id, + isProtected: model.isProtected, + isTrashed: model.isTrashed, + variants: model.variants, + }; +}; + +export const umbDocumentMockDb = new UmbDocumentMockDB(data); diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/entity-tree.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/entity-tree.data.ts deleted file mode 100644 index 1a94a9b629..0000000000 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/entity-tree.data.ts +++ /dev/null @@ -1,52 +0,0 @@ -import type { UmbEntityData } from './entity.data.js'; -import type { TreeItemPresentationModel } from '@umbraco-cms/backoffice/backend-api'; -import { UmbId } from '@umbraco-cms/backoffice/id'; - -export class UmbEntityTreeData { - #detailDatabase: UmbEntityData; - - constructor(detailDatabase: UmbEntityData) { - this.#detailDatabase = detailDatabase; - } - - move(ids: Array, destinationId: string) { - const destinationItem = this.#detailDatabase.getById(destinationId); - if (!destinationItem) throw new Error(`Destination item with key ${destinationId} not found`); - - const items = this.#detailDatabase.getByIds(ids); - const movedItems = items.map((item) => { - return { - ...item, - parentId: destinationId, - }; - }); - - movedItems.forEach((movedItem) => this.#detailDatabase.updateData(movedItem)); - destinationItem.hasChildren = true; - this.#detailDatabase.updateData(destinationItem); - } - - copy(ids: Array, destinationKey: string) { - const destinationItem = this.#detailDatabase.getById(destinationKey); - if (!destinationItem) throw new Error(`Destination item with key ${destinationKey} not found`); - - // TODO: Notice we don't add numbers to the 'copy' name. - const items = this.#detailDatabase.getByIds(ids); - const copyItems = items.map((item) => { - return { - ...item, - name: item.name + ' Copy', - id: UmbId.new(), - parentId: destinationKey, - }; - }); - - copyItems.forEach((copyItem) => this.#detailDatabase.insert(copyItem)); - const newIds = copyItems.map((item) => item.id); - - destinationItem.hasChildren = true; - this.#detailDatabase.updateData(destinationItem); - - return newIds; - } -} diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/entity/entity-folder.manager.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/entity/entity-folder.manager.ts index 432f5b4a97..692ab9afd9 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/entity/entity-folder.manager.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/entity/entity-folder.manager.ts @@ -55,7 +55,7 @@ export class UmbMockEntityFolderManager, +> extends UmbEntityMockDbBase { + tree; + + constructor(data: Array, treeItemMapper: (model: MockType) => any) { + super(data); + this.tree = new UmbMockEntityTreeManager(this, treeItemMapper); + } + + trash(ids: string[]) { + const models = ids.map((id) => this.read(id)).filter((model) => !!model) as Array; + + models.forEach((model) => { + model.isTrashed = true; + }); + + models.forEach((model) => { + this.update(model.id, model); + }); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/entity/entity-tree.manager.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/entity/entity-tree.manager.ts index 2628bda298..b066aa74b3 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/entity/entity-tree.manager.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/entity/entity-tree.manager.ts @@ -12,14 +12,14 @@ export class UmbMockEntityTreeManager item.parentId === null); + const items = this.#db.getData().filter((item) => item.parent === null); const treeItems = items.map((item) => this.#treeItemMapper(item)); const total = items.length; return { items: treeItems, total }; } getChildrenOf(parentId: string) { - const items = this.#db.getData().filter((item) => item.parentId === parentId); + const items = this.#db.getData().filter((item) => item.parent?.id === parentId); const treeItems = items.map((item) => this.#treeItemMapper(item)); const total = items.length; return { items: treeItems, total }; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/file-system/file-system-item.manager.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/file-system/file-system-item.manager.ts index e7e99ef144..d3d42517f8 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/file-system/file-system-item.manager.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/file-system/file-system-item.manager.ts @@ -1,5 +1,4 @@ import type { UmbData } from '../data.js'; -import { createFileItemResponseModelBaseModel } from '../utils.js'; import type { FileSystemItemResponseModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; export class UmbMockFileSystemItemManager { @@ -14,3 +13,10 @@ export class UmbMockFileSystemItemManager createFileItemResponseModelBaseModel(item)); } } + +const createFileItemResponseModelBaseModel = (item: any): FileSystemItemResponseModelBaseModel => ({ + path: item.path, + name: item.name, + parent: item.parent, + isFolder: item.isFolder, +}); diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/health-check.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/health-check.data.ts index 0362118bf6..bfb85fb276 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/health-check.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/health-check.data.ts @@ -17,26 +17,6 @@ export const healthGroups: Array = [ { name: 'Media Type 1', - id: 'c5159663-eb82-43ee-bd23-e42dc5e71db6', - parentId: null, + id: 'media-type-1-id', + parent: null, description: 'Media type 1 description', alias: 'mediaType1', icon: 'icon-bug', @@ -24,10 +24,9 @@ export const data: Array = [ variesByCulture: false, variesBySegment: false, isElement: false, - allowedContentTypes: [], + allowedMediaTypes: [], compositions: [], isFolder: false, hasChildren: false, - isContainer: false, }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/media-type/media-type.db.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/media-type/media-type.db.ts index 2b3bfea655..d6b6fe15d0 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/media-type/media-type.db.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/media-type/media-type.db.ts @@ -3,7 +3,7 @@ import { UmbMockEntityFolderManager } from '../entity/entity-folder.manager.js'; import { UmbMockEntityTreeManager } from '../entity/entity-tree.manager.js'; import { UmbMockEntityItemManager } from '../entity/entity-item.manager.js'; import { UmbMockEntityDetailManager } from '../entity/entity-detail.manager.js'; -import type { UmbMockMediaTypeModel} from './media-type.data.js'; +import type { UmbMockMediaTypeModel } from './media-type.data.js'; import { data } from './media-type.data.js'; import { UmbId } from '@umbraco-cms/backoffice/id'; import type { @@ -33,7 +33,7 @@ const createMockMediaTypeFolderMapper = (request: CreateFolderRequestModel): Umb return { name: request.name, id: request.id ? request.id : UmbId.new(), - parentId: request.parentId, + parent: request.parentId ? { id: request.parentId } : null, description: '', alias: '', icon: '', @@ -43,11 +43,10 @@ const createMockMediaTypeFolderMapper = (request: CreateFolderRequestModel): Umb variesByCulture: false, variesBySegment: false, isElement: false, - allowedContentTypes: [], + allowedMediaTypes: [], compositions: [], isFolder: true, hasChildren: false, - isContainer: false, }; }; @@ -64,12 +63,11 @@ const createMockMediaTypeMapper = (request: CreateMediaTypeRequestModel): UmbMoc variesByCulture: request.variesByCulture, variesBySegment: request.variesBySegment, isElement: request.isElement, - allowedContentTypes: request.allowedContentTypes, + allowedMediaTypes: request.allowedMediaTypes, compositions: request.compositions, - parentId: request.containerId, + parent: request.folder ? { id: request.folder.id } : null, isFolder: false, hasChildren: false, - isContainer: false, }; }; @@ -86,7 +84,7 @@ const mediaTypeDetailMapper = (item: UmbMockMediaTypeModel): MediaTypeResponseMo variesByCulture: item.variesByCulture, variesBySegment: item.variesBySegment, isElement: item.isElement, - allowedContentTypes: item.allowedContentTypes, + allowedMediaTypes: item.allowedMediaTypes, compositions: item.compositions, }; }; @@ -96,8 +94,7 @@ const mediaTypeTreeItemMapper = (item: UmbMockMediaTypeModel): Omit = [ - { - name: 'Flipped Car', - type: 'media', - hasChildren: false, - id: 'f2f81a40-c989-4b6b-84e2-057cecd3adc1', - isContainer: false, - parentId: null, - noAccess: false, - isTrashed: false, - properties: [ - { - alias: 'myMediaHeadline', - label: 'Media Headline', - description: 'Text string property', - dataTypeId: 'dt-textBox', - }, - ], - data: [ - { - alias: 'myMediaHeadline', - value: 'The daily life at Umbraco HQ', - }, - ], - variants: [], - }, - { - name: 'Umbracoffee', - type: 'media', - hasChildren: false, - id: '69431027-8867-45bf-a93b-72bbdabfb177', - isContainer: false, - parentId: null, - noAccess: false, - isTrashed: false, - properties: [ - { - alias: 'myMediaDescription', - label: 'Description', - description: 'Textarea property', - dataTypeId: 'dt-textArea', - }, - ], - data: [ - { - alias: 'myMediaDescription', - value: 'Every day, a rabbit in a military costume greets me at the front door', - }, - ], - variants: [], - }, - { - name: 'People', - type: 'media', - hasChildren: true, - id: '69461027-8867-45bf-a93b-72bbdabfb177', - isContainer: true, - parentId: null, - noAccess: false, - isTrashed: false, - properties: [], - data: [], - variants: [], - }, - { - name: 'Products', - type: 'media', - hasChildren: true, - id: '69461027-8867-45bf-a93b-5224dabfb177', - isContainer: true, - parentId: null, - noAccess: false, - isTrashed: false, - properties: [], - data: [], - variants: [], - }, - { - name: 'John Smith', - type: 'media', - hasChildren: false, - id: '69431027-8867-45s7-a93b-7uibdabfb177', - isContainer: false, - parentId: '69461027-8867-45bf-a93b-72bbdabfb177', - noAccess: false, - isTrashed: false, - properties: [ - { - alias: 'myMediaDescription', - label: 'Description', - description: 'Textarea property', - dataTypeId: 'dt-textArea', - }, - ], - data: [ - { - alias: 'myMediaDescription', - value: 'Every day, a rabbit in a military costume greets me at the front door', - }, - ], - variants: [], - }, - { - name: 'Jane Doe', - type: 'media', - hasChildren: false, - id: '69431027-8867-45s7-a93b-7uibdabf2147', - isContainer: false, - parentId: '69461027-8867-45bf-a93b-72bbdabfb177', - noAccess: false, - isTrashed: false, - properties: [ - { - alias: 'myMediaDescription', - label: 'Description', - description: 'Textarea property', - dataTypeId: 'dt-textArea', - }, - ], - data: [ - { - alias: 'myMediaDescription', - value: 'Every day, a rabbit in a military costume greets me at the front door', - }, - ], - variants: [], - }, - { - name: 'A very nice hat', - type: 'media', - hasChildren: false, - id: '694hdj27-8867-45s7-a93b-7uibdabf2147', - isContainer: false, - parentId: '69461027-8867-45bf-a93b-5224dabfb177', - noAccess: false, - isTrashed: false, - properties: [ - { - alias: 'myMediaDescription', - label: 'Description', - description: 'Textarea property', - dataTypeId: 'dt-textArea', - }, - ], - data: [ - { - alias: 'myMediaDescription', - value: 'Every day, a rabbit in a military costume greets me at the front door', - }, - ], - variants: [], - }, - { - name: 'Fancy old chair', - type: 'media', - hasChildren: false, - id: '694hdj27-1237-45s7-a93b-7uibdabfas47', - isContainer: false, - parentId: '69461027-8867-45bf-a93b-5224dabfb177', - noAccess: false, - isTrashed: false, - properties: [ - { - alias: 'myMediaDescription', - label: 'Description', - description: 'Textarea property', - dataTypeId: 'dt-textArea', - }, - ], - data: [ - { - alias: 'myMediaDescription', - value: 'Every day, a rabbit in a military costume greets me at the front door', - }, - ], - variants: [], - }, -]; - -const createMediaItem = (item: UmbMediaDetailModel): MediaItemResponseModel => { - return { - id: item.id, - name: item.name, - icon: item.icon, - isTrashed: false, - }; -}; - -// Temp mocked database -// TODO: all properties are optional in the server schema. I don't think this is correct. -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -class UmbMediaData extends UmbEntityData { - #tree = new UmbEntityTreeData(this); - - constructor() { - super(data); - } - - getItems(ids: Array): Array { - const items = this.data.filter((item) => ids.includes(item.id ?? '')); - return items.map((item) => createMediaItem(item)); - } - - getTreeRoot(): PagedMediaTreeItemResponseModel { - const items = this.data.filter((item) => item.parentId === null); - const treeItems = items.map((item) => createMediaTreeItem(item)); - const total = items.length; - return { items: treeItems, total }; - } - - getTreeItemChildren(id: string): PagedMediaTreeItemResponseModel { - const items = this.data.filter((item) => item.parentId === id); - const treeItems = items.map((item) => createMediaTreeItem(item)); - const total = items.length; - return { items: treeItems, total }; - } - - getTreeItem(ids: Array): Array { - const items = this.data.filter((item) => ids.includes(item.id)); - return items.map((item) => createMediaTreeItem(item)); - } - - move(ids: Array, destinationKey: string) { - return this.#tree.move(ids, destinationKey); - } -} - -export const umbMediaData = new UmbMediaData(); diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/media/media.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/media/media.data.ts new file mode 100644 index 0000000000..5606b99e7e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/media/media.data.ts @@ -0,0 +1,233 @@ +import { + ContentStateModel, + type MediaItemResponseModel, + type MediaResponseModel, + type MediaTreeItemResponseModel, +} from '@umbraco-cms/backoffice/backend-api'; + +export type UmbMockMediaModelHack = MediaResponseModel & MediaTreeItemResponseModel & MediaItemResponseModel; + +export interface UmbMockMediaModel extends Omit {} + +export const data: Array = [ + { + hasChildren: false, + id: 'f2f81a40-c989-4b6b-84e2-057cecd3adc1', + parent: null, + noAccess: false, + isTrashed: false, + mediaType: { + id: 'media-type-1-id', + icon: 'icon-bug', + hasListView: false, + }, + values: [ + { + alias: 'myMediaHeadline', + value: 'The daily life at Umbraco HQ', + }, + ], + variants: [ + { + state: ContentStateModel.PUBLISHED, + publishDate: '2023-02-06T15:31:51.354764', + culture: 'en-us', + segment: null, + name: 'Flipped Car', + createDate: '2023-02-06T15:31:46.876902', + updateDate: '2023-02-06T15:31:51.354764', + }, + ], + urls: [], + }, + { + hasChildren: false, + id: '69431027-8867-45bf-a93b-72bbdabfb177', + parent: null, + noAccess: false, + isTrashed: false, + mediaType: { + id: 'media-type-1-id', + icon: 'icon-bug', + hasListView: false, + }, + values: [ + { + alias: 'myMediaDescription', + value: 'Every day, a rabbit in a military costume greets me at the front door', + }, + ], + variants: [ + { + state: ContentStateModel.PUBLISHED, + publishDate: '2023-02-06T15:31:51.354764', + culture: 'en-us', + segment: null, + name: 'Umbracoffee', + createDate: '2023-02-06T15:31:46.876902', + updateDate: '2023-02-06T15:31:51.354764', + }, + ], + urls: [], + }, + { + hasChildren: true, + id: '69461027-8867-45bf-a93b-72bbdabfb177', + parent: null, + noAccess: false, + isTrashed: false, + mediaType: { + id: 'media-type-1-id', + icon: 'icon-bug', + hasListView: false, + }, + values: [], + variants: [ + { + state: ContentStateModel.PUBLISHED, + publishDate: '2023-02-06T15:31:51.354764', + culture: 'en-us', + segment: null, + name: 'People', + createDate: '2023-02-06T15:31:46.876902', + updateDate: '2023-02-06T15:31:51.354764', + }, + ], + urls: [], + }, + { + hasChildren: true, + id: '69461027-8867-45bf-a93b-5224dabfb177', + parent: null, + noAccess: false, + isTrashed: false, + mediaType: { + id: 'media-type-1-id', + icon: 'icon-bug', + hasListView: false, + }, + values: [], + variants: [ + { + state: ContentStateModel.PUBLISHED, + publishDate: '2023-02-06T15:31:51.354764', + culture: 'en-us', + segment: null, + name: 'John Smith', + createDate: '2023-02-06T15:31:46.876902', + updateDate: '2023-02-06T15:31:51.354764', + }, + ], + urls: [], + }, + { + hasChildren: false, + id: '69431027-8867-45s7-a93b-7uibdabfb177', + parent: { id: '69461027-8867-45bf-a93b-72bbdabfb177' }, + noAccess: false, + isTrashed: false, + mediaType: { + id: 'media-type-1-id', + icon: 'icon-bug', + hasListView: false, + }, + values: [ + { + alias: 'myMediaDescription', + value: 'Every day, a rabbit in a military costume greets me at the front door', + }, + ], + variants: [ + { + state: ContentStateModel.PUBLISHED, + publishDate: '2023-02-06T15:31:51.354764', + culture: 'en-us', + segment: null, + name: 'Jane Doe', + createDate: '2023-02-06T15:31:46.876902', + updateDate: '2023-02-06T15:31:51.354764', + }, + ], + urls: [], + }, + { + hasChildren: false, + id: '69431027-8867-45s7-a93b-7uibdabf2147', + parent: { id: '69461027-8867-45bf-a93b-72bbdabfb177' }, + noAccess: false, + isTrashed: false, + mediaType: { + id: 'media-type-1-id', + icon: 'icon-bug', + hasListView: false, + }, + values: [ + { + alias: 'myMediaDescription', + value: 'Every day, a rabbit in a military costume greets me at the front door', + }, + ], + variants: [], + urls: [], + }, + { + hasChildren: false, + id: '694hdj27-8867-45s7-a93b-7uibdabf2147', + parent: { id: '69461027-8867-45bf-a93b-5224dabfb177' }, + noAccess: false, + isTrashed: false, + mediaType: { + id: 'media-type-1-id', + icon: 'icon-bug', + hasListView: false, + }, + values: [ + { + alias: 'myMediaDescription', + value: 'Every day, a rabbit in a military costume greets me at the front door', + }, + ], + variants: [ + { + state: ContentStateModel.PUBLISHED, + publishDate: '2023-02-06T15:31:51.354764', + culture: 'en-us', + segment: null, + name: 'A very nice hat', + createDate: '2023-02-06T15:31:46.876902', + updateDate: '2023-02-06T15:31:51.354764', + }, + ], + urls: [], + }, + { + hasChildren: false, + id: '694hdj27-1237-45s7-a93b-7uibdabfas47', + parent: { id: '69461027-8867-45bf-a93b-5224dabfb177' }, + noAccess: false, + isTrashed: false, + mediaType: { + id: 'media-type-1-id', + icon: 'icon-bug', + hasListView: false, + }, + values: [ + { + alias: 'myMediaDescription', + value: 'Every day, a rabbit in a military costume greets me at the front door', + }, + ], + variants: [ + { + state: ContentStateModel.PUBLISHED, + publishDate: '2023-02-06T15:31:51.354764', + culture: 'en-us', + segment: null, + name: 'Fancy old chair', + createDate: '2023-02-06T15:31:46.876902', + updateDate: '2023-02-06T15:31:51.354764', + }, + ], + urls: [], + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/media/media.db.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/media/media.db.ts new file mode 100644 index 0000000000..6042aa4c38 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/media/media.db.ts @@ -0,0 +1,105 @@ +import { UmbMockEntityTreeManager } from '../entity/entity-tree.manager.js'; +import { UmbMockEntityItemManager } from '../entity/entity-item.manager.js'; +import { UmbMockEntityDetailManager } from '../entity/entity-detail.manager.js'; +import { umbMediaTypeMockDb } from '../media-type/media-type.db.js'; +import { UmbEntityMockDbBase } from '../entity/entity-base.js'; +import { UmbEntityRecycleBin } from '../entity/entity-recycle-bin.js'; +import type { UmbMockMediaModel } from './media.data.js'; +import { data } from './media.data.js'; +import { + ContentStateModel, + type CreateMediaRequestModel, + type MediaItemResponseModel, + type MediaResponseModel, + type MediaTreeItemResponseModel, +} from '@umbraco-cms/backoffice/backend-api'; +import { UmbId } from '@umbraco-cms/backoffice/id'; + +export class UmbMediaMockDB extends UmbEntityMockDbBase { + tree = new UmbMockEntityTreeManager(this, treeItemMapper); + item = new UmbMockEntityItemManager(this, itemMapper); + detail = new UmbMockEntityDetailManager(this, createMockMediaMapper, detailResponseMapper); + recycleBin = new UmbEntityRecycleBin(this.data, treeItemMapper); + + constructor(data: Array) { + super(data); + } +} + +const treeItemMapper = (model: UmbMockMediaModel): Omit => { + const mediaType = umbMediaTypeMockDb.read(model.mediaType.id); + if (!mediaType) throw new Error(`Media type with id ${model.mediaType.id} not found`); + + return { + mediaType: { + hasListView: model.mediaType.hasListView, + icon: model.mediaType.icon, + id: model.mediaType.id, + }, + hasChildren: model.hasChildren, + id: model.id, + isTrashed: model.isTrashed, + noAccess: model.noAccess, + parent: model.parent, + variants: model.variants, + }; +}; + +const createMockMediaMapper = (request: CreateMediaRequestModel): UmbMockMediaModel => { + const mediaType = umbMediaTypeMockDb.read(request.mediaType.id); + if (!mediaType) throw new Error(`Media type with id ${request.mediaType.id} not found`); + + const now = new Date().toString(); + + return { + mediaType: { + id: mediaType.id, + icon: mediaType.icon, + hasListView: false, // TODO: get list from doc type when ready + }, + hasChildren: false, + id: request.id ? request.id : UmbId.new(), + isTrashed: false, + noAccess: false, + parent: request.parent, + values: request.values, + variants: request.variants.map((variantRequest) => { + return { + culture: variantRequest.culture, + segment: variantRequest.segment, + name: variantRequest.name, + createDate: now, + updateDate: now, + state: ContentStateModel.DRAFT, + publishDate: null, + }; + }), + urls: [], + }; +}; + +const detailResponseMapper = (model: UmbMockMediaModel): MediaResponseModel => { + return { + mediaType: model.mediaType, + id: model.id, + isTrashed: model.isTrashed, + urls: model.urls, + values: model.values, + variants: model.variants, + }; +}; + +const itemMapper = (model: UmbMockMediaModel): MediaItemResponseModel => { + return { + mediaType: { + hasListView: model.mediaType.hasListView, + icon: model.mediaType.icon, + id: model.mediaType.id, + }, + id: model.id, + isTrashed: model.isTrashed, + variants: model.variants, + }; +}; + +export const umbMediaMockDb = new UmbMediaMockDB(data); diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/member-group.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/member-group.data.ts index 76df66271a..997c4344b1 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/member-group.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/member-group.data.ts @@ -1,6 +1,9 @@ import { UmbEntityData } from './entity.data.js'; import { createEntityTreeItem } from './utils.js'; -import type { EntityTreeItemResponseModel, PagedEntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { + EntityTreeItemResponseModel, + PagedNamedEntityTreeItemResponseModel, +} from '@umbraco-cms/backoffice/backend-api'; import type { UmbMemberGroupDetailModel } from '@umbraco-cms/backoffice/member-group'; export const data: Array = [ @@ -23,14 +26,14 @@ class UmbMemberGroupData extends UmbEntityData { super(data); } - getTreeRoot(): PagedEntityTreeItemResponseModel { + getTreeRoot(): PagedNamedEntityTreeItemResponseModel { const items = this.data.filter((item) => item.parentId === null); const treeItems = items.map((item) => createEntityTreeItem(item)); const total = items.length; return { items: treeItems, total }; } - getTreeItemChildren(id: string): PagedEntityTreeItemResponseModel { + getTreeItemChildren(id: string): PagedNamedEntityTreeItemResponseModel { const items = this.data.filter((item) => item.parentId === id); const treeItems = items.map((item) => createEntityTreeItem(item)); const total = items.length; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/member-type.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/member-type.data.ts index 2384aaa3da..4297f341a4 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/member-type.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/member-type.data.ts @@ -1,7 +1,10 @@ import type { MemberTypeDetails } from '../../packages/members/member-types/types.js'; import { UmbData } from './data.js'; import { createEntityTreeItem } from './utils.js'; -import type { EntityTreeItemResponseModel, PagedEntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { + NamedEntityTreeItemResponseModel, + PagedNamedEntityTreeItemResponseModel, +} from '@umbraco-cms/backoffice/backend-api'; export const data: Array = [ { @@ -9,7 +12,6 @@ export const data: Array = [ entityType: 'member-type', hasChildren: false, id: 'd59be02f-1df9-4228-aa1e-01917d806cda', - isContainer: false, parentId: null, alias: 'memberType1', properties: [], @@ -23,21 +25,21 @@ class UmbMemberTypeData extends UmbData { super(data); } - getTreeRoot(): PagedEntityTreeItemResponseModel { + getTreeRoot(): PagedNamedEntityTreeItemResponseModel { const items = this.data.filter((item) => item.parentId === null); const treeItems = items.map((item) => createEntityTreeItem(item)); const total = items.length; return { items: treeItems, total }; } - getTreeItemChildren(id: string): PagedEntityTreeItemResponseModel { + getTreeItemChildren(id: string): PagedNamedEntityTreeItemResponseModel { const items = this.data.filter((item) => item.parentId === id); const treeItems = items.map((item) => createEntityTreeItem(item)); const total = items.length; return { items: treeItems, total }; } - getTreeItem(ids: Array): Array { + getTreeItem(ids: Array): Array { const items = this.data.filter((item) => ids.includes(item.id ?? '')); return items.map((item) => createEntityTreeItem(item)); } diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/member.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/member.data.ts index 86f632c551..7f5c05ba3d 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/member.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/member.data.ts @@ -3,7 +3,7 @@ import { UmbEntityData } from './entity.data.js'; import { createEntityTreeItem } from './utils.js'; import type { EntityTreeItemResponseModel, - PagedEntityTreeItemResponseModel, + PagedNamedEntityTreeItemResponseModel, } from '@umbraco-cms/backoffice/backend-api'; export const data: Array = [ @@ -12,29 +12,24 @@ export const data: Array = [ entityType: 'member', hasChildren: false, id: 'aaa08ccd-4179-464c-b634-6969149dd9f9', - isContainer: false, parentId: null, isFolder: false, }, ]; -// Temp mocked database -// TODO: all properties are optional in the server schema. I don't think this is correct. -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore class UmbMemberData extends UmbEntityData { constructor() { super(data); } - getTreeRoot(): PagedEntityTreeItemResponseModel { + getTreeRoot(): PagedNamedEntityTreeItemResponseModel { const items = this.data.filter((item) => item.parentId === null); const treeItems = items.map((item) => createEntityTreeItem(item)); const total = items.length; return { items: treeItems, total }; } - getTreeItemChildren(id: string): PagedEntityTreeItemResponseModel { + getTreeItemChildren(id: string): PagedNamedEntityTreeItemResponseModel { const items = this.data.filter((item) => item.parentId === id); const treeItems = items.map((item) => createEntityTreeItem(item)); const total = items.length; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/relations/relation-type.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/relations/relation-type.data.ts index ffe6093a17..98fb76f45b 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/relations/relation-type.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/relations/relation-type.data.ts @@ -1,8 +1,11 @@ import { UmbEntityData } from '../entity.data.js'; import { createEntityTreeItem } from '../utils.js'; -import type { EntityTreeItemResponseModel, RelationTypeResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { + EntityTreeItemResponseModel, + NamedEntityTreeItemResponseModel, + RelationTypeResponseModel, +} from '@umbraco-cms/backoffice/backend-api'; -// TODO: investigate why we don't get an entity type as part of the RelationTypeResponseModel export const data: Array = [ { id: 'e0d39ff5-71d8-453f-b682-9d8d31ee5e06', @@ -71,43 +74,39 @@ export const data: Array = [ }, ]; -export const treeData: Array = [ +export const treeData: Array = [ { id: 'e0d39ff5-71d8-453f-b682-9d8d31ee5e06', - isContainer: false, - parentId: null, + parent: null, name: 'Relate Document On Copy', type: 'relation-type', hasChildren: false, }, { id: 'ac68cde6-763f-4231-a751-1101b57defd2', - isContainer: false, - parentId: null, + + parent: null, name: 'Relate Parent Document On Delete', type: 'relation-type', hasChildren: false, }, { id: '6f9b800c-762c-42d4-85d9-bf40a77d689e', - isContainer: false, - parentId: null, + parent: null, name: 'Relate Parent Media Folder On Delete', type: 'relation-type', hasChildren: false, }, { id: 'd421727d-43de-4205-b4c6-037404f309ad', - isContainer: false, - parentId: null, + parent: null, name: 'Related Media', type: 'relation-type', hasChildren: false, }, { id: 'e9a0a28e-2d5b-4229-ac00-66f2df230513', - isContainer: false, - parentId: null, + parent: null, name: 'Related Document', type: 'relation-type', hasChildren: false, @@ -132,7 +131,7 @@ class UmbRelationTypeData extends UmbEntityData { //TODO Can relation types have children? getTreeItemChildren(id: string): Array { - const childItems = this.treeData.filter((item) => item.parentId === id); + const childItems = this.treeData.filter((item) => item.parent?.id === id); return childItems.map((item) => createEntityTreeItem(item)); } diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/template.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/template.data.ts index 1ba8f21049..68cf9daf25 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/template.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/template.data.ts @@ -3,17 +3,15 @@ import { createEntityTreeItem } from './utils.js'; import { UmbId } from '@umbraco-cms/backoffice/id'; import type { EntityTreeItemResponseModel, - PagedEntityTreeItemResponseModel, TemplateResponseModel, TemplateScaffoldResponseModel, CreateTemplateRequestModel, TemplateItemResponseModel, TemplateQuerySettingsResponseModel, - TemplateQueryResultResponseModel} from '@umbraco-cms/backoffice/backend-api'; -import { - TemplateQueryPropertyTypeModel, - OperatorModel + TemplateQueryResultResponseModel, + PagedNamedEntityTreeItemResponseModel, } from '@umbraco-cms/backoffice/backend-api'; +import { TemplateQueryPropertyTypeModel, OperatorModel } from '@umbraco-cms/backoffice/backend-api'; type UmbMockTemplateModel = TemplateResponseModel & EntityTreeItemResponseModel; @@ -36,10 +34,9 @@ const createTemplateItem = (dbItem: UmbMockTemplateModel): TemplateItemResponseM export const data: Array = [ { id: '2bf464b6-3aca-4388-b043-4eb439cc2643', - isContainer: false, - parentId: null, + parent: null, name: 'Doc 1', - type: 'template', + type: 'templa }te', hasChildren: false, alias: 'Doc1', content: `@using Umbraco.Extensions @@ -58,10 +55,9 @@ export const data: Array = [ }, { id: '9a84c0b3-03b4-4dd4-84ac-706740ac0f71', - isContainer: false, - parentId: null, + parent: null, name: 'Test', - type: 'template', + type: 'templat }e', hasChildren: true, alias: 'Test', content: @@ -69,8 +65,7 @@ export const data: Array = [ }, { id: '9a84c0b3-03b4-4dd4-84ac-706740ac0f72', - isContainer: false, - parentId: '9a84c0b3-03b4-4dd4-84ac-706740ac0f71', + parent: { id: '9a84c0b3-03b4-4dd4-84ac-706740ac0f71' }, masterTemplateId: '9a84c0b3-03b4-4dd4-84ac-706740ac0f71', name: 'Child', type: 'template', @@ -81,8 +76,7 @@ export const data: Array = [ }, { id: '9a84c0b3-03b4-4dd4-84ac-706740acwerer0f72', - isContainer: false, - parentId: '9a84c0b3-03b4-4dd4-84ac-706740ac0f71', + parent: { id: '9a84c0b3-03b4-4dd4-84ac-706740ac0f71' }, name: 'Has Master Template', masterTemplateId: '9a84c0b3-03b4-4dd4-84ac-706740ac0f71', type: 'template', @@ -233,15 +227,15 @@ class UmbTemplateData extends UmbEntityData { return template; } - getTreeRoot(): PagedEntityTreeItemResponseModel { - const items = this.data.filter((item) => item.parentId === null); + getTreeRoot(): PagedNamedEntityTreeItemResponseModel { + const items = this.data.filter((item) => item.parent?.id === null); const treeItems = items.map((item) => createEntityTreeItem(item)); const total = items.length; return { items: treeItems, total }; } - getTreeItemChildren(id: string): PagedEntityTreeItemResponseModel { - const items = this.data.filter((item) => item.parentId === id); + getTreeItemChildren(id: string): PagedNamedEntityTreeItemResponseModel { + const items = this.data.filter((item) => item.parent?.id === id); const treeItems = items.map((item) => createEntityTreeItem(item)); const total = items.length; return { items: treeItems, total }; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/utils.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/utils.ts index 51a3d7f082..3e46447f94 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/utils.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/utils.ts @@ -1,26 +1,16 @@ import type { - ContentTreeItemResponseModel, - DocumentTreeItemResponseModel, - EntityTreeItemResponseModel, FolderTreeItemResponseModel, FileSystemTreeItemPresentationModel, - DocumentResponseModel, - FileSystemFileResponseModelBaseModel, - FileSystemItemResponseModelBaseModel, - MediaTypeResponseModel, - MediaTypeTreeItemResponseModel, - MediaTreeItemResponseModel, + NamedEntityTreeItemResponseModel, } from '@umbraco-cms/backoffice/backend-api'; -import type { UmbMediaDetailModel } from '@umbraco-cms/backoffice/media'; -export const createEntityTreeItem = (item: any): EntityTreeItemResponseModel => { +export const createEntityTreeItem = (item: any): NamedEntityTreeItemResponseModel => { return { name: item.name, type: item.type, hasChildren: item.hasChildren, id: item.id, - isContainer: item.isContainer, - parentId: item.parentId ?? null, + parent: item.parent, }; }; @@ -31,50 +21,6 @@ export const folderTreeItemMapper = (item: any): FolderTreeItemResponseModel => }; }; -export const createContentTreeItem = (item: any): ContentTreeItemResponseModel => { - // TODO: There we have to adapt to variants as part of the tree model: - return { - ...createEntityTreeItem(item), - noAccess: item.noAccess, - isTrashed: item.isTrashed, - }; -}; - -export const createDocumentTreeItem = (item: DocumentResponseModel): DocumentTreeItemResponseModel => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - return { - ...createContentTreeItem(item), - type: 'document', - icon: 'document', // TODO: Should get this from document type... - name: item.variants?.[0].name ?? '', - noAccess: false, - isProtected: false, - isPublished: false, - isEdited: false, - isTrashed: false, - hasChildren: false, - isContainer: false, - }; -}; - -export const createMediaTreeItem = (item: UmbMediaDetailModel): MediaTreeItemResponseModel => { - return { - ...createContentTreeItem(item), - type: 'media', - icon: 'media', // TODO: Should get this from media type... - }; -}; - -export const createMediaTypeTreeItem = (item: MediaTypeResponseModel): MediaTypeTreeItemResponseModel => { - return { - ...createEntityTreeItem(item), - type: 'media-type', - isFolder: false, - icon: item.icon, - }; -}; - export const createFileSystemTreeItem = (item: any): Omit => { return { path: item.path, @@ -85,20 +31,6 @@ export const createFileSystemTreeItem = (item: any): Omit ({ - path: item.path, - name: item.name, - parent: item.parent, - content: item.content, -}); - -export const createFileItemResponseModelBaseModel = (item: any): FileSystemItemResponseModelBaseModel => ({ - path: item.path, - name: item.name, - parent: item.parent, - isFolder: item.isFolder, -}); - export const arrayFilter = (filterBy: Array, value?: Array): boolean => { // if a filter is not set, return all items if (!filterBy) { diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/dictionary.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/dictionary.handlers.ts index 862e803b80..31aefe8d32 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/handlers/dictionary.handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/dictionary.handlers.ts @@ -15,12 +15,11 @@ const uploadResponse: ImportDictionaryRequestModel = { /// TODO: get correct type const importResponse: DictionaryItemResponseModel & EntityTreeItemResponseModel = { - parentId: null, + parent: null, name: 'Uploaded dictionary', id: 'b7e7d0ab-53ba-485d-dddd-12537f9925cb', hasChildren: false, type: 'dictionary-item', - isContainer: false, translations: [ { isoCode: 'en', @@ -185,12 +184,15 @@ export const handlers = [ if (!file || !importResponse.id) return; - importResponse.parentId = req.url.searchParams.get('parentId') ?? null; + const parentId = req.url.searchParams.get('parentId') ?? null; + importResponse.parent = parentId ? { id: parentId } : null; umbDictionaryData.save(importResponse.id, importResponse); // build the path to the new item => reflects the expected server response const path = ['-1']; - if (importResponse.parentId) path.push(importResponse.parentId); + if (importResponse.parent?.id) { + path.push(importResponse.parent.id); + } path.push(importResponse.id); diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/index.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/index.ts index c905d34111..35a0b233f7 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/index.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/index.ts @@ -2,5 +2,6 @@ import { treeHandlers } from './tree.handlers.js'; import { detailHandlers } from './detail.handlers.js'; import { itemHandlers } from './item.handlers.js'; import { folderHandlers } from './folder.handlers.js'; +import { structureHandlers } from './structure.handlers.js'; -export const handlers = [...treeHandlers, ...itemHandlers, ...folderHandlers, ...detailHandlers]; +export const handlers = [...treeHandlers, ...itemHandlers, ...folderHandlers, ...structureHandlers, ...detailHandlers]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/structure.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/structure.handlers.ts new file mode 100644 index 0000000000..3d16440c73 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/structure.handlers.ts @@ -0,0 +1,18 @@ +const { rest } = window.MockServiceWorker; +import { umbDocumentTypeMockDb } from '../../data/document-type/document-type.db.js'; +import { UMB_SLUG } from './slug.js'; +import { umbracoPath } from '@umbraco-cms/backoffice/utils'; + +export const structureHandlers = [ + rest.get(umbracoPath(`${UMB_SLUG}/:id/allowed-children`), (req, res, ctx) => { + const id = req.params.id as string; + if (!id) return res(ctx.status(400)); + const response = umbDocumentTypeMockDb.getAllowedChildren(id); + return res(ctx.status(200), ctx.json(response)); + }), + + rest.get(umbracoPath(`${UMB_SLUG}/allowed-at-root`), (req, res, ctx) => { + const response = umbDocumentTypeMockDb.getAllowedAtRoot(); + return res(ctx.status(200), ctx.json(response)); + }), +]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/detail.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/detail.handlers.ts new file mode 100644 index 0000000000..6bfe569fe0 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/detail.handlers.ts @@ -0,0 +1,45 @@ +const { rest } = window.MockServiceWorker; +import { umbDocumentMockDb } from '../../data/document/document.db.js'; +import { UMB_SLUG } from './slug.js'; +import type { CreateDocumentRequestModel, UpdateDocumentRequestModel } from '@umbraco-cms/backoffice/backend-api'; +import { umbracoPath } from '@umbraco-cms/backoffice/utils'; + +export const detailHandlers = [ + rest.post(umbracoPath(`${UMB_SLUG}`), async (req, res, ctx) => { + const requestBody = (await req.json()) as CreateDocumentRequestModel; + if (!requestBody) return res(ctx.status(400, 'no body found')); + + const id = umbDocumentMockDb.detail.create(requestBody); + + return res( + ctx.status(201), + ctx.set({ + Location: req.url.href + '/' + id, + 'Umb-Generated-Resource': id, + }), + ); + }), + + rest.get(umbracoPath(`${UMB_SLUG}/:id`), (req, res, ctx) => { + const id = req.params.id as string; + if (!id) return res(ctx.status(400)); + const response = umbDocumentMockDb.detail.read(id); + return res(ctx.status(200), ctx.json(response)); + }), + + rest.put(umbracoPath(`${UMB_SLUG}/:id`), async (req, res, ctx) => { + const id = req.params.id as string; + if (!id) return res(ctx.status(400)); + const requestBody = (await req.json()) as UpdateDocumentRequestModel; + if (!requestBody) return res(ctx.status(400, 'no body found')); + umbDocumentMockDb.detail.update(id, requestBody); + return res(ctx.status(200)); + }), + + rest.delete(umbracoPath(`${UMB_SLUG}/:id`), (req, res, ctx) => { + const id = req.params.id as string; + if (!id) return res(ctx.status(400)); + umbDocumentMockDb.detail.delete(id); + return res(ctx.status(200)); + }), +]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/document.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/document.handlers.ts deleted file mode 100644 index 6db43aa751..0000000000 --- a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/document.handlers.ts +++ /dev/null @@ -1,72 +0,0 @@ -const { rest } = window.MockServiceWorker; -import { umbDocumentData } from '../../data/document.data.js'; -import { umbracoPath } from '@umbraco-cms/backoffice/utils'; - -// TODO: add schema -export const handlers = [ - rest.get(umbracoPath('/document/root/allowed-document-types'), (req, res, ctx) => { - const response = umbDocumentData.getAllowedDocumentTypesAtRoot(); - return res(ctx.status(200), ctx.json(response)); - }), - - rest.put(umbracoPath('/document/:id/move-to-recycle-bin'), async (req, res, ctx) => { - const id = req.params.id as string; - umbDocumentData.trash([id]); - return res(ctx.status(200)); - }), - - rest.put(umbracoPath('/document/:id/publish'), async (req, res, ctx) => { - const id = req.params.id as string; - if (!id) return; - const data = await req.json(); - if (!data) return; - umbDocumentData.publish(id, data); - return res(ctx.status(200)); - }), - - rest.put(umbracoPath('/document/:id/unpublish'), async (req, res, ctx) => { - const id = req.params.id as string; - if (!id) return; - const data = await req.json(); - if (!data) return; - umbDocumentData.unpublish(id, data); - return res(ctx.status(200)); - }), - - rest.get(umbracoPath('/document/:id/allowed-document-types'), (req, res, ctx) => { - const id = req.params.id as string; - if (!id) return; - const response = umbDocumentData.getDocumentByIdAllowedDocumentTypes(id); - return res(ctx.status(200), ctx.json(response)); - }), - - rest.get(umbracoPath('/document/:id'), (req, res, ctx) => { - const id = req.params.id as string; - if (!id) return; - const document = umbDocumentData.getById(id); - return res(ctx.status(200), ctx.json(document)); - }), - - rest.delete(umbracoPath('/document/:id'), (req, res, ctx) => { - const id = req.params.id as string; - if (!id) return; - umbDocumentData.delete([id]); - return res(ctx.status(200)); - }), - - rest.put(umbracoPath(`/document/:id`), async (req, res, ctx) => { - const id = req.params.id as string; - if (!id) return; - const data = await req.json(); - if (!data) return; - umbDocumentData.save(id, data); - return res(ctx.status(200)); - }), - - rest.post(umbracoPath(`/document`), async (req, res, ctx) => { - const data = await req.json(); - if (!data) return; - umbDocumentData.insert(data); - return res(ctx.status(200)); - }), -]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/index.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/index.ts index f02652bc13..154739b722 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/index.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/index.ts @@ -1,13 +1,15 @@ -import { handlers as recycleBinHandlers } from './recycle-bin.handlers.js'; -import { handlers as treeHandlers } from './tree.handlers.js'; -import { handlers as documentHandlers } from './document.handlers.js'; -import { handlers as itemHandlers } from './item.handlers.js'; -import { handlers as permissionHandlers } from './permission.handlers.js'; +import { recycleBinHandlers } from './recycle-bin.handlers.js'; +import { treeHandlers } from './tree.handlers.js'; +import { itemHandlers } from './item.handlers.js'; +import { permissionHandlers } from './permission.handlers.js'; +import { publishingHandlers } from './publishing.handlers.js'; +import { detailHandlers } from './detail.handlers.js'; export const handlers = [ ...recycleBinHandlers, ...permissionHandlers, ...treeHandlers, ...itemHandlers, - ...documentHandlers, + ...publishingHandlers, + ...detailHandlers, ]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/item.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/item.handlers.ts index 87fcf83b30..44179c36c6 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/item.handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/item.handlers.ts @@ -1,13 +1,13 @@ const { rest } = window.MockServiceWorker; -import { umbDocumentData } from '../../data/document.data.js'; +import { umbDocumentMockDb } from '../../data/document/document.db.js'; import { UMB_SLUG } from './slug.js'; import { umbracoPath } from '@umbraco-cms/backoffice/utils'; -export const handlers = [ +export const itemHandlers = [ rest.get(umbracoPath(`${UMB_SLUG}/item`), (req, res, ctx) => { const ids = req.url.searchParams.getAll('id'); if (!ids) return; - const items = umbDocumentData.getItems(ids); + const items = umbDocumentMockDb.item.getItems(ids); return res(ctx.status(200), ctx.json(items)); }), ]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/permission.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/permission.handlers.ts index d663059f07..c5f828261b 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/permission.handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/permission.handlers.ts @@ -1,14 +1,14 @@ const { rest } = window.MockServiceWorker; -import { umbDocumentData } from '../../data/document.data.js'; +import { umbDocumentMockDb } from '../../data/document/document.db.js'; import { UMB_SLUG } from './slug.js'; import { umbracoPath } from '@umbraco-cms/backoffice/utils'; // TODO: temp handlers until we have a real API -export const handlers = [ +export const permissionHandlers = [ rest.get(umbracoPath(`${UMB_SLUG}/:id/permissions`), (req, res, ctx) => { const id = req.params.id as string; if (!id) return; - const response = umbDocumentData.getUserPermissionsForDocument(id); + const response = umbDocumentMockDb.getUserPermissionsForDocument(id); return res(ctx.status(200), ctx.json(response)); }), ]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/publishing.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/publishing.handlers.ts new file mode 100644 index 0000000000..52c498fc44 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/publishing.handlers.ts @@ -0,0 +1,25 @@ +const { rest } = window.MockServiceWorker; +import { umbDocumentMockDb } from '../../data/document/document.db.js'; +import { UMB_SLUG } from './slug.js'; +import type { PublishDocumentRequestModel, UnpublishDocumentRequestModel } from '@umbraco-cms/backoffice/backend-api'; +import { umbracoPath } from '@umbraco-cms/backoffice/utils'; + +export const publishingHandlers = [ + rest.put(umbracoPath(`${UMB_SLUG}/:id/publish`), async (req, res, ctx) => { + const id = req.params.id as string; + if (!id) return res(ctx.status(400)); + const requestBody = (await req.json()) as PublishDocumentRequestModel; + if (!requestBody) return res(ctx.status(400, 'no body found')); + umbDocumentMockDb.publishing.publish(id, requestBody); + return res(ctx.status(200)); + }), + + rest.put(umbracoPath(`${UMB_SLUG}/:id/unpublish`), async (req, res, ctx) => { + const id = req.params.id as string; + if (!id) return res(ctx.status(400)); + const requestBody = (await req.json()) as UnpublishDocumentRequestModel; + if (!requestBody) return res(ctx.status(400, 'no body found')); + umbDocumentMockDb.publishing.unpublish(id, requestBody); + return res(ctx.status(200)); + }), +]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/recycle-bin.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/recycle-bin.handlers.ts index 4776bea829..2b842595f7 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/recycle-bin.handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/recycle-bin.handlers.ts @@ -1,20 +1,25 @@ const { rest } = window.MockServiceWorker; -import { umbDocumentData } from '../../data/document.data.js'; +import { umbDocumentMockDb } from '../../data/document/document.db.js'; +import { UMB_SLUG } from './slug.js'; import { umbracoPath } from '@umbraco-cms/backoffice/utils'; -export const handlers = [ - rest.get(umbracoPath(`/recycle-bin/document/root`), (req, res, ctx) => { - const response = umbDocumentData.getRecycleBinRoot(); - +export const recycleBinHandlers = [ + rest.get(umbracoPath(`/recycle-bin${UMB_SLUG}/root`), (req, res, ctx) => { + const response = umbDocumentMockDb.recycleBin.tree.getRoot(); return res(ctx.status(200), ctx.json(response)); }), - rest.get(umbracoPath(`/recycle-bin/document/children`), (req, res, ctx) => { + rest.get(umbracoPath(`/recycle-bin${UMB_SLUG}/children`), (req, res, ctx) => { const parentId = req.url.searchParams.get('parentId'); if (!parentId) return; - - const response = umbDocumentData.getRecycleBinChildrenOf(parentId); - + const response = umbDocumentMockDb.recycleBin.tree.getChildrenOf(parentId); return res(ctx.status(200), ctx.json(response)); }), + + rest.put(umbracoPath(`${UMB_SLUG}/:id/move-to-recycle-bin`), async (req, res, ctx) => { + const id = req.params.id as string; + if (!id) return res(ctx.status(400)); + umbDocumentMockDb.recycleBin.trash([id]); + return res(ctx.status(200)); + }), ]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/tree.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/tree.handlers.ts index 71636ef42c..e2a0aacc7e 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/tree.handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/tree.handlers.ts @@ -1,17 +1,18 @@ const { rest } = window.MockServiceWorker; -import { umbDocumentData } from '../../data/document.data.js'; +import { umbDocumentMockDb } from '../../data/document/document.db.js'; +import { UMB_SLUG } from './slug.js'; import { umbracoPath } from '@umbraco-cms/backoffice/utils'; -export const handlers = [ - rest.get(umbracoPath('/tree/document/root'), (req, res, ctx) => { - const response = umbDocumentData.getTreeRoot(); +export const treeHandlers = [ + rest.get(umbracoPath(`/tree${UMB_SLUG}/root`), (req, res, ctx) => { + const response = umbDocumentMockDb.tree.getRoot(); return res(ctx.status(200), ctx.json(response)); }), - rest.get(umbracoPath('/tree/document/children'), (req, res, ctx) => { + rest.get(umbracoPath(`/tree${UMB_SLUG}/children`), (req, res, ctx) => { const parentId = req.url.searchParams.get('parentId'); if (!parentId) return; - const response = umbDocumentData.getTreeItemChildrenOf(parentId); + const response = umbDocumentMockDb.tree.getChildrenOf(parentId); return res(ctx.status(200), ctx.json(response)); }), ]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/install.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/install.handlers.ts index 811c83eb58..8c43cf7fca 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/handlers/install.handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/install.handlers.ts @@ -30,7 +30,7 @@ export const handlers = [ { level: TelemetryLevelModel.DETAILED, description: - 'We will send:
  • Anonymized site ID, umbraco version, and packages installed.
  • Number of: Root nodes, Content nodes, Macros, Media, Document Types, Templates, Languages, Domains, User Group, Users, Members, and Property Editors in use.
  • System information: Webserver, server OS, server framework, server OS language, and database provider.
  • Configuration settings: Modelsbuilder mode, if custom Umbraco path exists, ASP environment, and if you are in debug mode.
We might change what we send on the Detailed level in the future. If so, it will be listed above.
By choosing "Detailed" you agree to current and future anonymized information being collected.
', + 'We will send:
  • Anonymized site ID, umbraco version, and packages installed.
  • Number of: Root nodes, Content nodes, Media, Document Types, Templates, Languages, Domains, User Group, Users, Members, and Property Editors in use.
  • System information: Webserver, server OS, server framework, server OS language, and database provider.
  • Configuration settings: Modelsbuilder mode, if custom Umbraco path exists, ASP environment, and if you are in debug mode.
We might change what we send on the Detailed level in the future. If so, it will be listed above.
By choosing "Detailed" you agree to current and future anonymized information being collected.
', }, ], }, diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/media.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/media.handlers.ts deleted file mode 100644 index e5348d38ca..0000000000 --- a/src/Umbraco.Web.UI.Client/src/mocks/handlers/media.handlers.ts +++ /dev/null @@ -1,66 +0,0 @@ -const { rest } = window.MockServiceWorker; -import { umbMediaData } from '../data/media.data.js'; -import { umbracoPath } from '@umbraco-cms/backoffice/utils'; - -// TODO: add schema -export const handlers = [ - rest.get(umbracoPath('/media/item'), (req, res, ctx) => { - const ids = req.url.searchParams.getAll('id'); - if (!ids) return; - const items = umbMediaData.getItems(ids); - return res(ctx.status(200), ctx.json(items)); - }), - - rest.get('/umbraco/management/api/v1/media/details/:id', (req, res, ctx) => { - console.warn('Please move to schema'); - const id = req.params.id as string; - if (!id) return; - - const media = umbMediaData.getById(id); - - return res(ctx.status(200), ctx.json([media])); - }), - - rest.post('/umbraco/management/api/v1/media/save', async (req, res, ctx) => { - const data = await req.json(); - if (!data) return; - - umbMediaData.save(data.id, data); - - return res(ctx.status(200)); - }), - - rest.post('/umbraco/management/api/v1/media/move', async (req, res, ctx) => { - const data = await req.json(); - if (!data) return; - umbMediaData.move(data.ids, data.destination); - return res(ctx.status(200)); - }), - - rest.post('/umbraco/management/api/v1/media/trash', async (req, res, ctx) => { - const ids = await req.json(); - const trashed = umbMediaData.trash(ids); - return res(ctx.status(200), ctx.json(trashed)); - }), - - rest.get('/umbraco/management/api/v1/tree/media/root', (req, res, ctx) => { - const response = umbMediaData.getTreeRoot(); - return res(ctx.status(200), ctx.json(response)); - }), - - rest.get('/umbraco/management/api/v1/tree/media/children', (req, res, ctx) => { - const parentId = req.url.searchParams.get('parentId'); - if (!parentId) return; - const response = umbMediaData.getTreeItemChildren(parentId); - return res(ctx.status(200), ctx.json(response)); - }), - - rest.get('/umbraco/management/api/v1/tree/media/item', (req, res, ctx) => { - const ids = req.url.searchParams.getAll('id'); - if (!ids) return; - - const items = umbMediaData.getTreeItem(ids); - - return res(ctx.status(200), ctx.json(items)); - }), -]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/media/detail.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/media/detail.handlers.ts new file mode 100644 index 0000000000..83acb4e569 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/media/detail.handlers.ts @@ -0,0 +1,45 @@ +const { rest } = window.MockServiceWorker; +import { umbMediaMockDb } from '../../data/media/media.db.js'; +import { UMB_SLUG } from './slug.js'; +import type { CreateMediaRequestModel, UpdateMediaRequestModel } from '@umbraco-cms/backoffice/backend-api'; +import { umbracoPath } from '@umbraco-cms/backoffice/utils'; + +export const detailHandlers = [ + rest.post(umbracoPath(`${UMB_SLUG}`), async (req, res, ctx) => { + const requestBody = (await req.json()) as CreateMediaRequestModel; + if (!requestBody) return res(ctx.status(400, 'no body found')); + + const id = umbMediaMockDb.detail.create(requestBody); + + return res( + ctx.status(201), + ctx.set({ + Location: req.url.href + '/' + id, + 'Umb-Generated-Resource': id, + }), + ); + }), + + rest.get(umbracoPath(`${UMB_SLUG}/:id`), (req, res, ctx) => { + const id = req.params.id as string; + if (!id) return res(ctx.status(400)); + const response = umbMediaMockDb.detail.read(id); + return res(ctx.status(200), ctx.json(response)); + }), + + rest.put(umbracoPath(`${UMB_SLUG}/:id`), async (req, res, ctx) => { + const id = req.params.id as string; + if (!id) return res(ctx.status(400)); + const requestBody = (await req.json()) as UpdateMediaRequestModel; + if (!requestBody) return res(ctx.status(400, 'no body found')); + umbMediaMockDb.detail.update(id, requestBody); + return res(ctx.status(200)); + }), + + rest.delete(umbracoPath(`${UMB_SLUG}/:id`), (req, res, ctx) => { + const id = req.params.id as string; + if (!id) return res(ctx.status(400)); + umbMediaMockDb.detail.delete(id); + return res(ctx.status(200)); + }), +]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/media/index.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/media/index.ts new file mode 100644 index 0000000000..963a027993 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/media/index.ts @@ -0,0 +1,6 @@ +import { recycleBinHandlers } from './recycle-bin.handlers.js'; +import { treeHandlers } from './tree.handlers.js'; +import { itemHandlers } from './item.handlers.js'; +import { detailHandlers } from './detail.handlers.js'; + +export const handlers = [...recycleBinHandlers, ...treeHandlers, ...itemHandlers, ...detailHandlers]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/media/item.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/media/item.handlers.ts new file mode 100644 index 0000000000..8050fbeeb3 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/media/item.handlers.ts @@ -0,0 +1,13 @@ +const { rest } = window.MockServiceWorker; +import { umbMediaMockDb } from '../../data/media/media.db.js'; +import { UMB_SLUG } from './slug.js'; +import { umbracoPath } from '@umbraco-cms/backoffice/utils'; + +export const itemHandlers = [ + rest.get(umbracoPath(`${UMB_SLUG}/item`), (req, res, ctx) => { + const ids = req.url.searchParams.getAll('id'); + if (!ids) return; + const items = umbMediaMockDb.item.getItems(ids); + return res(ctx.status(200), ctx.json(items)); + }), +]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/media/recycle-bin.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/media/recycle-bin.handlers.ts new file mode 100644 index 0000000000..edc15eff9d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/media/recycle-bin.handlers.ts @@ -0,0 +1,25 @@ +const { rest } = window.MockServiceWorker; +import { umbMediaMockDb } from '../../data/media/media.db.js'; +import { UMB_SLUG } from './slug.js'; +import { umbracoPath } from '@umbraco-cms/backoffice/utils'; + +export const recycleBinHandlers = [ + rest.get(umbracoPath(`/recycle-bin${UMB_SLUG}/root`), (req, res, ctx) => { + const response = umbMediaMockDb.recycleBin.tree.getRoot(); + return res(ctx.status(200), ctx.json(response)); + }), + + rest.get(umbracoPath(`/recycle-bin${UMB_SLUG}/children`), (req, res, ctx) => { + const parentId = req.url.searchParams.get('parentId'); + if (!parentId) return; + const response = umbMediaMockDb.recycleBin.tree.getChildrenOf(parentId); + return res(ctx.status(200), ctx.json(response)); + }), + + rest.put(umbracoPath(`${UMB_SLUG}/:id/move-to-recycle-bin`), async (req, res, ctx) => { + const id = req.params.id as string; + if (!id) return res(ctx.status(400)); + umbMediaMockDb.recycleBin.trash([id]); + return res(ctx.status(200)); + }), +]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/media/slug.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/media/slug.ts new file mode 100644 index 0000000000..4e0336d30b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/media/slug.ts @@ -0,0 +1 @@ +export const UMB_SLUG = '/media'; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/media/tree.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/media/tree.handlers.ts new file mode 100644 index 0000000000..b57b17e3a1 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/media/tree.handlers.ts @@ -0,0 +1,18 @@ +const { rest } = window.MockServiceWorker; +import { umbMediaMockDb } from '../../data/media/media.db.js'; +import { UMB_SLUG } from './slug.js'; +import { umbracoPath } from '@umbraco-cms/backoffice/utils'; + +export const treeHandlers = [ + rest.get(umbracoPath(`/tree${UMB_SLUG}/root`), (req, res, ctx) => { + const response = umbMediaMockDb.tree.getRoot(); + return res(ctx.status(200), ctx.json(response)); + }), + + rest.get(umbracoPath(`/tree${UMB_SLUG}/children`), (req, res, ctx) => { + const parentId = req.url.searchParams.get('parentId'); + if (!parentId) return; + const response = umbMediaMockDb.tree.getChildrenOf(parentId); + return res(ctx.status(200), ctx.json(response)); + }), +]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/tree-media.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/tree-media.handlers.ts deleted file mode 100644 index afb81d1196..0000000000 --- a/src/Umbraco.Web.UI.Client/src/mocks/handlers/tree-media.handlers.ts +++ /dev/null @@ -1,26 +0,0 @@ -const { rest } = window.MockServiceWorker; -import { umbMediaData } from '../data/media.data.js'; - -// TODO: add schema -export const handlers = [ - rest.get('/umbraco/management/api/v1/tree/media/root', (req, res, ctx) => { - const response = umbMediaData.getTreeRoot(); - return res(ctx.status(200), ctx.json(response)); - }), - - rest.get('/umbraco/management/api/v1/tree/media/children', (req, res, ctx) => { - const parentId = req.url.searchParams.get('parentId'); - if (!parentId) return; - const response = umbMediaData.getTreeItemChildren(parentId); - return res(ctx.status(200), ctx.json(response)); - }), - - rest.get('/umbraco/management/api/v1/tree/media/item', (req, res, ctx) => { - const ids = req.url.searchParams.getAll('id'); - if (!ids) return; - - const items = umbMediaData.getTreeItem(ids); - - return res(ctx.status(200), ctx.json(items)); - }), -]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/block-list-block/block-list-block.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/block-list-block/block-list-block.element.ts index 6af4a4da1f..897f888b4c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/block-list-block/block-list-block.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/block-list-block/block-list-block.element.ts @@ -28,6 +28,9 @@ export class UmbPropertyEditorUIBlockListBlockElement extends UmbLitElement impl @state() _contentUdi?: string; + @state() + _hasSettings = false; + @state() _label = ''; @@ -37,6 +40,12 @@ export class UmbPropertyEditorUIBlockListBlockElement extends UmbLitElement impl @state() _inlineEditingMode?: boolean; + // TODO: Move type for the Block Properties, and use it on the Element Interface for the Manifest. + @state() + _blockViewProps: { + label?: string; + } = {}; + constructor() { super(); @@ -46,7 +55,11 @@ export class UmbPropertyEditorUIBlockListBlockElement extends UmbLitElement impl this.observe(this.#context.contentUdi, (contentUdi) => { this._contentUdi = contentUdi; }); + this.observe(this.#context.blockTypeSettingsElementTypeKey, (blockTypeSettingsElementTypeKey) => { + this._hasSettings = !!blockTypeSettingsElementTypeKey; + }); this.observe(this.#context.label, (label) => { + this._blockViewProps.label = label; this._label = label; }); this.observe(this.#context.inlineEditingMode, (inlineEditingMode) => { @@ -70,22 +83,32 @@ export class UmbPropertyEditorUIBlockListBlockElement extends UmbLitElement impl } #renderRefBlock() { - return html``; + return html``; } #renderInlineBlock() { - return html``; + return html``; } #renderBlock() { return html` - ${this._inlineEditingMode ? this.#renderInlineBlock() : this.#renderRefBlock()} + ${this._inlineEditingMode ? this.#renderInlineBlock() : this.#renderRefBlock()} ${this._workspaceEditPath ? html` ` : ''} + ${this._workspaceEditPath && this._hasSettings + ? html` + + ` + : ''} diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/inline-list-block/inline-list-block.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/inline-list-block/inline-list-block.element.ts index c25d52faef..e177087318 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/inline-list-block/inline-list-block.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/inline-list-block/inline-list-block.element.ts @@ -3,7 +3,7 @@ import type { UMB_BLOCK_WORKSPACE_CONTEXT } from '../../../block/index.js'; import { UMB_BLOCK_WORKSPACE_ALIAS } from '../../../block/index.js'; import { UmbExtensionsApiInitializer, createExtensionApi } from '@umbraco-cms/backoffice/extension-api'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; -import { css, customElement, html, state } from '@umbraco-cms/backoffice/external/lit'; +import { css, customElement, html, property, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import '../../../block/workspace/views/edit/block-workspace-view-edit-no-router.element.js'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; @@ -17,8 +17,8 @@ export class UmbInlineListBlockElement extends UmbLitElement { #workspaceContext?: typeof UMB_BLOCK_WORKSPACE_CONTEXT.TYPE; #contentUdi?: string; - @state() - _label = ''; + @property({ type: String }) + label?: string; @state() _isOpen = false; @@ -36,9 +36,6 @@ export class UmbInlineListBlockElement extends UmbLitElement { }, 'observeContentUdi', ); - this.observe(blockContext.label, (label) => { - this._label = label; - }); }); this.observe(umbExtensionsRegistry.getByTypeAndAlias('workspace', UMB_BLOCK_WORKSPACE_ALIAS), (manifest) => { if (manifest) { @@ -73,7 +70,7 @@ export class UmbInlineListBlockElement extends UmbLitElement { }}> - ${this._label} + ${this.label} ${this._isOpen === true ? html`` @@ -82,6 +79,7 @@ export class UmbInlineListBlockElement extends UmbLitElement { } static styles = [ + UmbTextStyles, css` #accordion-button { display: flex; diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/ref-list-block/ref-list-block.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/ref-list-block/ref-list-block.element.ts index 7dc6d20276..dce78e9855 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/ref-list-block/ref-list-block.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/ref-list-block/ref-list-block.element.ts @@ -1,6 +1,5 @@ import { UMB_BLOCK_LIST_CONTEXT } from '../../context/block-list.context-token.js'; import { css, customElement, html, property, state } from '@umbraco-cms/backoffice/external/lit'; -import { UUIRefNodeElement } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; /** @@ -10,7 +9,7 @@ import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; export class UmbRefListBlockElement extends UmbLitElement { // @property({ type: String }) - name?: string; + label?: string; @state() _workspaceEditPath?: string; @@ -31,13 +30,12 @@ export class UmbRefListBlockElement extends UmbLitElement { render() { // href=${this._workspaceEditPath ?? '#'} - return html``; + return html``; } static styles = [ - ...UUIRefNodeElement.styles, css` - :host { + uui-ref-node { min-height: var(--uui-size-16); } `, diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/block-type-card/block-type-card.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/block-type-card/block-type-card.element.ts index 0d167a660d..b7732995ce 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/block-type-card/block-type-card.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/block-type-card/block-type-card.element.ts @@ -14,7 +14,7 @@ export class UmbBlockTypeCardElement extends UmbLitElement { #itemManager = new UmbRepositoryItemsManager( this, DOCUMENT_TYPE_ITEM_REPOSITORY_ALIAS, - (x) => x.id, + (x) => x.unique, ); @property({ type: String, attribute: false }) diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/workspace/block-type-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/workspace/block-type-workspace-editor.element.ts index 018bfbbfa4..97b8c61af0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/workspace/block-type-workspace-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/workspace/block-type-workspace-editor.element.ts @@ -12,7 +12,7 @@ export class UmbBlockTypeWorkspaceEditorElement extends UmbLitElement { #itemManager = new UmbRepositoryItemsManager( this, DOCUMENT_TYPE_ITEM_REPOSITORY_ALIAS, - (x) => x.id, + (x) => x.unique, ); #workspaceContext?: typeof UMB_BLOCK_TYPE_WORKSPACE_CONTEXT.TYPE; diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/conditions/block-workspace-has-settings.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/conditions/block-workspace-has-settings.condition.ts new file mode 100644 index 0000000000..434cc1b455 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/conditions/block-workspace-has-settings.condition.ts @@ -0,0 +1,41 @@ +import { UMB_BLOCK_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/block'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; +import type { + ManifestCondition, + UmbConditionConfigBase, + UmbConditionControllerArguments, + UmbExtensionCondition, +} from '@umbraco-cms/backoffice/extension-api'; + +export class UmbBlockWorkspaceHasSettingsCondition extends UmbBaseController implements UmbExtensionCondition { + config: BlockWorkspaceHasSettingsConditionConfig; + permitted = false; + #onChange: () => void; + + constructor(args: UmbConditionControllerArguments) { + super(args.host); + this.config = args.config; + this.#onChange = args.onChange; + + this.consumeContext(UMB_BLOCK_WORKSPACE_CONTEXT, (context) => { + this.observe( + context.settings.contentTypeId, + (settingsContentTypeId) => { + this.permitted = !!settingsContentTypeId; + this.#onChange(); + }, + 'observeSettingsElementTypeId', + ); + }); + } +} + +export type BlockWorkspaceHasSettingsConditionConfig = + UmbConditionConfigBase<'Umb.Condition.BlockWorkspaceHasSettings'>; + +export const manifest: ManifestCondition = { + type: 'condition', + name: 'Block Has Settings Condition', + alias: 'Umb.Condition.BlockWorkspaceHasSettings', + api: UmbBlockWorkspaceHasSettingsCondition, +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/conditions/index.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/conditions/index.ts new file mode 100644 index 0000000000..0c6d9fc984 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/conditions/index.ts @@ -0,0 +1 @@ +export * from './block-workspace-has-settings.condition.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entity.context.ts similarity index 98% rename from src/Umbraco.Web.UI.Client/src/packages/block/block/context/block.context.ts rename to src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entity.context.ts index 7df7769388..9f9d417e10 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entity.context.ts @@ -60,7 +60,7 @@ export abstract class UmbBlockContext< } constructor(host: UmbControllerHost, blockManagerContextToken: BlockManagerContextTokenType) { - super(host, UMB_BLOCK_CONTEXT.toString()); + super(host, UMB_BLOCK_ENTITY_CONTEXT.toString()); // Consume block manager: this.consumeContext(blockManagerContextToken, (manager) => { @@ -198,6 +198,6 @@ export abstract class UmbBlockContext< } } -export const UMB_BLOCK_CONTEXT = new UmbContextToken< +export const UMB_BLOCK_ENTITY_CONTEXT = new UmbContextToken< UmbBlockContext >('UmbBlockContext'); diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/index.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/index.ts index 69c858f894..689c247d82 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/index.ts @@ -1 +1 @@ -export * from './block.context.js'; +export * from './block-entity.context.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/index.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/index.ts index 258f163605..abccb4df2a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/index.ts @@ -1,5 +1,6 @@ +export * from './conditions/index.js'; export * from './context/index.js'; export * from './manager/index.js'; export * from './modals/index.js'; -export * from './workspace/index.js'; export * from './types.js'; +export * from './workspace/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/manager/block-manager.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/manager/block-manager.context.ts index 2d9f9c9fa4..0ab646f59a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/manager/block-manager.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/manager/block-manager.context.ts @@ -4,13 +4,8 @@ import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbArrayState, UmbClassState, UmbStringState } from '@umbraco-cms/backoffice/observable-api'; import { UmbDocumentTypeDetailRepository } from '@umbraco-cms/backoffice/document-type'; import { buildUdi, getKeyFromUdi } from '@umbraco-cms/backoffice/utils'; -import type { - UmbBlockTypeBaseModel, - UmbBlockWorkspaceData} from '@umbraco-cms/backoffice/block'; -import { - UMB_BLOCK_MANAGER_CONTEXT, - UMB_BLOCK_WORKSPACE_MODAL -} from '@umbraco-cms/backoffice/block'; +import type { UmbBlockTypeBaseModel, UmbBlockWorkspaceData } from '@umbraco-cms/backoffice/block'; +import { UMB_BLOCK_MANAGER_CONTEXT, UMB_BLOCK_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/block'; import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/modal'; import type { UmbContentTypeModel } from '@umbraco-cms/backoffice/content-type'; import { UmbId } from '@umbraco-cms/backoffice/id'; @@ -72,6 +67,7 @@ export abstract class UmbBlockManagerContext< constructor(host: UmbControllerHost) { super(host, UMB_BLOCK_MANAGER_CONTEXT); + // TODO: This might will need the property alias as part of the URL, to avoid collision if multiple of these Editor on same Node. // IDEA: Make a Workspace registration controller that can be used to register a workspace, which does both edit and create?. new UmbModalRouteRegistrationController(this, UMB_BLOCK_WORKSPACE_MODAL) .addAdditionalPath('block') diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/manifests.ts index e3939d3921..1582d740af 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/manifests.ts @@ -1,4 +1,5 @@ +import { manifest as blockWorkspaceHasSettingsConditionManifest } from './conditions/block-workspace-has-settings.condition.js'; import { manifests as modalManifests } from './modals/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; -export const manifests = [...modalManifests, ...workspaceManifests]; +export const manifests = [...modalManifests, ...workspaceManifests, blockWorkspaceHasSettingsConditionManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-workspace.context.ts index 7fe74f0be1..327498248a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-workspace.context.ts @@ -10,6 +10,7 @@ import { UMB_BLOCK_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/block'; import { buildUdi } from '@umbraco-cms/backoffice/utils'; import { UMB_MODAL_CONTEXT } from '@umbraco-cms/backoffice/modal'; +export type UmbBlockWorkspaceElementManagerNames = 'content' | 'settings'; export class UmbBlockWorkspaceContext< LayoutDataType extends UmbBlockLayoutBaseModel = UmbBlockLayoutBaseModel, > extends UmbEditableWorkspaceContextBase { diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-workspace.element.ts index 0bcca9b580..5e080011fe 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-workspace.element.ts @@ -6,9 +6,9 @@ import type { UmbRoute } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { UmbWorkspaceIsNewRedirectController } from '@umbraco-cms/backoffice/workspace'; -import type { UmbApi} from '@umbraco-cms/backoffice/extension-api'; +import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; import { UmbExtensionsApiInitializer, createExtensionApi } from '@umbraco-cms/backoffice/extension-api'; -import type { ManifestWorkspace} from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestWorkspace } from '@umbraco-cms/backoffice/extension-registry'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { decodeFilePath } from '@umbraco-cms/backoffice/utils'; @@ -31,7 +31,7 @@ export class UmbBlockWorkspaceElement extends UmbLitElement { createExtensionApi(manifest, [this, { manifest: manifest }]).then((context) => { if (context) { this.#gotWorkspaceContext(context); - // TODO: We need to recreate when ID changed? + // TODO: Do we need to recreate when ID changed? Or is that a responsibility of the context it self? new UmbExtensionsApiInitializer(this, umbExtensionsRegistry, 'workspaceContext', [ this, this.#workspaceContext, diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/manifests.ts index 3afce80e47..9617a2bdcc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/manifests.ts @@ -41,6 +41,7 @@ export const manifests: Array = [ label: 'Content', pathname: 'content', icon: 'icon-document', + blockElementManagerName: 'content', }, conditions: [ { @@ -48,5 +49,27 @@ export const manifests: Array = [ match: UMB_BLOCK_WORKSPACE_ALIAS, }, ], - }, + } as any, + { + type: 'workspaceView', + alias: 'Umb.WorkspaceView.Block.Settings', + name: 'Block Workspace Settings View', + js: () => import('./views/edit/block-workspace-view-edit.element.js'), + weight: 1000, + meta: { + label: 'Settings', + pathname: 'settings', + icon: 'icon-settings', + blockElementManagerName: 'settings', + }, + conditions: [ + { + alias: 'Umb.Condition.WorkspaceAlias', + match: UMB_BLOCK_WORKSPACE_ALIAS, + }, + { + alias: 'Umb.Condition.BlockWorkspaceHasSettings', + }, + ], + } as any, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/views/edit/block-workspace-view-edit-no-router.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/views/edit/block-workspace-view-edit-no-router.element.ts index 3a216eb3c9..e6c7aa0e48 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/views/edit/block-workspace-view-edit-no-router.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/views/edit/block-workspace-view-edit-no-router.element.ts @@ -39,7 +39,6 @@ export class UmbBlockWorkspaceViewEditNoRouterElement extends UmbLitElement impl this.consumeContext(UMB_BLOCK_WORKSPACE_CONTEXT, (workspaceContext) => { this._workspaceContext = workspaceContext; - console.log('workspaceContext.content.structure', workspaceContext.content.structure); this._tabsStructureHelper.setStructureManager(workspaceContext.content.structure); this._observeRootGroups(); }); diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/views/edit/block-workspace-view-edit-properties.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/views/edit/block-workspace-view-edit-properties.element.ts index 8eec2efdeb..d35fa40231 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/views/edit/block-workspace-view-edit-properties.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/views/edit/block-workspace-view-edit-properties.element.ts @@ -1,50 +1,69 @@ import { UMB_BLOCK_WORKSPACE_CONTEXT } from '../../block-workspace.context-token.js'; +import type { UmbBlockWorkspaceElementManagerNames } from '../../block-workspace.context.js'; import { css, html, customElement, property, state, repeat } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import type { - PropertyContainerTypes, - // UmbPropertyTypeBasedPropertyElement, - UmbContentTypeModel} from '@umbraco-cms/backoffice/content-type'; -import { - UmbContentTypePropertyStructureHelper + UmbPropertyContainerTypes, + UmbContentTypeModel, + UmbPropertyTypeModel, } from '@umbraco-cms/backoffice/content-type'; +import { UmbContentTypePropertyStructureHelper } from '@umbraco-cms/backoffice/content-type'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import type { PropertyTypeModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; @customElement('umb-block-workspace-view-edit-properties') export class UmbBlockWorkspaceViewEditPropertiesElement extends UmbLitElement { + @property({ attribute: false }) + public get managerName(): UmbBlockWorkspaceElementManagerNames | undefined { + return this.#managerName; + } + public set managerName(value: UmbBlockWorkspaceElementManagerNames | undefined) { + this.#managerName = value; + this.#setStructureManager(); + } + #managerName?: UmbBlockWorkspaceElementManagerNames; + #blockWorkspace?: typeof UMB_BLOCK_WORKSPACE_CONTEXT.TYPE; + #propertyStructureHelper = new UmbContentTypePropertyStructureHelper(this); + @property({ type: String, attribute: 'container-name', reflect: false }) public get containerName(): string | undefined { - return this._propertyStructureHelper.getContainerName(); + return this.#propertyStructureHelper.getContainerName(); } public set containerName(value: string | undefined) { - this._propertyStructureHelper.setContainerName(value); + this.#propertyStructureHelper.setContainerName(value); } @property({ type: String, attribute: 'container-type', reflect: false }) - public get containerType(): PropertyContainerTypes | undefined { - return this._propertyStructureHelper.getContainerType(); + public get containerType(): UmbPropertyContainerTypes | undefined { + return this.#propertyStructureHelper.getContainerType(); } - public set containerType(value: PropertyContainerTypes | undefined) { - this._propertyStructureHelper.setContainerType(value); + public set containerType(value: UmbPropertyContainerTypes | undefined) { + this.#propertyStructureHelper.setContainerType(value); } - _propertyStructureHelper = new UmbContentTypePropertyStructureHelper(this); - @state() - _propertyStructure: Array = []; + _propertyStructure: Array = []; constructor() { super(); this.consumeContext(UMB_BLOCK_WORKSPACE_CONTEXT, (workspaceContext) => { - this._propertyStructureHelper.setStructureManager(workspaceContext.content.structure); - }); - this.observe(this._propertyStructureHelper.propertyStructure, (propertyStructure) => { - this._propertyStructure = propertyStructure; + this.#blockWorkspace = workspaceContext; + this.#setStructureManager(); }); } + #setStructureManager() { + if (!this.#blockWorkspace || !this.#managerName) return; + this.#propertyStructureHelper.setStructureManager(this.#blockWorkspace[this.#managerName].structure); + this.observe( + this.#propertyStructureHelper.propertyStructure, + (propertyStructure) => { + this._propertyStructure = propertyStructure; + }, + 'observePropertyStructure', + ); + } + render() { return repeat( this._propertyStructure, diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/views/edit/block-workspace-view-edit-tab.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/views/edit/block-workspace-view-edit-tab.element.ts index 3cac991532..03a27f78bc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/views/edit/block-workspace-view-edit-tab.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/views/edit/block-workspace-view-edit-tab.element.ts @@ -7,29 +7,42 @@ import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import type { PropertyTypeContainerModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; import './block-workspace-view-edit-properties.element.js'; +// eslint-disable-next-line import/order +import type { UmbBlockWorkspaceElementManagerNames } from '../../block-workspace.context.js'; @customElement('umb-block-workspace-view-edit-tab') export class UmbBlockWorkspaceViewEditTabElement extends UmbLitElement { - private _tabName?: string | undefined; + @property({ attribute: false }) + public get managerName(): UmbBlockWorkspaceElementManagerNames | undefined { + return this.#managerName; + } + public set managerName(value: UmbBlockWorkspaceElementManagerNames | undefined) { + this.#managerName = value; + this.#setStructureManager(); + } + #managerName?: UmbBlockWorkspaceElementManagerNames; + #blockWorkspace?: typeof UMB_BLOCK_WORKSPACE_CONTEXT.TYPE; + #groupStructureHelper = new UmbContentTypeContainerStructureHelper(this); @property({ type: String }) public get tabName(): string | undefined { - return this._groupStructureHelper.getName(); + return this.#groupStructureHelper.getName(); } public set tabName(value: string | undefined) { if (value === this._tabName) return; const oldValue = this._tabName; this._tabName = value; - this._groupStructureHelper.setName(value); + this.#groupStructureHelper.setName(value); this.requestUpdate('tabName', oldValue); } + private _tabName?: string | undefined; @property({ type: Boolean }) public get noTabName(): boolean { - return this._groupStructureHelper.getIsRoot(); + return this.#groupStructureHelper.getIsRoot(); } public set noTabName(value: boolean) { - this._groupStructureHelper.setIsRoot(value); + this.#groupStructureHelper.setIsRoot(value); } private _ownerTabId?: string | null; @@ -40,7 +53,7 @@ export class UmbBlockWorkspaceViewEditTabElement extends UmbLitElement { public set ownerTabId(value: string | null | undefined) { if (value === this._ownerTabId) return; this._ownerTabId = value; - this._groupStructureHelper.setOwnerId(value); + this.#groupStructureHelper.setOwnerId(value); } /** @@ -50,8 +63,6 @@ export class UmbBlockWorkspaceViewEditTabElement extends UmbLitElement { @property({ type: Boolean, reflect: false }) hideSingleGroup = false; - _groupStructureHelper = new UmbContentTypeContainerStructureHelper(this); - @state() _groups: Array = []; @@ -62,16 +73,30 @@ export class UmbBlockWorkspaceViewEditTabElement extends UmbLitElement { super(); this.consumeContext(UMB_BLOCK_WORKSPACE_CONTEXT, (workspaceContext) => { - this._groupStructureHelper.setStructureManager(workspaceContext.content.structure); - }); - this.observe(this._groupStructureHelper.containers, (groups) => { - this._groups = groups; - }); - this.observe(this._groupStructureHelper.hasProperties, (hasProperties) => { - this._hasProperties = hasProperties; + this.#blockWorkspace = workspaceContext; + this.#setStructureManager(); }); } + #setStructureManager() { + if (!this.#blockWorkspace || !this.#managerName) return; + this.#groupStructureHelper.setStructureManager(this.#blockWorkspace[this.#managerName].structure); + this.observe( + this.#groupStructureHelper.containers, + (groups) => { + this._groups = groups; + }, + 'observeGroups', + ); + this.observe( + this.#groupStructureHelper.hasProperties, + (hasProperties) => { + this._hasProperties = hasProperties; + }, + 'observeHasProperties', + ); + } + render() { return html` ${this._hasProperties ? this.#renderPart(this._tabName) : ''} @@ -86,11 +111,13 @@ export class UmbBlockWorkspaceViewEditTabElement extends UmbLitElement { #renderPart(groupName: string | null | undefined, boxName?: string | null | undefined) { return this.hideSingleGroup && this._groups.length === 1 ? html` ` : html` (this); + + //@state() //private _hasRootProperties = false; + + @state() private _hasRootGroups = false; @state() @@ -32,44 +43,44 @@ export class UmbBlockWorkspaceViewEditElement extends UmbLitElement implements U @state() private _activePath = ''; - private _workspaceContext?: typeof UMB_BLOCK_WORKSPACE_CONTEXT.TYPE; - - private _tabsStructureHelper = new UmbContentTypeContainerStructureHelper(this); - constructor() { super(); - this._tabsStructureHelper.setIsRoot(true); - this._tabsStructureHelper.setContainerChildType('Tab'); - this.observe(this._tabsStructureHelper.containers, (tabs) => { - this._tabs = tabs; - this._createRoutes(); - }); + this.#tabsStructureHelper.setIsRoot(true); + this.#tabsStructureHelper.setContainerChildType('Tab'); // _hasRootProperties can be gotten via _tabsStructureHelper.hasProperties. But we do not support root properties currently. this.consumeContext(UMB_BLOCK_WORKSPACE_CONTEXT, (workspaceContext) => { - this._workspaceContext = workspaceContext; - this._tabsStructureHelper.setStructureManager(workspaceContext.content.structure); - this._observeRootGroups(); + this.#blockWorkspace = workspaceContext; + this.#setStructureManager(); }); } - private _observeRootGroups() { - if (!this._workspaceContext) return; + #setStructureManager() { + if (!this.#blockWorkspace || !this.#managerName) return; + this.#tabsStructureHelper.setStructureManager(this.#blockWorkspace[this.#managerName].structure); this.observe( - this._workspaceContext.content.structure.hasRootContainers('Group'), + this.#blockWorkspace![this.#managerName!].structure.hasRootContainers('Group'), (hasRootGroups) => { this._hasRootGroups = hasRootGroups; this._createRoutes(); }, - '_observeGroups', + 'observeGroups', + ); + this.observe( + this.#tabsStructureHelper.containers, + (tabs) => { + this._tabs = tabs; + this._createRoutes(); + }, + 'observeTabs', ); } private _createRoutes() { - if (!this._tabs || !this._workspaceContext) return; + if (!this._tabs || !this.#blockWorkspace) return; const routes: UmbRoute[] = []; if (this._tabs.length > 0) { @@ -79,10 +90,11 @@ export class UmbBlockWorkspaceViewEditElement extends UmbLitElement implements U path: `tab/${encodeFolderName(tabName).toString()}`, component: () => import('./block-workspace-view-edit-tab.element.js'), setup: (component) => { + (component as UmbBlockWorkspaceViewEditTabElement).managerName = this.#managerName; (component as UmbBlockWorkspaceViewEditTabElement).tabName = tabName; // TODO: Consider if we can link these more simple, and not parse this on. // Instead have the structure manager looking at wether one of the OwnerALikecontainers is in the owner document. - (component as UmbBlockWorkspaceViewEditTabElement).ownerTabId = this._tabsStructureHelper.isOwnerContainer( + (component as UmbBlockWorkspaceViewEditTabElement).ownerTabId = this.#tabsStructureHelper.isOwnerContainer( tab.id!, ) ? tab.id @@ -97,6 +109,7 @@ export class UmbBlockWorkspaceViewEditElement extends UmbLitElement implements U path: '', component: () => import('./block-workspace-view-edit-tab.element.js'), setup: (component) => { + (component as UmbBlockWorkspaceViewEditTabElement).managerName = this.#managerName; (component as UmbBlockWorkspaceViewEditTabElement).noTabName = true; (component as UmbBlockWorkspaceViewEditTabElement).ownerTabId = null; }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/extension-slot/extension-slot.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/extension-slot/extension-slot.element.ts index 645ff5d263..155ab0333d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/extension-slot/extension-slot.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/extension-slot/extension-slot.element.ts @@ -1,6 +1,6 @@ import { type ManifestTypes, umbExtensionsRegistry } from '../../extension-registry/index.js'; import type { TemplateResult } from '@umbraco-cms/backoffice/external/lit'; -import { css, repeat, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; +import { css, repeat, customElement, property, state, html } from '@umbraco-cms/backoffice/external/lit'; import { type UmbExtensionElementInitializer, UmbExtensionsElementInitializer, @@ -122,11 +122,13 @@ export class UmbExtensionSlotElement extends UmbLitElement { } render() { - return repeat( - this._permittedExts, - (ext) => ext.alias, - (ext) => (this.renderMethod ? this.renderMethod(ext) : ext.component), - ); + return this._permittedExts.length > 0 + ? repeat( + this._permittedExts, + (ext) => ext.alias, + (ext) => (this.renderMethod ? this.renderMethod(ext) : ext.component), + ) + : html``; } static styles = css` diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-multi-url/input-multi-url.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-multi-url/input-multi-url.element.ts index 9cae53ef03..105c52c291 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-multi-url/input-multi-url.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-multi-url/input-multi-url.element.ts @@ -3,12 +3,8 @@ import { FormControlMixin } from '@umbraco-cms/backoffice/external/uui'; import type { UUIModalSidebarSize } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import type { UmbVariantId } from '@umbraco-cms/backoffice/variant'; -import { - UMB_LINK_PICKER_MODAL, - UmbModalRouteRegistrationController, -} from '@umbraco-cms/backoffice/modal'; -import type { UmbModalRouteBuilder , - UmbLinkPickerLink} from '@umbraco-cms/backoffice/modal'; +import { UMB_LINK_PICKER_MODAL, UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/modal'; +import type { UmbModalRouteBuilder, UmbLinkPickerLink } from '@umbraco-cms/backoffice/modal'; /** * @element umb-input-multi-url @@ -109,6 +105,7 @@ export class UmbInputMultiUrlElement extends FormControlMixin(UmbLitElement) { constructor() { super(); + this.addValidator( 'rangeUnderflow', () => this.minMessage, @@ -155,7 +152,8 @@ export class UmbInputMultiUrlElement extends FormControlMixin(UmbLitElement) { queryString: data?.queryString, target: data?.target, trashed: data?.trashed, - udi: data?.udi, + type: data?.type, + unique: data?.unique, url: data?.url, }, }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tiny-mce/input-tiny-mce.defaults.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tiny-mce/input-tiny-mce.defaults.ts index 579cbf0b6d..76fe1fff55 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tiny-mce/input-tiny-mce.defaults.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tiny-mce/input-tiny-mce.defaults.ts @@ -1,6 +1,5 @@ import type { RawEditorOptions } from '@umbraco-cms/backoffice/external/tinymce'; -//These are absolutely required in order for the macros to render inline //we put these as extended elements because they get merged on top of the normal allowed elements by tiny mce //so we don't have to specify all the normal elements again export const defaultFallbackConfig: RawEditorOptions = { @@ -23,7 +22,6 @@ export const defaultFallbackConfig: RawEditorOptions = { 'indent', 'link', 'umbmediapicker', - 'umbmacro', 'umbembeddialog', ], style_formats: [ diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tiny-mce/input-tiny-mce.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tiny-mce/input-tiny-mce.element.ts index b2b65be207..9546f892b6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tiny-mce/input-tiny-mce.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tiny-mce/input-tiny-mce.element.ts @@ -42,11 +42,11 @@ export class UmbInputTinyMceElement extends FormControlMixin(UmbLitElement) { super.value = newValue; const newContent = newValue?.toString() ?? ''; - if(this.#editorRef && this.#editorRef.getContent() != newContent) { + if (this.#editorRef && this.#editorRef.getContent() != newContent) { this.#editorRef.setContent(newContent); } } - + get value(): FormDataEntryValue | FormData { return super.value; } @@ -179,6 +179,8 @@ export class UmbInputTinyMceElement extends FormControlMixin(UmbLitElement) { (stylesheetPath: string) => `${this.#serverUrl}/css/${stylesheetPath.replace(/\\/g, '/')}`, ) ?? []; + stylesheets.push('/umbraco/backoffice/css/rte-content.css'); + // create an object by merging the configuration onto the fallback config const configurationOptions: RawEditorOptions = { ...defaultFallbackConfig, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tree-picker-source/input-tree-picker-source.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tree-picker-source/input-tree-picker-source.element.ts index 4d8a8ac9ff..79207bb441 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tree-picker-source/input-tree-picker-source.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tree-picker-source/input-tree-picker-source.element.ts @@ -77,7 +77,7 @@ export class UmbInputTreePickerSourceElement extends FormControlMixin(UmbLitElem #onIdChange(event: CustomEvent) { switch (this.type) { case 'content': - this.nodeId = (event.target).nodeId; + this.nodeId = (event.target).unique; break; case 'media': case 'member': diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/components/property-type-based-property/property-type-based-property.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/components/property-type-based-property/property-type-based-property.element.ts index a95f6785b9..5d3581bad8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/components/property-type-based-property/property-type-based-property.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/components/property-type-based-property/property-type-based-property.element.ts @@ -1,26 +1,26 @@ import type { UmbPropertyEditorConfig } from '../../../property-editor/index.js'; -import type { UmbDataTypeDetailModel} from '@umbraco-cms/backoffice/data-type'; +import type { UmbPropertyTypeModel } from '../../types.js'; +import type { UmbDataTypeDetailModel } from '@umbraco-cms/backoffice/data-type'; import { UmbDataTypeDetailRepository } from '@umbraco-cms/backoffice/data-type'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, ifDefined, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; -import type { PropertyTypeModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import type { UmbObserverController } from '@umbraco-cms/backoffice/observable-api'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; @customElement('umb-property-type-based-property') export class UmbPropertyTypeBasedPropertyElement extends UmbLitElement { @property({ type: Object, attribute: false }) - public get property(): PropertyTypeModelBaseModel | undefined { + public get property(): UmbPropertyTypeModel | undefined { return this._property; } - public set property(value: PropertyTypeModelBaseModel | undefined) { + public set property(value: UmbPropertyTypeModel | undefined) { const oldProperty = this._property; this._property = value; - if (this._property?.dataTypeId !== oldProperty?.dataTypeId) { - this._observeDataType(this._property?.dataTypeId); + if (this._property?.dataType.unique !== oldProperty?.dataType.unique) { + this._observeDataType(this._property?.dataType.unique); } } - private _property?: PropertyTypeModelBaseModel; + private _property?: UmbPropertyTypeModel; @state() private _propertyEditorUiAlias?: string; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/content-type-container-structure-helper.class.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/content-type-container-structure-helper.class.ts index 1fe3b0080a..b31fb3546c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/content-type-container-structure-helper.class.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/content-type-container-structure-helper.class.ts @@ -1,9 +1,5 @@ -import type { - PropertyContainerTypes, - UmbContentTypePropertyStructureManager, -} from './content-type-structure-manager.class.js'; -import type { UmbContentTypeModel } from './types.js'; -import type { PropertyTypeContainerModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbContentTypePropertyStructureManager } from './content-type-structure-manager.class.js'; +import type { UmbContentTypeModel, UmbPropertyContainerTypes, UmbPropertyTypeContainerModel } from './types.js'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import { UmbArrayState, UmbBooleanState, UmbObserverController } from '@umbraco-cms/backoffice/observable-api'; @@ -14,20 +10,24 @@ export class UmbContentTypeContainerStructureHelper; - private _ownerType?: PropertyContainerTypes = 'Tab'; - private _childType?: PropertyContainerTypes = 'Group'; + private _ownerType?: UmbPropertyContainerTypes = 'Tab'; + private _childType?: UmbPropertyContainerTypes = 'Group'; private _isRoot = false; + /** + * The owner id is the owning container (The container that is begin presented, the container is the parent of the child containers) + * If set to null, this helper class will provide containers of the root. + */ private _ownerId?: string | null; private _ownerName?: string; // Containers defined in data might be more than actual containers to display as we merge them by name. // Direct containers are the containers defining the total of this container(Multiple containers with the same name and type) - private _ownerAlikeContainers: PropertyTypeContainerModelBaseModel[] = []; + private _ownerAlikeContainers: UmbPropertyTypeContainerModel[] = []; // Owner containers are containers owned by the owner Content Type (The specific one up for editing) - private _ownerContainers: PropertyTypeContainerModelBaseModel[] = []; + private _ownerContainers: UmbPropertyTypeContainerModel[] = []; // State containing the merged containers (only one pr. name): - #containers = new UmbArrayState([], (x) => x.id); + #containers = new UmbArrayState([], (x) => x.id); readonly containers = this.#containers.asObservable(); #hasProperties = new UmbBooleanState(false); @@ -49,7 +49,7 @@ export class UmbContentTypeContainerStructureHelper { + private _insertGroupContainers = (groupContainers: UmbPropertyTypeContainerModel[]) => { groupContainers.forEach((group) => { if (group.name !== null && group.name !== undefined) { if (!this.#containers.getValue().find((x) => x.name === group.name)) { @@ -194,12 +194,17 @@ export class UmbContentTypeContainerStructureHelper x.id === containerId && x.parentId === this._ownerId) !== undefined; + return ( + this.#containers + .getValue() + .find((x) => (x.id === containerId && this._ownerId ? x.parent?.id === this._ownerId : x.parent === null)) !== + undefined + ); } /** Manipulate methods: */ - async insertContainer(container: PropertyTypeContainerModelBaseModel, sortOrder = 0) { + async insertContainer(container: UmbPropertyTypeContainerModel, sortOrder = 0) { await this.#init; if (!this.#structure) return false; @@ -223,7 +228,7 @@ export class UmbContentTypeContainerStructureHelper) { + async partialUpdateContainer(containerId: string, partialUpdate: Partial) { await this.#init; if (!this.#structure || !containerId || !partialUpdate) return; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/content-type-property-structure-helper.class.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/content-type-property-structure-helper.class.ts index 535a2c24d0..e7fc0a1f34 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/content-type-property-structure-helper.class.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/content-type-property-structure-helper.class.ts @@ -1,9 +1,5 @@ -import type { - PropertyContainerTypes, - UmbContentTypePropertyStructureManager, -} from './content-type-structure-manager.class.js'; -import type { UmbContentTypeModel } from './types.js'; -import type { DocumentTypePropertyTypeResponseModel, PropertyTypeModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbContentTypePropertyStructureManager } from './content-type-structure-manager.class.js'; +import type { UmbContentTypeModel, UmbPropertyContainerTypes, UmbPropertyTypeModel } from './types.js'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import { UmbArrayState, UmbObserverController } from '@umbraco-cms/backoffice/observable-api'; @@ -14,11 +10,11 @@ export class UmbContentTypePropertyStructureHelper; - private _containerType?: PropertyContainerTypes; + private _containerType?: UmbPropertyContainerTypes; private _isRoot?: boolean; private _containerName?: string; - #propertyStructure = new UmbArrayState([], (x) => x.id); + #propertyStructure = new UmbArrayState([], (x) => x.id); readonly propertyStructure = this.#propertyStructure.asObservable(); constructor(host: UmbControllerHostElement) { @@ -30,8 +26,10 @@ export class UmbContentTypePropertyStructureHelper ((a as any).sortOrder ?? 0) - ((b as any).sortOrder ?? 0)); } - get ownerDocumentTypes() { - return this.#structure?.contentTypes; + async ownerDocumentTypes() { + await this.#init; + if (!this.#structure) return; + return this.#structure.contentTypes; } public setStructureManager(structure: UmbContentTypePropertyStructureManager) { @@ -41,7 +39,7 @@ export class UmbContentTypePropertyStructureHelper { // If this need to be able to remove properties, we need to clean out the ones of this group.id before inserting them: - const _propertyStructure = this.#propertyStructure.getValue().filter((x) => x.containerId !== groupId); + const _propertyStructure = this.#propertyStructure.getValue().filter((x) => x.container?.id !== groupId); properties?.forEach((property) => { if (!_propertyStructure.find((x) => x.alias === property.alias)) { @@ -125,7 +123,7 @@ export class UmbContentTypePropertyStructureHelper) { + async partialUpdateProperty(propertyKey?: string, partialUpdate?: Partial) { await this.#init; if (!this.#structure || !propertyKey || !partialUpdate) return; return await this.#structure.updateProperty(null, propertyKey, partialUpdate); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/content-type-structure-manager.class.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/content-type-structure-manager.class.ts index d0229013bb..32013d5e27 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/content-type-structure-manager.class.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/content-type-structure-manager.class.ts @@ -1,14 +1,14 @@ -import type { UmbContentTypeModel } from './types.js'; +import type { + UmbContentTypeModel, + UmbPropertyContainerTypes, + UmbPropertyTypeContainerModel, + UmbPropertyTypeModel, + UmbPropertyTypeScaffoldModel, +} from './types.js'; import type { UmbDetailRepository } from '@umbraco-cms/backoffice/repository'; import { UmbId } from '@umbraco-cms/backoffice/id'; -import type { - DocumentTypePropertyTypeResponseModel, - PropertyTypeContainerModelBaseModel, - PropertyTypeModelBaseModel, -} from '@umbraco-cms/backoffice/backend-api'; import type { UmbControllerHost, UmbController } from '@umbraco-cms/backoffice/controller-api'; -import type { - MappingFunction} from '@umbraco-cms/backoffice/observable-api'; +import type { MappingFunction } from '@umbraco-cms/backoffice/observable-api'; import { UmbArrayState, partialUpdateFrozenArray, @@ -18,10 +18,6 @@ import { import { incrementString } from '@umbraco-cms/backoffice/utils'; import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; -export type PropertyContainerTypes = 'Group' | 'Tab'; - -// TODO: get this type from the repository, or use some generic type. -// TODO: Make this a controller on its own: export class UmbContentTypePropertyStructureManager extends UmbBaseController { #init!: Promise; @@ -35,8 +31,10 @@ export class UmbContentTypePropertyStructureManager x.containers ?? []), ); - #containers: UmbArrayState = - new UmbArrayState([], (x) => x.id); + #containers: UmbArrayState = new UmbArrayState( + [], + (x) => x.id, + ); constructor(host: UmbControllerHost, typeRepository: UmbDetailRepository) { super(host); @@ -160,7 +158,7 @@ export class UmbContentTypePropertyStructureManager { - this._ensureType(composition.id); + this._ensureType(composition.contentType.unique); }); } @@ -183,15 +181,15 @@ export class UmbContentTypePropertyStructureManager, + partialUpdate: Partial, ) { await this.#init; contentTypeUnique = contentTypeUnique ?? this.#ownerContentTypeUnique!; @@ -278,13 +276,12 @@ export class UmbContentTypePropertyStructureManager = [ ...(this.#contentTypes.getValue().find((x) => x.unique === contentTypeUnique)?.properties ?? []), ]; + properties.push(property); // eslint-disable-next-line @typescript-eslint/ban-ts-comment @@ -321,7 +319,7 @@ export class UmbContentTypePropertyStructureManager, + partialUpdate: Partial, ) { await this.#init; contentTypeUnique = contentTypeUnique ?? this.#ownerContentTypeUnique!; @@ -429,7 +427,7 @@ export class UmbContentTypePropertyStructureManager { return ( docTypes.find((docType) => { - return docType.properties?.find((property) => property.containerId === containerId); + return docType.properties?.find((property) => property.container?.id === containerId); }) !== undefined ); }); @@ -441,10 +439,10 @@ export class UmbContentTypePropertyStructureManager { - const props: DocumentTypePropertyTypeResponseModel[] = []; + const props: UmbPropertyTypeModel[] = []; docTypes.forEach((docType) => { docType.properties?.forEach((property) => { - if (property.containerId === containerId) { + if (property.container?.id === containerId) { props.push(property); } }); @@ -453,45 +451,44 @@ export class UmbContentTypePropertyStructureManager { - return data.filter((x) => x.parentId === null && x.type === containerType); + return data.filter((x) => x.parent === null && x.type === containerType); }); } - getRootContainers(containerType: PropertyContainerTypes) { - return this.#containers.getValue().filter((x) => x.parentId === null && x.type === containerType); + getRootContainers(containerType: UmbPropertyContainerTypes) { + return this.#containers.getValue().filter((x) => x.parent === null && x.type === containerType); } - hasRootContainers(containerType: PropertyContainerTypes) { + hasRootContainers(containerType: UmbPropertyContainerTypes) { return this.#containers.asObservablePart((data) => { - return data.filter((x) => x.parentId === null && x.type === containerType).length > 0; + return data.filter((x) => x.parent === null && x.type === containerType).length > 0; }); } - ownerContainersOf(containerType: PropertyContainerTypes) { + ownerContainersOf(containerType: UmbPropertyContainerTypes) { return this.ownerContentTypeObservablePart((x) => x.containers?.filter((x) => x.type === containerType) ?? []); } - getOwnerContainers(containerType: PropertyContainerTypes, parentId: string | null = null) { - return this.getOwnerContentType()?.containers?.filter((x) => x.parentId === parentId && x.type === containerType); + getOwnerContainers(containerType: UmbPropertyContainerTypes, parentId: string | null = null) { + return this.getOwnerContentType()?.containers?.filter((x) => + parentId ? x.parent?.id === parentId : x.parent === null && x.type === containerType, + ); } isOwnerContainer(containerId: string) { return this.getOwnerContentType()?.containers?.filter((x) => x.id === containerId); } - containersOfParentKey( - parentId: PropertyTypeContainerModelBaseModel['parentId'], - containerType: PropertyContainerTypes, - ) { + containersOfParentKey(parentId: string, containerType: UmbPropertyContainerTypes) { return this.#containers.asObservablePart((data) => { - return data.filter((x) => x.parentId === parentId && x.type === containerType); + return data.filter((x) => x.parent?.id === parentId && x.type === containerType); }); } // In future this might need to take parentName(parentId lookup) into account as well? otherwise containers that share same name and type will always be merged, but their position might be different and they should not be merged. - containersByNameAndType(name: string, containerType: PropertyContainerTypes) { + containersByNameAndType(name: string, containerType: UmbPropertyContainerTypes) { return this.#containers.asObservablePart((data) => { return data.filter((x) => x.name === name && x.type === containerType); }); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/index.ts index a8e7305030..f2eddad99c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/index.ts @@ -3,3 +3,4 @@ export * from './content-type-property-structure-helper.class.js'; export * from './content-type-structure-manager.class.js'; export * from './types.js'; export * from './components/index.js'; +export * from './structure/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/structure/content-type-structure-data-source.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/structure/content-type-structure-data-source.interface.ts new file mode 100644 index 0000000000..9a631ef06b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/structure/content-type-structure-data-source.interface.ts @@ -0,0 +1,10 @@ +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import type { DataSourceResponse, UmbPagedModel } from '@umbraco-cms/backoffice/repository'; + +export interface UmbContentTypeStructureDataSourceConstructor { + new (host: UmbControllerHost): UmbContentTypeStructureDataSource; +} + +export interface UmbContentTypeStructureDataSource { + getAllowedChildrenOf(unique: string | null): Promise>>; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/structure/content-type-structure-repository-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/structure/content-type-structure-repository-base.ts new file mode 100644 index 0000000000..bfc2841202 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/structure/content-type-structure-repository-base.ts @@ -0,0 +1,29 @@ +import type { UmbContentTypeStructureRepository } from './content-type-structure-repository.interface.js'; +import type { + UmbContentTypeStructureDataSource, + UmbContentTypeStructureDataSourceConstructor, +} from './content-type-structure-data-source.interface.js'; +import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; + +export abstract class UmbContentTypeStructureRepositoryBase + extends UmbRepositoryBase + implements UmbContentTypeStructureRepository +{ + #structureSource: UmbContentTypeStructureDataSource; + + constructor(host: UmbControllerHost, structureSource: UmbContentTypeStructureDataSourceConstructor) { + super(host); + this.#structureSource = new structureSource(host); + } + + /** + * Returns a promise with the allowed children of a content type + * @param {string} unique + * @return {*} + * @memberof UmbContentTypeStructureRepositoryBase + */ + requestAllowedChildrenOf(unique: string | null) { + return this.#structureSource.getAllowedChildrenOf(unique); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/structure/content-type-structure-repository.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/structure/content-type-structure-repository.interface.ts new file mode 100644 index 0000000000..1da863e86c --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/structure/content-type-structure-repository.interface.ts @@ -0,0 +1,5 @@ +import type { DataSourceResponse, UmbPagedModel } from '@umbraco-cms/backoffice/repository'; + +export interface UmbContentTypeStructureRepository { + requestAllowedChildrenOf(unique: string): Promise>>; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/structure/content-type-structure-server-data-source-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/structure/content-type-structure-server-data-source-base.ts new file mode 100644 index 0000000000..8fe1c98834 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/structure/content-type-structure-server-data-source-base.ts @@ -0,0 +1,54 @@ +import type { UmbPagedModel } from '../../repository/data-source/types.js'; +import type { UmbContentTypeStructureDataSource } from './content-type-structure-data-source.interface.js'; +import type { AllowedContentTypeModel, ItemResponseModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; + +export interface UmbContentTypeStructureServerDataSourceBaseArgs< + ServerItemType extends ItemResponseModelBaseModel, + ClientItemType extends { unique: string }, +> { + getAllowedChildrenOf: (unique: string | null) => Promise>; + mapper: (item: ServerItemType) => ClientItemType; +} + +export abstract class UmbContentTypeStructureServerDataSourceBase< + ServerItemType extends AllowedContentTypeModel, + ClientItemType extends { unique: string }, +> implements UmbContentTypeStructureDataSource +{ + #host; + #getAllowedChildrenOf; + #mapper; + + /** + * Creates an instance of UmbContentTypeStructureServerDataSourceBase. + * @param {UmbControllerHost} host + * @memberof UmbItemServerDataSourceBase + */ + constructor( + host: UmbControllerHost, + args: UmbContentTypeStructureServerDataSourceBaseArgs, + ) { + this.#host = host; + this.#getAllowedChildrenOf = args.getAllowedChildrenOf; + this.#mapper = args.mapper; + } + + /** + * Returns a promise with the allowed content types for the given unique + * @param {string} unique + * @return {*} + * @memberof UmbContentTypeStructureServerDataSourceBase + */ + async getAllowedChildrenOf(unique: string | null) { + const { data, error } = await tryExecuteAndNotify(this.#host, this.#getAllowedChildrenOf(unique)); + + if (data) { + const items = data.items.map((item) => this.#mapper(item)); + return { data: { items, total: data.total } }; + } + + return { error }; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/structure/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/structure/index.ts new file mode 100644 index 0000000000..d1a5aa8c6b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/structure/index.ts @@ -0,0 +1,4 @@ +export * from './content-type-structure-repository-base.js'; +export * from './content-type-structure-repository.interface.js'; +export * from './content-type-structure-server-data-source-base.js'; +export * from './content-type-structure-data-source.interface.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/types.ts index 45d128666c..0c953ace34 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/types.ts @@ -1,10 +1,18 @@ import type { - ContentTypeCompositionModel, - ContentTypeSortModel, - PropertyTypeContainerModelBaseModel, + CompositionTypeModel, PropertyTypeModelBaseModel, + ReferenceByIdModel, } from '@umbraco-cms/backoffice/backend-api'; +export type UmbPropertyContainerTypes = 'Group' | 'Tab'; +export interface UmbPropertyTypeContainerModel { + id: string; + parent?: ReferenceByIdModel | null; + name?: string | null; + type: UmbPropertyContainerTypes; + sortOrder: number; +} + export interface UmbContentTypeModel { unique: string; parentUnique: string | null; @@ -17,8 +25,26 @@ export interface UmbContentTypeModel { variesBySegment: boolean; isElement: boolean; // TODO: investigate if we need our own model for these - properties: Array; - containers: Array; - allowedContentTypes: Array; - compositions: Array; + properties: Array; + containers: Array; + allowedContentTypes: Array; + compositions: Array; +} + +export interface UmbPropertyTypeScaffoldModel extends Omit { + dataType?: UmbPropertyTypeModel['dataType']; +} + +export interface UmbPropertyTypeModel extends Omit { + dataType: { unique: string }; +} + +export interface UmbContentTypeSortModel { + contentType: { unique: string }; + sortOrder: number; +} + +export interface UmbContentTypeCompositionModel { + contentType: { unique: string }; + compositionType: CompositionTypeModel; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/menu-item/manifests.ts index dab53b42ad..232e6e99d3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/menu-item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/menu-item/manifests.ts @@ -8,7 +8,6 @@ const menuItem: ManifestTypes = { weight: 600, meta: { label: 'Data Types', - icon: 'icon-folder', entityType: 'data-type', treeAlias: 'Umb.Tree.DataTypes', menus: ['Umb.Menu.Settings'], diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/modals/data-type-picker-flow/data-type-picker-flow-data-type-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/modals/data-type-picker-flow/data-type-picker-flow-data-type-picker-modal.element.ts index eee0bfad33..eb853a72f4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/modals/data-type-picker-flow/data-type-picker-flow-data-type-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/modals/data-type-picker-flow/data-type-picker-flow-data-type-picker-modal.element.ts @@ -5,10 +5,9 @@ import { css, html, customElement, state, repeat, when } from '@umbraco-cms/back import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import type { UmbDataTypePickerFlowDataTypePickerModalData, - UmbDataTypePickerFlowDataTypePickerModalValue} from '@umbraco-cms/backoffice/modal'; -import { - UmbModalBaseElement, + UmbDataTypePickerFlowDataTypePickerModalValue, } from '@umbraco-cms/backoffice/modal'; +import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; @customElement('umb-data-type-picker-flow-data-type-picker-modal') export class UmbDataTypePickerFlowDataTypePickerModalElement extends UmbModalBaseElement< diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/item/data-type-item.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/item/data-type-item.repository.ts index 4879b439f1..2e5ab9fb07 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/item/data-type-item.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/item/data-type-item.repository.ts @@ -1,10 +1,10 @@ -import { UmbDataTypeItemServerDataSource } from './data-type-item.server.data.js'; +import { UmbDataTypeItemServerDataSource } from './data-type-item.server.data-source.js'; import { UMB_DATA_TYPE_ITEM_STORE_CONTEXT } from './data-type-item.store.js'; +import type { UmbDataTypeItemModel } from './types.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbItemRepositoryBase } from '@umbraco-cms/backoffice/repository'; -import type { DataTypeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; -export class UmbDataTypeItemRepository extends UmbItemRepositoryBase { +export class UmbDataTypeItemRepository extends UmbItemRepositoryBase { constructor(host: UmbControllerHost) { super(host, UmbDataTypeItemServerDataSource, UMB_DATA_TYPE_ITEM_STORE_CONTEXT); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/item/data-type-item.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/item/data-type-item.server.data-source.ts new file mode 100644 index 0000000000..9943a59a86 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/item/data-type-item.server.data-source.ts @@ -0,0 +1,39 @@ +import type { UmbDataTypeItemModel } from './types.js'; +import { UmbItemServerDataSourceBase } from '@umbraco-cms/backoffice/repository'; +import type { DataTypeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import { DataTypeResource } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; + +/** + * A server data source for Data Type items + * @export + * @class UmbDataTypeItemServerDataSource + * @implements {DocumentTreeDataSource} + */ +export class UmbDataTypeItemServerDataSource extends UmbItemServerDataSourceBase< + DataTypeItemResponseModel, + UmbDataTypeItemModel +> { + /** + * Creates an instance of UmbDataTypeItemServerDataSource. + * @param {UmbControllerHost} host + * @memberof UmbDataTypeItemServerDataSource + */ + constructor(host: UmbControllerHost) { + super(host, { + getItems, + mapper, + }); + } +} + +/* eslint-disable local-rules/no-direct-api-import */ +const getItems = (uniques: Array) => DataTypeResource.getDataTypeItem({ id: uniques }); + +const mapper = (item: DataTypeItemResponseModel): UmbDataTypeItemModel => { + return { + unique: item.id, + name: item.name, + propertyEditorUiAlias: item.editorUiAlias || '', // TODO: why can this be undefined or null on the server? + }; +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/item/data-type-item.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/item/data-type-item.server.data.ts deleted file mode 100644 index 305afb247f..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/item/data-type-item.server.data.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type { UmbItemDataSource } from '@umbraco-cms/backoffice/repository'; -import type { DataTypeItemResponseModel} from '@umbraco-cms/backoffice/backend-api'; -import { DataTypeResource } from '@umbraco-cms/backoffice/backend-api'; -import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; - -/** - * A data source for Data Type items that fetches data from the server - * @export - * @class UmbDataTypeItemServerDataSource - * @implements {DocumentTreeDataSource} - */ -export class UmbDataTypeItemServerDataSource implements UmbItemDataSource { - #host: UmbControllerHost; - - /** - * Creates an instance of UmbDataTypeItemServerDataSource. - * @param {UmbControllerHost} host - * @memberof UmbDataTypeItemServerDataSource - */ - constructor(host: UmbControllerHost) { - this.#host = host; - } - - /** - * Fetches the items for the given ids from the server - * @param {Array} ids - * @return {*} - * @memberof UmbDataTypeItemServerDataSource - */ - async getItems(ids: Array) { - if (!ids) throw new Error('Ids are missing'); - return tryExecuteAndNotify( - this.#host, - DataTypeResource.getDataTypeItem({ - id: ids, - }), - ); - } -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/item/data-type-item.store.ts b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/item/data-type-item.store.ts index d2cc030fd8..83e3e767cd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/item/data-type-item.store.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/item/data-type-item.store.ts @@ -1,7 +1,7 @@ -import type { DataTypeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbDataTypeItemModel } from './types.js'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { UmbEntityItemStore } from '@umbraco-cms/backoffice/store'; +import { UmbItemStoreBase } from '@umbraco-cms/backoffice/store'; /** * @export @@ -10,7 +10,7 @@ import { UmbEntityItemStore } from '@umbraco-cms/backoffice/store'; * @description - Data Store for Data Type items */ -export class UmbDataTypeItemStore extends UmbEntityItemStore { +export class UmbDataTypeItemStore extends UmbItemStoreBase { /** * Creates an instance of UmbDataTypeItemStore. * @param {UmbControllerHost} host diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/item/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/item/index.ts index 09da119f87..920fe6202c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/item/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/item/index.ts @@ -1,2 +1,3 @@ export { UmbDataTypeItemRepository } from './data-type-item.repository.js'; export { UMB_DATA_TYPE_ITEM_REPOSITORY_ALIAS as DATA_TYPE_ITEM_REPOSITORY_ALIAS } from './manifests.js'; +export type { UmbDataTypeItemModel } from './types.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/item/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/item/types.ts new file mode 100644 index 0000000000..d798ac80cc --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/repository/item/types.ts @@ -0,0 +1,5 @@ +export interface UmbDataTypeItemModel { + unique: string; + name: string; + propertyEditorUiAlias: string; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/tree/data-type-tree.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/tree/data-type-tree.repository.ts index 3c3f2495df..83645d8609 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/tree/data-type-tree.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/tree/data-type-tree.repository.ts @@ -19,9 +19,7 @@ export class UmbDataTypeTreeRepository unique: null, entityType: UMB_DATA_TYPE_ROOT_ENTITY_TYPE, name: 'Data Types', - icon: 'icon-folder', hasChildren: true, - isContainer: false, isFolder: true, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/tree/data-type-tree.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/tree/data-type-tree.server.data-source.ts index 634b7d300b..7de389a906 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/tree/data-type-tree.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/tree/data-type-tree.server.data-source.ts @@ -45,11 +45,10 @@ const getChildrenOf = (parentUnique: string | null) => { const mapper = (item: DataTypeTreeItemResponseModel): UmbDataTypeTreeItemModel => { return { unique: item.id, - parentUnique: item.parentId || null, + parentUnique: item.parent?.id || null, name: item.name, entityType: item.isFolder ? 'data-type-folder' : 'data-type', isFolder: item.isFolder, - isContainer: item.isContainer, hasChildren: item.hasChildren, }; }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/tree/data-type-tree.store.ts b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/tree/data-type-tree.store.ts index f2d4e9967a..1984a64eed 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/tree/data-type-tree.store.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/tree/data-type-tree.store.ts @@ -38,7 +38,6 @@ export class UmbDataTypeTreeStore extends UmbUniqueTreeStore { name: item.name, entityType: item.entityType, isFolder: false, - isContainer: false, hasChildren: false, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/tree/folder/data-type-folder.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/tree/folder/data-type-folder.repository.ts index c34bb1c328..250ad3a1a0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/data-type/tree/folder/data-type-folder.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/data-type/tree/folder/data-type-folder.repository.ts @@ -3,7 +3,7 @@ import { UMB_DATA_TYPE_TREE_STORE_CONTEXT } from '../../tree/index.js'; import { UmbDataTypeFolderServerDataSource } from './data-type-folder.server.data-source.js'; import type { UmbDataTypeFolderTreeItemModel } from './types.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import type { UmbFolderModel} from '@umbraco-cms/backoffice/tree'; +import type { UmbFolderModel } from '@umbraco-cms/backoffice/tree'; import { UmbFolderRepositoryBase } from '@umbraco-cms/backoffice/tree'; export class UmbDataTypeFolderRepository extends UmbFolderRepositoryBase { @@ -18,7 +18,6 @@ const folderToDataTypeTreeItemMapper = (folder: UmbFolderModel): UmbDataTypeFold parentUnique: folder.parentUnique, name: folder.name, entityType: UMB_DATA_TYPE_FOLDER_ENTITY_TYPE, - isContainer: false, hasChildren: false, isFolder: true, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/manifests.ts index 4931a9977e..de68f3e1cd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/manifests.ts @@ -1,4 +1,5 @@ -import { manifest as switchConditionManifest } from './switch.condition.js'; +import { manifest as menuAliasConditionManifest } from './menu-alias.condition.js'; import { manifest as sectionAliasConditionManifest } from './section-alias.condition.js'; +import { manifest as switchConditionManifest } from './switch.condition.js'; -export const manifests = [switchConditionManifest, sectionAliasConditionManifest]; +export const manifests = [menuAliasConditionManifest, sectionAliasConditionManifest, switchConditionManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts index 74dc170c54..24801fd5e7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts @@ -2,6 +2,7 @@ import type { CollectionAliasConditionConfig } from '../../collection/collection import type { SectionAliasConditionConfig } from './section-alias.condition.js'; import type { SwitchConditionConfig } from './switch.condition.js'; import type { UserPermissionConditionConfig } from '@umbraco-cms/backoffice/user-permission'; +import type { BlockWorkspaceHasSettingsConditionConfig } from '@umbraco-cms/backoffice/block'; import type { WorkspaceAliasConditionConfig, WorkspaceEntityTypeConditionConfig, @@ -16,6 +17,7 @@ export type ConditionTypes = | CollectionAliasConditionConfig | SectionAliasConditionConfig | WorkspaceAliasConditionConfig + | BlockWorkspaceHasSettingsConditionConfig | WorkspaceEntityTypeConditionConfig | SwitchConditionConfig | UserPermissionConditionConfig diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/block-editor-custom-view.model.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/block-editor-custom-view.model.ts new file mode 100644 index 0000000000..da338c1c27 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/block-editor-custom-view.model.ts @@ -0,0 +1,6 @@ +import type { UmbPropertyEditorUiElement } from '../interfaces/index.js'; +import type { ManifestElement } from '@umbraco-cms/backoffice/extension-api'; + +export interface ManifestBlockEditorCustomView extends ManifestElement { + type: 'bockEditorCustomView'; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/index.ts index c5378f48cd..768e0f6b88 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/index.ts @@ -1,3 +1,4 @@ +import type { ManifestBlockEditorCustomView } from './block-editor-custom-view.model.js'; import type { ManifestCollection } from './collection.models.js'; import type { ManifestCollectionView } from './collection-view.model.js'; import type { ManifestDashboard } from './dashboard.model.js'; @@ -40,6 +41,7 @@ import type { ManifestEntryPoint, } from '@umbraco-cms/backoffice/extension-api'; +export type * from './block-editor-custom-view.model.js'; export type * from './collection.models.js'; export type * from './collection-action.model.js'; export type * from './collection-view.model.js'; @@ -79,6 +81,7 @@ export type * from './workspace.model.js'; export type ManifestTypes = | ManifestBundle | ManifestCondition + | ManifestBlockEditorCustomView | ManifestCollection | ManifestCollectionView | ManifestCollectionAction diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/menu-item.model.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/menu-item.model.ts index a51b08cddc..3efd308a9a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/menu-item.model.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/menu-item.model.ts @@ -8,9 +8,9 @@ export interface ManifestMenuItem extends ManifestElement { export interface MetaMenuItem { label: string; - icon: string; - entityType?: string; menus: Array; + entityType?: string; + icon?: string; } export interface ManifestMenuItemTreeKind extends ManifestMenuItem { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/index.ts index a5e6406910..58bc8ce5a7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/index.ts @@ -15,7 +15,6 @@ export * from './entity-action/index.js'; export * from './entity-bulk-action/index.js'; export * from './extension-registry/index.js'; export * from './id/index.js'; -export * from './macro/index.js'; export * from './menu/index.js'; export * from './modal/index.js'; export * from './notification/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/macro/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/macro/index.ts deleted file mode 100644 index f8f2528b5a..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/macro/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './macro.service.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/macro/macro.service.ts b/src/Umbraco.Web.UI.Client/src/packages/core/macro/macro.service.ts deleted file mode 100644 index fb94a58260..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/macro/macro.service.ts +++ /dev/null @@ -1,148 +0,0 @@ -import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; - -export interface MacroSyntaxData { - macroAlias: string; - macroParamsDictionary: { [key: string]: string }; - syntax?: string; -} - -export class UmbMacroService { - /** parses the special macro syntax like - * and returns an object with the macro alias and it's parameters - * */ - parseMacroSyntax(syntax = '') { - //This regex will match an alias of anything except characters that are quotes or new lines (for legacy reasons, when new macros are created - // their aliases are cleaned an invalid chars are stripped) - const expression = - /(<\?UMBRACO_MACRO (?:.+?)?macroAlias=["']([^"'\n\r]+?)["'][\s\S]+?)(\/>|>.*?<\/\?UMBRACO_MACRO>)/i; - const match = expression.exec(syntax); - - if (!match || match.length < 3) { - return null; - } - - const macroAlias = match[2]; - - //this will leave us with just the parameters - const paramsChunk = match[1] - .trim() - .replace(new RegExp(`UMBRACO_MACRO macroAlias=["']${macroAlias}["']`), '') - .trim(); - const paramExpression = /(\w+?)=['"]([\s\S]*?)['"]/g; - - const returnVal: MacroSyntaxData = { - macroAlias, - macroParamsDictionary: {}, - }; - - let paramMatch; - while ((paramMatch = paramExpression.exec(paramsChunk))) { - returnVal.macroParamsDictionary[paramMatch[1]] = paramMatch[2]; - } - - return returnVal; - } - - /** - * generates the syntax for inserting a macro into a rich text editor - this is the very old umbraco style syntax * - * @param {MacroSyntaxData} args an object containing the macro alias and it's parameter values - */ - generateMacroSyntax(args: MacroSyntaxData) { - let macroString = `'; - - return macroString; - } - - /** - * generates the syntax for inserting a macro into an mvc template * - * @param {object} args an object containing the macro alias and it's parameter values - */ - generateMvcSyntax(args: MacroSyntaxData) { - let macroString = `@await Umbraco.RenderMacroAsync("${args.macroAlias}"`; - let hasParams = false; - let paramString = ''; - - if (args.macroParamsDictionary) { - paramString = ', new {'; - - for (const [key, val] of Object.entries(args.macroParamsDictionary)) { - hasParams = true; - - const keyVal = `${key}="${val ? val : ''}", `; - - paramString += keyVal; - } - - //remove the last , and trailing whitespace - paramString = paramString.trimEnd().replace(/,*$/, ''); - paramString += '}'; - } - - if (hasParams) { - macroString += paramString; - } - - macroString += ')'; - - return macroString; - } - - collectValueData(macro: any, macroParams: any, renderingEngine: any) { - const macroParamsDictionary: { [key: string]: string } = {}; - const macroAlias = macro.alias; - if (!macroAlias) { - throw 'The macro object does not contain an alias'; - } - - macroParams.forEach((item: any) => { - let val = item.value; - if (item.value !== null && item.value !== undefined && typeof item.value !== 'string') { - try { - val = JSON.parse(val); - } catch (e) { - // not json - } - } - - //each value needs to be xml escaped!! since the value get's stored as an xml attribute - macroParamsDictionary[item.alias] = encodeURIComponent(val); - }); - - let syntax; - - //get the syntax based on the rendering engine - if (renderingEngine && renderingEngine.toLowerCase() === 'mvc') { - syntax = this.generateMvcSyntax({ macroAlias, macroParamsDictionary }); - } else { - syntax = this.generateMacroSyntax({ macroAlias, macroParamsDictionary }); - } - - return { - macroParamsDictionary, - macroAlias, - syntax, - } as MacroSyntaxData; - } -} - -export const UMB_MACRO_SERVICE_CONTEXT = new UmbContextToken(UmbMacroService.name); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/link-picker/link-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/link-picker/link-picker-modal.element.ts index f0fa3a54cd..50ada2ee67 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/link-picker/link-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/link-picker/link-picker-modal.element.ts @@ -4,11 +4,11 @@ import type { UUIBooleanInputEvent, UUIInputElement } from '@umbraco-cms/backoff import type { UmbLinkPickerConfig, UmbLinkPickerLink, + UmbLinkPickerLinkType, UmbLinkPickerModalData, UmbLinkPickerModalValue, } from '@umbraco-cms/backoffice/modal'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; -import { buildUdi, getKeyFromUdi } from '@umbraco-cms/backoffice/utils'; import { UMB_DOCUMENT_TREE_ALIAS } from '@umbraco-cms/backoffice/document'; @customElement('umb-link-picker-modal') @@ -57,7 +57,7 @@ export class UmbLinkPickerModalElement extends UmbModalBaseElement { (this._link as any) = value.link; - this._selectedKey = this._link?.udi ? getKeyFromUdi(this._link.udi) : undefined; + this._selectedKey = this._link?.unique ?? undefined; this._selectionConfiguration.selection = this._selectedKey ? [this._selectedKey] : []; }); } @@ -88,18 +88,18 @@ export class UmbLinkPickerModalElement extends UmbModalBaseElement this.#partialUpdateLink({ url: this._linkInput.value as string })} - ?disabled="${this._link.udi ? true : false}"> + .value="${this._link.unique ?? this._link.url ?? ''}" + @input=${() => this.#partialUpdateLink({ type: 'external', url: this._linkInput.value as string })} + ?disabled="${this._link.unique ? true : false}"> `; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/property-settings/property-settings-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/property-settings/property-settings-modal.element.ts index 059494e8b8..d973b5bbf2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/property-settings/property-settings-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/property-settings/property-settings-modal.element.ts @@ -5,17 +5,11 @@ import { import { UMB_DOCUMENT_TYPE_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/document-type'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import type { UUIBooleanInputEvent, UUIInputEvent, UUISelectEvent } from '@umbraco-cms/backoffice/external/uui'; -import type { PropertyValueMap} from '@umbraco-cms/backoffice/external/lit'; +import type { PropertyValueMap } from '@umbraco-cms/backoffice/external/lit'; import { css, html, nothing, customElement, state } from '@umbraco-cms/backoffice/external/lit'; -import type { - UmbPropertySettingsModalValue, - UmbPropertySettingsModalData} from '@umbraco-cms/backoffice/modal'; -import { - UmbModalBaseElement, -} from '@umbraco-cms/backoffice/modal'; +import type { UmbPropertySettingsModalValue, UmbPropertySettingsModalData } from '@umbraco-cms/backoffice/modal'; +import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; import { generateAlias } from '@umbraco-cms/backoffice/utils'; -import { DocumentTypeResponseModel } from '@umbraco-cms/backoffice/backend-api'; -import { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-api'; // TODO: Could base take a token to get its types?. @customElement('umb-property-settings-modal') export class UmbPropertySettingsModalElement extends UmbModalBaseElement< @@ -139,8 +133,8 @@ export class UmbPropertySettingsModalElement extends UmbModalBaseElement< } #onDataTypeIdChange(event: UUIInputEvent) { - const dataTypeId = event.target.value.toString(); - this.updateValue({ dataTypeId }); + const dataTypeUnique = event.target.value.toString(); + this.updateValue({ dataType: { unique: dataTypeUnique } }); } #onMandatoryChange(event: UUIBooleanInputEvent) { @@ -228,7 +222,11 @@ export class UmbPropertySettingsModalElement extends UmbModalBaseElement< return html`
- +
@@ -261,7 +259,7 @@ export class UmbPropertySettingsModalElement extends UmbModalBaseElement< .value=${this.value.description}>

@@ -279,7 +277,11 @@ export class UmbPropertySettingsModalElement extends UmbModalBaseElement<
- +
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/create-document-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/create-document-modal.token.ts deleted file mode 100644 index 7847cd7f5d..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/create-document-modal.token.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; - -export interface UmbCreateDocumentModalData { - id: string | null; -} - -export interface UmbCreateDocumentModalValue { - documentTypeId: string; -} - -export const UMB_CREATE_DOCUMENT_MODAL = new UmbModalToken( - 'Umb.Modal.CreateDocument', - { - modal: { - type: 'sidebar', - size: 'small', - }, - }, -); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/document-picker-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/document-picker-modal.token.ts index 54eaf9b49a..a85cfd446b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/document-picker-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/document-picker-modal.token.ts @@ -1,8 +1,8 @@ -import type { DocumentTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; import type { UmbPickerModalValue, UmbTreePickerModalData } from '@umbraco-cms/backoffice/modal'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; +import type { UmbDocumentItemModel } from '@umbraco-cms/backoffice/document'; -export type UmbDocumentPickerModalData = UmbTreePickerModalData; +export type UmbDocumentPickerModalData = UmbTreePickerModalData; export type UmbDocumentPickerModalValue = UmbPickerModalValue; export const UMB_DOCUMENT_PICKER_MODAL = new UmbModalToken( diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts index 2b50aea71b..38d57f9d6f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/index.ts @@ -2,7 +2,6 @@ export * from './change-password-modal.token.js'; export * from './code-editor-modal.token.js'; export * from './confirm-modal.token.js'; export * from './create-dictionary-modal.token.js'; -export * from './create-document-modal.token.js'; export * from './create-user-modal.token.js'; export * from './create-user-success-modal.token.js'; export * from './current-user-modal.token.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/link-picker-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/link-picker-modal.token.ts index 7c3b0f935d..8a2f3286c2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/link-picker-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/link-picker-modal.token.ts @@ -15,10 +15,13 @@ export interface UmbLinkPickerLink { queryString?: string | null; target?: string | null; trashed?: boolean | null; - udi?: string | null; + type?: UmbLinkPickerLinkType | null; + unique?: string | null; url?: string | null; } +export type UmbLinkPickerLinkType = 'document' | 'external' | 'media'; + // TODO: investigate: this looks more like a property editor configuration. Is this used in the correct way? export interface UmbLinkPickerConfig { hideAnchor?: boolean; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/property-settings-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/property-settings-modal.token.ts index 0c2f6dfaa5..b7b10fe12d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/property-settings-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/property-settings-modal.token.ts @@ -1,10 +1,10 @@ -import type { PropertyTypeModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbPropertyTypeModel, UmbPropertyTypeScaffoldModel } from '@umbraco-cms/backoffice/content-type'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export type UmbPropertySettingsModalData = { documentTypeId: string; }; -export type UmbPropertySettingsModalValue = PropertyTypeModelBaseModel; +export type UmbPropertySettingsModalValue = UmbPropertyTypeModel | UmbPropertyTypeScaffoldModel; export const UMB_PROPERTY_SETTINGS_MODAL = new UmbModalToken< UmbPropertySettingsModalData, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tiny-mce/plugins/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tiny-mce/plugins/manifests.ts index f4d4718e08..c714dcbde2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tiny-mce/plugins/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tiny-mce/plugins/manifests.ts @@ -66,21 +66,6 @@ const pluginManifests: Array = [ ], }, }, - { - type: 'tinyMcePlugin', - alias: 'Umb.TinyMcePlugin.MacroPicker', - name: 'Macro Picker TinyMCE Plugin', - js: () => import('./tiny-mce-macropicker.plugin.js'), - meta: { - toolbar: [ - { - alias: 'umbmacro', - label: 'Macro', - icon: 'preferences', - }, - ], - }, - }, ]; export const manifests = [...pluginManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tiny-mce/plugins/tiny-mce-linkpicker.plugin.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tiny-mce/plugins/tiny-mce-linkpicker.plugin.ts index 2a3ada2a78..b814176385 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tiny-mce/plugins/tiny-mce-linkpicker.plugin.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tiny-mce/plugins/tiny-mce-linkpicker.plugin.ts @@ -85,7 +85,7 @@ export default class UmbTinyMceLinkPickerPlugin extends UmbTinyMcePluginBase { if (this.#anchorElement.href.includes('localLink:')) { const href = this.#anchorElement.getAttribute('href')!; - currentTarget.udi = href.split('localLink:')[1].slice(0, -1); + currentTarget.unique = href.split('localLink:')[1].slice(0, -1); } else if (this.#anchorElement.host.length) { currentTarget.url = this.#anchorElement.protocol ? this.#anchorElement.protocol + '//' : undefined; currentTarget.url += this.#anchorElement.host + this.#anchorElement.pathname; @@ -193,14 +193,14 @@ export default class UmbTinyMceLinkPickerPlugin extends UmbTinyMcePluginBase { } } - if (!this.#linkPickerData?.link.url && !this.#linkPickerData?.link.queryString && !this.#linkPickerData?.link.udi) { + if (!this.#linkPickerData?.link.url && !this.#linkPickerData?.link.queryString && !this.#linkPickerData?.link.unique) { this.editor.execCommand('unlink'); return; } //if we have an id, it must be a locallink:id - if (this.#linkPickerData?.link.udi) { - this.#linkPickerData.link.url = '/{localLink:' + this.#linkPickerData.link.udi + '}'; + if (this.#linkPickerData?.link.unique) { + this.#linkPickerData.link.url = '/{localLink:' + this.#linkPickerData.link.unique + '}'; this.#insertLink(); return; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tiny-mce/plugins/tiny-mce-macropicker.plugin.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tiny-mce/plugins/tiny-mce-macropicker.plugin.ts deleted file mode 100644 index 9413c42e17..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tiny-mce/plugins/tiny-mce-macropicker.plugin.ts +++ /dev/null @@ -1,210 +0,0 @@ -import type { MacroSyntaxData} from '@umbraco-cms/backoffice/macro'; -import { UmbMacroService } from '@umbraco-cms/backoffice/macro'; -import type { TinyMcePluginArguments} from '@umbraco-cms/backoffice/components'; -import { UmbTinyMcePluginBase } from '@umbraco-cms/backoffice/components'; -import type { UmbModalManagerContext } from '@umbraco-cms/backoffice/modal'; -import { UMB_CONFIRM_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; -import type { AstNode } from '@umbraco-cms/backoffice/external/tinymce'; - -interface DialogData { - richTextEditor: boolean; - macroData?: MacroSyntaxData | null; - activeMacroElement?: HTMLElement; -} - -// TODO => This is a quick transplant of the existing macro plugin - needs to be finished, and need to -// determine how to replicate the existing macro service -export default class UmbTinyMceMacroPickerPlugin extends UmbTinyMcePluginBase { - #macroService = new UmbMacroService(); - - #modalContext?: UmbModalManagerContext; - - constructor(args: TinyMcePluginArguments) { - super(args); - - this.consumeContext(UMB_MODAL_MANAGER_CONTEXT, (modalContext) => { - this.#modalContext = modalContext; - }); - - /** Adds custom rules for the macro plugin and custom serialization */ - this.editor.on('preInit', () => { - //this is requires so that we tell the serializer that a 'div' is actually allowed in the root, - // otherwise the cleanup will strip it out - this.editor.serializer.addRules('div'); - - /** This checks if the div is a macro container, if so, checks if its wrapped in a p tag and then unwraps it (removes p tag) */ - this.editor.serializer.addNodeFilter('div', (nodes: Array) => { - for (let i = 0; i < nodes.length; i++) { - if (nodes[i].attr('class') === 'umb-macro-holder' && nodes[i].parent?.name.toLowerCase() === 'p') { - nodes[i].parent?.unwrap(); - } - } - }); - }); - - /** when the contents load we need to find any macros declared and load in their content */ - this.editor.on('SetContent', () => { - //get all macro divs and load their content - this.editor.dom.select('.umb-macro-holder.mceNonEditable').forEach((macroElement: HTMLElement) => { - this.#loadMacroContent(macroElement as HTMLDivElement, null); - }); - }); - - /** Adds the button instance */ - this.editor.ui.registry.addButton('umbmacro', { - icon: 'preferences', - tooltip: 'Insert macro', - - /** The insert macro button click event handler */ - onAction: () => { - let dialogData: DialogData = { - //flag for use in rte so we only show macros flagged for the editor - richTextEditor: true, - }; - - //when we click we could have a macro already selected and in that case we'll want to edit the current parameters - //so we'll need to extract them and submit them to the dialog. - const activeMacroElement = this.#getRealMacroElem(); - if (activeMacroElement) { - //we have a macro selected so we'll need to parse it's alias and parameters - const comment = Array.from(activeMacroElement.childNodes).find((x) => x.nodeType === 8); - if (!comment) { - throw 'Cannot parse the current macro, the syntax in the editor is invalid'; - } - - const syntax = comment.textContent?.trim(); - const parsed = this.#macroService?.parseMacroSyntax(syntax); - - dialogData = { - richTextEditor: false, - macroData: parsed, - activeMacroElement, //pass the active element along so we can retrieve it later - }; - } - - this.#showMacroPicker(dialogData); - }, - }); - } - - /** loads in the macro content async from the server */ - #loadMacroContent(macroDiv?: HTMLDivElement, macroData?: MacroSyntaxData | null) { - //if we don't have the macroData, then we'll need to parse it from the macro div - if (!macroData && macroDiv) { - const comment = Array.from(macroDiv.childNodes).find((x) => x.nodeType === 8); - - if (!comment) { - throw 'Cannot parse the current macro, the syntax in the editor is invalid'; - } - - const syntax = comment.textContent?.trim(); - const parsed = this.#macroService?.parseMacroSyntax(syntax); - macroData = parsed; - } - - //show the throbber - macroDiv?.classList.add('loading'); - - // Add the contenteditable="false" attribute - // As just the CSS class of .mceNonEditable is not working by itself?! - macroDiv?.setAttribute('contenteditable', 'false'); - - // TODO => macro data service? - // const contentId = $routeParams.id; - - // //need to wrap in safe apply since this might be occuring outside of angular - // angularHelper.safeApply($rootScope, function () { - // tryExecuteAndNotify(this, macroResource - // .getMacroResultAsHtmlForEditor(macroData.macroAlias, contentId, macroData.macroParamsDictionary)) - // .then(function (htmlResult) { - // $macroDiv.removeClass('loading'); - // htmlResult = htmlResult.trim(); - // if (htmlResult !== '') { - // const wasDirty = editor.isDirty(); - // const $ins = macroDiv?.querySelector('ins'); - // $ins.html(htmlResult); - // if (!wasDirty) { - // editor.undoManager.clear(); - // } - // } - // }); - // }); - } - - #insertInEditor(macroObject: MacroSyntaxData, activeMacroElement?: HTMLElement) { - //Important note: the TinyMce plugin "noneditable" is used here so that the macro cannot be edited, - // for this to work the mceNonEditable class needs to come last and we also need to use the attribute contenteditable = false - // (even though all the docs and examples say that is not necessary) - - //put the macro syntax in comments, we will parse this out on the server side to be used - //for persisting. - const macroSyntaxComment = ``; - //create an id class for this element so we can re-select it after inserting - const uniqueId = 'umb-macro-' + this.editor.dom.uniqueId(); - let macroDiv = this.editor.dom.create( - 'div', - { - class: `umb-macro-holder ${macroObject.macroAlias} ${uniqueId} mceNonEditable`, - contenteditable: 'false', - }, - `${macroSyntaxComment}Macro alias: ${macroObject.macroAlias}`, - ); - - //if there's an activeMacroElement then replace it, otherwise set the contents of the selected node - if (activeMacroElement) { - activeMacroElement.replaceWith(macroDiv); //directly replaces the html node - } else { - this.editor.selection.setNode(macroDiv); - } - - macroDiv = this.editor.dom.select('div.umb-macro-holder.' + uniqueId)[0] as HTMLDivElement; - this.editor.setDirty(true); - - //async load the macro content - this.#loadMacroContent(macroDiv, macroObject); - } - - /** - * Because the macro got wrapped in a P tag because of the way 'enter' works in older versions of Umbraco, this - * method will return the macro element if not wrapped in a p, or the p if the macro - * element is the only one inside of it even if we are deep inside an element inside the macro - */ - #getRealMacroElem() { - // Ask the editor for the currently selected element - const element = this.editor?.selection.getNode() as HTMLElement; - if (!element) { - return null; - } - - const e = element.closest('.umb-macro-holder'); - if (!e || e === null) return null; - - if (e.parentNode?.nodeName === 'P') { - //now check if we're the only element - if (element.parentNode?.childNodes.length === 1) { - return e.parentNode as HTMLElement; - } - } - - return e as HTMLElement; - } - - // TODO => depends on macro picker, which doesn't exist, just showing a generic modal for now - async #showMacroPicker(dialogData: DialogData) { - const modalHandler = this.#modalContext?.open(UMB_CONFIRM_MODAL, { - data: { - headline: 'Macro picker', - content: 'Yet to be implemented', - }, - }); - - if (!modalHandler) return; - - const result = await modalHandler.onSubmit(); - if (!result) return; - - // TODO => object here should be the response from the modal - this.#insertInEditor({} as MacroSyntaxData, dialogData.activeMacroElement); - this.editor.dispatch('Change'); - } -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tiny-mce/property-editor-ui-tiny-mce.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tiny-mce/property-editor-ui-tiny-mce.stories.ts index b7671b7cde..a9d56a33d2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tiny-mce/property-editor-ui-tiny-mce.stories.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/tiny-mce/property-editor-ui-tiny-mce.stories.ts @@ -39,7 +39,6 @@ const config = new UmbPropertyEditorConfigCollection([ 'anchor', 'table', 'umbmediapicker', - 'umbmacro', 'umbembeddialog', ], }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/repository/data-source/collection-data-source.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/repository/data-source/collection-data-source.interface.ts index 8b592ef855..ab098ed14b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/repository/data-source/collection-data-source.interface.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/repository/data-source/collection-data-source.interface.ts @@ -1,6 +1,6 @@ import type { DataSourceResponse } from '../index.js'; -import type { UmbPagedData } from './types.js'; +import type { UmbPagedModel } from './types.js'; export interface UmbCollectionDataSource { - getCollection(filter: FilterType): Promise>>; + getCollection(filter: FilterType): Promise>>; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/repository/data-source/extend-data-source-paged-response-data.function.ts b/src/Umbraco.Web.UI.Client/src/packages/core/repository/data-source/extend-data-source-paged-response-data.function.ts index 43493a49ec..e3f7bfcc61 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/repository/data-source/extend-data-source-paged-response-data.function.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/repository/data-source/extend-data-source-paged-response-data.function.ts @@ -1,13 +1,13 @@ -import type { DataSourceResponse, UmbPagedData } from '../index.js'; +import type { DataSourceResponse, UmbPagedModel } from '../index.js'; import type { Diff } from '@umbraco-cms/backoffice/utils'; /** * This function extends the data set of a paged DataSourceResponse. * Provide the desired type as a generic type parameter. * This will require the appendData argument to fill in the missing properties of the items. - * @param response {DataSourceResponse>} + * @param response {DataSourceResponse>} * @param appendData {object} Additional properties to append to the data set. - * @returns {DataSourceResponse>} + * @returns {DataSourceResponse>} * * @example * @@ -25,10 +25,10 @@ export function extendDataSourcePagedResponseData< // Maybe this Omit<..., "$ype"> can be removed, but for now it kept showing up as a difference, though its not a difference on the two types. ToType = IncomingDataType & ExtendedDataType, >( - response: DataSourceResponse>, + response: DataSourceResponse>, appendData: MissingPropsType, -): DataSourceResponse> { - if (response.data === undefined) return response as unknown as DataSourceResponse>; +): DataSourceResponse> { + if (response.data === undefined) return response as unknown as DataSourceResponse>; return { ...response, data: { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/repository/data-source/extend-data-source-paged-response-data.test.ts b/src/Umbraco.Web.UI.Client/src/packages/core/repository/data-source/extend-data-source-paged-response-data.test.ts index 61503b42ad..533f637da3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/repository/data-source/extend-data-source-paged-response-data.test.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/repository/data-source/extend-data-source-paged-response-data.test.ts @@ -1,5 +1,5 @@ import { expect } from '@open-wc/testing'; -import type { UmbPagedData } from './types.js'; +import type { UmbPagedModel } from './types.js'; import type { DataSourceResponse } from './data-source-response.interface.js'; import { extendDataSourcePagedResponseData } from './extend-data-source-paged-response-data.function.js'; @@ -10,7 +10,7 @@ describe('extendDataSourcePagedResponseData', () => { describe('Extending data set', () => { it('has an controllerAlias property', () => { - const response: DataSourceResponse> = { + const response: DataSourceResponse> = { data: { items: [ { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/repository/data-source/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/repository/data-source/types.ts index 62454b9ebe..9825f3c650 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/repository/data-source/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/repository/data-source/types.ts @@ -1,4 +1,4 @@ -export interface UmbPagedData { +export interface UmbPagedModel { total: number; items: Array; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/repository/item/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/repository/item/index.ts index 024ad912f7..605da4d640 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/repository/item/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/repository/item/index.ts @@ -1,3 +1,4 @@ export * from './item-data-source.interface.js'; export * from './item-repository-base.js'; export * from './item-repository.interface.js'; +export * from './item-server-data-source-base.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/repository/item/item-data-source.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/repository/item/item-data-source.interface.ts index 97639454da..cb95f0ec6c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/repository/item/item-data-source.interface.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/repository/item/item-data-source.interface.ts @@ -1,10 +1,10 @@ import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { DataSourceResponse } from '@umbraco-cms/backoffice/repository'; -export interface UmbItemDataSourceConstructor { +export interface UmbItemDataSourceConstructor { new (host: UmbControllerHost): UmbItemDataSource; } -export interface UmbItemDataSource { +export interface UmbItemDataSource { getItems(unique: Array): Promise>>; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/repository/item/item-repository-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/repository/item/item-repository-base.ts index fcee50103d..d9b083893e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/repository/item/item-repository-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/repository/item/item-repository-base.ts @@ -5,21 +5,24 @@ import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbItemStore } from '@umbraco-cms/backoffice/store'; import type { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; -export class UmbItemRepositoryBase extends UmbRepositoryBase implements UmbItemRepository { +export class UmbItemRepositoryBase + extends UmbRepositoryBase + implements UmbItemRepository +{ protected _init: Promise; - protected _itemStore?: UmbItemStore; - #itemSource: UmbItemDataSource; + protected _itemStore?: UmbItemStore; + #itemSource: UmbItemDataSource; constructor( host: UmbControllerHost, - itemSource: UmbItemDataSourceConstructor, + itemSource: UmbItemDataSourceConstructor, itemStoreContextAlias: string | UmbContextToken, ) { super(host); this.#itemSource = new itemSource(host); this._init = this.consumeContext(itemStoreContextAlias, (instance) => { - this._itemStore = instance as UmbItemStore; + this._itemStore = instance as UmbItemStore; }).asPromise(); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/repository/item/item-repository.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/repository/item/item-repository.interface.ts index f7ba4ead1d..c343ea8cdb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/repository/item/item-repository.interface.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/repository/item/item-repository.interface.ts @@ -2,7 +2,7 @@ import type { Observable } from '@umbraco-cms/backoffice/external/rxjs'; import type { ProblemDetails } from '@umbraco-cms/backoffice/backend-api'; import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; -export interface UmbItemRepository extends UmbApi { +export interface UmbItemRepository extends UmbApi { requestItems: (uniques: string[]) => Promise<{ data?: Array | undefined; error?: ProblemDetails | undefined; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/repository/item/item-server-data-source-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/repository/item/item-server-data-source-base.ts new file mode 100644 index 0000000000..58c4f82503 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/repository/item/item-server-data-source-base.ts @@ -0,0 +1,57 @@ +import type { UmbItemDataSource } from '@umbraco-cms/backoffice/repository'; +import type { ItemResponseModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; + +export interface UmbItemServerDataSourceBaseArgs< + ServerItemType extends ItemResponseModelBaseModel, + ClientItemType extends { unique: string }, +> { + getItems: (uniques: Array) => Promise>; + mapper: (item: ServerItemType) => ClientItemType; +} + +/** + * A data source base for items that fetches items from the server + * @export + * @class UmbItemServerDataSourceBase + * @implements {DocumentTreeDataSource} + */ +export abstract class UmbItemServerDataSourceBase< + ServerItemType extends ItemResponseModelBaseModel, + ClientItemType extends { unique: string }, +> implements UmbItemDataSource +{ + #host: UmbControllerHost; + #getItems: (uniques: Array) => Promise>; + #mapper: (item: ServerItemType) => ClientItemType; + + /** + * Creates an instance of UmbItemServerDataSourceBase. + * @param {UmbControllerHost} host + * @memberof UmbItemServerDataSourceBase + */ + constructor(host: UmbControllerHost, args: UmbItemServerDataSourceBaseArgs) { + this.#host = host; + this.#getItems = args.getItems; + this.#mapper = args.mapper; + } + + /** + * Fetches the items for the given uniques from the server + * @param {Array} uniques + * @return {*} + * @memberof UmbItemServerDataSourceBase + */ + async getItems(uniques: Array) { + if (!uniques) throw new Error('Uniques are missing'); + const { data, error } = await tryExecuteAndNotify(this.#host, this.#getItems(uniques)); + + if (data) { + const items = data.map((item) => this.#mapper(item)); + return { data: items }; + } + + return { error }; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/data-source/tree-data-source.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/data-source/tree-data-source.interface.ts index aa718fa335..e9a11b277b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/data-source/tree-data-source.interface.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/data-source/tree-data-source.interface.ts @@ -1,5 +1,5 @@ import type { UmbTreeItemModelBase } from '../types.js'; -import type { UmbPagedData, DataSourceResponse } from '@umbraco-cms/backoffice/repository'; +import type { UmbPagedModel, DataSourceResponse } from '@umbraco-cms/backoffice/repository'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; export interface UmbTreeDataSourceConstructor { @@ -7,6 +7,6 @@ export interface UmbTreeDataSourceConstructor { - getRootItems(): Promise>>; - getChildrenOf(parentUnique: string | null): Promise>>; + getRootItems(): Promise>>; + getChildrenOf(parentUnique: string | null): Promise>>; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/data-source/tree-server-data-source-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/data-source/tree-server-data-source-base.ts index b3f9452f7b..7ec894515a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/data-source/tree-server-data-source-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/data-source/tree-server-data-source-base.ts @@ -2,15 +2,15 @@ import type { UmbTreeItemModelBase } from '../types.js'; import type { UmbTreeDataSource } from './tree-data-source.interface.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; -import type { CancelablePromise, TreeItemPresentationModel } from '@umbraco-cms/backoffice/backend-api'; -import type { UmbPagedData } from '@umbraco-cms/backoffice/repository'; +import type { TreeItemPresentationModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbPagedModel } from '@umbraco-cms/backoffice/repository'; export interface UmbTreeServerDataSourceBaseArgs< ServerTreeItemType extends TreeItemPresentationModel, ClientTreeItemType extends UmbTreeItemModelBase, > { - getRootItems: () => CancelablePromise>; - getChildrenOf: (parentUnique: string | null) => CancelablePromise>; + getRootItems: () => Promise>; + getChildrenOf: (parentUnique: string | null) => Promise>; mapper: (item: ServerTreeItemType) => ClientTreeItemType; } @@ -25,10 +25,10 @@ export abstract class UmbTreeServerDataSourceBase< ClientTreeItemType extends UmbTreeItemModelBase, > implements UmbTreeDataSource { - #host: UmbControllerHost; - #getRootItems: () => CancelablePromise>; - #getChildrenOf: (parentUnique: string | null) => CancelablePromise>; - #mapper: (item: ServerTreeItemType) => ClientTreeItemType; + #host; + #getRootItems; + #getChildrenOf; + #mapper; /** * Creates an instance of UmbTreeServerDataSourceBase. diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item-default/tree-item.context.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item-default/tree-item.context.interface.ts index 9dfe9a8068..7f58939bea 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item-default/tree-item.context.interface.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item-default/tree-item.context.interface.ts @@ -1,7 +1,7 @@ import type { UmbTreeItemModelBase } from '../types.js'; import type { Observable } from '@umbraco-cms/backoffice/external/rxjs'; import type { ProblemDetails } from '@umbraco-cms/backoffice/backend-api'; -import type { UmbPagedData } from '@umbraco-cms/backoffice/repository'; +import type { UmbPagedModel } from '@umbraco-cms/backoffice/repository'; export interface UmbTreeItemContext { unique?: string | null; @@ -18,7 +18,7 @@ export interface UmbTreeItemContext { setTreeItem(treeItem: TreeItemType | undefined): void; requestChildren(): Promise<{ - data?: UmbPagedData | undefined; + data?: UmbPagedModel | undefined; error?: ProblemDetails | undefined; asObservable?: () => Observable; }>; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-repository.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-repository.interface.ts index d6e9e36b8e..3eca4d2847 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-repository.interface.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-repository.interface.ts @@ -1,5 +1,5 @@ import type { UmbTreeItemModelBase } from './types.js'; -import type { UmbPagedData } from '@umbraco-cms/backoffice/repository'; +import type { UmbPagedModel } from '@umbraco-cms/backoffice/repository'; import type { Observable } from '@umbraco-cms/backoffice/external/rxjs'; import type { ProblemDetails } from '@umbraco-cms/backoffice/backend-api'; import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; @@ -14,7 +14,7 @@ export interface UmbTreeRepository< }>; requestTreeItemsOf: (parentUnique: string | null) => Promise<{ - data?: UmbPagedData; + data?: UmbPagedModel; error?: ProblemDetails; asObservable?: () => Observable; }>; @@ -26,7 +26,7 @@ export interface UmbTreeRepository< because it is a server decision to split them */ requestRootTreeItems: () => Promise<{ - data?: UmbPagedData; + data?: UmbPagedModel; error?: ProblemDetails; asObservable?: () => Observable; }>; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree.context.ts index 8702857f44..7a19bfed9b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree.context.ts @@ -3,7 +3,7 @@ import type { UmbTreeItemModelBase } from './types.js'; import type { UmbTreeRepository } from './tree-repository.interface.js'; import { type UmbActionEventContext, UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; import type { Observable } from '@umbraco-cms/backoffice/external/rxjs'; -import type { UmbPagedData } from '@umbraco-cms/backoffice/repository'; +import type { UmbPagedModel } from '@umbraco-cms/backoffice/repository'; import { type ManifestRepository, type ManifestTree, @@ -21,7 +21,7 @@ import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; export interface UmbTreeContext extends UmbBaseController { selection: UmbSelectionManager; requestChildrenOf: (parentUnique: string | null) => Promise<{ - data?: UmbPagedData; + data?: UmbPagedModel; error?: ProblemDetails; asObservable?: () => Observable; }>; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/types.ts index 038440dee3..3cb1c82e37 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/types.ts @@ -1,8 +1,7 @@ export interface UmbTreeItemModelBase { - entityType: string; name: string; + entityType: string; hasChildren: boolean; - isContainer: boolean; isFolder: boolean; icon?: string | null; } @@ -12,6 +11,13 @@ export interface UmbUniqueTreeItemModel extends UmbTreeItemModelBase { parentUnique: string | null; } +// Root +export interface UmbUniqueTreeRootModel extends UmbTreeItemModelBase { + unique: null; +} + +// ------------------------------------ + // TODO: remove this when we have unique for everything export interface UmbEntityTreeItemModel extends UmbTreeItemModelBase { id: string; @@ -24,11 +30,6 @@ export interface UmbFileSystemTreeItemModel extends UmbTreeItemModelBase { isFolder: boolean; } -// Root -export interface UmbUniqueTreeRootModel extends UmbTreeItemModelBase { - unique: null; -} - // TODO: remove this when we have unique for everything export interface UmbEntityTreeRootModel extends UmbTreeItemModelBase { id: null; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/unique-tree-item/unique-tree-item.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/unique-tree-item/unique-tree-item.context.ts index 1fd094e990..830384a3b3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/unique-tree-item/unique-tree-item.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/unique-tree-item/unique-tree-item.context.ts @@ -1,9 +1,11 @@ import { UmbTreeItemContextBase } from '../tree-item-base/tree-item-base.context.js'; import type { UmbUniqueTreeItemModel } from '../types.js'; -import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -export class UmbUniqueTreeItemContext extends UmbTreeItemContextBase { - constructor(host: UmbControllerHostElement) { +export class UmbUniqueTreeItemContext< + TreeItemModelType extends UmbUniqueTreeItemModel, +> extends UmbTreeItemContextBase { + constructor(host: UmbControllerHost) { super(host, (x: UmbUniqueTreeItemModel) => x.unique); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/variant/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/variant/index.ts index 2155245d23..cf4b565e59 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/variant/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/variant/index.ts @@ -1 +1,2 @@ export * from './variant-id.class.js'; +export * from './types.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/variant/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/variant/types.ts new file mode 100644 index 0000000000..cc4dbc93a8 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/variant/types.ts @@ -0,0 +1,11 @@ +import type { ContentStateModel } from '@umbraco-cms/backoffice/backend-api'; + +export interface UmbVariantModel { + createDate: string | null; + culture: string | null; + name: string; + publishDate: string | null; + segment: string | null; + state: ContentStateModel | null; + updateDate: string | null; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/variant-selector/variant-selector.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/variant-selector/variant-selector.element.ts index 7e608a8c58..f2fb43d63b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/variant-selector/variant-selector.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/variant-selector/variant-selector.element.ts @@ -17,7 +17,8 @@ import { } from '@umbraco-cms/backoffice/external/lit'; import { UMB_WORKSPACE_SPLIT_VIEW_CONTEXT, type ActiveVariant } from '@umbraco-cms/backoffice/workspace'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import { type DocumentVariantResponseModel, ContentStateModel } from '@umbraco-cms/backoffice/backend-api'; +import { ContentStateModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbVariantModel } from '@umbraco-cms/backoffice/variant'; @customElement('umb-variant-selector') export class UmbVariantSelectorElement extends UmbLitElement { @@ -25,7 +26,7 @@ export class UmbVariantSelectorElement extends UmbLitElement { private _popoverElement?: UUIPopoverContainerElement; @state() - _variants: Array = []; + _variants: Array = []; // TODO: Stop using document context specific ActiveVariant type. @state() @@ -146,11 +147,11 @@ export class UmbVariantSelectorElement extends UmbLitElement { } } - private _switchVariant(variant: DocumentVariantResponseModel) { + private _switchVariant(variant: UmbVariantModel) { this.#splitViewContext?.switchVariant(UmbVariantId.Create(variant)); } - private _openSplitView(variant: DocumentVariantResponseModel) { + private _openSplitView(variant: UmbVariantModel) { this.#splitViewContext?.openSplitView(UmbVariantId.Create(variant)); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-context/workspace-variantable-context.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-context/workspace-variantable-context.interface.ts index 9ffa5998fe..4e2004e5f2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-context/workspace-variantable-context.interface.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-context/workspace-variantable-context.interface.ts @@ -2,8 +2,7 @@ import type { UmbWorkspaceSplitViewManager } from '../workspace-split-view-manag import type { UmbPropertyDatasetContext } from '../../property/property-dataset/property-dataset-context.interface.js'; import type { UmbSaveableWorkspaceContextInterface } from './saveable-workspace-context.interface.js'; import type { Observable } from '@umbraco-cms/backoffice/external/rxjs'; -import type { UmbVariantId } from '@umbraco-cms/backoffice/variant'; -import type { ContentStateModel, VariantResponseModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbVariantId, UmbVariantModel } from '@umbraco-cms/backoffice/variant'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; export interface UmbVariantableWorkspaceContextInterface extends UmbSaveableWorkspaceContextInterface { @@ -12,9 +11,9 @@ export interface UmbVariantableWorkspaceContextInterface extends UmbSaveableWork setName(name: string, variantId?: UmbVariantId): void; // Variant: - variants: Observable>; + variants: Observable>; splitView: UmbWorkspaceSplitViewManager; - getVariant(variantId: UmbVariantId): VariantResponseModelBaseModel | undefined; + getVariant(variantId: UmbVariantId): UmbVariantModel | undefined; // Property: // This one is async cause it needs to structure to provide this data: diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-modal/workspace-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-modal/workspace-modal.element.ts index de53c48aa7..e5c77d98da 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-modal/workspace-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-modal/workspace-modal.element.ts @@ -1,5 +1,5 @@ import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import type { CSSResultGroup} from '@umbraco-cms/backoffice/external/lit'; +import type { CSSResultGroup } from '@umbraco-cms/backoffice/external/lit'; import { css, html, customElement, property } from '@umbraco-cms/backoffice/external/lit'; import type { UmbWorkspaceData } from '@umbraco-cms/backoffice/modal'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/dictionary/entity-actions/import/import-dictionary-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/dictionary/entity-actions/import/import-dictionary-modal.element.ts index 6f37754d6e..503fed057a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/dictionary/entity-actions/import/import-dictionary-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/dictionary/entity-actions/import/import-dictionary-modal.element.ts @@ -65,7 +65,6 @@ export class UmbImportDictionaryModalLayout extends UmbModalBaseElement< entityType: 'dictionary-item', hasChildren: item.children.length ? true : false, parentId: parentId || null, - isContainer: false, isFolder: false, }); scaffold(item.children, item.id); diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/dictionary/tree/dictionary-tree.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/dictionary/tree/dictionary-tree.repository.ts index 9021ff9741..f73aa46ce7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/dictionary/tree/dictionary-tree.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/dictionary/tree/dictionary-tree.repository.ts @@ -19,7 +19,6 @@ export class UmbDictionaryTreeRepository id: null, entityType: UMB_DICTIONARY_ROOT_ENTITY_TYPE, name: 'Dictionary', - icon: 'icon-folder', hasChildren: true, isContainer: false, isFolder: true, diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/dictionary/tree/dictionary-tree.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/dictionary/tree/dictionary-tree.server.data-source.ts index 5b60668f90..f143fef922 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/dictionary/tree/dictionary-tree.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/dictionary/tree/dictionary-tree.server.data-source.ts @@ -1,7 +1,10 @@ import type { UmbDictionaryTreeItemModel } from './types.js'; import { UmbTreeServerDataSourceBase } from '@umbraco-cms/backoffice/tree'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import type { EntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { + EntityTreeItemResponseModel, + NamedEntityTreeItemResponseModel, +} from '@umbraco-cms/backoffice/backend-api'; import { DictionaryResource } from '@umbraco-cms/backoffice/backend-api'; /** @@ -11,7 +14,7 @@ import { DictionaryResource } from '@umbraco-cms/backoffice/backend-api'; * @implements {UmbTreeDataSource} */ export class UmbDictionaryTreeServerDataSource extends UmbTreeServerDataSourceBase< - EntityTreeItemResponseModel, + NamedEntityTreeItemResponseModel, UmbDictionaryTreeItemModel > { /** @@ -42,14 +45,13 @@ const getChildrenOf = (parentUnique: string | null) => { } }; -const mapper = (item: EntityTreeItemResponseModel): UmbDictionaryTreeItemModel => { +const mapper = (item: NamedEntityTreeItemResponseModel): UmbDictionaryTreeItemModel => { return { id: item.id, - parentId: item.parentId || null, + parentId: item.parent?.id || null, name: item.name, entityType: 'dictionary-item', hasChildren: item.hasChildren, - isContainer: item.isContainer, isFolder: false, }; }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/menu-item/manifests.ts index eb0176fed3..c4a7939e7e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/menu-item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/menu-item/manifests.ts @@ -10,7 +10,6 @@ const menuItem: ManifestTypes = { meta: { treeAlias: UMB_DOCUMENT_TYPE_TREE_ALIAS, label: 'Document Types', - icon: 'icon-folder', menus: ['Umb.Menu.Settings'], }, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/document-type-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/document-type-detail.server.data-source.ts index 229fb006f9..5e998568a0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/document-type-detail.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/document-type-detail.server.data-source.ts @@ -4,12 +4,12 @@ import { UmbId } from '@umbraco-cms/backoffice/id'; import type { UmbDetailDataSource } from '@umbraco-cms/backoffice/repository'; import type { CreateDocumentTypeRequestModel, - UpdateDocumentTypeRequestModel} from '@umbraco-cms/backoffice/backend-api'; -import { - DocumentTypeResource + UpdateDocumentTypeRequestModel, } from '@umbraco-cms/backoffice/backend-api'; +import { DocumentTypeResource } from '@umbraco-cms/backoffice/backend-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; +import type { UmbPropertyTypeContainerModel } from '@umbraco-cms/backoffice/content-type'; /** * A data source for the Document Type that fetches data from the server @@ -52,8 +52,8 @@ export class UmbDocumentTypeDetailServerDataSource implements UmbDetailDataSourc containers: [], allowedContentTypes: [], compositions: [], - allowedTemplateIds: [], - defaultTemplateId: null, + allowedTemplates: [], + defaultTemplate: null, cleanup: { preventCleanup: false, keepAllVersionsNewerThanDays: null, @@ -95,12 +95,36 @@ export class UmbDocumentTypeDetailServerDataSource implements UmbDetailDataSourc variesByCulture: data.variesByCulture, variesBySegment: data.variesBySegment, isElement: data.isElement, - properties: data.properties, - containers: data.containers, - allowedContentTypes: data.allowedContentTypes, - compositions: data.compositions, - allowedTemplateIds: data.allowedTemplateIds, - defaultTemplateId: data.defaultTemplateId || null, + properties: data.properties.map((property) => { + return { + id: property.id, + container: property.container, + sortOrder: property.sortOrder, + alias: property.alias, + name: property.name, + description: property.description, + dataType: { unique: property.dataType.id }, + variesByCulture: property.variesByCulture, + variesBySegment: property.variesBySegment, + validation: property.validation, + appearance: property.appearance, + }; + }), + containers: data.containers as UmbPropertyTypeContainerModel[], + allowedContentTypes: data.allowedDocumentTypes.map((allowedDocumentType) => { + return { + contentType: { unique: allowedDocumentType.documentType.id }, + sortOrder: allowedDocumentType.sortOrder, + }; + }), + compositions: data.compositions.map((composition) => { + return { + contentType: { unique: composition.documentType.id }, + compositionType: composition.compositionType, + }; + }), + allowedTemplates: data.allowedTemplates, + defaultTemplate: data.defaultTemplate ? { id: data.defaultTemplate.id } : null, cleanup: data.cleanup, }; @@ -127,14 +151,37 @@ export class UmbDocumentTypeDetailServerDataSource implements UmbDetailDataSourc variesByCulture: model.variesByCulture, variesBySegment: model.variesBySegment, isElement: model.isElement, - properties: model.properties, + properties: model.properties.map((property) => { + return { + id: property.id, + container: property.container, + sortOrder: property.sortOrder, + alias: property.alias, + name: property.name, + description: property.description, + dataType: { id: property.dataType.unique }, + variesByCulture: property.variesByCulture, + variesBySegment: property.variesBySegment, + validation: property.validation, + appearance: property.appearance, + }; + }), containers: model.containers, - allowedContentTypes: model.allowedContentTypes, - compositions: model.compositions, + allowedDocumentTypes: model.allowedContentTypes.map((allowedContentType) => { + return { + documentType: { id: allowedContentType.contentType.unique }, + sortOrder: allowedContentType.sortOrder, + }; + }), + compositions: model.compositions.map((composition) => { + return { + documentType: { id: composition.contentType.unique }, + compositionType: composition.compositionType, + }; + }), id: model.unique, - containerId: model.parentUnique, - allowedTemplateIds: model.allowedTemplateIds, - defaultTemplateId: model.defaultTemplateId || null, + allowedTemplates: model.allowedTemplates, + defaultTemplate: model.defaultTemplate ? { id: model.defaultTemplate.id } : null, cleanup: model.cleanup, }; @@ -171,12 +218,36 @@ export class UmbDocumentTypeDetailServerDataSource implements UmbDetailDataSourc variesByCulture: model.variesByCulture, variesBySegment: model.variesBySegment, isElement: model.isElement, - properties: model.properties, + properties: model.properties.map((property) => { + return { + id: property.id, + container: property.container, + sortOrder: property.sortOrder, + alias: property.alias, + name: property.name, + description: property.description, + dataType: { id: property.dataType.unique }, + variesByCulture: property.variesByCulture, + variesBySegment: property.variesBySegment, + validation: property.validation, + appearance: property.appearance, + }; + }), containers: model.containers, - allowedContentTypes: model.allowedContentTypes, - compositions: model.compositions, - allowedTemplateIds: model.allowedTemplateIds, - defaultTemplateId: model.defaultTemplateId || null, + allowedDocumentTypes: model.allowedContentTypes.map((allowedContentType) => { + return { + documentType: { id: allowedContentType.contentType.unique }, + sortOrder: allowedContentType.sortOrder, + }; + }), + compositions: model.compositions.map((composition) => { + return { + documentType: { id: composition.contentType.unique }, + compositionType: composition.compositionType, + }; + }), + allowedTemplates: model.allowedTemplates, + defaultTemplate: model.defaultTemplate ? { id: model.defaultTemplate.id } : null, cleanup: model.cleanup, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/index.ts index e94276bc0a..5abd54bbee 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/index.ts @@ -1,2 +1,3 @@ export * from './detail/index.js'; export * from './item/index.js'; +export * from './structure/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/item/document-type-item.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/item/document-type-item.repository.ts index 500d791da5..c8a5d0fa7e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/item/document-type-item.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/item/document-type-item.repository.ts @@ -1,5 +1,5 @@ import type { UmbDocumentTypeItemModel } from './types.js'; -import { UmbDocumentTypeItemServerDataSource } from './document-type-item.server.data.js'; +import { UmbDocumentTypeItemServerDataSource } from './document-type-item.server.data-source.js'; import { UMB_DOCUMENT_TYPE_ITEM_STORE_CONTEXT } from './document-type-item.store.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbItemRepositoryBase } from '@umbraco-cms/backoffice/repository'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/item/document-type-item.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/item/document-type-item.server.data-source.ts new file mode 100644 index 0000000000..6ca440b1da --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/item/document-type-item.server.data-source.ts @@ -0,0 +1,37 @@ +import type { UmbDocumentTypeItemModel } from './types.js'; +import { UmbItemServerDataSourceBase } from '@umbraco-cms/backoffice/repository'; +import type { DocumentTypeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import { DocumentTypeResource } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; + +/** + * A data source for Document Type items that fetches data from the server + * @export + * @class UmbDocumentTypeItemServerDataSource + * @extends {UmbItemServerDataSourceBase} + */ +export class UmbDocumentTypeItemServerDataSource extends UmbItemServerDataSourceBase< + DocumentTypeItemResponseModel, + UmbDocumentTypeItemModel +> { + /** + * Creates an instance of UmbDocumentTypeItemServerDataSource. + * @param {UmbControllerHost} host + * @memberof UmbDocumentTypeItemServerDataSource + */ + constructor(host: UmbControllerHost) { + super(host, { getItems, mapper }); + } +} + +/* eslint-disable local-rules/no-direct-api-import */ +const getItems = (uniques: Array) => DocumentTypeResource.getDocumentTypeItem({ id: uniques }); + +const mapper = (item: DocumentTypeItemResponseModel): UmbDocumentTypeItemModel => { + return { + isElement: item.isElement, + icon: item.icon, + unique: item.id, + name: item.name, + }; +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/item/document-type-item.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/item/document-type-item.server.data.ts deleted file mode 100644 index aff1cc985f..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/item/document-type-item.server.data.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type { UmbItemDataSource } from '@umbraco-cms/backoffice/repository'; -import type { DocumentTypeItemResponseModel} from '@umbraco-cms/backoffice/backend-api'; -import { DocumentTypeResource } from '@umbraco-cms/backoffice/backend-api'; -import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; - -/** - * A data source for Document Type items that fetches data from the server - * @export - * @class UmbDocumentTypeItemServerDataSource - * @implements {UmbItemDataSource} - */ -export class UmbDocumentTypeItemServerDataSource implements UmbItemDataSource { - #host: UmbControllerHost; - - /** - * Creates an instance of UmbDocumentTypeItemServerDataSource. - * @param {UmbControllerHost} host - * @memberof UmbDocumentTypeItemServerDataSource - */ - constructor(host: UmbControllerHost) { - this.#host = host; - } - - /** - * Fetches the items for the given ids from the server - * @param {Array} ids - * @return {*} - * @memberof UmbDocumentTypeItemServerDataSource - */ - async getItems(ids: Array) { - if (!ids) throw new Error('Ids are missing'); - return tryExecuteAndNotify( - this.#host, - DocumentTypeResource.getDocumentTypeItem({ - id: ids, - }), - ); - } -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/item/document-type-item.store.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/item/document-type-item.store.ts index 23ed3af0e2..26ed5716eb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/item/document-type-item.store.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/item/document-type-item.store.ts @@ -1,7 +1,7 @@ -import type { DocumentTypeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbDocumentTypeItemModel } from './types.js'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; -import { UmbEntityItemStore } from '@umbraco-cms/backoffice/store'; +import { UmbItemStoreBase } from '@umbraco-cms/backoffice/store'; /** * @export @@ -10,7 +10,7 @@ import { UmbEntityItemStore } from '@umbraco-cms/backoffice/store'; * @description - Data Store for Document Type items */ -export class UmbDocumentTypeItemStore extends UmbEntityItemStore { +export class UmbDocumentTypeItemStore extends UmbItemStoreBase { /** * Creates an instance of UmbDocumentTypeItemStore. * @param {UmbControllerHostElement} host diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/item/types.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/item/types.ts index d06102317d..1079e8cf02 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/item/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/item/types.ts @@ -1,3 +1,6 @@ -import type { DocumentTypeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; - -export type UmbDocumentTypeItemModel = DocumentTypeItemResponseModel; +export type UmbDocumentTypeItemModel = { + unique: string; + name: string; + isElement: boolean; + icon?: string | null; +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/structure/document-type-structure.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/structure/document-type-structure.repository.ts new file mode 100644 index 0000000000..791f521d30 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/structure/document-type-structure.repository.ts @@ -0,0 +1,10 @@ +import { UmbDocumentTypeStructureServerDataSource } from './document-type-structure.server.data-source.js'; +import type { UmbAllowedDocumentTypeModel } from './types.js'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbContentTypeStructureRepositoryBase } from '@umbraco-cms/backoffice/content-type'; + +export class UmbDocumentTypeStructureRepository extends UmbContentTypeStructureRepositoryBase { + constructor(host: UmbControllerHost) { + super(host, UmbDocumentTypeStructureServerDataSource); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/structure/document-type-structure.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/structure/document-type-structure.server.data-source.ts new file mode 100644 index 0000000000..a4b3dcfab0 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/structure/document-type-structure.server.data-source.ts @@ -0,0 +1,39 @@ +import type { UmbAllowedDocumentTypeModel } from './types.js'; +import type { AllowedDocumentTypeModel } from '@umbraco-cms/backoffice/backend-api'; +import { DocumentTypeResource } from '@umbraco-cms/backoffice/backend-api'; +import { UmbContentTypeStructureServerDataSourceBase } from '@umbraco-cms/backoffice/content-type'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; + +/** + * + * @export + * @class UmbDocumentTypeStructureServerDataSource + * @extends {UmbContentTypeStructureServerDataSourceBase} + */ +export class UmbDocumentTypeStructureServerDataSource extends UmbContentTypeStructureServerDataSourceBase< + AllowedDocumentTypeModel, + UmbAllowedDocumentTypeModel +> { + constructor(host: UmbControllerHost) { + super(host, { getAllowedChildrenOf, mapper }); + } +} + +const getAllowedChildrenOf = (unique: string | null) => { + if (unique) { + // eslint-disable-next-line local-rules/no-direct-api-import + return DocumentTypeResource.getDocumentTypeByIdAllowedChildren({ id: unique }); + } else { + // eslint-disable-next-line local-rules/no-direct-api-import + return DocumentTypeResource.getDocumentTypeAllowedAtRoot({}); + } +}; + +const mapper = (item: AllowedDocumentTypeModel): UmbAllowedDocumentTypeModel => { + return { + unique: item.id, + name: item.name, + description: item.description || null, + icon: item.icon || null, + }; +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/structure/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/structure/index.ts new file mode 100644 index 0000000000..0c4b416c2f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/structure/index.ts @@ -0,0 +1,3 @@ +export { UmbDocumentTypeStructureRepository } from './document-type-structure.repository.js'; +export { UMB_DOCUMENT_TYPE_STRUCTURE_REPOSITORY_ALIAS } from './manifests.js'; +export * from './types.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/structure/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/structure/manifests.ts new file mode 100644 index 0000000000..182cfe012e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/structure/manifests.ts @@ -0,0 +1,13 @@ +import { UmbDocumentTypeStructureRepository } from './document-type-structure.repository.js'; +import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; + +export const UMB_DOCUMENT_TYPE_STRUCTURE_REPOSITORY_ALIAS = 'Umb.Repository.DocumentType.Structure'; + +const structureRepository: ManifestRepository = { + type: 'repository', + alias: UMB_DOCUMENT_TYPE_STRUCTURE_REPOSITORY_ALIAS, + name: 'Document Type Structure Repository', + api: UmbDocumentTypeStructureRepository, +}; + +export const manifests = [structureRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/structure/types.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/structure/types.ts new file mode 100644 index 0000000000..f0299ca6d9 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/structure/types.ts @@ -0,0 +1,6 @@ +export interface UmbAllowedDocumentTypeModel { + unique: string; + name: string; + description: string | null; + icon: string | null; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/document-type-tree.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/document-type-tree.repository.ts index 16c2b640e9..0f45c87dfa 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/document-type-tree.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/document-type-tree.repository.ts @@ -19,9 +19,7 @@ export class UmbDocumentTypeTreeRepository unique: null, entityType: UMB_DOCUMENT_TYPE_ROOT_ENTITY_TYPE, name: 'Document Types', - icon: 'icon-folder', hasChildren: true, - isContainer: false, isFolder: true, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/document-type.tree.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/document-type.tree.server.data-source.ts index 619ef7c489..0c1b601301 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/document-type.tree.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/document-type.tree.server.data-source.ts @@ -46,10 +46,9 @@ const getChildrenOf = (parentUnique: string | null) => { const mapper = (item: DocumentTypeTreeItemResponseModel): UmbDocumentTypeTreeItemModel => { return { unique: item.id, - parentUnique: item.parentId || null, + parentUnique: item.parent ? item.parent.id : null, name: item.name, entityType: item.isFolder ? UMB_DOCUMENT_TYPE_FOLDER_ENTITY_TYPE : UMB_DOCUMENT_TYPE_ENTITY_TYPE, - isContainer: item.isContainer, hasChildren: item.hasChildren, isFolder: item.isFolder, icon: item.icon, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/document-type.tree.store.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/document-type.tree.store.ts index 490baed60a..4e464abdcf 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/document-type.tree.store.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/document-type.tree.store.ts @@ -39,7 +39,6 @@ export class UmbDocumentTypeTreeStore extends UmbUniqueTreeStore { entityType: item.entityType, isElement: item.isElement, isFolder: false, - isContainer: false, hasChildren: false, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/folder/document-type-folder.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/folder/document-type-folder.repository.ts index db7aec1677..786591cfa2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/folder/document-type-folder.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/folder/document-type-folder.repository.ts @@ -3,7 +3,7 @@ import { UMB_DOCUMENT_TYPE_TREE_STORE_CONTEXT } from '../../tree/index.js'; import { UmbDocumentTypeFolderServerDataSource } from './document-type-folder.server.data-source.js'; import type { UmbDocumentTypeFolderTreeItemModel } from './types.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import type { UmbFolderModel} from '@umbraco-cms/backoffice/tree'; +import type { UmbFolderModel } from '@umbraco-cms/backoffice/tree'; import { UmbFolderRepositoryBase } from '@umbraco-cms/backoffice/tree'; export class UmbDocumentTypeFolderRepository extends UmbFolderRepositoryBase { @@ -23,7 +23,6 @@ const folderToDocumentTypeTreeItemMapper = (folder: UmbFolderModel): UmbDocument parentUnique: folder.parentUnique, name: folder.name, entityType: UMB_DOCUMENT_TYPE_FOLDER_ENTITY_TYPE, - isContainer: false, hasChildren: false, isFolder: true, isElement: false, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/types.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/types.ts index e01b2fb9ad..07480fc570 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/types.ts @@ -4,7 +4,7 @@ import type { ContentTypeCleanupModel } from '@umbraco-cms/backoffice/backend-ap export interface UmbDocumentTypeDetailModel extends UmbContentTypeModel { entityType: UmbDocumentTypeEntityType; - allowedTemplateIds: Array; - defaultTemplateId: string | null; + allowedTemplates: Array<{ id: string }>; + defaultTemplate: { id: string } | null; cleanup: ContentTypeCleanupModel; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace.context.ts index 3701df5d0b..fcb5cadb98 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace.context.ts @@ -1,12 +1,9 @@ import { UmbDocumentTypeDetailRepository } from '../repository/detail/document-type-detail.repository.js'; import type { UmbDocumentTypeDetailModel } from '../types.js'; +import type { UmbContentTypeCompositionModel, UmbContentTypeSortModel } from '@umbraco-cms/backoffice/content-type'; import { UmbContentTypePropertyStructureManager } from '@umbraco-cms/backoffice/content-type'; -import type { - UmbSaveableWorkspaceContextInterface} from '@umbraco-cms/backoffice/workspace'; -import { - UmbEditableWorkspaceContextBase -} from '@umbraco-cms/backoffice/workspace'; -import type { ContentTypeCompositionModel, ContentTypeSortModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbSaveableWorkspaceContextInterface } from '@umbraco-cms/backoffice/workspace'; +import { UmbEditableWorkspaceContextBase } from '@umbraco-cms/backoffice/workspace'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import { UmbBooleanState } from '@umbraco-cms/backoffice/observable-api'; @@ -35,7 +32,7 @@ export class UmbDocumentTypeWorkspaceContext // Document type specific: readonly allowedTemplateIds; - readonly defaultTemplateId; + readonly defaultTemplate; readonly cleanup; readonly structure = new UmbContentTypePropertyStructureManager(this, this.repository); @@ -60,9 +57,9 @@ export class UmbDocumentTypeWorkspaceContext this.compositions = this.structure.ownerContentTypeObservablePart((data) => data?.compositions); // Document type specific: - this.allowedTemplateIds = this.structure.ownerContentTypeObservablePart((data) => data?.allowedTemplateIds); - this.defaultTemplateId = this.structure.ownerContentTypeObservablePart((data) => data?.defaultTemplateId); - this.cleanup = this.structure.ownerContentTypeObservablePart((data) => data?.defaultTemplateId); + this.allowedTemplateIds = this.structure.ownerContentTypeObservablePart((data) => data?.allowedTemplates); + this.defaultTemplate = this.structure.ownerContentTypeObservablePart((data) => data?.defaultTemplate); + this.cleanup = this.structure.ownerContentTypeObservablePart((data) => data?.defaultTemplate); } getIsSorting() { @@ -112,19 +109,19 @@ export class UmbDocumentTypeWorkspaceContext setIsElement(isElement: boolean) { this.structure.updateOwnerContentType({ isElement }); } - setAllowedContentTypes(allowedContentTypes: Array) { + setAllowedContentTypes(allowedContentTypes: Array) { this.structure.updateOwnerContentType({ allowedContentTypes }); } - setCompositions(compositions: Array) { + setCompositions(compositions: Array) { this.structure.updateOwnerContentType({ compositions }); } // Document type specific: - setAllowedTemplateIds(allowedTemplateIds: Array) { - this.structure.updateOwnerContentType({ allowedTemplateIds }); + setAllowedTemplateIds(allowedTemplates: Array<{ id: string }>) { + this.structure.updateOwnerContentType({ allowedTemplates }); } - setDefaultTemplateId(defaultTemplateId: string) { - this.structure.updateOwnerContentType({ defaultTemplateId }); + setDefaultTemplate(defaultTemplate: { id: string }) { + this.structure.updateOwnerContentType({ defaultTemplate }); } async create(parentUnique: string | null) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/design/document-type-workspace-view-edit-properties.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/design/document-type-workspace-view-edit-properties.element.ts index 2c5acb43e1..5cdda1e821 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/design/document-type-workspace-view-edit-properties.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/design/document-type-workspace-view-edit-properties.element.ts @@ -3,20 +3,19 @@ import './document-type-workspace-view-edit-property.element.js'; import type { UmbDocumentTypeDetailModel } from '../../../types.js'; import { css, html, customElement, property, state, repeat, ifDefined } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import type { PropertyContainerTypes } from '@umbraco-cms/backoffice/content-type'; +import type { UmbPropertyContainerTypes, UmbPropertyTypeModel } from '@umbraco-cms/backoffice/content-type'; import { UmbContentTypePropertyStructureHelper } from '@umbraco-cms/backoffice/content-type'; import type { UmbSorterConfig } from '@umbraco-cms/backoffice/sorter'; import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import type { DocumentTypePropertyTypeResponseModel, PropertyTypeModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; import { UMB_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/workspace'; import { UMB_PROPERTY_SETTINGS_MODAL, UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/modal'; -const SORTER_CONFIG: UmbSorterConfig = { - compareElementToModel: (element: HTMLElement, model: DocumentTypePropertyTypeResponseModel) => { +const SORTER_CONFIG: UmbSorterConfig = { + compareElementToModel: (element: HTMLElement, model: UmbPropertyTypeModel) => { return element.getAttribute('data-umb-property-id') === model.id; }, - querySelectModelToElement: (container: HTMLElement, modelEntry: DocumentTypePropertyTypeResponseModel) => { + querySelectModelToElement: (container: HTMLElement, modelEntry: UmbPropertyTypeModel) => { return container.querySelector('[data-umb-property-id=' + modelEntry.id + ']'); }, identifier: 'content-type-property-sorter', @@ -81,17 +80,17 @@ export class UmbDocumentTypeWorkspaceViewEditPropertiesElement extends UmbLitEle } @property({ type: String, attribute: 'container-type', reflect: false }) - public get containerType(): PropertyContainerTypes | undefined { + public get containerType(): UmbPropertyContainerTypes | undefined { return this._propertyStructureHelper.getContainerType(); } - public set containerType(value: PropertyContainerTypes | undefined) { + public set containerType(value: UmbPropertyContainerTypes | undefined) { this._propertyStructureHelper.setContainerType(value); } _propertyStructureHelper = new UmbContentTypePropertyStructureHelper(this); @state() - _propertyStructure: Array = []; + _propertyStructure: Array = []; @state() _ownerDocumentTypes?: UmbDocumentTypeDetailModel[]; @@ -105,7 +104,7 @@ export class UmbDocumentTypeWorkspaceViewEditPropertiesElement extends UmbLitEle constructor() { super(); - this.consumeContext(UMB_WORKSPACE_CONTEXT, (workspaceContext) => { + this.consumeContext(UMB_WORKSPACE_CONTEXT, async (workspaceContext) => { this._propertyStructureHelper.setStructureManager( (workspaceContext as UmbDocumentTypeWorkspaceContext).structure, ); @@ -117,6 +116,15 @@ export class UmbDocumentTypeWorkspaceViewEditPropertiesElement extends UmbLitEle }, '_observeIsSorting', ); + const docTypesObservable = await this._propertyStructureHelper.ownerDocumentTypes(); + if (!docTypesObservable) return; + this.observe( + docTypesObservable, + (documents) => { + this._ownerDocumentTypes = documents; + }, + 'observeOwnerDocumentTypes', + ); }); this.observe(this._propertyStructureHelper.propertyStructure, (propertyStructure) => { this._propertyStructure = propertyStructure; @@ -135,7 +143,10 @@ export class UmbDocumentTypeWorkspaceViewEditPropertiesElement extends UmbLitEle return { data: { documentTypeId }, value: propertyData }; }) .onSubmit((value) => { - this.#addProperty(value); + if (!value.dataType) { + throw new Error('No data type selected'); + } + this.#addProperty(value as UmbPropertyTypeModel); }) .observeRouteBuilder((routeBuilder) => { this._modalRouteNewProperty = routeBuilder(null); @@ -151,20 +162,7 @@ export class UmbDocumentTypeWorkspaceViewEditPropertiesElement extends UmbLitEle } } - connectedCallback(): void { - super.connectedCallback(); - const doctypes = this._propertyStructureHelper.ownerDocumentTypes; - if (!doctypes) return; - this.observe( - doctypes, - (documents) => { - this._ownerDocumentTypes = documents; - }, - 'observeOwnerDocumentTypes', - ); - } - - async #addProperty(propertyData: PropertyTypeModelBaseModel) { + async #addProperty(propertyData: UmbPropertyTypeModel) { const propertyPlaceholder = await this._propertyStructureHelper.addProperty(this._containerId); if (!propertyPlaceholder) return; @@ -175,18 +173,18 @@ export class UmbDocumentTypeWorkspaceViewEditPropertiesElement extends UmbLitEle return html`
${repeat( this._propertyStructure, - (property) => property.id ?? '' + property.containerId ?? '' + property.sortOrder ?? '', + (property) => property.id ?? '' + property.container?.id ?? '' + property.sortOrder ?? '', (property) => { // Note: This piece might be moved into the property component const inheritedFromDocument = this._ownerDocumentTypes?.find( - (types) => types.containers?.find((containers) => containers.id === property.containerId), + (types) => types.containers?.find((containers) => containers.id === property.container?.id), ); return html` { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/design/document-type-workspace-view-edit-property.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/design/document-type-workspace-view-edit-property.element.ts index 92a54b7a51..65233d2a57 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/design/document-type-workspace-view-edit-property.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/design/document-type-workspace-view-edit-property.element.ts @@ -1,10 +1,8 @@ import { UmbDataTypeDetailRepository } from '@umbraco-cms/backoffice/data-type'; -import type { UUIInputElement} from '@umbraco-cms/backoffice/external/uui'; +import type { UUIInputElement } from '@umbraco-cms/backoffice/external/uui'; import { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; import { css, html, customElement, property, state, ifDefined, nothing } from '@umbraco-cms/backoffice/external/lit'; -import type { PropertyTypeModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; -import type { - UmbConfirmModalData} from '@umbraco-cms/backoffice/modal'; +import type { UmbConfirmModalData } from '@umbraco-cms/backoffice/modal'; import { UMB_CONFIRM_MODAL, UMB_MODAL_MANAGER_CONTEXT, @@ -15,6 +13,7 @@ import { import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { generateAlias } from '@umbraco-cms/backoffice/utils'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import type { UmbPropertyTypeModel, UmbPropertyTypeScaffoldModel } from '@umbraco-cms/backoffice/content-type'; /** * @element umb-document-type-workspace-view-edit-property @@ -23,22 +22,22 @@ import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; */ @customElement('umb-document-type-workspace-view-edit-property') export class UmbDocumentTypeWorkspacePropertyElement extends UmbLitElement { - private _property?: PropertyTypeModelBaseModel | undefined; + private _property?: UmbPropertyTypeModel | UmbPropertyTypeScaffoldModel | undefined; /** * Property, the data object for the property. - * @type {PropertyTypeModelBaseModel} + * @type {UmbPropertyTypeModel | UmbPropertyTypeScaffoldModel | undefined} * @attr * @default undefined */ @property({ type: Object }) - public get property(): PropertyTypeModelBaseModel | undefined { + public get property(): UmbPropertyTypeModel | UmbPropertyTypeScaffoldModel | undefined { return this._property; } - public set property(value: PropertyTypeModelBaseModel | undefined) { + public set property(value: UmbPropertyTypeModel | UmbPropertyTypeScaffoldModel | undefined) { const oldValue = this._property; this._property = value; this.#modalRegistration.setUniquePathValue('propertyId', value?.id?.toString()); - this.setDataType(this._property?.dataTypeId); + this.setDataType(this._property?.dataType?.unique); this.requestUpdate('property', oldValue); } @@ -97,7 +96,10 @@ export class UmbDocumentTypeWorkspacePropertyElement extends UmbLitElement { return { data: { documentTypeId }, value: propertyData }; }) .onSubmit((result) => { - this._partialUpdate(result); + if (!result.dataType) { + throw new Error('No dataType found on property'); + } + this._partialUpdate(result as UmbPropertyTypeModel); }) .observeRouteBuilder((routeBuilder) => { this._modalRoute = routeBuilder(null); @@ -117,7 +119,7 @@ export class UmbDocumentTypeWorkspacePropertyElement extends UmbLitElement { }); } - _partialUpdate(partialObject: PropertyTypeModelBaseModel) { + _partialUpdate(partialObject: UmbPropertyTypeModel) { this.dispatchEvent(new CustomEvent('partial-property-update', { detail: partialObject })); } @@ -296,7 +298,7 @@ export class UmbDocumentTypeWorkspacePropertyElement extends UmbLitElement { renderPropertyTags() { return this.property ? html`
- ${this.property.dataTypeId ? html`${this._dataTypeName}` : nothing} + ${this.property.dataType?.unique ? html`${this._dataTypeName}` : nothing} ${this.property.variesByCulture ? html` ${this.localize.term('contentTypeEditor_cultureVariantLabel')} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/design/document-type-workspace-view-edit-tab.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/design/document-type-workspace-view-edit-tab.element.ts index 593bd375fd..94a2aa5a03 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/design/document-type-workspace-view-edit-tab.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/design/document-type-workspace-view-edit-tab.element.ts @@ -6,7 +6,7 @@ import { UmbContentTypeContainerStructureHelper } from '@umbraco-cms/backoffice/ import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import type { PropertyTypeContainerModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; import { UMB_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/workspace'; -import type { UmbSorterConfig} from '@umbraco-cms/backoffice/sorter'; +import type { UmbSorterConfig } from '@umbraco-cms/backoffice/sorter'; import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; import './document-type-workspace-view-edit-properties.element.js'; @@ -172,7 +172,11 @@ export class UmbDocumentTypeWorkspaceViewEditTabElement extends UmbLitElement { value=${group.name ?? ''} @change=${(e: InputEvent) => { const newName = (e.target as HTMLInputElement).value; - this._groupStructureHelper.updateContainerName(group.id!, group.parentId ?? null, newName); + this._groupStructureHelper.updateContainerName( + group.id!, + group.parent?.id ?? null, + newName, + ); }}>
diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/structure/document-type-workspace-view-structure.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/structure/document-type-workspace-view-structure.element.ts index e9a11e6d9b..f09d83e334 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/structure/document-type-workspace-view-structure.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/structure/document-type-workspace-view-structure.element.ts @@ -6,16 +6,17 @@ import type { UUIToggleElement } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { UMB_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/workspace'; import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbContentTypeSortModel } from '@umbraco-cms/backoffice/content-type'; @customElement('umb-document-type-workspace-view-structure') export class UmbDocumentTypeWorkspaceViewStructureElement extends UmbLitElement implements UmbWorkspaceViewElement { #workspaceContext?: UmbDocumentTypeWorkspaceContext; @state() - private _allowedAsRoot?: boolean; + private _allowedAtRoot?: boolean; @state() - private _allowedContentTypeIDs?: Array; + private _allowedContentTypeUniques?: Array; constructor() { super(); @@ -29,13 +30,13 @@ export class UmbDocumentTypeWorkspaceViewStructureElement extends UmbLitElement private _observeDocumentType() { if (!this.#workspaceContext) return; - this.observe(this.#workspaceContext.allowedAsRoot, (allowedAsRoot) => (this._allowedAsRoot = allowedAsRoot)); + this.observe(this.#workspaceContext.allowedAsRoot, (allowedAsRoot) => (this._allowedAtRoot = allowedAsRoot)); this.observe(this.#workspaceContext.allowedContentTypes, (allowedContentTypes) => { - const oldValue = this._allowedContentTypeIDs; - this._allowedContentTypeIDs = allowedContentTypes - ?.map((x) => x.id) + const oldValue = this._allowedContentTypeUniques; + this._allowedContentTypeUniques = allowedContentTypes + ?.map((x) => x.contentType.unique) .filter((x) => x !== undefined) as Array; - this.requestUpdate('_allowedContentTypeIDs', oldValue); + this.requestUpdate('_allowedContentTypeUniques', oldValue); }); } @@ -47,7 +48,7 @@ export class UmbDocumentTypeWorkspaceViewStructureElement extends UmbLitElement
{ this.#workspaceContext?.setAllowedAsRoot((e.target as UUIToggleElement).checked); }}> @@ -61,14 +62,14 @@ export class UmbDocumentTypeWorkspaceViewStructureElement extends UmbLitElement diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/templates/document-type-workspace-view-templates.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/templates/document-type-workspace-view-templates.element.ts index 4c73b41165..019238c2e7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/templates/document-type-workspace-view-templates.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/templates/document-type-workspace-view-templates.element.ts @@ -12,7 +12,7 @@ export class UmbDocumentTypeWorkspaceViewTemplatesElement extends UmbLitElement #workspaceContext?: UmbDocumentTypeWorkspaceContext; @state() - private _defaultTemplateId?: string | null; + private _defaultTemplateId: string | null = null; @state() private _allowedTemplateIds?: Array; @@ -28,10 +28,10 @@ export class UmbDocumentTypeWorkspaceViewTemplatesElement extends UmbLitElement private _observeDocumentType() { if (!this.#workspaceContext) return; this.observe( - this.#workspaceContext.defaultTemplateId, - (defaultTemplateId) => { + this.#workspaceContext.defaultTemplate, + (defaultTemplate) => { const oldValue = this._defaultTemplateId; - this._defaultTemplateId = defaultTemplateId; + this._defaultTemplateId = defaultTemplate ? defaultTemplate.id : null; this.requestUpdate('_defaultTemplateId', oldValue); }, 'defaultTemplate', @@ -40,7 +40,7 @@ export class UmbDocumentTypeWorkspaceViewTemplatesElement extends UmbLitElement this.#workspaceContext.allowedTemplateIds, (allowedTemplateIds) => { const oldValue = this._allowedTemplateIds; - this._allowedTemplateIds = allowedTemplateIds; + this._allowedTemplateIds = allowedTemplateIds?.map((template) => template.id); this.requestUpdate('_allowedTemplateIds', oldValue); }, 'allowedTemplateIds', @@ -50,9 +50,14 @@ export class UmbDocumentTypeWorkspaceViewTemplatesElement extends UmbLitElement #templateInputChange(e: CustomEvent) { // save new allowed ids const input = e.target as UmbInputTemplateElement; - const idsWithoutRoot = input.selectedIds?.filter((id) => id !== null) ?? []; + const idsWithoutRoot = + input.selectedIds + ?.filter((id) => id !== null) + .map((id) => { + return { id }; + }) ?? []; this.#workspaceContext?.setAllowedTemplateIds(idsWithoutRoot); - this.#workspaceContext?.setDefaultTemplateId(input.defaultId); + this.#workspaceContext?.setDefaultTemplate({ id: input.defaultId }); } render() { @@ -61,7 +66,7 @@ export class UmbDocumentTypeWorkspaceViewTemplatesElement extends UmbLitElement
Choose which templates editors are allowed to use on content of this type
diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/table/document-table-collection-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/table/document-table-collection-view.element.ts index 9f4b25bf4b..f7c84cb97c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/table/document-table-collection-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/table/document-table-collection-view.element.ts @@ -14,16 +14,13 @@ import type { import type { UmbDefaultCollectionContext } from '@umbraco-cms/backoffice/collection'; import { UMB_DEFAULT_COLLECTION_CONTEXT } from '@umbraco-cms/backoffice/collection'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import type { UmbEntityTreeItemModel } from '@umbraco-cms/backoffice/tree'; import './column-layouts/document-table-actions-column-layout.element.js'; -type EntityType = UmbDocumentTreeItemModel; - @customElement('umb-document-table-collection-view') export class UmbDocumentTableCollectionViewElement extends UmbLitElement { @state() - private _items?: Array; + private _items?: Array; @state() private _tableConfig: UmbTableConfig = { @@ -52,7 +49,7 @@ export class UmbDocumentTableCollectionViewElement extends UmbLitElement { @state() private _selection: Array = []; - private _collectionContext?: UmbDefaultCollectionContext; + private _collectionContext?: UmbDefaultCollectionContext; constructor() { super(); @@ -75,12 +72,11 @@ export class UmbDocumentTableCollectionViewElement extends UmbLitElement { }); } - private _createTableItems(items: Array) { + private _createTableItems(items: Array) { this._tableItems = items.map((item) => { - // TODO: use unique instead of id - if (!item.id) throw new Error('Item id is missing.'); + if (!item.unique) throw new Error('Item id is missing.'); return { - id: item.id, + id: item.unique, data: [ { columnAlias: 'entityName', diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document-granular-permission/input-document-granular-permission.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document-granular-permission/input-document-granular-permission.element.ts index 13542f654a..ac5a92dcb6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document-granular-permission/input-document-granular-permission.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document-granular-permission/input-document-granular-permission.element.ts @@ -1,16 +1,11 @@ +import { UmbDocumentItemRepository } from '../../repository/index.js'; +import type { UmbDocumentItemModel } from '../../repository/item/types.js'; import type { PropertyValueMap } from '@umbraco-cms/backoffice/external/lit'; import { css, html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; import { FormControlMixin } from '@umbraco-cms/backoffice/external/uui'; -import type { - UmbModalManagerContext} from '@umbraco-cms/backoffice/modal'; -import { - UMB_MODAL_MANAGER_CONTEXT, - UMB_CONFIRM_MODAL, - UMB_DOCUMENT_PICKER_MODAL, -} from '@umbraco-cms/backoffice/modal'; +import type { UmbModalManagerContext } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT, UMB_DOCUMENT_PICKER_MODAL } from '@umbraco-cms/backoffice/modal'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import type { DocumentItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; -import { UmbDocumentRepository } from '@umbraco-cms/backoffice/document'; import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import type { UmbObserverController } from '@umbraco-cms/backoffice/observable-api'; import { splitStringToArray } from '@umbraco-cms/backoffice/utils'; @@ -35,11 +30,11 @@ export class UmbInputDocumentGranularPermissionElement extends FormControlMixin( } @state() - private _items?: Array; + private _items?: Array; - #documentRepository = new UmbDocumentRepository(this); + #documentItemRepository = new UmbDocumentItemRepository(this); #modalContext?: UmbModalManagerContext; - #pickedItemsObserver?: UmbObserverController>; + #pickedItemsObserver?: UmbObserverController>; constructor() { super(); @@ -58,7 +53,7 @@ export class UmbInputDocumentGranularPermissionElement extends FormControlMixin( async #observePickedDocuments() { this.#pickedItemsObserver?.destroy(); - const { asObservable } = await this.#documentRepository.requestItems(this._selectedIds); + const { asObservable } = await this.#documentItemRepository.requestItems(this._selectedIds); this.#pickedItemsObserver = this.observe(asObservable(), (items) => (this._items = items)); } @@ -76,21 +71,6 @@ export class UmbInputDocumentGranularPermissionElement extends FormControlMixin( //}); } - async #removeItem(item: DocumentItemResponseModel) { - const modalContext = this.#modalContext?.open(UMB_CONFIRM_MODAL, { - data: { - color: 'danger', - headline: `Remove ${item.name}?`, - content: 'Are you sure you want to remove this item', - confirmLabel: 'Remove', - }, - }); - - await modalContext?.onSubmit(); - const newSelection = this._selectedIds.filter((value) => value !== item.id); - this.#setSelection(newSelection); - } - #setSelection(newSelection: Array) { this.selectedIds = newSelection; this.dispatchEvent(new UmbChangeEvent()); @@ -108,8 +88,8 @@ export class UmbInputDocumentGranularPermissionElement extends FormControlMixin( `; } - #renderItem(item: DocumentItemResponseModel) { - return html`
Render something here
`; + #renderItem(item: UmbDocumentItemModel) { + return html`
Render something here ${item.unique}
`; } static styles = [ diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document-picker-root/input-document-picker-root.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document-picker-root/input-document-picker-root.element.ts index 68b5ab60b3..cb07baf61e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document-picker-root/input-document-picker-root.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document-picker-root/input-document-picker-root.element.ts @@ -1,4 +1,5 @@ import { UmbDocumentPickerContext } from '../input-document/input-document.context.js'; +import type { UmbDocumentItemModel } from '../../repository/index.js'; import { html, customElement, property, state, ifDefined, repeat } from '@umbraco-cms/backoffice/external/lit'; import { FormControlMixin } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @@ -6,21 +7,21 @@ import type { DocumentItemResponseModel } from '@umbraco-cms/backoffice/backend- @customElement('umb-input-document-picker-root') export class UmbInputDocumentPickerRootElement extends FormControlMixin(UmbLitElement) { - public get nodeId(): string | null | undefined { + public get unique(): string | null | undefined { return this.#documentPickerContext.getSelection()[0]; } - public set nodeId(id: string | null | undefined) { - const selection = id ? [id] : []; + public set unique(unique: string | null | undefined) { + const selection = unique ? [unique] : []; this.#documentPickerContext.setSelection(selection); } @property() - public set value(id: string) { - this.nodeId = id; + public set value(unique: string) { + this.unique = unique; } @state() - private _items?: Array; + private _items?: Array; #documentPickerContext = new UmbDocumentPickerContext(this); @@ -50,7 +51,7 @@ export class UmbInputDocumentPickerRootElement extends FormControlMixin(UmbLitEl ? html` ${repeat( this._items, - (item) => item.id, + (item) => item.unique, (item) => this._renderItem(item), )} ` @@ -60,7 +61,7 @@ export class UmbInputDocumentPickerRootElement extends FormControlMixin(UmbLitEl } #renderButtons() { - if (this.nodeId) return; + if (this.unique) return; //TODO: Dynamic paths return html` @@ -75,18 +76,20 @@ export class UmbInputDocumentPickerRootElement extends FormControlMixin(UmbLitEl `; } - private _renderItem(item: DocumentItemResponseModel) { - if (!item.id) return; + private _renderItem(item: UmbDocumentItemModel) { + if (!item.unique) return; + // TODO: get correct variant name + const name = item.variants[0]?.name; return html` - + - this.#documentPickerContext.openPicker()} label="Edit document ${item.name}" + this.#documentPickerContext.openPicker()} label="Edit document ${name}" >Edit this.#documentPickerContext.requestRemoveItem(item.id!)} - label="Remove document ${item.name}" + @click=${() => this.#documentPickerContext.requestRemoveItem(item.unique)} + label="Remove document ${name}" >Remove diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document/input-document.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document/input-document.context.ts index c2682b22fc..39934e8958 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document/input-document.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document/input-document.context.ts @@ -1,11 +1,11 @@ -import { UMB_DOCUMENT_REPOSITORY_ALIAS } from '../../repository/index.js'; +import { UMB_DOCUMENT_ITEM_REPOSITORY_ALIAS } from '../../repository/index.js'; +import type { UmbDocumentItemModel } from '../../repository/index.js'; import { UmbPickerInputContext } from '@umbraco-cms/backoffice/picker-input'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import { UMB_DOCUMENT_PICKER_MODAL } from '@umbraco-cms/backoffice/modal'; -import type { DocumentTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; -export class UmbDocumentPickerContext extends UmbPickerInputContext { +export class UmbDocumentPickerContext extends UmbPickerInputContext { constructor(host: UmbControllerHostElement) { - super(host, UMB_DOCUMENT_REPOSITORY_ALIAS, UMB_DOCUMENT_PICKER_MODAL); + super(host, UMB_DOCUMENT_ITEM_REPOSITORY_ALIAS, UMB_DOCUMENT_PICKER_MODAL); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document/input-document.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document/input-document.element.ts index c2877f68ed..922b76e266 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document/input-document.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document/input-document.element.ts @@ -1,11 +1,12 @@ +import type { UmbDocumentTreeItemModel } from '../../tree/types.js'; import { UmbDocumentPickerContext } from './input-document.context.js'; import { css, html, customElement, property, state, ifDefined, repeat } from '@umbraco-cms/backoffice/external/lit'; import { FormControlMixin } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import type { DocumentItemResponseModel, DocumentTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; import { splitStringToArray } from '@umbraco-cms/backoffice/utils'; import { UMB_WORKSPACE_MODAL, UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/modal'; import { type UmbSorterConfig, UmbSorterController } from '@umbraco-cms/backoffice/sorter'; +import type { UmbDocumentItemModel } from '@umbraco-cms/backoffice/document'; const SORTER_CONFIG: UmbSorterConfig = { compareElementToModel: (element, model) => { @@ -102,7 +103,7 @@ export class UmbInputDocumentElement extends FormControlMixin(UmbLitElement) { private _editDocumentPath = ''; @state() - private _items?: Array; + private _items?: Array; #pickerContext = new UmbDocumentPickerContext(this); @@ -138,9 +139,9 @@ export class UmbInputDocumentElement extends FormControlMixin(UmbLitElement) { return undefined; } - #pickableFilter: (item: DocumentTreeItemResponseModel) => boolean = (item) => { + #pickableFilter: (item: UmbDocumentTreeItemModel) => boolean = (item) => { if (this.allowedContentTypeIds && this.allowedContentTypeIds.length > 0) { - return this.allowedContentTypeIds.includes(item.contentTypeId); + return this.allowedContentTypeIds.includes(item.documentType.unique); } return true; }; @@ -150,6 +151,8 @@ export class UmbInputDocumentElement extends FormControlMixin(UmbLitElement) { console.log('_openPicker', [this.startNodeId, this.ignoreUserStartNodes]); this.#pickerContext.openPicker({ hideTreeRoot: true, + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore pickableFilter: this.#pickableFilter, }); } @@ -163,7 +166,7 @@ export class UmbInputDocumentElement extends FormControlMixin(UmbLitElement) { return html` ${repeat( this._items, - (item) => item.id, + (item) => item.unique, (item) => this.#renderItem(item), )} `; @@ -178,16 +181,17 @@ export class UmbInputDocumentElement extends FormControlMixin(UmbLitElement) { label=${this.localize.term('general_choose')}>`; } - #renderItem(item: DocumentItemResponseModel) { - if (!item.id) return; + #renderItem(item: UmbDocumentItemModel) { + if (!item.unique) return; + // TODO: get correct variant name + const name = item.variants[0]?.name; + return html` - + ${this.#renderIcon(item)} ${this.#renderIsTrashed(item)} ${this.#renderOpenButton(item)} - this.#pickerContext.requestRemoveItem(item.id!)} - label="Remove document ${item.name}" + this.#pickerContext.requestRemoveItem(item.unique)} label="Remove document ${name}" >${this.localize.term('general_remove')} @@ -195,22 +199,26 @@ export class UmbInputDocumentElement extends FormControlMixin(UmbLitElement) { `; } - #renderIcon(item: DocumentItemResponseModel) { - if (!item.icon) return; - return html``; + #renderIcon(item: UmbDocumentItemModel) { + if (!item.documentType.icon) return; + return html``; } - #renderIsTrashed(item: DocumentItemResponseModel) { + #renderIsTrashed(item: UmbDocumentItemModel) { if (!item.isTrashed) return; return html`Trashed`; } - #renderOpenButton(item: DocumentItemResponseModel) { + #renderOpenButton(item: UmbDocumentItemModel) { if (!this.showOpenButton) return; + + // TODO: get correct variant name + const name = item.variants[0]?.name; + return html` + href="${this._editDocumentPath}edit/${item.unique}" + label="${this.localize.term('general_open')} ${name}"> ${this.localize.term('general_open')} `; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create-blueprint.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create-blueprint.action.ts index cf37289584..50f38d4f78 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create-blueprint.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create-blueprint.action.ts @@ -1,14 +1,14 @@ -import type { UmbDocumentRepository } from '../repository/document.repository.js'; +import type { UmbDocumentDetailRepository } from '../repository/index.js'; import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; -export class UmbCreateDocumentBlueprintEntityAction extends UmbEntityActionBase { +export class UmbCreateDocumentBlueprintEntityAction extends UmbEntityActionBase { constructor(host: UmbControllerHostElement, repositoryAlias: string, unique: string, entityType: string) { super(host, repositoryAlias, unique, entityType); } async execute() { console.log(`execute for: ${this.unique}`); - await this.repository?.createBlueprint(); + //await this.repository?.createBlueprint(); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/create-document-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/create-document-modal.element.ts deleted file mode 100644 index 3dbb942327..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/create-document-modal.element.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { html, nothing, customElement, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; -import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import type { - UmbCreateDocumentModalData, - UmbCreateDocumentModalValue} from '@umbraco-cms/backoffice/modal'; -import { - UmbModalBaseElement, -} from '@umbraco-cms/backoffice/modal'; -import type { DocumentTypeResponseModel } from '@umbraco-cms/backoffice/backend-api'; -import { UmbDocumentRepository } from '@umbraco-cms/backoffice/document'; - -@customElement('umb-create-document-modal') -export class UmbCreateDocumentModalElement extends UmbModalBaseElement< - UmbCreateDocumentModalData, - UmbCreateDocumentModalValue -> { - #documentRepository = new UmbDocumentRepository(this); - - @state() - private _allowedDocumentTypes: DocumentTypeResponseModel[] = []; - - @state() - private _headline: string = 'Create'; - - async firstUpdated() { - const documentId = this.data?.id || null; - - this.#retrieveAllowedDocumentTypesOf(documentId); - - if (documentId) { - this.#retrieveHeadline(documentId); - } - } - - async #retrieveAllowedDocumentTypesOf(id: string | null) { - const { data } = await this.#documentRepository.requestAllowedDocumentTypesOf(id); - - if (data) { - // TODO: implement pagination, or get 1000? - this._allowedDocumentTypes = data.items; - } - } - - async #retrieveHeadline(id: string) { - if (!id) return; - const { data } = await this.#documentRepository.requestById(id); - if (data) { - // TODO: we need to get the correct variant context here - this._headline = `Create at ${data.variants?.[0].name}`; - } - } - - private _handleCancel() { - this.modalContext?.reject(); - } - - #onClick(event: PointerEvent) { - event.stopPropagation(); - const target = event.target as HTMLButtonElement; - const documentTypeId = target.dataset.id; - if (!documentTypeId) throw new Error('No document type id found'); - this.value = { documentTypeId }; - this.modalContext?.submit(); - } - - render() { - return html` - - - ${this._allowedDocumentTypes.length === 0 ? html`

No allowed types

` : nothing} - ${this._allowedDocumentTypes.map( - (item) => html` - - ${item.icon ? html`` : nothing} - - `, - )} -
- Cancel -
- `; - } - - static styles = [UmbTextStyles]; -} - -export default UmbCreateDocumentModalElement; - -declare global { - interface HTMLElementTagNameMap { - 'umb-create-document-modal': UmbCreateDocumentModalElement; - } -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/create.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/create.action.ts index 7616da850a..74d59f0709 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/create.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/create.action.ts @@ -1,19 +1,21 @@ -import type { UmbDocumentRepository } from '../../repository/document.repository.js'; +import type { UmbDocumentDetailRepository } from '../../repository/index.js'; +import { UmbDocumentItemRepository } from '../../repository/index.js'; +import type { UmbDocumentCreateOptionsModalData } from './document-create-options-modal.token.js'; +import { UMB_DOCUMENT_CREATE_OPTIONS_MODAL } from './document-create-options-modal.token.js'; import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; -import type { - UmbModalManagerContext} from '@umbraco-cms/backoffice/modal'; -import { - UMB_MODAL_MANAGER_CONTEXT, - UMB_CREATE_DOCUMENT_MODAL as UMB_CREATE_DOCUMENT_MODAL, -} from '@umbraco-cms/backoffice/modal'; +import type { UmbModalManagerContext } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; -export class UmbCreateDocumentEntityAction extends UmbEntityActionBase { +export class UmbCreateDocumentEntityAction extends UmbEntityActionBase { #modalContext?: UmbModalManagerContext; + #itemRepository; constructor(host: UmbControllerHostElement, repositoryAlias: string, unique: string, entityType: string) { super(host, repositoryAlias, unique, entityType); + this.#itemRepository = new UmbDocumentItemRepository(host); + this.consumeContext(UMB_MODAL_MANAGER_CONTEXT, (instance) => { this.#modalContext = instance; }); @@ -21,25 +23,27 @@ export class UmbCreateDocumentEntityAction extends UmbEntityActionBase { + #documentTypeStructureRepository = new UmbDocumentTypeStructureRepository(this); + #documentItemRepository = new UmbDocumentItemRepository(this); + + @state() + private _allowedDocumentTypes: UmbAllowedDocumentTypeModel[] = []; + + @state() + private _headline: string = 'Create'; + + async firstUpdated() { + const documentUnique = this.data?.document?.unique || null; + const documentTypeUnique = this.data?.documentType?.unique || null; + + this.#retrieveAllowedDocumentTypesOf(documentTypeUnique); + + if (documentUnique) { + this.#retrieveHeadline(documentUnique); + } + } + + async #retrieveAllowedDocumentTypesOf(unique: string | null) { + const { data } = await this.#documentTypeStructureRepository.requestAllowedChildrenOf(unique); + + if (data) { + // TODO: implement pagination, or get 1000? + this._allowedDocumentTypes = data.items; + } + } + + async #retrieveHeadline(unique: string) { + if (!unique) return; + const { data } = await this.#documentItemRepository.requestItems([unique]); + if (data) { + // TODO: we need to get the correct variant context here + this._headline = `Create at ${data[0].variants?.[0].name}`; + } + } + + // close the modal when navigating to data type + #onNavigate() { + this._submitModal(); + } + + render() { + return html` + + + ${this._allowedDocumentTypes.length === 0 ? html`

No allowed types

` : nothing} + ${this._allowedDocumentTypes.map( + (documentType) => html` + + > ${documentType.icon ? html`` : nothing} + + `, + )} +
+ Cancel +
+ `; + } + + static styles = [UmbTextStyles]; +} + +export default UmbDocumentCreateOptionsModalElement; + +declare global { + interface HTMLElementTagNameMap { + 'umb-document-create-options-modal': UmbDocumentCreateOptionsModalElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/document-create-options-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/document-create-options-modal.token.ts new file mode 100644 index 0000000000..add3c78079 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/document-create-options-modal.token.ts @@ -0,0 +1,22 @@ +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; + +export interface UmbDocumentCreateOptionsModalData { + document: { + unique: string; + } | null; + documentType: { + unique: string; + } | null; +} + +export interface UmbDocumentCreateOptionsModalValue {} + +export const UMB_DOCUMENT_CREATE_OPTIONS_MODAL = new UmbModalToken< + UmbDocumentCreateOptionsModalData, + UmbDocumentCreateOptionsModalValue +>('Umb.Modal.Document.CreateOptions', { + modal: { + type: 'sidebar', + size: 'small', + }, +}); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/manifests.ts index 4b154d25af..59e716fcf9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/manifests.ts @@ -1,4 +1,4 @@ -import { UMB_DOCUMENT_REPOSITORY_ALIAS } from '../../repository/manifests.js'; +import { UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS } from '../../repository/index.js'; import { UMB_DOCUMENT_ENTITY_TYPE, UMB_DOCUMENT_ROOT_ENTITY_TYPE } from '../../entity.js'; import { UmbCreateDocumentEntityAction } from './create.action.js'; import type { ManifestEntityAction, ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; @@ -13,7 +13,7 @@ const entityActions: Array = [ meta: { icon: 'icon-add', label: 'Create', - repositoryAlias: UMB_DOCUMENT_REPOSITORY_ALIAS, + repositoryAlias: UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS, entityTypes: [UMB_DOCUMENT_ROOT_ENTITY_TYPE, UMB_DOCUMENT_ENTITY_TYPE], }, /* removed until we have permissions in place @@ -33,9 +33,9 @@ const entityActions: Array = [ const modals: Array = [ { type: 'modal', - alias: 'Umb.Modal.CreateDocument', - name: 'Create Document Modal', - js: () => import('./create-document-modal.element.js'), + alias: 'Umb.Modal.Document.CreateOptions', + name: 'Document Create Options Modal', + js: () => import('./document-create-options-modal.element.js'), }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames.action.ts deleted file mode 100644 index 8a6f508079..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames.action.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { UmbDocumentRepository } from '../repository/document.repository.js'; -import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; -import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; - -export class UmbDocumentCultureAndHostnamesEntityAction extends UmbEntityActionBase { - constructor(host: UmbControllerHostElement, repositoryAlias: string, unique: string, entityType: string) { - super(host, repositoryAlias, unique, entityType); - } - - async execute() { - console.log(`execute for: ${this.unique}`); - await this.repository?.setCultureAndHostnames(); - } -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/culture-and-hostnames.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/culture-and-hostnames.action.ts new file mode 100644 index 0000000000..f22531fd36 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/culture-and-hostnames.action.ts @@ -0,0 +1,28 @@ +import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; +import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_CULTURE_AND_HOSTNAMES_MODAL, type UmbDocumentDetailRepository } from '@umbraco-cms/backoffice/document'; + +export class UmbDocumentCultureAndHostnamesEntityAction extends UmbEntityActionBase { + #modalContext?: typeof UMB_MODAL_MANAGER_CONTEXT.TYPE; + + constructor(host: UmbControllerHostElement, repositoryAlias: string, unique: string, entityType: string) { + super(host, repositoryAlias, unique, entityType); + + this.consumeContext(UMB_MODAL_MANAGER_CONTEXT, (instance) => { + this.#modalContext = instance; + }); + } + + async execute() { + if (!this.repository) return; + this._openModal(this.unique || null); + } + + private async _openModal(unique: string | null) { + if (!this.#modalContext) return; + this.#modalContext.open(UMB_CULTURE_AND_HOSTNAMES_MODAL, { + data: { unique }, + }); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/index.ts new file mode 100644 index 0000000000..e130217e61 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/index.ts @@ -0,0 +1,2 @@ +export * from './modal/index.js'; +export * from './repository/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/manifests.ts new file mode 100644 index 0000000000..ca988d19ad --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/manifests.ts @@ -0,0 +1,31 @@ +import { UMB_DOCUMENT_ENTITY_TYPE } from '../../entity.js'; +import { UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS } from '../../repository/index.js'; +import { UmbDocumentCultureAndHostnamesEntityAction } from './culture-and-hostnames.action.js'; +import type { ManifestEntityAction, ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; + +const entityActions: Array = [ + { + type: 'entityAction', + alias: 'Umb.EntityAction.Document.CultureAndHostnames', + name: 'Culture And Hostnames Document Entity Action', + weight: 400, + api: UmbDocumentCultureAndHostnamesEntityAction, + meta: { + icon: 'icon-home', + label: 'Culture and Hostnames', + repositoryAlias: UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS, + entityTypes: [UMB_DOCUMENT_ENTITY_TYPE], + }, + }, +]; + +const manifestModals: Array = [ + { + type: 'modal', + alias: 'Umb.Modal.CultureAndHostnames', + name: 'Culture And Hostnames Modal', + js: () => import('./modal/culture-and-hostnames-modal.element.js'), + }, +]; + +export const manifests = [...entityActions, ...manifestModals]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/modal/culture-and-hostnames-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/modal/culture-and-hostnames-modal.element.ts new file mode 100644 index 0000000000..343e6ff0a1 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/modal/culture-and-hostnames-modal.element.ts @@ -0,0 +1,247 @@ +import { html, customElement, state, css, repeat, query } from '@umbraco-cms/backoffice/external/lit'; +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; +import { UmbLanguageRepository } from '@umbraco-cms/backoffice/language'; +import type { DomainPresentationModel, LanguageResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import { + UmbDocumentCultureAndHostnamesRepository, + type UmbCultureAndHostnamesModalData, + type UmbCultureAndHostnamesModalValue, +} from '@umbraco-cms/backoffice/document'; +import type { UUIInputEvent, UUIPopoverContainerElement, UUISelectEvent } from '@umbraco-cms/backoffice/external/uui'; + +@customElement('umb-culture-and-hostnames-modal') +export class UmbCultureAndHostnamesModalElement extends UmbModalBaseElement< + UmbCultureAndHostnamesModalData, + UmbCultureAndHostnamesModalValue +> { + #documentRepository = new UmbDocumentCultureAndHostnamesRepository(this); + #languageRepository = new UmbLanguageRepository(this); + + #unique?: string | null; + + @state() + private _languageModel: Array = []; + + @state() + private _defaultIsoCode?: string | null; + + @state() + private _domains: Array = []; + + @query('#more-options') + popoverContainerElement?: UUIPopoverContainerElement; + + // Init + + firstUpdated() { + this.#unique = this.data?.unique; + this.#requestLanguages(); + this.#readDomains(); + } + + async #readDomains() { + if (!this.#unique) return; + const { data } = await this.#documentRepository.readCultureAndHostnames(this.#unique); + + if (!data) return; + this._defaultIsoCode = data.defaultIsoCode; + this._domains = data.domains; + } + + async #requestLanguages() { + const { data } = await this.#languageRepository.requestLanguages(); + if (!data) return; + this._languageModel = data.items; + } + + // Modal + + async #handleSave() { + this.value = { defaultIsoCode: this._defaultIsoCode, domains: this._domains }; + await this.#documentRepository.updateCultureAndHostnames(this.#unique!, this.value); + } + + #handleClose() { + this.modalContext?.submit(); + } + + // Events + + #onChangeLanguage(e: UUISelectEvent) { + const defaultIsoCode = e.target.value as string; + if (defaultIsoCode === 'inherit') { + this._defaultIsoCode = null; + } else { + this._defaultIsoCode = defaultIsoCode; + } + } + + #onChangeDomainLanguage(e: UUISelectEvent, index: number) { + const isoCode = e.target.value as string; + this._domains = this._domains.map((domain, i) => (index === i ? { ...domain, isoCode } : domain)); + } + + #onChangeDomainHostname(e: UUIInputEvent, index: number) { + const domainName = e.target.value as string; + this._domains = this._domains.map((domain, i) => (index === i ? { ...domain, domainName } : domain)); + } + + async #onRemoveDomain(index: number) { + this._domains = this._domains.filter((d, i) => index !== i); + } + + #onAddDomain(useCurrentDomain?: boolean) { + const defaultModel = this._languageModel.find((model) => model.isDefault); + if (useCurrentDomain) { + // TODO: This ignorer is just needed for JSON SCHEMA TO WORK, As its not updated with latest TS jet. + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + this.popoverContainerElement?.hidePopover(); + this._domains = [...this._domains, { isoCode: defaultModel?.isoCode ?? '', domainName: window.location.host }]; + } else { + this._domains = [...this._domains, { isoCode: defaultModel?.isoCode ?? '', domainName: '' }]; + } + } + + // Renders + + render() { + return html` + + ${this.#renderCultureSection()} ${this.#renderDomainSection()} + + + + `; + } + + #renderCultureSection() { + return html` + ${this.localize.term('assignDomain_language')} + + + + ${this.localize.term('assignDomain_inherit')} + + ${this.#renderLanguageModelOptions()} + + + `; + } + + #renderDomainSection() { + return html` + + Valid domain names are: "example.com", "www.example.com", "example.com:8080", or "https://www.example.com/".
Furthermore + also one-level paths in domains are supported, eg. "example.com/en" or "/en". +
+ ${this.#renderDomains()} ${this.#renderAddNewDomainButton()} +
`; + } + + #renderDomains() { + if (!this._domains?.length) return; + return html`
+ ${repeat( + this._domains, + (domain) => domain.isoCode, + (domain, index) => html` + this.#onChangeDomainHostname(e, index)}> + this.#onChangeDomainLanguage(e, index)}> + ${this.#renderLanguageModelOptions()} + + this.#onRemoveDomain(index)}> + + + `, + )} +
`; + } + + #renderLanguageModelOptions() { + return html`${repeat( + this._languageModel, + (model) => model.isoCode, + (model) => html`${model.name}`, + )}`; + } + + #renderAddNewDomainButton() { + return html` + this.#onAddDomain()}> + + + + + + this.#onAddDomain(true)}> + + + `; + } + + static styles = [ + UmbTextStyles, + css` + uui-button-group { + width: 100%; + } + + uui-box:first-child { + margin-bottom: var(--uui-size-layout-1); + } + + #dropdown { + flex-grow: 0; + } + + #domains { + margin-top: var(--uui-size-layout-1); + margin-bottom: var(--uui-size-2); + display: grid; + grid-template-columns: 1fr 1fr auto; + grid-gap: var(--uui-size-1); + } + `, + ]; +} + +export default UmbCultureAndHostnamesModalElement; + +declare global { + interface HTMLElementTagNameMap { + 'umb-culture-and-hostnames-modal': UmbCultureAndHostnamesModalElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/modal/culture-and-hostnames-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/modal/culture-and-hostnames-modal.token.ts new file mode 100644 index 0000000000..b6c802805a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/modal/culture-and-hostnames-modal.token.ts @@ -0,0 +1,21 @@ +import type { DomainPresentationModel } from '@umbraco-cms/backoffice/backend-api'; +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; + +export interface UmbCultureAndHostnamesModalData { + unique: string | null; +} + +export interface UmbCultureAndHostnamesModalValue { + defaultIsoCode?: string | null; + domains: Array; +} + +export const UMB_CULTURE_AND_HOSTNAMES_MODAL = new UmbModalToken< + UmbCultureAndHostnamesModalData, + UmbCultureAndHostnamesModalValue +>('Umb.Modal.CultureAndHostnames', { + modal: { + type: 'sidebar', + size: 'medium', + }, +}); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/modal/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/modal/index.ts new file mode 100644 index 0000000000..0b0238bc88 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/modal/index.ts @@ -0,0 +1,2 @@ +export * from './culture-and-hostnames-modal.token.js'; +export * from './culture-and-hostnames-modal.element.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/repository/culture-and-hostnames.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/repository/culture-and-hostnames.repository.ts new file mode 100644 index 0000000000..219c5a75f6 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/repository/culture-and-hostnames.repository.ts @@ -0,0 +1,42 @@ +import { UmbDocumentCultureAndHostnamesServerDataSource } from './culture-and-hostnames.server.data.js'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; +import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification'; +import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; +import type { DomainsPresentationModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; + +export class UmbDocumentCultureAndHostnamesRepository extends UmbBaseController implements UmbApi { + #dataSource = new UmbDocumentCultureAndHostnamesServerDataSource(this); + + #notificationContext?: typeof UMB_NOTIFICATION_CONTEXT.TYPE; + + constructor(host: UmbControllerHost) { + super(host); + + this.consumeContext(UMB_NOTIFICATION_CONTEXT, (instance) => { + this.#notificationContext = instance; + }); + } + + async readCultureAndHostnames(unique: string) { + if (!unique) throw new Error('Unique is missing'); + + const { data, error } = await this.#dataSource.read(unique); + if (!error) { + return { data }; + } + return { error }; + } + + async updateCultureAndHostnames(unique: string, data: DomainsPresentationModelBaseModel) { + if (!unique) throw new Error('Unique is missing'); + if (!data) throw new Error('Data is missing'); + + const { error } = await this.#dataSource.update(unique, data); + if (!error) { + const notification = { data: { message: `Cultures and hostnames saved` } }; + this.#notificationContext?.peek('positive', notification); + } + return { error }; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/repository/culture-and-hostnames.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/repository/culture-and-hostnames.server.data.ts new file mode 100644 index 0000000000..c3cd1dabe2 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/repository/culture-and-hostnames.server.data.ts @@ -0,0 +1,44 @@ +import { DocumentResource } from '@umbraco-cms/backoffice/backend-api'; +import type { DomainsPresentationModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; + +/** + * A data source for the Document Culture and Hostnames that fetches data from the server + * @export + * @class UmbDocumentCultureAndHostnamesServerDataSource + * @implements {RepositoryDetailDataSource} + */ +export class UmbDocumentCultureAndHostnamesServerDataSource { + #host: UmbControllerHost; + + /** + * Creates an instance of UmbDocumentCultureAndHostnamesServerDataSource. + * @param {UmbControllerHost} host + * @memberof UmbDocumentCultureAndHostnamesServerDataSource + */ + constructor(host: UmbControllerHost) { + this.#host = host; + } + + /** + * Fetches the Culture and Hostnames for the given Document unique + * @param {string} unique + * @memberof UmbDocumentCultureAndHostnamesServerDataSource + */ + async read(unique: string) { + if (!unique) throw new Error('Unique is missing'); + return tryExecuteAndNotify(this.#host, DocumentResource.getDocumentByIdDomains({ id: unique })); + } + + /** + * Updates Culture and Hostnames for the given Document unique + * @param {string} unique + * @param {DomainsPresentationModelBaseModel} data + * @memberof UmbDocumentCultureAndHostnamesServerDataSource + */ + async update(unique: string, data: DomainsPresentationModelBaseModel) { + if (!unique) throw new Error('Unique is missing'); + return tryExecuteAndNotify(this.#host, DocumentResource.putDocumentByIdDomains({ id: unique, requestBody: data })); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/repository/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/repository/index.ts new file mode 100644 index 0000000000..76199887dd --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/repository/index.ts @@ -0,0 +1,2 @@ +export { UmbDocumentCultureAndHostnamesRepository } from './culture-and-hostnames.repository.js'; +export { UMB_DOCUMENT_CULTURE_AND_HOSTNAMES_REPOSITORY_ALIAS } from './manifests.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/repository/manifests.ts new file mode 100644 index 0000000000..603ca30ed7 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/repository/manifests.ts @@ -0,0 +1,13 @@ +import { UmbDocumentCultureAndHostnamesRepository } from '../repository/index.js'; +import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; + +export const UMB_DOCUMENT_CULTURE_AND_HOSTNAMES_REPOSITORY_ALIAS = 'Umb.Repository.Document.CultureAndHostnames'; + +const repository: ManifestRepository = { + type: 'repository', + alias: UMB_DOCUMENT_CULTURE_AND_HOSTNAMES_REPOSITORY_ALIAS, + name: 'Document Culture And Hostnames Repository', + api: UmbDocumentCultureAndHostnamesRepository, +}; + +export const manifests = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/index.ts index 7f3a411395..24085f0259 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/index.ts @@ -1 +1,2 @@ export * from './public-access/index.js'; +export * from './culture-and-hostnames/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/manifests.ts index e6046687b0..b0b5322c9e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/manifests.ts @@ -1,13 +1,13 @@ -import { UMB_DOCUMENT_REPOSITORY_ALIAS } from '../repository/manifests.js'; +import { UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS } from '../repository/index.js'; import { UMB_DOCUMENT_ENTITY_TYPE, UMB_DOCUMENT_ROOT_ENTITY_TYPE } from '../entity.js'; import { UmbPublishDocumentEntityAction } from './publish.action.js'; -import { UmbDocumentCultureAndHostnamesEntityAction } from './culture-and-hostnames.action.js'; import { UmbCreateDocumentBlueprintEntityAction } from './create-blueprint.action.js'; import { UmbUnpublishDocumentEntityAction } from './unpublish.action.js'; import { UmbRollbackDocumentEntityAction } from './rollback.action.js'; import { manifests as createManifests } from './create/manifests.js'; import { manifests as permissionManifests } from './permissions/manifests.js'; import { manifests as publicAccessManifests } from './public-access/manifests.js'; +import { manifests as cultureAndHostnamesManifests } from './culture-and-hostnames/manifests.js'; import { UmbCopyEntityAction, UmbMoveEntityAction, @@ -19,6 +19,7 @@ const entityActions: Array = [ ...createManifests, ...permissionManifests, ...publicAccessManifests, + ...cultureAndHostnamesManifests, { type: 'entityAction', alias: 'Umb.EntityAction.Document.CreateBlueprint', @@ -28,7 +29,7 @@ const entityActions: Array = [ meta: { icon: 'icon-blueprint', label: 'Create Document Blueprint (TBD)', - repositoryAlias: UMB_DOCUMENT_REPOSITORY_ALIAS, + repositoryAlias: UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS, entityTypes: [UMB_DOCUMENT_ENTITY_TYPE], }, }, @@ -41,7 +42,7 @@ const entityActions: Array = [ meta: { icon: 'icon-enter', label: 'Move (TBD)', - repositoryAlias: UMB_DOCUMENT_REPOSITORY_ALIAS, + repositoryAlias: UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS, entityTypes: [UMB_DOCUMENT_ENTITY_TYPE], }, }, @@ -54,7 +55,7 @@ const entityActions: Array = [ meta: { icon: 'icon-documents', label: 'Copy (TBD)', - repositoryAlias: UMB_DOCUMENT_REPOSITORY_ALIAS, + repositoryAlias: UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS, entityTypes: [UMB_DOCUMENT_ENTITY_TYPE], }, }, @@ -67,23 +68,10 @@ const entityActions: Array = [ meta: { icon: 'icon-navigation-vertical', label: 'Sort (TBD)', - repositoryAlias: UMB_DOCUMENT_REPOSITORY_ALIAS, + repositoryAlias: UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS, entityTypes: [UMB_DOCUMENT_ROOT_ENTITY_TYPE, UMB_DOCUMENT_ENTITY_TYPE], }, }, - { - type: 'entityAction', - alias: 'Umb.EntityAction.Document.CultureAndHostnames', - name: 'Culture And Hostnames Document Entity Action', - weight: 400, - api: UmbDocumentCultureAndHostnamesEntityAction, - meta: { - icon: 'icon-home', - label: 'Culture And Hostnames (TBD)', - repositoryAlias: UMB_DOCUMENT_REPOSITORY_ALIAS, - entityTypes: [UMB_DOCUMENT_ENTITY_TYPE], - }, - }, { type: 'entityAction', alias: 'Umb.EntityAction.Document.Publish', @@ -92,7 +80,7 @@ const entityActions: Array = [ meta: { icon: 'icon-globe', label: 'Publish (TBD)', - repositoryAlias: UMB_DOCUMENT_REPOSITORY_ALIAS, + repositoryAlias: UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS, entityTypes: [UMB_DOCUMENT_ENTITY_TYPE], }, }, @@ -104,7 +92,7 @@ const entityActions: Array = [ meta: { icon: 'icon-globe', label: 'Unpublish (TBD)', - repositoryAlias: UMB_DOCUMENT_REPOSITORY_ALIAS, + repositoryAlias: UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS, entityTypes: [UMB_DOCUMENT_ENTITY_TYPE], }, }, @@ -116,7 +104,7 @@ const entityActions: Array = [ meta: { icon: 'icon-undo', label: 'Rollback (TBD)', - repositoryAlias: UMB_DOCUMENT_REPOSITORY_ALIAS, + repositoryAlias: UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS, entityTypes: [UMB_DOCUMENT_ENTITY_TYPE], }, }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/permissions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/permissions/manifests.ts index fcf91bd0ad..4342532571 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/permissions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/permissions/manifests.ts @@ -1,4 +1,4 @@ -import { UMB_DOCUMENT_REPOSITORY_ALIAS } from '../../repository/manifests.js'; +import { UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS } from '../../repository/index.js'; import { UMB_DOCUMENT_ENTITY_TYPE } from '../../entity.js'; import { UmbDocumentPermissionsEntityAction } from './permissions.action.js'; import type { ManifestEntityAction, ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; @@ -12,7 +12,7 @@ const entityActions: Array = [ meta: { icon: 'icon-vcard', label: 'Permissions (TBD)', - repositoryAlias: UMB_DOCUMENT_REPOSITORY_ALIAS, + repositoryAlias: UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS, entityTypes: [UMB_DOCUMENT_ENTITY_TYPE], }, }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/permissions/permissions-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/permissions/permissions-modal.element.ts index 67886ad820..e5c64d311f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/permissions/permissions-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/permissions/permissions-modal.element.ts @@ -1,5 +1,5 @@ import { UmbDocumentPermissionRepository } from '../../user-permissions/index.js'; -import { UmbDocumentRepository } from '../../repository/index.js'; +import { UmbDocumentItemRepository } from '../../repository/index.js'; import { UmbUserGroupRepository } from '@umbraco-cms/backoffice/user-group'; import { html, customElement, property, state, ifDefined, nothing } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; @@ -7,11 +7,12 @@ import type { UmbEntityUserPermissionSettingsModalData, UmbEntityUserPermissionSettingsModalValue, UmbModalContext, - UmbModalManagerContext} from '@umbraco-cms/backoffice/modal'; + UmbModalManagerContext, +} from '@umbraco-cms/backoffice/modal'; import { UMB_ENTITY_USER_PERMISSION_MODAL, UMB_MODAL_MANAGER_CONTEXT, - UMB_USER_GROUP_PICKER_MODAL + UMB_USER_GROUP_PICKER_MODAL, } from '@umbraco-cms/backoffice/modal'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { UmbSelectedEvent } from '@umbraco-cms/backoffice/event'; @@ -40,7 +41,7 @@ export class UmbPermissionsModalElement extends UmbLitElement { #userPermissions: Array = []; #userGroupRepository = new UmbUserGroupRepository(this); #documentPermissionRepository = new UmbDocumentPermissionRepository(this); - #documentRepository = new UmbDocumentRepository(this); + #documentItemRepository = new UmbDocumentItemRepository(this); #modalManagerContext?: UmbModalManagerContext; #userGroupPickerModal?: UmbModalContext; @@ -67,7 +68,7 @@ export class UmbPermissionsModalElement extends UmbLitElement { } async #getEntityItem(unique: string) { - const { data } = await this.#documentRepository.requestItems([unique]); + const { data } = await this.#documentItemRepository.requestItems([unique]); if (!data) throw new Error('Could not load item'); this._entityItem = data[0]; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/permissions/permissions.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/permissions/permissions.action.ts index eeb9bf8328..2c08ad502b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/permissions/permissions.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/permissions/permissions.action.ts @@ -1,14 +1,10 @@ -import type { UmbDocumentRepository } from '../../repository/document.repository.js'; +import type { UmbDocumentDetailRepository } from '../../repository/index.js'; import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; -import type { - UmbModalManagerContext} from '@umbraco-cms/backoffice/modal'; -import { - UMB_MODAL_MANAGER_CONTEXT, - UMB_PERMISSIONS_MODAL, -} from '@umbraco-cms/backoffice/modal'; +import type { UmbModalManagerContext } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT, UMB_PERMISSIONS_MODAL } from '@umbraco-cms/backoffice/modal'; -export class UmbDocumentPermissionsEntityAction extends UmbEntityActionBase { +export class UmbDocumentPermissionsEntityAction extends UmbEntityActionBase { #modalManagerContext?: UmbModalManagerContext; constructor(host: UmbControllerHostElement, repositoryAlias: string, unique: string, entityType: string) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/public-access/modal/public-access-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/public-access/modal/public-access-modal.element.ts index 3386afdfb7..1438373137 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/public-access/modal/public-access-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/public-access/modal/public-access-modal.element.ts @@ -3,7 +3,7 @@ import { html, customElement, state, css, nothing } from '@umbraco-cms/backoffic import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; import { - UmbDocumentRepository, + UmbDocumentDetailRepository, type UmbInputDocumentElement, type UmbPublicAccessModalData, type UmbPublicAccessModalValue, @@ -51,7 +51,7 @@ export class UmbPublicAccessModalElement extends UmbModalBaseElement< async #getDocumentName() { if (!this.#unique) return; // Should this be done here or in the action file? - const { data } = await new UmbDocumentRepository(this).requestById(this.#unique); + const { data } = await new UmbDocumentDetailRepository(this).requestByUnique(this.#unique); if (!data) return; //TODO How do we ensure we get the correct variant? this._documentName = data.variants[0]?.name; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/public-access/public-access.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/public-access/public-access.action.ts index 8219bdc8bf..2a15deefea 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/public-access/public-access.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/public-access/public-access.action.ts @@ -1,10 +1,10 @@ import { UMB_PUBLIC_ACCESS_MODAL } from './modal/public-access-modal.token.js'; import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; import { UMB_MODAL_MANAGER_CONTEXT, type UmbModalManagerContext } from '@umbraco-cms/backoffice/modal'; -import type { UmbDocumentRepository } from '@umbraco-cms/backoffice/document'; +import type { UmbDocumentDetailRepository } from '@umbraco-cms/backoffice/document'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; -export class UmbDocumentPublicAccessEntityAction extends UmbEntityActionBase { +export class UmbDocumentPublicAccessEntityAction extends UmbEntityActionBase { #modalContext?: UmbModalManagerContext; constructor(host: UmbControllerHostElement, repositoryAlias: string, unique: string, entityType: string) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/publish.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/publish.action.ts index 40cf961cff..47b25c5c70 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/publish.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/publish.action.ts @@ -1,8 +1,8 @@ -import type { UmbDocumentRepository } from '../repository/document.repository.js'; +import type { UmbDocumentPublishingRepository } from '../repository/index.js'; import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; -export class UmbPublishDocumentEntityAction extends UmbEntityActionBase { +export class UmbPublishDocumentEntityAction extends UmbEntityActionBase { constructor(host: UmbControllerHostElement, repositoryAlias: string, unique: string, entityType: string) { super(host, repositoryAlias, unique, entityType); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/rollback.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/rollback.action.ts index e54efe6ad6..e0c0b97461 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/rollback.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/rollback.action.ts @@ -1,14 +1,14 @@ -import type { UmbDocumentRepository } from '../repository/document.repository.js'; +import type { UmbDocumentDetailRepository } from '../repository/index.js'; import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; -export class UmbRollbackDocumentEntityAction extends UmbEntityActionBase { +export class UmbRollbackDocumentEntityAction extends UmbEntityActionBase { constructor(host: UmbControllerHostElement, repositoryAlias: string, unique: string, entityType: string) { super(host, repositoryAlias, unique, entityType); } async execute() { console.log(`execute for: ${this.unique}`); - await this.repository?.rollback(); + //await this.repository?.rollback(); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/unpublish.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/unpublish.action.ts index 80f95ae09b..3ffdbec308 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/unpublish.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/unpublish.action.ts @@ -1,8 +1,8 @@ -import type { UmbDocumentRepository } from '../repository/document.repository.js'; +import type { UmbDocumentPublishingRepository } from '../repository/index.js'; import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; -export class UmbUnpublishDocumentEntityAction extends UmbEntityActionBase { +export class UmbUnpublishDocumentEntityAction extends UmbEntityActionBase { constructor(host: UmbControllerHostElement, repositoryAlias: string, unique: string, entityType: string) { super(host, repositoryAlias, unique, entityType); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/copy/copy.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/copy/copy.action.ts index 7ac5b30300..5272eb2a1b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/copy/copy.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/copy/copy.action.ts @@ -1,14 +1,14 @@ -import type { UmbDocumentRepository } from '../../repository/document.repository.js'; +import type { UmbDocumentDetailRepository } from '../../repository/index.js'; import { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-action'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; -export class UmbDocumentCopyEntityBulkAction extends UmbEntityBulkActionBase { +export class UmbDocumentCopyEntityBulkAction extends UmbEntityBulkActionBase { constructor(host: UmbControllerHostElement, repositoryAlias: string, selection: Array) { super(host, repositoryAlias, selection); } async execute() { console.log(`execute copy for: ${this.selection}`); - await this.repository?.copy(); + //await this.repository?.copy(); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts index afe22f2661..e101731efd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/manifests.ts @@ -1,4 +1,4 @@ -import { UMB_DOCUMENT_REPOSITORY_ALIAS } from '../repository/manifests.js'; +import { UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS } from '../repository/index.js'; import { UMB_DOCUMENT_ENTITY_TYPE } from '../entity.js'; import { UMB_DOCUMENT_COLLECTION_ALIAS } from '../collection/index.js'; import { UmbDocumentMoveEntityBulkAction } from './move/move.action.js'; @@ -15,7 +15,7 @@ const entityActions: Array = [ api: UmbDocumentMoveEntityBulkAction, meta: { label: 'Move', - repositoryAlias: UMB_DOCUMENT_REPOSITORY_ALIAS, + repositoryAlias: UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS, }, conditions: [ { @@ -33,7 +33,7 @@ const entityActions: Array = [ api: UmbDocumentCopyEntityBulkAction, meta: { label: 'Copy', - repositoryAlias: UMB_DOCUMENT_REPOSITORY_ALIAS, + repositoryAlias: UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS, }, conditions: [ { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move/move.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move/move.action.ts index 1b54d4f289..56ed121d14 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move/move.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-bulk-actions/move/move.action.ts @@ -1,14 +1,14 @@ -import type { UmbDocumentRepository } from '../../repository/document.repository.js'; +import type { UmbDocumentDetailRepository } from '../../repository/index.js'; import { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-action'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; -export class UmbDocumentMoveEntityBulkAction extends UmbEntityBulkActionBase { +export class UmbDocumentMoveEntityBulkAction extends UmbEntityBulkActionBase { constructor(host: UmbControllerHostElement, repositoryAlias: string, selection: Array) { super(host, repositoryAlias, selection); } async execute() { console.log(`execute move for: ${this.selection}`); - await this.repository?.move(); + //await this.repository?.move(); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity.ts index 1ab686ef3a..c85fa375c0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity.ts @@ -1,2 +1,5 @@ -export const UMB_DOCUMENT_ROOT_ENTITY_TYPE = 'document-root'; export const UMB_DOCUMENT_ENTITY_TYPE = 'document'; +export const UMB_DOCUMENT_ROOT_ENTITY_TYPE = 'document-root'; + +export type UmbDocumentEntityType = typeof UMB_DOCUMENT_ENTITY_TYPE; +export type UmbDocumentRootEntityType = typeof UMB_DOCUMENT_ROOT_ENTITY_TYPE; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/menu-item/manifests.ts index d7d01218ac..141a25c337 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/menu-item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/menu-item/manifests.ts @@ -10,7 +10,6 @@ const menuItem: ManifestTypes = { weight: 200, meta: { label: 'Documents', - icon: 'icon-folder', menus: [UMB_CONTENT_MENU_ALIAS], treeAlias: UMB_DOCUMENT_TREE_ALIAS, hideTreeRoot: true, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-dataset-context/document-property-dataset-context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-dataset-context/document-property-dataset-context.ts index 7fdadb021a..94113d83a1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-dataset-context/document-property-dataset-context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-dataset-context/document-property-dataset-context.ts @@ -1,16 +1,13 @@ import type { UmbDocumentWorkspaceContext } from '../workspace/index.js'; -import type { - UmbNameablePropertyDatasetContext, - UmbPropertyDatasetContext} from '@umbraco-cms/backoffice/property'; -import { - UMB_PROPERTY_DATASET_CONTEXT -} from '@umbraco-cms/backoffice/property'; -import type { DocumentVariantResponseModel, PropertyTypeModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbNameablePropertyDatasetContext, UmbPropertyDatasetContext } from '@umbraco-cms/backoffice/property'; +import { UMB_PROPERTY_DATASET_CONTEXT } from '@umbraco-cms/backoffice/property'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; import { map } from '@umbraco-cms/backoffice/external/rxjs'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; +import type { UmbVariantModel } from '@umbraco-cms/backoffice/variant'; import { UmbVariantId } from '@umbraco-cms/backoffice/variant'; +import type { UmbPropertyTypeModel } from '@umbraco-cms/backoffice/content-type'; // TODO: This code can be split into a UmbContentTypePropertyDatasetContext, leaving just the publishing state and methods to this class. export class UmbDocumentPropertyDataContext @@ -23,7 +20,7 @@ export class UmbDocumentPropertyDataContext return this.#variantId; } - #currentVariant = new UmbObjectState(undefined); + #currentVariant = new UmbObjectState(undefined); currentVariant = this.#currentVariant.asObservable(); name = this.#currentVariant.asObservablePart((x) => x?.name); @@ -67,7 +64,7 @@ export class UmbDocumentPropertyDataContext ); } - #createPropertyVariantId(property: PropertyTypeModelBaseModel) { + #createPropertyVariantId(property: UmbPropertyTypeModel) { return UmbVariantId.Create({ culture: property.variesByCulture ? this.#variantId.culture : null, segment: property.variesBySegment ? this.#variantId.segment : null, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/entity-action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/entity-action/manifests.ts index 9f8c1e956d..dcc1f4a59a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/entity-action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/entity-action/manifests.ts @@ -1,5 +1,5 @@ import { UMB_DOCUMENT_ENTITY_TYPE } from '../../entity.js'; -import { UMB_DOCUMENT_REPOSITORY_ALIAS } from '../../repository/index.js'; +import { UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS } from '../../repository/index.js'; import { UmbTrashEntityAction } from '@umbraco-cms/backoffice/entity-action'; export const manifests = [ @@ -12,7 +12,7 @@ export const manifests = [ meta: { icon: 'icon-trash', label: 'Trash', - repositoryAlias: UMB_DOCUMENT_REPOSITORY_ALIAS, + repositoryAlias: UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS, entityTypes: [UMB_DOCUMENT_ENTITY_TYPE], }, conditions: [ diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/tree/document-recycle-bin-tree.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/tree/document-recycle-bin-tree.server.data-source.ts index 9da40d7cdf..c83692924c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/tree/document-recycle-bin-tree.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/tree/document-recycle-bin-tree.server.data-source.ts @@ -1,5 +1,5 @@ import type { UmbDocumentRecycleBinTreeItemModel } from './types.js'; -import type { RecycleBinItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { DocumentRecycleBinItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; import { DocumentResource } from '@umbraco-cms/backoffice/backend-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbTreeServerDataSourceBase } from '@umbraco-cms/backoffice/tree'; @@ -11,7 +11,7 @@ import { UmbTreeServerDataSourceBase } from '@umbraco-cms/backoffice/tree'; * @implements {UmbTreeDataSource} */ export class UmbDocumentRecycleBinTreeServerDataSource extends UmbTreeServerDataSourceBase< - RecycleBinItemResponseModel, + DocumentRecycleBinItemResponseModel, UmbDocumentRecycleBinTreeItemModel > { /** @@ -42,14 +42,13 @@ const getChildrenOf = (parentUnique: string | null) => { } }; -const mapper = (item: RecycleBinItemResponseModel): UmbDocumentRecycleBinTreeItemModel => { +const mapper = (item: DocumentRecycleBinItemResponseModel): UmbDocumentRecycleBinTreeItemModel => { return { id: item.id, - parentId: item.parentId || null, - name: item.name, + parentId: item.parent ? item.parent.id : null, entityType: 'document-recycle-bin', hasChildren: item.hasChildren, - isContainer: item.isContainer, isFolder: false, + name: item.variants[0]?.name, // TODO: this is not correct. We need to get it from the variants. This is a temp solution. }; }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/tree/types.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/tree/types.ts index dce02dbcd3..030dc87f93 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/tree/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/tree/types.ts @@ -1,5 +1,5 @@ import type { UmbEntityTreeItemModel, UmbEntityTreeRootModel } from '@umbraco-cms/backoffice/tree'; export interface UmbDocumentRecycleBinTreeItemModel extends UmbEntityTreeItemModel {} -// TODO: TREE STORE TYPE PROBLEM: + export interface UmbDocumentRecycleBinTreeRootModel extends UmbEntityTreeRootModel {} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/document-detail.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/document-detail.repository.ts new file mode 100644 index 0000000000..81ba4a1870 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/document-detail.repository.ts @@ -0,0 +1,11 @@ +import type { UmbDocumentDetailModel } from '../../types.js'; +import { UmbDocumentServerDataSource } from './document-detail.server.data-source.js'; +import { UMB_DOCUMENT_DETAIL_STORE_CONTEXT } from './document-detail.store.js'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbDetailRepositoryBase } from '@umbraco-cms/backoffice/repository'; + +export class UmbDocumentDetailRepository extends UmbDetailRepositoryBase { + constructor(host: UmbControllerHost) { + super(host, UmbDocumentServerDataSource, UMB_DOCUMENT_DETAIL_STORE_CONTEXT); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/document-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/document-detail.server.data-source.ts new file mode 100644 index 0000000000..edf2ea5843 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/document-detail.server.data-source.ts @@ -0,0 +1,181 @@ +import type { UmbDocumentDetailModel } from '../../types.js'; +import { UMB_DOCUMENT_ENTITY_TYPE } from '../../entity.js'; +import { UmbId } from '@umbraco-cms/backoffice/id'; +import type { UmbDetailDataSource } from '@umbraco-cms/backoffice/repository'; +import type { CreateDocumentRequestModel, UpdateDocumentRequestModel } from '@umbraco-cms/backoffice/backend-api'; +import { DocumentResource } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; + +/** + * A data source for the Document that fetches data from the server + * @export + * @class UmbDocumentServerDataSource + * @implements {RepositoryDetailDataSource} + */ +export class UmbDocumentServerDataSource implements UmbDetailDataSource { + #host: UmbControllerHost; + + /** + * Creates an instance of UmbDocumentServerDataSource. + * @param {UmbControllerHost} host + * @memberof UmbDocumentServerDataSource + */ + constructor(host: UmbControllerHost) { + this.#host = host; + } + + /** + * Creates a new Document scaffold + * @param {(string | null)} parentUnique + * @return { UmbDocumentDetailModel } + * @memberof UmbDocumentServerDataSource + */ + async createScaffold(parentUnique: string | null, preset: Partial = {}) { + const data: UmbDocumentDetailModel = { + entityType: UMB_DOCUMENT_ENTITY_TYPE, + unique: UmbId.new(), + parentUnique: parentUnique, + urls: [], + template: null, + documentType: { + unique: '', + }, + isTrashed: false, + values: [], + variants: [ + { + state: null, + culture: null, + segment: null, + name: '', + publishDate: null, + createDate: null, + updateDate: null, + }, + ], + ...preset, + }; + + return { data }; + } + + /** + * Fetches a Document with the given id from the server + * @param {string} unique + * @return {*} + * @memberof UmbDocumentServerDataSource + */ + async read(unique: string) { + if (!unique) throw new Error('Unique is missing'); + + const { data, error } = await tryExecuteAndNotify(this.#host, DocumentResource.getDocumentById({ id: unique })); + + if (error || !data) { + return { error }; + } + + // TODO: make data mapper to prevent errors + const document: UmbDocumentDetailModel = { + entityType: UMB_DOCUMENT_ENTITY_TYPE, + unique: data.id, + parentUnique: null, // TODO: this is not correct. It will be solved when we know where to get the parent from + values: data.values, + variants: data.variants.map((variant) => { + return { + state: variant.state, + culture: variant.culture || null, + segment: variant.segment || null, + name: variant.name, + publishDate: variant.publishDate || null, + createDate: variant.createDate, + updateDate: variant.updateDate, + }; + }), + urls: data.urls, + template: data.template ? { id: data.template.id } : null, + documentType: { unique: data.documentType.id }, + isTrashed: data.isTrashed, + }; + + return { data: document }; + } + + /** + * Inserts a new Document on the server + * @param {UmbDocumentDetailModel} model + * @return {*} + * @memberof UmbDocumentServerDataSource + */ + async create(model: UmbDocumentDetailModel) { + if (!model) throw new Error('Document is missing'); + if (!model.unique) throw new Error('Document unique is missing'); + + // TODO: make data mapper to prevent errors + const requestBody: CreateDocumentRequestModel = { + id: model.unique, + parent: model.parentUnique ? { id: model.parentUnique } : null, + documentType: { id: model.documentType.unique }, + template: model.template, + values: model.values, + variants: model.variants, + }; + + const { data, error } = await tryExecuteAndNotify( + this.#host, + DocumentResource.postDocument({ + requestBody, + }), + ); + + if (data) { + return this.read(data); + } + + return { error }; + } + + /** + * Updates a Document on the server + * @param {UmbDocumentDetailModel} Document + * @return {*} + * @memberof UmbDocumentServerDataSource + */ + async update(model: UmbDocumentDetailModel) { + if (!model.unique) throw new Error('Unique is missing'); + + // TODO: make data mapper to prevent errors + const requestBody: UpdateDocumentRequestModel = { + template: model.template, + values: model.values, + variants: model.variants, + }; + + const { data, error } = await tryExecuteAndNotify( + this.#host, + DocumentResource.putDocumentById({ + id: model.unique, + requestBody, + }), + ); + + if (data) { + return this.read(data); + } + + return { error }; + } + + /** + * Deletes a Document on the server + * @param {string} unique + * @return {*} + * @memberof UmbDocumentServerDataSource + */ + async delete(unique: string) { + if (!unique) throw new Error('Unique is missing'); + + // TODO: update to delete when implemented + return tryExecuteAndNotify(this.#host, DocumentResource.putDocumentByIdMoveToRecycleBin({ id: unique })); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/document-detail.store.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/document-detail.store.ts new file mode 100644 index 0000000000..828d0aa97c --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/document-detail.store.ts @@ -0,0 +1,23 @@ +import type { UmbDocumentDetailModel } from '../../types.js'; +import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; +import { UmbDetailStoreBase } from '@umbraco-cms/backoffice/store'; +import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; + +/** + * @export + * @class UmbDocumentDetailStore + * @extends {UmbStoreBase} + * @description - Data Store for Document Details + */ +export class UmbDocumentDetailStore extends UmbDetailStoreBase { + /** + * Creates an instance of UmbDocumentDetailStore. + * @param {UmbControllerHostElement} host + * @memberof UmbDocumentDetailStore + */ + constructor(host: UmbControllerHostElement) { + super(host, UMB_DOCUMENT_DETAIL_STORE_CONTEXT.toString()); + } +} + +export const UMB_DOCUMENT_DETAIL_STORE_CONTEXT = new UmbContextToken('UmbDocumentDetailStore'); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/index.ts new file mode 100644 index 0000000000..ddeb20f533 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/index.ts @@ -0,0 +1,2 @@ +export { UmbDocumentDetailRepository } from './document-detail.repository.js'; +export { UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS } from './manifests.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/manifests.ts new file mode 100644 index 0000000000..1941d61569 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/manifests.ts @@ -0,0 +1,23 @@ +import { UmbDocumentDetailRepository } from './document-detail.repository.js'; +import { UmbDocumentDetailStore } from './document-detail.store.js'; +import type { ManifestRepository, ManifestStore } from '@umbraco-cms/backoffice/extension-registry'; + +export const UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.Document.Detail'; + +const repository: ManifestRepository = { + type: 'repository', + alias: UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS, + name: 'Document Detail Repository', + api: UmbDocumentDetailRepository, +}; + +export const UMB_DOCUMENT_DETAIL_STORE_ALIAS = 'Umb.Store.Document.Detail'; + +const store: ManifestStore = { + type: 'store', + alias: UMB_DOCUMENT_DETAIL_STORE_ALIAS, + name: 'Document Detail Store', + api: UmbDocumentDetailStore, +}; + +export const manifests = [repository, store]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/document-item.store.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/document-item.store.ts deleted file mode 100644 index f4ee05e653..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/document-item.store.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { DocumentItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; -import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; -import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; -import { UmbEntityItemStore, UmbItemStore, UmbStoreBase } from '@umbraco-cms/backoffice/store'; -import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api'; - -/** - * @export - * @class UmbDocumentItemStore - * @extends {UmbStoreBase} - * @description - Data Store for Document items - */ - -export class UmbDocumentItemStore extends UmbEntityItemStore { - /** - * Creates an instance of UmbDocumentItemStore. - * @param {UmbControllerHostElement} host - * @memberof UmbDocumentItemStore - */ - constructor(host: UmbControllerHostElement) { - super(host, UMB_DOCUMENT_ITEM_STORE_CONTEXT.toString()); - } -} - -export const UMB_DOCUMENT_ITEM_STORE_CONTEXT = new UmbContextToken('UmbDocumentItemStore'); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/document.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/document.repository.ts deleted file mode 100644 index 3446f90fc2..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/document.repository.ts +++ /dev/null @@ -1,280 +0,0 @@ -import type { UmbDocumentTreeStore } from '../tree/document-tree.store.js'; -import { UMB_DOCUMENT_TREE_STORE_CONTEXT } from '../tree/document-tree.store.js'; -import { UmbDocumentServerDataSource } from './sources/document.server.data.js'; -import type { UmbDocumentStore } from './document.store.js'; -import { UMB_DOCUMENT_STORE_CONTEXT } from './document.store.js'; -import { UMB_DOCUMENT_ITEM_STORE_CONTEXT, type UmbDocumentItemStore } from './document-item.store.js'; -import { UmbDocumentItemServerDataSource } from './sources/document-item.server.data.js'; -import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; -import type { CreateDocumentRequestModel, UpdateDocumentRequestModel } from '@umbraco-cms/backoffice/backend-api'; -import type { UmbNotificationContext } from '@umbraco-cms/backoffice/notification'; -import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification'; -import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; -import type { UmbVariantId } from '@umbraco-cms/backoffice/variant'; - -export class UmbDocumentRepository extends UmbBaseController implements UmbApi { - #init!: Promise; - - #treeStore?: UmbDocumentTreeStore; - - #detailDataSource: UmbDocumentServerDataSource; - #store?: UmbDocumentStore; - - #itemSource: UmbDocumentItemServerDataSource; - #itemStore?: UmbDocumentItemStore; - - #notificationContext?: UmbNotificationContext; - - constructor(host: UmbControllerHost) { - super(host); - - // TODO: figure out how spin up get the correct data source - this.#detailDataSource = new UmbDocumentServerDataSource(this); - this.#itemSource = new UmbDocumentItemServerDataSource(this); - - this.#init = Promise.all([ - this.consumeContext(UMB_DOCUMENT_TREE_STORE_CONTEXT, (instance) => { - this.#treeStore = instance; - }).asPromise(), - - this.consumeContext(UMB_DOCUMENT_STORE_CONTEXT, (instance) => { - this.#store = instance; - }).asPromise(), - - this.consumeContext(UMB_DOCUMENT_ITEM_STORE_CONTEXT, (instance) => { - this.#itemStore = instance; - }).asPromise(), - - this.consumeContext(UMB_NOTIFICATION_CONTEXT, (instance) => { - this.#notificationContext = instance; - }).asPromise(), - ]); - } - - // TODO: Move - - // Structure permissions; - async requestAllowedDocumentTypesOf(id: string | null) { - if (id === undefined) throw new Error('Id is missing'); - await this.#init; - return this.#detailDataSource.getAllowedDocumentTypesOf(id); - } - - // ITEMS: - async requestItems(ids: Array) { - if (!ids) throw new Error('Keys are missing'); - await this.#init; - - const { data, error } = await this.#itemSource.getItems(ids); - - if (data) { - this.#itemStore?.appendItems(data); - } - - return { data, error, asObservable: () => this.#itemStore!.items(ids) }; - } - - async items(ids: Array) { - await this.#init; - return this.#itemStore!.items(ids); - } - - // DETAILS: - - async createScaffold(documentTypeKey: string, preset?: Partial) { - if (!documentTypeKey) throw new Error('Document type id is missing'); - await this.#init; - return this.#detailDataSource.createScaffold(documentTypeKey, preset); - } - - async requestById(id: string) { - await this.#init; - - // TODO: should we show a notification if the id is missing? - // Investigate what is best for Acceptance testing, cause in that perspective a thrown error might be the best choice? - if (!id) { - throw new Error('Id is missing'); - } - - const { data, error } = await this.#detailDataSource.read(id); - - if (data) { - this.#store?.append(data); - } - - return { data, error, asObservable: () => this.#store!.byId(id) }; - } - - async byId(id: string) { - if (!id) throw new Error('Id is missing'); - await this.#init; - return this.#store!.byId(id); - } - - // Could potentially be general methods: - async create(item: CreateDocumentRequestModel & { id: string }) { - await this.#init; - - if (!item || !item.id) { - throw new Error('Document is missing'); - } - - const { error } = await this.#detailDataSource.create(item); - - if (!error) { - // TODO: we currently don't use the detail store for anything. - // Consider to look up the data before fetching from the server - this.#store?.append(item); - // TODO: Update tree store with the new item? or ask tree to request the new item? - - const notification = { data: { message: `Document created` } }; - this.#notificationContext?.peek('positive', notification); - - // TODO: Revisit this call, as we should be able to update tree on client. - //await this.requestRootTreeItems(); - - return { data: item }; - } - - return { error }; - } - - async save(id: string, item: UpdateDocumentRequestModel) { - if (!id) throw new Error('Id is missing'); - if (!item) throw new Error('Item is missing'); - - await this.#init; - - const { error } = await this.#detailDataSource.update(id, item); - - if (!error) { - // TODO: we currently don't use the detail store for anything. - // Consider to look up the data before fetching from the server - // Consider notify a workspace if a document is updated in the store while someone is editing it. - this.#store?.append(item); - //this.#treeStore?.updateItem(item.id, { name: item.name });// Port data to tree store. - - const notification = { data: { message: `Document saved` } }; - this.#notificationContext?.peek('positive', notification); - - // TODO: Revisit this call, as we should be able to update tree on client. - //await this.requestRootTreeItems(); - } - - return { error }; - } - - // General: - - async delete(id: string) { - if (!id) throw new Error('Id is missing'); - await this.#init; - - const { error } = await this.#detailDataSource.delete(id); - - if (!error) { - // TODO: we currently don't use the detail store for anything. - // Consider to look up the data before fetching from the server. - // Consider notify a workspace if a document is deleted from the store while someone is editing it. - this.#store?.removeItem(id); - this.#treeStore?.removeItem(id); - this.#itemStore?.removeItem(id); - - const notification = { data: { message: `Document deleted` } }; - this.#notificationContext?.peek('positive', notification); - } - - return { error }; - } - - async trash(id: string) { - if (!id) throw new Error('Id is missing'); - await this.#init; - - const { error } = await this.#detailDataSource.trash(id); - - if (!error) { - // TODO: we currently don't use the detail store for anything. - // Consider to look up the data before fetching from the server. - // Consider notify a workspace if a document is deleted from the store while someone is editing it. - // TODO: Temp hack: would should update a property isTrashed (maybe) on the item instead of removing them. - this.#store?.removeItem(id); - this.#treeStore?.removeItem(id); - this.#itemStore?.removeItem(id); - - // TODO: append to recycle bin store - - const notification = { data: { message: `Document moved to recycle bin` } }; - this.#notificationContext?.peek('positive', notification); - } - - return { error }; - } - - async publish(id: string, variantIds: Array) { - if (!id) throw new Error('id is missing'); - if (!variantIds) throw new Error('variant IDs are missing'); - await this.#init; - - const { error } = await this.#detailDataSource.publish(id, variantIds); - - if (!error) { - // TODO: Update other stores based on above effect. - - const notification = { data: { message: `Document published` } }; - this.#notificationContext?.peek('positive', notification); - } - - return { error }; - } - - async unpublish(id: string, variantIds: Array) { - if (!id) throw new Error('id is missing'); - if (!variantIds) throw new Error('variant IDs are missing'); - await this.#init; - - const { error } = await this.#detailDataSource.unpublish(id, variantIds); - - if (!error) { - // TODO: Update other stores based on above effect. - - const notification = { data: { message: `Document unpublished` } }; - this.#notificationContext?.peek('positive', notification); - } - - return { error }; - } - - async saveAndPreview() { - alert('save and preview'); - } - - async saveAndSchedule() { - alert('save and schedule'); - } - - async createBlueprint() { - alert('create document blueprint'); - } - - async move() { - alert('move'); - } - - async copy() { - alert('copy'); - } - - async sortChildrenOf() { - alert('sort'); - } - - async setPermissions() { - alert('set permissions'); - } - - async rollback() { - alert('rollback'); - } -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/document.store.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/document.store.ts deleted file mode 100644 index a169eb23bb..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/document.store.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type { DocumentResponseModel } from '@umbraco-cms/backoffice/backend-api'; -import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; -import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api'; -import { UmbStoreBase } from '@umbraco-cms/backoffice/store'; -import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; - -/** - * @export - * @class UmbDocumentDetailStore - * @extends {UmbStoreBase} - * @description - Data Store for Document Details - */ -export class UmbDocumentStore extends UmbStoreBase { - /** - * Creates an instance of UmbDocumentDetailStore. - * @param {UmbControllerHostElement} host - * @memberof UmbDocumentDetailStore - */ - constructor(host: UmbControllerHostElement) { - super(host, UMB_DOCUMENT_STORE_CONTEXT.toString(), new UmbArrayState([], (x) => x.id)); - } - - /** - * Retrieve a document from the store - * @param {string} id - * @memberof UmbDocumentStore - */ - byId(id: DocumentResponseModel['id']) { - return this._data.asObservablePart((x) => x.find((y) => y.id === id)); - } -} - -export const UMB_DOCUMENT_STORE_CONTEXT = new UmbContextToken('UmbDocumentStore'); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/index.ts index d8c807bc05..2dafba6296 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/index.ts @@ -1,2 +1,5 @@ -export { UmbDocumentRepository } from './document.repository.js'; -export { UMB_DOCUMENT_REPOSITORY_ALIAS } from './manifests.js'; +export { UmbDocumentDetailRepository, UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS } from './detail/index.js'; +export { UmbDocumentItemRepository, UMB_DOCUMENT_ITEM_REPOSITORY_ALIAS } from './item/index.js'; +export { UmbDocumentPublishingRepository, UMB_DOCUMENT_PUBLISHING_REPOSITORY_ALIAS } from './publishing/index.js'; + +export type { UmbDocumentItemModel } from './item/types.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/document-item.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/document-item.repository.ts new file mode 100644 index 0000000000..6ba4317ad1 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/document-item.repository.ts @@ -0,0 +1,11 @@ +import { UmbDocumentItemServerDataSource } from './document-item.server.data-source.js'; +import { UMB_DOCUMENT_ITEM_STORE_CONTEXT } from './document-item.store.js'; +import type { UmbDocumentItemModel } from './types.js'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbItemRepositoryBase } from '@umbraco-cms/backoffice/repository'; + +export class UmbDocumentItemRepository extends UmbItemRepositoryBase { + constructor(host: UmbControllerHost) { + super(host, UmbDocumentItemServerDataSource, UMB_DOCUMENT_ITEM_STORE_CONTEXT); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/document-item.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/document-item.server.data-source.ts new file mode 100644 index 0000000000..6c3a4f02ff --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/document-item.server.data-source.ts @@ -0,0 +1,52 @@ +import type { UmbDocumentItemModel } from './types.js'; +import type { DocumentItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import { DocumentResource } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbItemServerDataSourceBase } from '@umbraco-cms/backoffice/repository'; + +/** + * A data source for Document items that fetches data from the server + * @export + * @class UmbDocumentItemServerDataSource + * @implements {DocumentTreeDataSource} + */ +export class UmbDocumentItemServerDataSource extends UmbItemServerDataSourceBase< + DocumentItemResponseModel, + UmbDocumentItemModel +> { + /** + * Creates an instance of UmbDocumentItemServerDataSource. + * @param {UmbControllerHost} host + * @memberof UmbDocumentItemServerDataSource + */ + constructor(host: UmbControllerHost) { + super(host, { + getItems, + mapper, + }); + } +} + +/* eslint-disable local-rules/no-direct-api-import */ +const getItems = (uniques: Array) => DocumentResource.getDocumentItem({ id: uniques }); + +const mapper = (item: DocumentItemResponseModel): UmbDocumentItemModel => { + return { + unique: item.id, + isTrashed: item.isTrashed, + isProtected: item.isProtected, + documentType: { + unique: item.documentType.id, + icon: item.documentType.icon, + hasListView: item.documentType.hasListView, + }, + variants: item.variants.map((variant) => { + return { + culture: variant.culture || null, + name: variant.name, + state: variant.state, + }; + }), + name: item.variants[0]?.name, // TODO: this is not correct. We need to get it from the variants. This is a temp solution. + }; +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/document-item.store.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/document-item.store.ts new file mode 100644 index 0000000000..5da9b4eccc --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/document-item.store.ts @@ -0,0 +1,24 @@ +import type { UmbDocumentDetailModel } from '../../types.js'; +import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbItemStoreBase } from '@umbraco-cms/backoffice/store'; + +/** + * @export + * @class UmbDocumentItemStore + * @extends {UmbStoreBase} + * @description - Data Store for Document items + */ + +export class UmbDocumentItemStore extends UmbItemStoreBase { + /** + * Creates an instance of UmbDocumentItemStore. + * @param {UmbControllerHost} host + * @memberof UmbDocumentItemStore + */ + constructor(host: UmbControllerHost) { + super(host, UMB_DOCUMENT_ITEM_STORE_CONTEXT.toString()); + } +} + +export const UMB_DOCUMENT_ITEM_STORE_CONTEXT = new UmbContextToken('UmbDocumentItemStore'); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/index.ts new file mode 100644 index 0000000000..f8c4b20a0d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/index.ts @@ -0,0 +1,2 @@ +export { UmbDocumentItemRepository } from './document-item.repository.js'; +export { UMB_DOCUMENT_ITEM_REPOSITORY_ALIAS } from './manifests.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/manifests.ts new file mode 100644 index 0000000000..6490290a74 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/manifests.ts @@ -0,0 +1,22 @@ +import { UmbDocumentItemStore } from './document-item.store.js'; +import { UmbDocumentItemRepository } from './document-item.repository.js'; +import type { ManifestRepository, ManifestItemStore } from '@umbraco-cms/backoffice/extension-registry'; + +export const UMB_DOCUMENT_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.DocumentItem'; +export const UMB_DOCUMENT_STORE_ALIAS = 'Umb.Store.DocumentItem'; + +const itemRepository: ManifestRepository = { + type: 'repository', + alias: UMB_DOCUMENT_ITEM_REPOSITORY_ALIAS, + name: 'Document Item Repository', + api: UmbDocumentItemRepository, +}; + +const itemStore: ManifestItemStore = { + type: 'itemStore', + alias: UMB_DOCUMENT_STORE_ALIAS, + name: 'Document Item Store', + api: UmbDocumentItemStore, +}; + +export const manifests = [itemRepository, itemStore]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/types.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/types.ts new file mode 100644 index 0000000000..61e2fddbee --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/types.ts @@ -0,0 +1,20 @@ +import type { ContentStateModel } from '@umbraco-cms/backoffice/backend-api'; + +export interface UmbDocumentItemModel { + name: string; // TODO: this is not correct. We need to get it from the variants. This is a temp solution. + unique: string; + isTrashed: boolean; + isProtected: boolean; + documentType: { + unique: string; + icon: string; + hasListView: boolean; + }; + variants: Array; +} + +export interface UmbDocumentItemVariantModel { + name: string; + culture: string | null; + state: ContentStateModel | null; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/manifests.ts index 5fccf17dd3..7e4bc9661c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/manifests.ts @@ -1,32 +1,5 @@ -import { UmbDocumentRepository } from '../repository/document.repository.js'; -import { UmbDocumentItemStore } from './document-item.store.js'; -import { UmbDocumentStore } from './document.store.js'; -import type { ManifestItemStore, ManifestRepository, ManifestStore } from '@umbraco-cms/backoffice/extension-registry'; +import { manifests as detailManifests } from './detail/manifests.js'; +import { manifests as itemManifests } from './item/manifests.js'; +import { manifests as publishingManifests } from './publishing/manifests.js'; -export const UMB_DOCUMENT_REPOSITORY_ALIAS = 'Umb.Repository.Document'; - -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_DOCUMENT_REPOSITORY_ALIAS, - name: 'Document Repository', - api: UmbDocumentRepository, -}; - -export const UMB_DOCUMENT_STORE_ALIAS = 'Umb.Store.Document'; -export const UMB_DOCUMENT_ITEM_STORE_ALIAS = 'Umb.Store.Document.Item'; - -const store: ManifestStore = { - type: 'store', - alias: UMB_DOCUMENT_STORE_ALIAS, - name: 'Document Store', - api: UmbDocumentStore, -}; - -const itemStore: ManifestItemStore = { - type: 'itemStore', - alias: UMB_DOCUMENT_ITEM_STORE_ALIAS, - name: 'Document Item Store', - api: UmbDocumentItemStore, -}; - -export const manifests = [repository, store, itemStore]; +export const manifests = [...detailManifests, ...itemManifests, ...publishingManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/publishing/document-publishing.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/publishing/document-publishing.repository.ts new file mode 100644 index 0000000000..b2a3def404 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/publishing/document-publishing.repository.ts @@ -0,0 +1,67 @@ +import { UmbDocumentPublishingServerDataSource } from './document-publishing.server.data-source.js'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository'; +import { UMB_NOTIFICATION_CONTEXT, type UmbNotificationContext } from '@umbraco-cms/backoffice/notification'; +import type { UmbVariantId } from '@umbraco-cms/backoffice/variant'; + +export class UmbDocumentPublishingRepository extends UmbRepositoryBase { + #init!: Promise; + #publishingDataSource: UmbDocumentPublishingServerDataSource; + #notificationContext?: UmbNotificationContext; + + constructor(host: UmbControllerHost) { + super(host); + + this.#publishingDataSource = new UmbDocumentPublishingServerDataSource(this); + + this.#init = Promise.all([ + this.consumeContext(UMB_NOTIFICATION_CONTEXT, (instance) => { + this.#notificationContext = instance; + }).asPromise(), + ]); + } + + /** + * Publish one or more variants of a Document + * @param {string} id + * @param {Array} variantIds + * @return {*} + * @memberof UmbDocumentPublishingRepository + */ + async publish(unique: string, variantIds: Array) { + if (!unique) throw new Error('id is missing'); + if (!variantIds) throw new Error('variant IDs are missing'); + await this.#init; + + const { error } = await this.#publishingDataSource.publish(unique, variantIds); + + if (!error) { + const notification = { data: { message: `Document published` } }; + this.#notificationContext?.peek('positive', notification); + } + + return { error }; + } + + /** + * Unpublish one or more variants of a Document + * @param {string} id + * @param {Array} variantIds + * @return {*} + * @memberof UmbDocumentPublishingRepository + */ + async unpublish(id: string, variantIds: Array) { + if (!id) throw new Error('id is missing'); + if (!variantIds) throw new Error('variant IDs are missing'); + await this.#init; + + const { error } = await this.#publishingDataSource.unpublish(id, variantIds); + + if (!error) { + const notification = { data: { message: `Document unpublished` } }; + this.#notificationContext?.peek('positive', notification); + } + + return { error }; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/publishing/document-publishing.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/publishing/document-publishing.server.data-source.ts new file mode 100644 index 0000000000..b22ddba2e6 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/publishing/document-publishing.server.data-source.ts @@ -0,0 +1,62 @@ +import type { PublishDocumentRequestModel, UnpublishDocumentRequestModel } from '@umbraco-cms/backoffice/backend-api'; +import { DocumentResource } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; +import type { UmbVariantId } from '@umbraco-cms/backoffice/variant'; + +/** + * A server data source for Document publishing + * @export + * @class UmbDocumentPublishingServerDataSource + * @implements {DocumentTreeDataSource} + */ +export class UmbDocumentPublishingServerDataSource { + #host: UmbControllerHost; + + /** + * Creates an instance of UmbDocumentPublishingServerDataSource. + * @param {UmbControllerHost} host + * @memberof UmbDocumentPublishingServerDataSource + */ + constructor(host: UmbControllerHost) { + this.#host = host; + } + + /** + * Publish one or more variants of a Document + * @param {string} unique + * @param {Array} variantIds + * @return {*} + * @memberof UmbDocumentServerDataSource + */ + async publish(unique: string, variantIds: Array) { + if (!unique) throw new Error('Id is missing'); + + // TODO: THIS DOES NOT TAKE SEGMENTS INTO ACCOUNT!!!!!! + const requestBody: PublishDocumentRequestModel = { + cultures: variantIds + .map((variant) => (variant.isCultureInvariant() ? null : variant.toCultureString())) + .filter((x) => x !== null) as Array, + }; + + return tryExecuteAndNotify(this.#host, DocumentResource.putDocumentByIdPublish({ id: unique, requestBody })); + } + + /** + * Unpublish one or more variants of a Document + * @param {string} unique + * @param {Array} variantIds + * @return {*} + * @memberof UmbDocumentServerDataSource + */ + async unpublish(unique: string, variantIds: Array) { + if (!unique) throw new Error('Id is missing'); + + // TODO: THIS DOES NOT TAKE SEGMENTS INTO ACCOUNT!!!!!! + const requestBody: UnpublishDocumentRequestModel = { + culture: variantIds.map((variant) => variant.toCultureString())[0], + }; + + return tryExecuteAndNotify(this.#host, DocumentResource.putDocumentByIdUnpublish({ id: unique, requestBody })); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/publishing/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/publishing/index.ts new file mode 100644 index 0000000000..603c3ac53e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/publishing/index.ts @@ -0,0 +1,2 @@ +export { UmbDocumentPublishingRepository } from './document-publishing.repository.js'; +export { UMB_DOCUMENT_PUBLISHING_REPOSITORY_ALIAS } from './manifests.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/publishing/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/publishing/manifests.ts new file mode 100644 index 0000000000..f3efa10fac --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/publishing/manifests.ts @@ -0,0 +1,13 @@ +import { UmbDocumentPublishingRepository } from './document-publishing.repository.js'; +import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; + +export const UMB_DOCUMENT_PUBLISHING_REPOSITORY_ALIAS = 'Umb.Repository.Document.Publishing'; + +const publishingRepository: ManifestRepository = { + type: 'repository', + alias: UMB_DOCUMENT_PUBLISHING_REPOSITORY_ALIAS, + name: 'Document Publishing Repository', + api: UmbDocumentPublishingRepository, +}; + +export const manifests = [publishingRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/sources/document-item.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/sources/document-item.server.data.ts deleted file mode 100644 index 417f56ccfe..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/sources/document-item.server.data.ts +++ /dev/null @@ -1,39 +0,0 @@ -import type { UmbItemDataSource } from '@umbraco-cms/backoffice/repository'; -import type { DocumentItemResponseModel} from '@umbraco-cms/backoffice/backend-api'; -import { DocumentResource } from '@umbraco-cms/backoffice/backend-api'; -import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; - -/** - * A data source for Document items that fetches data from the server - * @export - * @class UmbDocumentItemServerDataSource - * @implements {DocumentItemDataSource} - */ -export class UmbDocumentItemServerDataSource implements UmbItemDataSource { - #host: UmbControllerHost; - - /** - * Creates an instance of UmbDocumentItemServerDataSource. - * @param {UmbControllerHost} host - * @memberof UmbDocumentItemServerDataSource - */ - constructor(host: UmbControllerHost) { - this.#host = host; - } - - /** - * Fetches the items for the given ids from the server - * @param {Array} ids - * @memberof UmbDocumentItemServerDataSource - */ - async getItems(ids: Array) { - if (!ids) throw new Error('Ids are missing'); - return tryExecuteAndNotify( - this.#host, - DocumentResource.getDocumentItem({ - id: ids, - }), - ); - } -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/sources/document.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/sources/document.server.data.ts deleted file mode 100644 index e13f82804e..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/sources/document.server.data.ts +++ /dev/null @@ -1,195 +0,0 @@ -import { UmbId } from '@umbraco-cms/backoffice/id'; -import type { UmbDataSource } from '@umbraco-cms/backoffice/repository'; -import type { - DocumentResponseModel, - CreateDocumentRequestModel, - UpdateDocumentRequestModel, - PublishDocumentRequestModel, - UnpublishDocumentRequestModel} from '@umbraco-cms/backoffice/backend-api'; -import { - DocumentResource, - ContentStateModel -} from '@umbraco-cms/backoffice/backend-api'; -import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; -import type { UmbVariantId } from '@umbraco-cms/backoffice/variant'; - -/** - * A data source for the Document that fetches data from the server - * @export - * @class UmbDocumentServerDataSource - * @implements {RepositoryDetailDataSource} - */ -export class UmbDocumentServerDataSource - implements UmbDataSource -{ - #host: UmbControllerHost; - - /** - * Creates an instance of UmbDocumentServerDataSource. - * @param {UmbControllerHost} host - * @memberof UmbDocumentServerDataSource - */ - constructor(host: UmbControllerHost) { - this.#host = host; - } - - /** - * Fetches a Document with the given id from the server - * @param {string} id - * @memberof UmbDocumentServerDataSource - */ - async read(id: string) { - if (!id) throw new Error('Id is missing'); - - return tryExecuteAndNotify( - this.#host, - DocumentResource.getDocumentById({ - id, - }), - ); - } - - /** - * Creates a new Document scaffold - * @param {string} documentTypeId - * @param {Partial} [preset] - * @return {*} - * @memberof UmbDocumentServerDataSource - */ - async createScaffold(documentTypeId: string, preset?: Partial) { - // TODO: make our own "scaffold" model - const data: DocumentResponseModel = { - urls: [], - templateId: null, - parentId: null, - contentTypeId: documentTypeId, - values: [], - variants: [ - { - state: ContentStateModel.DRAFT, - publishDate: null, - culture: null, - segment: null, - name: '', - createDate: new Date().toISOString(), - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - updateDate: undefined, - }, - ], - ...preset, - id: UmbId.new(), - }; - - return { data }; - } - - /** - * Inserts a new Document on the server - * @param {Document} document - * @memberof UmbDocumentServerDataSource - */ - async create(document: CreateDocumentRequestModel) { - if (!document.id) throw new Error('Id is missing'); - return tryExecuteAndNotify(this.#host, DocumentResource.postDocument({ requestBody: document })); - } - - /** - * Updates a Document on the server - * @param {string} id - * @param {UpdateDocumentRequestModel} document - * @return {*} - * @memberof UmbDocumentServerDataSource - */ - async update(id: string, document: UpdateDocumentRequestModel) { - if (!id) throw new Error('Id is missing'); - - /* TODO: look into why typescript doesn't complain about getting another model than UpdateDocumentRequestModel - Maybe we should simplify the sources, and always send the biggest model. - Then it is up to the data source to format the data correctly before passing it to wherever */ - const requestBody: UpdateDocumentRequestModel = { - templateId: document.templateId, - values: document.values, - variants: document.variants?.map((variant) => ({ - culture: variant.culture, - segment: variant.segment, - name: variant.name, - })), - }; - - return tryExecuteAndNotify(this.#host, DocumentResource.putDocumentById({ id, requestBody })); - } - - /** - * Publish one or more variants of a Document - * @param {string} id - * @param {Array} variantIds - * @return {*} - * @memberof UmbDocumentServerDataSource - */ - async publish(id: string, variantIds: Array) { - if (!id) throw new Error('Id is missing'); - - // TODO: THIS DOES NOT TAKE SEGMENTS INTO ACCOUNT!!!!!! - const requestBody: PublishDocumentRequestModel = { - cultures: variantIds - .map((variant) => (variant.isCultureInvariant() ? null : variant.toCultureString())) - .filter((x) => x !== null) as Array, - }; - - return tryExecuteAndNotify(this.#host, DocumentResource.putDocumentByIdPublish({ id, requestBody })); - } - - /** - * Unpublish one or more variants of a Document - * @param {string} id - * @param {Array} variantIds - * @return {*} - * @memberof UmbDocumentServerDataSource - */ - async unpublish(id: string, variantIds: Array) { - if (!id) throw new Error('Id is missing'); - - // TODO: THIS DOES NOT TAKE SEGMENTS INTO ACCOUNT!!!!!! - const requestBody: UnpublishDocumentRequestModel = { - culture: variantIds.map((variant) => variant.toCultureString())[0], - }; - - return tryExecuteAndNotify(this.#host, DocumentResource.putDocumentByIdUnpublish({ id, requestBody })); - } - - /** - * Moves a Document to the recycle bin on the server - * @param {string} id - * @memberof UmbDocumentServerDataSource - */ - async trash(id: string) { - if (!id) throw new Error('Document ID is missing'); - // TODO: if we get a trash endpoint, we should use that instead. - return tryExecuteAndNotify(this.#host, DocumentResource.putDocumentByIdMoveToRecycleBin({ id })); - } - - /** - * Deletes a Document on the server - * @param {string} id - * @memberof UmbDocumentServerDataSource - */ - async delete(id: string) { - if (!id) throw new Error('Document ID is missing'); - return this.trash(id); - } - - /** - * Get the allowed document types for a given parent id - * @param {string} id - * @memberof UmbDocumentTypeServerDataSource - */ - async getAllowedDocumentTypesOf(id: string | null) { - if (id === undefined) throw new Error('Id is missing'); - // TODO: remove when null is allowed as id. - const hackId = id === null ? undefined : id; - // TODO: Notice, here we need to implement pagination. - return tryExecuteAndNotify(this.#host, DocumentResource.getDocumentAllowedDocumentTypes({ parentId: hackId })); - } -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/document-tree.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/document-tree.repository.ts index 0a27b7d80e..2f151145e4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/document-tree.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/document-tree.repository.ts @@ -15,13 +15,11 @@ export class UmbDocumentTreeRepository } async requestTreeRoot() { - const data = { - id: null, + const data: UmbDocumentTreeRootModel = { + unique: null, entityType: UMB_DOCUMENT_ROOT_ENTITY_TYPE, name: 'Documents', - icon: 'icon-folder', hasChildren: true, - isContainer: false, isFolder: true, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/document-tree.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/document-tree.server.data-source.ts index 6004acd243..62fd42aa30 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/document-tree.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/document-tree.server.data-source.ts @@ -1,3 +1,4 @@ +import { UMB_DOCUMENT_ENTITY_TYPE } from '../entity.js'; import type { UmbDocumentTreeItemModel } from './types.js'; import { UmbTreeServerDataSourceBase } from '@umbraco-cms/backoffice/tree'; import type { DocumentTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; @@ -44,23 +45,26 @@ const getChildrenOf = (parentUnique: string | null) => { const mapper = (item: DocumentTreeItemResponseModel): UmbDocumentTreeItemModel => { return { - id: item.id, - parentId: item.parentId || null, - name: item.name, - entityType: 'document', - isContainer: item.isContainer, + unique: item.id, + parentUnique: item.parent ? item.parent.id : null, + entityType: UMB_DOCUMENT_ENTITY_TYPE, + noAccess: item.noAccess, + isTrashed: item.isTrashed, hasChildren: item.hasChildren, isProtected: item.isProtected, - isPublished: item.isPublished, - isEdited: item.isEdited, - contentTypeId: item.contentTypeId, - variants: - item.variants?.map((variant) => ({ - name: variant.name!, - culture: variant.culture!, - state: variant.state!, - })) || [], - icon: item.icon, + documentType: { + unique: item.documentType.id, + icon: item.documentType.icon, + hasListView: item.documentType.hasListView, + }, + variants: item.variants.map((variant) => { + return { + name: variant.name, + culture: variant.culture || null, + state: variant.state, + }; + }), + name: item.variants[0]?.name, // TODO: this is not correct. We need to get it from the variants. This is a temp solution. isFolder: false, }; }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/document-tree.store.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/document-tree.store.ts index 77c573b2c3..f68d14f062 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/document-tree.store.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/document-tree.store.ts @@ -1,14 +1,14 @@ import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; +import { UmbUniqueTreeStore } from '@umbraco-cms/backoffice/tree'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; -import { UmbEntityTreeStore } from '@umbraco-cms/backoffice/tree'; /** * @export * @class UmbDocumentTreeStore - * @extends {UmbStoreBase} + * @extends {UmbUniqueTreeStore} * @description - Tree Data Store for Document Items */ -export class UmbDocumentTreeStore extends UmbEntityTreeStore { +export class UmbDocumentTreeStore extends UmbUniqueTreeStore { /** * Creates an instance of UmbDocumentTreeStore. * @param {UmbControllerHostElement} host diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/reload-tree-item-children/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/reload-tree-item-children/manifests.ts index dfd8b3f192..b8fc59c0fb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/reload-tree-item-children/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/reload-tree-item-children/manifests.ts @@ -1,5 +1,5 @@ import { UMB_DOCUMENT_ENTITY_TYPE, UMB_DOCUMENT_ROOT_ENTITY_TYPE } from '../../entity.js'; -import { UMB_DOCUMENT_REPOSITORY_ALIAS } from '../../repository/index.js'; +import { UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS } from '../../repository/index.js'; import { UmbReloadTreeItemChildrenEntityAction } from '@umbraco-cms/backoffice/tree'; import type { ManifestEntityAction } from '@umbraco-cms/backoffice/extension-registry'; @@ -13,7 +13,7 @@ export const manifests: Array = [ meta: { icon: 'icon-refresh', label: 'Reload children...', - repositoryAlias: UMB_DOCUMENT_REPOSITORY_ALIAS, + repositoryAlias: UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS, entityTypes: [UMB_DOCUMENT_ENTITY_TYPE, UMB_DOCUMENT_ROOT_ENTITY_TYPE], }, }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/tree-item/document-tree-item.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/tree-item/document-tree-item.context.ts index d54cca5129..e4d60cda12 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/tree-item/document-tree-item.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/tree-item/document-tree-item.context.ts @@ -1,10 +1,9 @@ import type { UmbDocumentTreeItemModel } from '../types.js'; -import { UmbTreeItemContextBase } from '@umbraco-cms/backoffice/tree'; +import { UmbUniqueTreeItemContext } from '@umbraco-cms/backoffice/tree'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -// TODO get unique method from an document repository static method -export class UmbDocumentTreeItemContext extends UmbTreeItemContextBase { +export class UmbDocumentTreeItemContext extends UmbUniqueTreeItemContext { constructor(host: UmbControllerHost) { - super(host, (x: UmbDocumentTreeItemModel) => x.id); + super(host); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/tree-item/document-tree-item.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/tree-item/document-tree-item.element.ts index a52bfa4310..526a8c75a5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/tree-item/document-tree-item.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/tree-item/document-tree-item.element.ts @@ -30,9 +30,10 @@ export class UmbDocumentTreeItemElement extends UmbLitElement implements UmbTree #renderIconWithStatusSymbol() { return html` - ${this.item?.icon + ${this.item?.documentType.icon ? html` - + + ` : nothing} @@ -40,8 +41,9 @@ export class UmbDocumentTreeItemElement extends UmbLitElement implements UmbTree } // TODO: lower opacity if item is not published + // TODO: get correct variant name #renderLabel() { - return html` ${this.item?.name} `; + return html` ${this.item?.variants[0].name} `; } static styles = [ diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/types.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/types.ts index 693f02bdcd..9f6e5a90ed 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/types.ts @@ -1,20 +1,26 @@ -import type { PublishedStateModel } from '@umbraco-cms/backoffice/backend-api'; -import type { UmbEntityTreeItemModel, UmbEntityTreeRootModel } from '@umbraco-cms/backoffice/tree'; +import type { UmbDocumentEntityType, UmbDocumentRootEntityType } from '../entity.js'; +import type { UmbUniqueTreeItemModel, UmbUniqueTreeRootModel } from '@umbraco-cms/backoffice/tree'; +import type { ContentStateModel } from '@umbraco-cms/backoffice/backend-api'; -export interface UmbDocumentTreeItemModel extends UmbEntityTreeItemModel { +export interface UmbDocumentTreeItemModel extends UmbUniqueTreeItemModel { + entityType: UmbDocumentEntityType; + noAccess: boolean; + isTrashed: boolean; isProtected: boolean; - isPublished: boolean; - isEdited: boolean; - contentTypeId: string; - variants: Array; - icon: string; + documentType: { + unique: string; + icon: string; + hasListView: boolean; + }; + variants: Array; } -export interface UmbDocumentVariantTreeItemModel { +export interface UmbDocumentTreeRootModel extends UmbUniqueTreeRootModel { + entityType: UmbDocumentRootEntityType; +} + +export interface UmbDocumentTreeItemVariantModel { name: string; culture: string | null; - state: PublishedStateModel; // TODO: make our own enum for this. We might have states for "unsaved changes" etc. + state: ContentStateModel; // TODO: make our own enum for this. We might have states for "unsaved changes" etc. } - -// TODO: TREE STORE TYPE PROBLEM: -export interface UmbDocumentTreeRootModel extends UmbEntityTreeRootModel {} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/types.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/types.ts new file mode 100644 index 0000000000..f54ebaf61d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/types.ts @@ -0,0 +1,15 @@ +import type { UmbDocumentEntityType } from './entity.js'; +import type { UmbVariantModel } from '@umbraco-cms/backoffice/variant'; +import type { ContentUrlInfoModel, DocumentValueModel } from '@umbraco-cms/backoffice/backend-api'; + +export interface UmbDocumentDetailModel { + documentType: { unique: string }; + entityType: UmbDocumentEntityType; + isTrashed: boolean; + template: { id: string } | null; // TODO: change to unique when template is updated + unique: string; + parentUnique: string | null; + urls: Array; + values: Array; + variants: Array; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save-and-preview.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save-and-preview.action.ts index 5bbecd1111..8900655ce6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save-and-preview.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save-and-preview.action.ts @@ -13,6 +13,6 @@ export class UmbDocumentSaveAndPreviewWorkspaceAction extends UmbWorkspaceAction const document = this.workspaceContext.getData(); // TODO: handle errors if (!document) return; - this.workspaceContext.repository?.saveAndPreview(); + //this.workspaceContext.repository?.saveAndPreview(); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save-and-schedule.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save-and-schedule.action.ts index b9451ee8ad..03881c3ccc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save-and-schedule.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save-and-schedule.action.ts @@ -13,6 +13,6 @@ export class UmbSaveAndScheduleDocumentWorkspaceAction extends UmbWorkspaceActio const document = this.workspaceContext.getData(); // TODO: handle errors if (!document) return; - this.workspaceContext.repository.saveAndSchedule(); + //this.workspaceContext.repository.saveAndSchedule(); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts index ca039123c6..2b33e2b313 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts @@ -1,7 +1,9 @@ -import { UmbDocumentRepository } from '../repository/document.repository.js'; import { UmbDocumentTypeDetailRepository } from '../../document-types/repository/detail/document-type-detail.repository.js'; import { UmbDocumentPropertyDataContext } from '../property-dataset-context/document-property-dataset-context.js'; import { UMB_DOCUMENT_ENTITY_TYPE } from '../entity.js'; +import { UmbDocumentDetailRepository } from '../repository/index.js'; +import type { UmbDocumentDetailModel } from '../types.js'; +import { UmbDocumentPublishingRepository } from '../repository/publishing/index.js'; import { UmbVariantId } from '@umbraco-cms/backoffice/variant'; import { UmbContentTypePropertyStructureManager } from '@umbraco-cms/backoffice/content-type'; import { @@ -10,17 +12,18 @@ import { type UmbVariantableWorkspaceContextInterface, type UmbPublishableWorkspaceContextInterface, } from '@umbraco-cms/backoffice/workspace'; -import type { CreateDocumentRequestModel, DocumentResponseModel } from '@umbraco-cms/backoffice/backend-api'; import { appendToFrozenArray, partialUpdateFrozenArray, UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -type EntityType = DocumentResponseModel; +type EntityType = UmbDocumentDetailModel; export class UmbDocumentWorkspaceContext extends UmbEditableWorkspaceContextBase implements UmbVariantableWorkspaceContextInterface, UmbPublishableWorkspaceContextInterface { // - public readonly repository: UmbDocumentRepository = new UmbDocumentRepository(this); + public readonly repository = new UmbDocumentDetailRepository(this); + public readonly publishingRepository = new UmbDocumentPublishingRepository(this); + /** * The document is the current state/draft version of the document. */ @@ -30,12 +33,12 @@ export class UmbDocumentWorkspaceContext return this.#getDataPromise; } - readonly unique = this.#currentData.asObservablePart((data) => data?.id); - readonly contentTypeId = this.#currentData.asObservablePart((data) => data?.contentTypeId); + readonly unique = this.#currentData.asObservablePart((data) => data?.unique); + readonly contentTypeUnique = this.#currentData.asObservablePart((data) => data?.documentType.unique); readonly variants = this.#currentData.asObservablePart((data) => data?.variants || []); readonly urls = this.#currentData.asObservablePart((data) => data?.urls || []); - readonly templateId = this.#currentData.asObservablePart((data) => data?.templateId || null); + readonly templateId = this.#currentData.asObservablePart((data) => data?.template?.id || null); readonly structure = new UmbContentTypePropertyStructureManager(this, new UmbDocumentTypeDetailRepository(this)); readonly splitView = new UmbWorkspaceSplitViewManager(); @@ -44,15 +47,15 @@ export class UmbDocumentWorkspaceContext // TODO: Get Workspace Alias via Manifest. super(host, 'Umb.Workspace.Document'); - this.observe(this.contentTypeId, (id) => this.structure.loadType(id)); + this.observe(this.contentTypeUnique, (unique) => this.structure.loadType(unique)); /* TODO: Make something to ensure all variants are present in data? Seems like a good idea?. */ } - async load(entityId: string) { - this.#getDataPromise = this.repository.requestById(entityId); + async load(unique: string) { + this.#getDataPromise = this.repository.requestByUnique(unique); const { data } = await this.#getDataPromise; if (!data) return undefined; @@ -62,8 +65,10 @@ export class UmbDocumentWorkspaceContext return data || undefined; } - async create(documentTypeKey: string, parentId: string | null) { - this.#getDataPromise = this.repository.createScaffold(documentTypeKey, { parentId }); + async create(parentUnique: string | null, documentTypeUnique: string) { + this.#getDataPromise = this.repository.createScaffold(parentUnique, { + documentType: { unique: documentTypeUnique }, + }); const { data } = await this.#getDataPromise; if (!data) return undefined; @@ -76,14 +81,8 @@ export class UmbDocumentWorkspaceContext return this.#currentData.getValue(); } - /* - getUnique() { - return this.#data.getKey(); - } - */ - getEntityId() { - return this.getData()?.id; + return this.getData()?.unique; } getEntityType() { @@ -91,7 +90,7 @@ export class UmbDocumentWorkspaceContext } getContentTypeId() { - return this.getData()?.contentTypeId; + return this.getData()?.documentType.unique; } variantById(variantId: UmbVariantId) { @@ -168,16 +167,16 @@ export class UmbDocumentWorkspaceContext } async #createOrSave() { - if (!this.#currentData.value?.id) throw new Error('Id is missing'); + if (!this.#currentData.value?.unique) throw new Error('Unique is missing'); if (this.getIsNew()) { - // TODO: typescript hack until we get the create type - const value = this.#currentData.value as CreateDocumentRequestModel & { id: string }; + const value = this.#currentData.value; + if ((await this.repository.create(value)).data !== undefined) { this.setIsNew(false); } } else { - await this.repository.save(this.#currentData.value.id, this.#currentData.value); + await this.repository.save(this.#currentData.value); } } @@ -201,9 +200,9 @@ export class UmbDocumentWorkspaceContext const currentData = this.#currentData.value; if (currentData) { const variantIds = currentData.variants?.map((x) => UmbVariantId.Create(x)); - const id = currentData.id; - if (variantIds && id) { - await this.repository.publish(id, variantIds); + const unique = currentData.unique; + if (variantIds && unique) { + await this.publishingRepository.publish(unique, variantIds); } } } @@ -213,9 +212,9 @@ export class UmbDocumentWorkspaceContext const currentData = this.#currentData.value; if (currentData) { const variantIds = currentData.variants?.map((x) => UmbVariantId.Create(x)); - const id = this.getEntityId(); - if (variantIds && id) { - await this.repository.publish(id, variantIds); + const unique = this.getEntityId(); + if (variantIds && unique) { + await this.publishingRepository.publish(unique, variantIds); } } } @@ -225,9 +224,9 @@ export class UmbDocumentWorkspaceContext const currentData = this.#currentData.value; if (currentData) { const variantIds = currentData.variants?.map((x) => UmbVariantId.Create(x)); - const id = this.getEntityId(); - if (variantIds && id) { - await this.repository.unpublish(id, variantIds); + const unique = this.getEntityId(); + if (variantIds && unique) { + await this.publishingRepository.unpublish(unique, variantIds); } } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.element.ts index 3a89f4b731..f1cd47045e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.element.ts @@ -6,9 +6,9 @@ import type { UmbRoute } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { UmbWorkspaceIsNewRedirectController } from '@umbraco-cms/backoffice/workspace'; -import type { UmbApi} from '@umbraco-cms/backoffice/extension-api'; +import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; import { UmbExtensionsApiInitializer, createExtensionApi } from '@umbraco-cms/backoffice/extension-api'; -import type { ManifestWorkspace} from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestWorkspace } from '@umbraco-cms/backoffice/extension-registry'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; @customElement('umb-document-workspace') @@ -32,13 +32,13 @@ export class UmbDocumentWorkspaceElement extends UmbLitElement { this._routes = [ { - path: 'create/:parentId/:documentTypeKey', + path: 'create/:parentUnique/:documentTypeUnique', component: this.#editorElement, setup: async (_component, info) => { // TODO: Remember the perspective of permissions here, we need to check if the user has access to create a document of this type under this parent? - const parentId = info.match.params.parentId === 'null' ? null : info.match.params.parentId; - const documentTypeKey = info.match.params.documentTypeKey; - this.#workspaceContext!.create(documentTypeKey, parentId); + const parentUnique = info.match.params.parentId === 'null' ? null : info.match.params.parentUnique; + const documentTypeUnique = info.match.params.documentTypeUnique; + this.#workspaceContext!.create(parentUnique, documentTypeUnique); new UmbWorkspaceIsNewRedirectController( this, @@ -48,11 +48,11 @@ export class UmbDocumentWorkspaceElement extends UmbLitElement { }, }, { - path: 'edit/:id', + path: 'edit/:unique', component: this.#editorElement, setup: (_component, info) => { - const id = info.match.params.id; - this.#workspaceContext!.load(id); + const unique = info.match.params.unique; + this.#workspaceContext!.load(unique); }, }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/edit/document-workspace-view-edit-properties.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/edit/document-workspace-view-edit-properties.element.ts index 4740295f88..5862165faf 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/edit/document-workspace-view-edit-properties.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/edit/document-workspace-view-edit-properties.element.ts @@ -1,10 +1,10 @@ import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from '../../document-workspace.context-token.js'; import { css, html, customElement, property, state, repeat } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import type { PropertyContainerTypes } from '@umbraco-cms/backoffice/content-type'; +import type { UmbPropertyContainerTypes, UmbPropertyTypeModel } from '@umbraco-cms/backoffice/content-type'; import { UmbContentTypePropertyStructureHelper } from '@umbraco-cms/backoffice/content-type'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import type { PropertyTypeModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; + @customElement('umb-document-workspace-view-edit-properties') export class UmbDocumentWorkspaceViewEditPropertiesElement extends UmbLitElement { @property({ type: String, attribute: 'container-name', reflect: false }) @@ -16,17 +16,17 @@ export class UmbDocumentWorkspaceViewEditPropertiesElement extends UmbLitElement } @property({ type: String, attribute: 'container-type', reflect: false }) - public get containerType(): PropertyContainerTypes | undefined { + public get containerType(): UmbPropertyContainerTypes | undefined { return this._propertyStructureHelper.getContainerType(); } - public set containerType(value: PropertyContainerTypes | undefined) { + public set containerType(value: UmbPropertyContainerTypes | undefined) { this._propertyStructureHelper.setContainerType(value); } _propertyStructureHelper = new UmbContentTypePropertyStructureHelper(this); @state() - _propertyStructure: Array = []; + _propertyStructure: Array = []; constructor() { super(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/edit/document-workspace-view-edit.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/edit/document-workspace-view-edit.element.ts index dfa77db940..68a60a2bc6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/edit/document-workspace-view-edit.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/edit/document-workspace-view-edit.element.ts @@ -3,27 +3,25 @@ import type { UmbDocumentWorkspaceViewEditTabElement } from './document-workspac import { css, html, customElement, state, repeat } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UmbContentTypeContainerStructureHelper } from '@umbraco-cms/backoffice/content-type'; -import type { - UmbRoute, - UmbRouterSlotChangeEvent, - UmbRouterSlotInitEvent} from '@umbraco-cms/backoffice/router'; -import { - encodeFolderName -} from '@umbraco-cms/backoffice/router'; +import type { UmbRoute, UmbRouterSlotChangeEvent, UmbRouterSlotInitEvent } from '@umbraco-cms/backoffice/router'; +import { encodeFolderName } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import type { PropertyTypeContainerModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; @customElement('umb-document-workspace-view-edit') export class UmbDocumentWorkspaceViewEditElement extends UmbLitElement implements UmbWorkspaceViewElement { + //@state() //private _hasRootProperties = false; + + @state() private _hasRootGroups = false; @state() private _routes: UmbRoute[] = []; @state() - _tabs?: Array; + private _tabs?: Array; @state() private _routerPath?: string; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.element.ts index 50a19c8f65..531b270ecb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info.element.ts @@ -8,7 +8,6 @@ import './document-workspace-view-info-history.element.js'; import './document-workspace-view-info-reference.element.js'; import type { UmbDocumentWorkspaceContext } from '@umbraco-cms/backoffice/document'; import type { ContentUrlInfoModel } from '@umbraco-cms/backoffice/backend-api'; -import { UmbCurrentUserContext } from '@umbraco-cms/backoffice/current-user'; @customElement('umb-document-workspace-view-info') export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement { @@ -67,7 +66,7 @@ export class UmbDocumentWorkspaceViewInfoElement extends UmbLitElement { /** TODO: Doubt this is the right way to get the create date... */ this.observe((this._workspaceContext as UmbDocumentWorkspaceContext).variants, (variants) => { - this._createDate = Array.isArray(variants) ? variants[0].createDate : 'Unknown'; + this._createDate = Array.isArray(variants) ? variants[0].createDate || 'Unknown' : 'Unknown'; }); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/menu-item/manifests.ts index 4e0f69b5f5..04f3b4d4df 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/menu-item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/menu-item/manifests.ts @@ -9,7 +9,6 @@ const menuItem: ManifestTypes = { weight: 800, meta: { label: 'Media Types', - icon: 'icon-folder', treeAlias: UMB_MEDIA_TYPE_TREE_ALIAS, menus: ['Umb.Menu.Settings'], }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/detail/media-type-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/detail/media-type-detail.server.data-source.ts index 0c50795389..dfffd71962 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/detail/media-type-detail.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/detail/media-type-detail.server.data-source.ts @@ -2,14 +2,11 @@ import type { UmbMediaTypeDetailModel } from '../../types.js'; import { UMB_MEDIA_TYPE_ENTITY_TYPE } from '../../entity.js'; import { UmbId } from '@umbraco-cms/backoffice/id'; import type { UmbDetailDataSource } from '@umbraco-cms/backoffice/repository'; -import type { - CreateMediaTypeRequestModel, - UpdateMediaTypeRequestModel} from '@umbraco-cms/backoffice/backend-api'; -import { - MediaTypeResource -} from '@umbraco-cms/backoffice/backend-api'; +import type { CreateMediaTypeRequestModel, UpdateMediaTypeRequestModel } from '@umbraco-cms/backoffice/backend-api'; +import { MediaTypeResource } from '@umbraco-cms/backoffice/backend-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; +import type { UmbPropertyTypeContainerModel } from '@umbraco-cms/backoffice/content-type'; /** * A data source for the Media Type that fetches data from the server @@ -85,10 +82,34 @@ export class UmbMediaTypeServerDataSource implements UmbDetailDataSource { + return { + id: property.id, + container: property.container, + sortOrder: property.sortOrder, + alias: property.alias, + name: property.name, + description: property.description, + dataType: { unique: property.dataType.id }, + variesByCulture: property.variesByCulture, + variesBySegment: property.variesBySegment, + validation: property.validation, + appearance: property.appearance, + }; + }), + containers: data.containers as UmbPropertyTypeContainerModel[], + allowedContentTypes: data.allowedMediaTypes.map((allowedMediaType) => { + return { + contentType: { unique: allowedMediaType.mediaType.id }, + sortOrder: allowedMediaType.sortOrder, + }; + }), + compositions: data.compositions.map((composition) => { + return { + contentType: { unique: composition.mediaType.id }, + compositionType: composition.compositionType, + }; + }), }; return { data: mediaType }; @@ -114,12 +135,36 @@ export class UmbMediaTypeServerDataSource implements UmbDetailDataSource { + return { + id: property.id, + container: property.container, + sortOrder: property.sortOrder, + alias: property.alias, + name: property.name, + description: property.description, + dataType: { id: property.dataType.unique }, + variesByCulture: property.variesByCulture, + variesBySegment: property.variesBySegment, + validation: property.validation, + appearance: property.appearance, + }; + }), containers: model.containers, - allowedContentTypes: model.allowedContentTypes, - compositions: model.compositions, + allowedMediaTypes: model.allowedContentTypes.map((allowedContentType) => { + return { + mediaType: { id: allowedContentType.contentType.unique }, + sortOrder: allowedContentType.sortOrder, + }; + }), + compositions: model.compositions.map((composition) => { + return { + mediaType: { id: composition.contentType.unique }, + compositionType: composition.compositionType, + }; + }), id: model.unique, - containerId: model.parentUnique, + folder: model.parentUnique ? { id: model.parentUnique } : null, }; const { data, error } = await tryExecuteAndNotify( @@ -155,10 +200,34 @@ export class UmbMediaTypeServerDataSource implements UmbDetailDataSource { + return { + id: property.id, + container: property.container, + sortOrder: property.sortOrder, + alias: property.alias, + name: property.name, + description: property.description, + dataType: { id: property.dataType.unique }, + variesByCulture: property.variesByCulture, + variesBySegment: property.variesBySegment, + validation: property.validation, + appearance: property.appearance, + }; + }), containers: model.containers, - allowedContentTypes: model.allowedContentTypes, - compositions: model.compositions, + allowedMediaTypes: model.allowedContentTypes.map((allowedContentType) => { + return { + mediaType: { id: allowedContentType.contentType.unique }, + sortOrder: allowedContentType.sortOrder, + }; + }), + compositions: model.compositions.map((composition) => { + return { + mediaType: { id: composition.contentType.unique }, + compositionType: composition.compositionType, + }; + }), }; const { data, error } = await tryExecuteAndNotify( diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/item/media-type-item.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/item/media-type-item.server.data-source.ts index 0fc150df29..78a040aaf6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/item/media-type-item.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/item/media-type-item.server.data-source.ts @@ -1,8 +1,8 @@ -import type { UmbItemDataSource } from '@umbraco-cms/backoffice/repository'; -import type { MediaTypeItemResponseModel} from '@umbraco-cms/backoffice/backend-api'; +import type { UmbMediaTypeItemModel } from './types.js'; +import { UmbItemServerDataSourceBase } from '@umbraco-cms/backoffice/repository'; +import type { MediaTypeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; import { MediaTypeResource } from '@umbraco-cms/backoffice/backend-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; /** * A data source for Media Type items that fetches data from the server @@ -10,31 +10,30 @@ import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; * @class UmbMediaTypeItemServerDataSource * @implements {UmbItemDataSource} */ -export class UmbMediaTypeItemServerDataSource implements UmbItemDataSource { - #host: UmbControllerHost; - +export class UmbMediaTypeItemServerDataSource extends UmbItemServerDataSourceBase< + MediaTypeItemResponseModel, + UmbMediaTypeItemModel +> { /** * Creates an instance of UmbMediaTypeItemServerDataSource. * @param {UmbControllerHost} host * @memberof UmbMediaTypeItemServerDataSource */ constructor(host: UmbControllerHost) { - this.#host = host; - } - - /** - * Fetches the items for the given ids from the server - * @param {Array} ids - * @return {*} - * @memberof UmbMediaTypeItemServerDataSource - */ - async getItems(ids: Array) { - if (!ids) throw new Error('Ids are missing'); - return tryExecuteAndNotify( - this.#host, - MediaTypeResource.getMediaTypeItem({ - id: ids, - }), - ); + super(host, { + getItems, + mapper, + }); } } + +/* eslint-disable local-rules/no-direct-api-import */ +const getItems = (uniques: Array) => MediaTypeResource.getMediaTypeItem({ id: uniques }); + +const mapper = (item: MediaTypeItemResponseModel): UmbMediaTypeItemModel => { + return { + icon: item.icon || null, + name: item.name, + unique: item.name, + }; +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/item/media-type-item.store.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/item/media-type-item.store.ts index b94ff5957f..682d62c3bd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/item/media-type-item.store.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/item/media-type-item.store.ts @@ -1,7 +1,7 @@ -import type { MediaTypeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbMediaTypeItemModel } from './index.js'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; -import { UmbEntityItemStore } from '@umbraco-cms/backoffice/store'; +import { UmbItemStoreBase } from '@umbraco-cms/backoffice/store'; /** * @export @@ -10,7 +10,7 @@ import { UmbEntityItemStore } from '@umbraco-cms/backoffice/store'; * @description - Data Store for Media Type items */ -export class UmbMediaTypeItemStore extends UmbEntityItemStore { +export class UmbMediaTypeItemStore extends UmbItemStoreBase { /** * Creates an instance of UmbMediaTypeItemStore. * @param {UmbControllerHostElement} host diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/item/types.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/item/types.ts index feaa8401a9..f284c5ca85 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/item/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/item/types.ts @@ -1,3 +1,5 @@ -import type { MediaTypeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; - -export type UmbMediaTypeItemModel = MediaTypeItemResponseModel; +export interface UmbMediaTypeItemModel { + icon: string | null; + name: string; + unique: string; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/folder/media-type-folder.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/folder/media-type-folder.repository.ts index 089ffa86e3..3f1383f68a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/folder/media-type-folder.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/folder/media-type-folder.repository.ts @@ -3,7 +3,7 @@ import { UMB_MEDIA_TYPE_TREE_STORE_CONTEXT } from '../index.js'; import { UmbMediaTypeFolderServerDataSource } from './media-type-folder.server.data-source.js'; import type { UmbMediaTypeFolderTreeItemModel } from './types.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import type { UmbFolderModel} from '@umbraco-cms/backoffice/tree'; +import type { UmbFolderModel } from '@umbraco-cms/backoffice/tree'; import { UmbFolderRepositoryBase } from '@umbraco-cms/backoffice/tree'; export class UmbMediaTypeFolderRepository extends UmbFolderRepositoryBase { @@ -18,7 +18,6 @@ const folderToMediaTypeTreeItemMapper = (folder: UmbFolderModel) => { parentUnique: folder.parentUnique, name: folder.name, entityType: UMB_MEDIA_TYPE_FOLDER_ENTITY_TYPE, - isContainer: false, hasChildren: false, isFolder: true, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/media-type-tree.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/media-type-tree.repository.ts index 737c372fe2..6c485145c6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/media-type-tree.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/media-type-tree.repository.ts @@ -19,9 +19,7 @@ export class UmbMediaTypeTreeRepository unique: null, entityType: UMB_MEDIA_TYPE_ROOT_ENTITY_TYPE, name: 'Media Types', - icon: 'icon-folder', hasChildren: true, - isContainer: false, isFolder: true, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/media-type-tree.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/media-type-tree.server.data-source.ts index 0fb4b7b804..608a211218 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/media-type-tree.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/media-type-tree.server.data-source.ts @@ -46,11 +46,10 @@ const getChildrenOf = (parentUnique: string | null) => { const mapper = (item: MediaTypeTreeItemResponseModel): UmbMediaTypeTreeItemModel => { return { unique: item.id, - parentUnique: item.parentId || null, + parentUnique: item.parent ? item.parent.id : null, name: item.name, entityType: item.isFolder ? UMB_MEDIA_TYPE_FOLDER_ENTITY_TYPE : UMB_MEDIA_TYPE_ENTITY_TYPE, hasChildren: item.hasChildren, - isContainer: item.isContainer, isFolder: item.isFolder, }; }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/media-type-tree.store.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/media-type-tree.store.ts index faabb3e6fe..e526a82a04 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/media-type-tree.store.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/media-type-tree.store.ts @@ -38,7 +38,6 @@ export class UmbMediaTypeTreeStore extends UmbUniqueTreeStore { name: item.name, entityType: item.entityType, isFolder: false, - isContainer: false, hasChildren: false, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/views/design/media-type-workspace-view-edit-properties.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/views/design/media-type-workspace-view-edit-properties.element.ts index 4282822402..81cb48d322 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/views/design/media-type-workspace-view-edit-properties.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/views/design/media-type-workspace-view-edit-properties.element.ts @@ -3,20 +3,19 @@ import './media-type-workspace-view-edit-property.element.js'; import type { UmbMediaTypeDetailModel } from '../../../types.js'; import { css, html, customElement, property, state, repeat, ifDefined } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import type { PropertyContainerTypes } from '@umbraco-cms/backoffice/content-type'; +import type { UmbPropertyContainerTypes, UmbPropertyTypeModel } from '@umbraco-cms/backoffice/content-type'; import { UmbContentTypePropertyStructureHelper } from '@umbraco-cms/backoffice/content-type'; import type { UmbSorterConfig } from '@umbraco-cms/backoffice/sorter'; import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import type { MediaTypePropertyTypeResponseModel, PropertyTypeModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; import { UMB_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/workspace'; import { UMB_PROPERTY_SETTINGS_MODAL, UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/modal'; -const SORTER_CONFIG: UmbSorterConfig = { - compareElementToModel: (element: HTMLElement, model: MediaTypePropertyTypeResponseModel) => { +const SORTER_CONFIG: UmbSorterConfig = { + compareElementToModel: (element: HTMLElement, model: UmbPropertyTypeModel) => { return element.getAttribute('data-umb-property-id') === model.id; }, - querySelectModelToElement: (container: HTMLElement, modelEntry: MediaTypePropertyTypeResponseModel) => { + querySelectModelToElement: (container: HTMLElement, modelEntry: UmbPropertyTypeModel) => { return container.querySelector('[data-umb-property-id=' + modelEntry.id + ']'); }, identifier: 'content-type-property-sorter', @@ -81,17 +80,17 @@ export class UmbMediaTypeWorkspaceViewEditPropertiesElement extends UmbLitElemen } @property({ type: String, attribute: 'container-type', reflect: false }) - public get containerType(): PropertyContainerTypes | undefined { + public get containerType(): UmbPropertyContainerTypes | undefined { return this._propertyStructureHelper.getContainerType(); } - public set containerType(value: PropertyContainerTypes | undefined) { + public set containerType(value: UmbPropertyContainerTypes | undefined) { this._propertyStructureHelper.setContainerType(value); } _propertyStructureHelper = new UmbContentTypePropertyStructureHelper(this); @state() - _propertyStructure: Array = []; + _propertyStructure: Array = []; @state() _ownerMediaTypes?: UmbMediaTypeDetailModel[]; @@ -105,7 +104,7 @@ export class UmbMediaTypeWorkspaceViewEditPropertiesElement extends UmbLitElemen constructor() { super(); - this.consumeContext(UMB_WORKSPACE_CONTEXT, (workspaceContext) => { + this.consumeContext(UMB_WORKSPACE_CONTEXT, async (workspaceContext) => { this._propertyStructureHelper.setStructureManager((workspaceContext as UmbMediaTypeWorkspaceContext).structure); this.observe( (workspaceContext as UmbMediaTypeWorkspaceContext).isSorting, @@ -115,6 +114,16 @@ export class UmbMediaTypeWorkspaceViewEditPropertiesElement extends UmbLitElemen }, '_observeIsSorting', ); + + const mediaTypesObservable = await this._propertyStructureHelper.ownerDocumentTypes(); + if (!mediaTypesObservable) return; + this.observe( + mediaTypesObservable, + (medias) => { + this._ownerMediaTypes = medias; + }, + 'observeOwnerMediaTypes', + ); }); this.observe(this._propertyStructureHelper.propertyStructure, (propertyStructure) => { this._propertyStructure = propertyStructure; @@ -133,7 +142,10 @@ export class UmbMediaTypeWorkspaceViewEditPropertiesElement extends UmbLitElemen return { data: { documentTypeId: mediaTypeId }, value: propertyData }; //TODO: Should we have a separate modal for mediaTypes? }) .onSubmit((value) => { - this.#addProperty(value); + if (!value.dataType) { + throw new Error('No data type selected'); + } + this.#addProperty(value as UmbPropertyTypeModel); }) .observeRouteBuilder((routeBuilder) => { this._modalRouteNewProperty = routeBuilder(null); @@ -148,20 +160,7 @@ export class UmbMediaTypeWorkspaceViewEditPropertiesElement extends UmbLitElemen } } - connectedCallback(): void { - super.connectedCallback(); - const mediaTypes = this._propertyStructureHelper.ownerDocumentTypes; //TODO: Should we have a separate propertyStructureHelper for mediaTypes? - if (!mediaTypes) return; - this.observe( - mediaTypes, - (medias) => { - this._ownerMediaTypes = medias; - }, - 'observeOwnerMediaTypes', - ); - } - - async #addProperty(propertyData: PropertyTypeModelBaseModel) { + async #addProperty(propertyData: UmbPropertyTypeModel) { const propertyPlaceholder = await this._propertyStructureHelper.addProperty(this._containerId); if (!propertyPlaceholder) return; @@ -172,18 +171,18 @@ export class UmbMediaTypeWorkspaceViewEditPropertiesElement extends UmbLitElemen return html`
${repeat( this._propertyStructure, - (property) => property.id ?? '' + property.containerId ?? '' + property.sortOrder ?? '', + (property) => property.id ?? '' + property.container?.id ?? '' + property.sortOrder ?? '', (property) => { // Note: This piece might be moved into the property component const inheritedFromMedia = this._ownerMediaTypes?.find( - (types) => types.containers?.find((containers) => containers.id === property.containerId), + (types) => types.containers?.find((containers) => containers.id === property.container?.id), ); return html` { diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/views/design/media-type-workspace-view-edit-property.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/views/design/media-type-workspace-view-edit-property.element.ts index cd88dc2b49..eda5094e00 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/views/design/media-type-workspace-view-edit-property.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/views/design/media-type-workspace-view-edit-property.element.ts @@ -1,10 +1,8 @@ import { UmbDataTypeDetailRepository } from '@umbraco-cms/backoffice/data-type'; -import type { UUIInputElement} from '@umbraco-cms/backoffice/external/uui'; +import type { UUIInputElement } from '@umbraco-cms/backoffice/external/uui'; import { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; import { css, html, customElement, property, state, ifDefined, nothing } from '@umbraco-cms/backoffice/external/lit'; -import type { PropertyTypeModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; -import type { - UmbConfirmModalData} from '@umbraco-cms/backoffice/modal'; +import type { UmbConfirmModalData } from '@umbraco-cms/backoffice/modal'; import { UMB_CONFIRM_MODAL, UMB_MODAL_MANAGER_CONTEXT, @@ -15,6 +13,7 @@ import { import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { generateAlias } from '@umbraco-cms/backoffice/utils'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import type { UmbPropertyTypeModel } from '@umbraco-cms/backoffice/content-type'; /** * @element umb-media-type-workspace-view-edit-property @@ -23,22 +22,22 @@ import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; */ @customElement('umb-media-type-workspace-view-edit-property') export class UmbMediaTypeWorkspacePropertyElement extends UmbLitElement { - private _property?: PropertyTypeModelBaseModel | undefined; + private _property?: UmbPropertyTypeModel | undefined; /** * Property, the data object for the property. - * @type {PropertyTypeModelBaseModel} + * @type {UmbPropertyTypeModel} * @attr * @default undefined */ @property({ type: Object }) - public get property(): PropertyTypeModelBaseModel | undefined { + public get property(): UmbPropertyTypeModel | undefined { return this._property; } - public set property(value: PropertyTypeModelBaseModel | undefined) { + public set property(value: UmbPropertyTypeModel | undefined) { const oldValue = this._property; this._property = value; this.#modalRegistration.setUniquePathValue('propertyId', value?.id?.toString()); - this.setDataType(this._property?.dataTypeId); + this.setDataType(this._property?.dataType.unique); this.requestUpdate('property', oldValue); } @@ -97,7 +96,10 @@ export class UmbMediaTypeWorkspacePropertyElement extends UmbLitElement { return { data: { documentTypeId: mediaTypeId }, value: propertyData }; //TODO: Should we have a separate modal for mediaTypes? }) .onSubmit((result) => { - this._partialUpdate(result); + if (!result.dataType) { + throw new Error('No dataType found on property'); + } + this._partialUpdate(result as UmbPropertyTypeModel); }) .observeRouteBuilder((routeBuilder) => { this._modalRoute = routeBuilder(null); @@ -117,7 +119,7 @@ export class UmbMediaTypeWorkspacePropertyElement extends UmbLitElement { }); } - _partialUpdate(partialObject: PropertyTypeModelBaseModel) { + _partialUpdate(partialObject: UmbPropertyTypeModel) { this.dispatchEvent(new CustomEvent('partial-property-update', { detail: partialObject })); } @@ -296,7 +298,7 @@ export class UmbMediaTypeWorkspacePropertyElement extends UmbLitElement { renderPropertyTags() { return this.property ? html`
- ${this.property.dataTypeId ? html`${this._dataTypeName}` : nothing} + ${this.property.dataType?.unique ? html`${this._dataTypeName}` : nothing} ${this.property.variesByCulture ? html` ${this.localize.term('contentTypeEditor_cultureVariantLabel')} diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/views/design/media-type-workspace-view-edit-tab.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/views/design/media-type-workspace-view-edit-tab.element.ts index bbef256383..e7aa540062 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/views/design/media-type-workspace-view-edit-tab.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/views/design/media-type-workspace-view-edit-tab.element.ts @@ -6,7 +6,7 @@ import { UmbContentTypeContainerStructureHelper } from '@umbraco-cms/backoffice/ import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import type { PropertyTypeContainerModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; import { UMB_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/workspace'; -import type { UmbSorterConfig} from '@umbraco-cms/backoffice/sorter'; +import type { UmbSorterConfig } from '@umbraco-cms/backoffice/sorter'; import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; import './media-type-workspace-view-edit-properties.element.js'; @@ -172,7 +172,11 @@ export class UmbMediaTypeWorkspaceViewEditTabElement extends UmbLitElement { value=${group.name ?? ''} @change=${(e: InputEvent) => { const newName = (e.target as HTMLInputElement).value; - this._groupStructureHelper.updateContainerName(group.id!, group.parentId ?? null, newName); + this._groupStructureHelper.updateContainerName( + group.id!, + group.parent?.id ?? null, + newName, + ); }}>
diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/views/structure/media-type-workspace-view-structure.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/views/structure/media-type-workspace-view-structure.element.ts index 235ba18173..64f8cbd709 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/views/structure/media-type-workspace-view-structure.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/views/structure/media-type-workspace-view-structure.element.ts @@ -6,6 +6,7 @@ import type { UUIToggleElement } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { UMB_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/workspace'; import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbContentTypeSortModel } from '@umbraco-cms/backoffice/content-type'; @customElement('umb-media-type-workspace-view-structure') export class UmbMediaTypeWorkspaceViewStructureElement extends UmbLitElement implements UmbWorkspaceViewElement { @@ -33,7 +34,7 @@ export class UmbMediaTypeWorkspaceViewStructureElement extends UmbLitElement imp this.observe(this.#workspaceContext.allowedContentTypes, (allowedContentTypes) => { const oldValue = this._allowedContentTypeIDs; this._allowedContentTypeIDs = allowedContentTypes - ?.map((x) => x.id) + ?.map((x) => x.contentType.unique) .filter((x) => x !== undefined) as Array; this.requestUpdate('_allowedContentTypeIDs', oldValue); }); @@ -62,8 +63,10 @@ export class UmbMediaTypeWorkspaceViewStructureElement extends UmbLitElement imp ${this.#renderIsTrashed(item)} @@ -199,7 +199,9 @@ export class UmbInputMediaElement extends FormControlMixin(UmbLitElement) { - this.#pickerContext.requestRemoveItem(item.id!)} label="Remove media ${item.name}"> + this.#pickerContext.requestRemoveItem(item.unique)} + label="Remove media ${item.name}"> @@ -207,17 +209,17 @@ export class UmbInputMediaElement extends FormControlMixin(UmbLitElement) { `; } - #renderIsTrashed(item: MediaItemResponseModel) { + #renderIsTrashed(item: UmbMediaItemModel) { if (!item.isTrashed) return; return html`Trashed`; } - #renderOpenButton(item: MediaItemResponseModel) { + #renderOpenButton(item: UmbMediaItemModel) { if (!this.showOpenButton) return; return html` diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/manifests.ts index 931c1d206a..606ae83fb3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/manifests.ts @@ -1,4 +1,4 @@ -import { UMB_MEDIA_REPOSITORY_ALIAS } from '../repository/manifests.js'; +import { UMB_MEDIA_DETAIL_REPOSITORY_ALIAS } from '../repository/index.js'; import type { ManifestEntityAction } from '@umbraco-cms/backoffice/extension-registry'; import { UmbTrashEntityAction } from '@umbraco-cms/backoffice/entity-action'; @@ -11,7 +11,7 @@ const entityActions: Array = [ meta: { icon: 'icon-trash', label: 'Trash', - repositoryAlias: UMB_MEDIA_REPOSITORY_ALIAS, + repositoryAlias: UMB_MEDIA_DETAIL_REPOSITORY_ALIAS, entityTypes: ['media'], }, }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/copy/copy.action.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/copy/copy.action.ts index f7cd5f5ec7..e008dc2002 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/copy/copy.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/copy/copy.action.ts @@ -1,14 +1,14 @@ -import type { UmbMediaRepository } from '../../repository/media.repository.js'; +import type { UmbMediaDetailRepository } from '../../repository/index.js'; import { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-action'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; -export class UmbMediaCopyEntityBulkAction extends UmbEntityBulkActionBase { +export class UmbMediaCopyEntityBulkAction extends UmbEntityBulkActionBase { constructor(host: UmbControllerHostElement, repositoryAlias: string, selection: Array) { super(host, repositoryAlias, selection); } async execute() { console.log(`execute copy for: ${this.selection}`); - await this.repository?.copy([], ''); + //await this.repository?.copy([], ''); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/manifests.ts index 460005a0e4..5f6ac813a1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/manifests.ts @@ -1,4 +1,4 @@ -import { UMB_MEDIA_REPOSITORY_ALIAS } from '../repository/manifests.js'; +import { UMB_MEDIA_DETAIL_REPOSITORY_ALIAS } from '../repository/index.js'; import { UMB_MEDIA_COLLECTION_ALIAS } from '../collection/index.js'; import { UmbMediaMoveEntityBulkAction } from './move/move.action.js'; import { UmbMediaCopyEntityBulkAction } from './copy/copy.action.js'; @@ -15,7 +15,7 @@ const entityActions: Array = [ api: UmbMediaMoveEntityBulkAction, meta: { label: 'Move', - repositoryAlias: UMB_MEDIA_REPOSITORY_ALIAS, + repositoryAlias: UMB_MEDIA_DETAIL_REPOSITORY_ALIAS, }, conditions: [ { @@ -33,7 +33,7 @@ const entityActions: Array = [ api: UmbMediaCopyEntityBulkAction, meta: { label: 'Copy', - repositoryAlias: UMB_MEDIA_REPOSITORY_ALIAS, + repositoryAlias: UMB_MEDIA_DETAIL_REPOSITORY_ALIAS, }, conditions: [ { @@ -51,7 +51,7 @@ const entityActions: Array = [ api: UmbMediaTrashEntityBulkAction, meta: { label: 'Trash', - repositoryAlias: UMB_MEDIA_REPOSITORY_ALIAS, + repositoryAlias: UMB_MEDIA_DETAIL_REPOSITORY_ALIAS, }, conditions: [ { diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move/move.action.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move/move.action.ts index b3493213e1..c8c021fdba 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move/move.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-bulk-actions/move/move.action.ts @@ -1,15 +1,11 @@ -import type { UmbMediaRepository } from '../../repository/media.repository.js'; +import type { UmbMediaDetailRepository } from '../../repository/index.js'; import { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-action'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-api'; -import type { - UmbModalManagerContext} from '@umbraco-cms/backoffice/modal'; -import { - UMB_MODAL_MANAGER_CONTEXT, - UMB_MEDIA_TREE_PICKER_MODAL, -} from '@umbraco-cms/backoffice/modal'; +import type { UmbModalManagerContext } from '@umbraco-cms/backoffice/modal'; +import { UMB_MODAL_MANAGER_CONTEXT, UMB_MEDIA_TREE_PICKER_MODAL } from '@umbraco-cms/backoffice/modal'; -export class UmbMediaMoveEntityBulkAction extends UmbEntityBulkActionBase { +export class UmbMediaMoveEntityBulkAction extends UmbEntityBulkActionBase { #modalContext?: UmbModalManagerContext; constructor(host: UmbControllerHostElement, repositoryAlias: string, selection: Array) { @@ -33,7 +29,7 @@ export class UmbMediaMoveEntityBulkAction extends UmbEntityBulkActionBase { +export class UmbMediaTrashEntityBulkAction extends UmbEntityBulkActionBase { #modalContext?: UmbModalManagerContext; constructor(host: UmbControllerHostElement, repositoryAlias: string, selection: Array) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity.ts index 42d49af90e..1df9b8aa2e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity.ts @@ -1,3 +1,5 @@ -export const UMB_MEDIA_ROOT_ENTITY_TYPE = 'media-root'; export const UMB_MEDIA_ENTITY_TYPE = 'media'; -export const UMB_MEDIA_FOLDER_ENTITY_TYPE = 'media-folder'; +export const UMB_MEDIA_ROOT_ENTITY_TYPE = 'media-root'; + +export type UmbMediaEntityType = typeof UMB_MEDIA_ENTITY_TYPE; +export type UmbMediaRootEntityType = typeof UMB_MEDIA_ROOT_ENTITY_TYPE; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/index.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/index.ts index bae1f868dc..82f981c511 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/index.ts @@ -1,30 +1,5 @@ -import type { ContentTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; - export * from './components/index.js'; export * from './repository/index.js'; +export * from './types.js'; export { UMB_MEDIA_COLLECTION_ALIAS } from './collection/index.js'; - -// Content -export interface ContentProperty { - alias: string; - label: string; - description: string; - dataTypeId: string; -} - -export interface ContentPropertyData { - alias: string; - value: any; -} - -// Media -export interface UmbMediaDetailModel extends ContentTreeItemResponseModel { - id: string; // TODO: Remove this when the backend is fixed - isTrashed: boolean; // TODO: remove only temp part of refactor - properties: Array; - data: Array; - variants: Array; // TODO: define variant data - //layout?: any; // TODO: define layout type - make it non-optional - icon?: string; -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/menu-item/manifests.ts index c7036d64f5..b31d64c60e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/menu-item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/menu-item/manifests.ts @@ -8,7 +8,6 @@ const menuItem: ManifestTypes = { weight: 100, meta: { label: 'Media', - icon: 'icon-folder', menus: ['Umb.Menu.Media'], treeAlias: 'Umb.Tree.Media', hideTreeRoot: true, diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/index.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/index.ts new file mode 100644 index 0000000000..e4c6d1606b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/index.ts @@ -0,0 +1,2 @@ +export { UmbMediaDetailRepository } from './media-detail.repository.js'; +export { UMB_MEDIA_DETAIL_REPOSITORY_ALIAS } from './manifests.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/manifests.ts new file mode 100644 index 0000000000..7095dfc4ce --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/manifests.ts @@ -0,0 +1,23 @@ +import { UmbMediaDetailRepository } from './media-detail.repository.js'; +import { UmbMediaDetailStore } from './media-detail.store.js'; +import type { ManifestRepository, ManifestStore } from '@umbraco-cms/backoffice/extension-registry'; + +export const UMB_MEDIA_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.Media.Detail'; + +const repository: ManifestRepository = { + type: 'repository', + alias: UMB_MEDIA_DETAIL_REPOSITORY_ALIAS, + name: 'Media Detail Repository', + api: UmbMediaDetailRepository, +}; + +export const UMB_MEDIA_DETAIL_STORE_ALIAS = 'Umb.Store.Media.Detail'; + +const store: ManifestStore = { + type: 'store', + alias: UMB_MEDIA_DETAIL_STORE_ALIAS, + name: 'Media Detail Store', + api: UmbMediaDetailStore, +}; + +export const manifests = [repository, store]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/media-detail.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/media-detail.repository.ts new file mode 100644 index 0000000000..f2a15cbe0d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/media-detail.repository.ts @@ -0,0 +1,11 @@ +import type { UmbMediaDetailModel } from '../../types.js'; +import { UmbMediaServerDataSource } from './media-detail.server.data-source.js'; +import { UMB_MEDIA_DETAIL_STORE_CONTEXT } from './media-detail.store.js'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbDetailRepositoryBase } from '@umbraco-cms/backoffice/repository'; + +export class UmbMediaDetailRepository extends UmbDetailRepositoryBase { + constructor(host: UmbControllerHost) { + super(host, UmbMediaServerDataSource, UMB_MEDIA_DETAIL_STORE_CONTEXT); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/media-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/media-detail.server.data-source.ts new file mode 100644 index 0000000000..de473acc85 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/media-detail.server.data-source.ts @@ -0,0 +1,176 @@ +import type { UmbMediaDetailModel } from '../../types.js'; +import { UMB_MEDIA_ENTITY_TYPE } from '../../entity.js'; +import { UmbId } from '@umbraco-cms/backoffice/id'; +import type { UmbDetailDataSource } from '@umbraco-cms/backoffice/repository'; +import type { CreateMediaRequestModel, UpdateMediaRequestModel } from '@umbraco-cms/backoffice/backend-api'; +import { MediaResource } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; + +/** + * A data source for the Media that fetches data from the server + * @export + * @class UmbMediaServerDataSource + * @implements {RepositoryDetailDataSource} + */ +export class UmbMediaServerDataSource implements UmbDetailDataSource { + #host: UmbControllerHost; + + /** + * Creates an instance of UmbMediaServerDataSource. + * @param {UmbControllerHost} host + * @memberof UmbMediaServerDataSource + */ + constructor(host: UmbControllerHost) { + this.#host = host; + } + + /** + * Creates a new Media scaffold + * @param {(string | null)} parentUnique + * @return { UmbMediaDetailModel } + * @memberof UmbMediaServerDataSource + */ + async createScaffold(parentUnique: string | null) { + const data: UmbMediaDetailModel = { + entityType: UMB_MEDIA_ENTITY_TYPE, + unique: UmbId.new(), + parentUnique, + urls: [], + mediaType: { + unique: 'mediaTypeId', + }, + isTrashed: false, + values: [], + variants: [ + { + state: null, + culture: null, + segment: null, + name: '', + publishDate: null, + createDate: null, + updateDate: null, + }, + ], + }; + + return { data }; + } + + /** + * Fetches a Media with the given id from the server + * @param {string} unique + * @return {*} + * @memberof UmbMediaServerDataSource + */ + async read(unique: string) { + if (!unique) throw new Error('Unique is missing'); + + const { data, error } = await tryExecuteAndNotify(this.#host, MediaResource.getMediaById({ id: unique })); + + if (error || !data) { + return { error }; + } + + // TODO: make data mapper to prevent errors + const media: UmbMediaDetailModel = { + entityType: UMB_MEDIA_ENTITY_TYPE, + unique: data.id, + parentUnique: null, // TODO: this is not correct. It will be solved when we know where to get the parent from + values: data.values, + variants: data.variants.map((variant) => { + return { + state: null, + culture: variant.culture || null, + segment: variant.segment || null, + name: variant.name, + publishDate: null, + createDate: variant.createDate, + updateDate: variant.updateDate, + }; + }), + urls: data.urls, + mediaType: { unique: data.mediaType.id }, + isTrashed: data.isTrashed, + }; + + return { data: media }; + } + + /** + * Inserts a new Media on the server + * @param {UmbMediaDetailModel} model + * @return {*} + * @memberof UmbMediaServerDataSource + */ + async create(model: UmbMediaDetailModel) { + if (!model) throw new Error('Media is missing'); + if (!model.unique) throw new Error('Media unique is missing'); + + // TODO: make data mapper to prevent errors + const requestBody: CreateMediaRequestModel = { + id: model.unique, + parent: model.parentUnique ? { id: model.parentUnique } : null, + mediaType: { id: model.mediaType.unique }, + values: model.values, + variants: model.variants, + }; + + const { data, error } = await tryExecuteAndNotify( + this.#host, + MediaResource.postMedia({ + requestBody, + }), + ); + + if (data) { + return this.read(data); + } + + return { error }; + } + + /** + * Updates a Media on the server + * @param {UmbMediaDetailModel} Media + * @return {*} + * @memberof UmbMediaServerDataSource + */ + async update(model: UmbMediaDetailModel) { + if (!model.unique) throw new Error('Unique is missing'); + + // TODO: make data mapper to prevent errors + const requestBody: UpdateMediaRequestModel = { + values: model.values, + variants: model.variants, + }; + + const { data, error } = await tryExecuteAndNotify( + this.#host, + MediaResource.putMediaById({ + id: model.unique, + requestBody, + }), + ); + + if (data) { + return this.read(data); + } + + return { error }; + } + + /** + * Deletes a Media on the server + * @param {string} unique + * @return {*} + * @memberof UmbMediaServerDataSource + */ + async delete(unique: string) { + if (!unique) throw new Error('Unique is missing'); + + // TODO: update to delete when implemented + return tryExecuteAndNotify(this.#host, MediaResource.putMediaByIdMoveToRecycleBin({ id: unique })); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/media-detail.store.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/media-detail.store.ts new file mode 100644 index 0000000000..3fcf8b8c0c --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/media-detail.store.ts @@ -0,0 +1,23 @@ +import type { UmbMediaDetailModel } from '../../types.js'; +import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; +import { UmbDetailStoreBase } from '@umbraco-cms/backoffice/store'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; + +/** + * @export + * @class UmbMediaDetailStore + * @extends {UmbStoreBase} + * @description - Data Store for Media Details + */ +export class UmbMediaDetailStore extends UmbDetailStoreBase { + /** + * Creates an instance of UmbMediaDetailStore. + * @param {UmbControllerHost} host + * @memberof UmbMediaDetailStore + */ + constructor(host: UmbControllerHost) { + super(host, UMB_MEDIA_DETAIL_STORE_CONTEXT.toString()); + } +} + +export const UMB_MEDIA_DETAIL_STORE_CONTEXT = new UmbContextToken('UmbMediaDetailStore'); diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/index.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/index.ts index 940fc67617..480a724215 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/index.ts @@ -1,3 +1,4 @@ -export * from './media.repository.js'; -export { UMB_MEDIA_REPOSITORY_ALIAS } from './manifests.js'; -export { UMB_MEDIA_STORE_CONTEXT } from './media.store.js'; +export { UmbMediaDetailRepository, UMB_MEDIA_DETAIL_REPOSITORY_ALIAS } from './detail/index.js'; +export { UmbMediaItemRepository, UMB_MEDIA_ITEM_REPOSITORY_ALIAS } from './item/index.js'; + +export type { UmbMediaItemModel } from './item/types.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/index.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/index.ts new file mode 100644 index 0000000000..77ca34778b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/index.ts @@ -0,0 +1,2 @@ +export { UmbMediaItemRepository } from './media-item.repository.js'; +export { UMB_MEDIA_ITEM_REPOSITORY_ALIAS } from './manifests.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/manifests.ts new file mode 100644 index 0000000000..9f7c647064 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/manifests.ts @@ -0,0 +1,22 @@ +import { UmbMediaItemStore } from './media-item.store.js'; +import { UmbMediaItemRepository } from './media-item.repository.js'; +import type { ManifestRepository, ManifestItemStore } from '@umbraco-cms/backoffice/extension-registry'; + +export const UMB_MEDIA_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.MediaItem'; +export const UMB_MEDIA_STORE_ALIAS = 'Umb.Store.MediaItem'; + +const itemRepository: ManifestRepository = { + type: 'repository', + alias: UMB_MEDIA_ITEM_REPOSITORY_ALIAS, + name: 'Media Item Repository', + api: UmbMediaItemRepository, +}; + +const itemStore: ManifestItemStore = { + type: 'itemStore', + alias: UMB_MEDIA_STORE_ALIAS, + name: 'Media Item Store', + api: UmbMediaItemStore, +}; + +export const manifests = [itemRepository, itemStore]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/media-item.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/media-item.repository.ts new file mode 100644 index 0000000000..c52c11502f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/media-item.repository.ts @@ -0,0 +1,11 @@ +import { UmbMediaItemServerDataSource } from './media-item.server.data-source.js'; +import { UMB_MEDIA_ITEM_STORE_CONTEXT } from './media-item.store.js'; +import type { UmbMediaItemModel } from './types.js'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbItemRepositoryBase } from '@umbraco-cms/backoffice/repository'; + +export class UmbMediaItemRepository extends UmbItemRepositoryBase { + constructor(host: UmbControllerHost) { + super(host, UmbMediaItemServerDataSource, UMB_MEDIA_ITEM_STORE_CONTEXT); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/media-item.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/media-item.server.data-source.ts new file mode 100644 index 0000000000..c168a0c9e0 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/media-item.server.data-source.ts @@ -0,0 +1,50 @@ +import type { UmbMediaItemModel } from './types.js'; +import type { MediaItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import { MediaResource } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbItemServerDataSourceBase } from '@umbraco-cms/backoffice/repository'; + +/** + * A data source for Media items that fetches data from the server + * @export + * @class UmbMediaItemServerDataSource + * @implements {MediaTreeDataSource} + */ +export class UmbMediaItemServerDataSource extends UmbItemServerDataSourceBase< + MediaItemResponseModel, + UmbMediaItemModel +> { + /** + * Creates an instance of UmbMediaItemServerDataSource. + * @param {UmbControllerHost} host + * @memberof UmbMediaItemServerDataSource + */ + constructor(host: UmbControllerHost) { + super(host, { + getItems, + mapper, + }); + } +} + +/* eslint-disable local-rules/no-direct-api-import */ +const getItems = (uniques: Array) => MediaResource.getMediaItem({ id: uniques }); + +const mapper = (item: MediaItemResponseModel): UmbMediaItemModel => { + return { + unique: item.id, + isTrashed: item.isTrashed, + mediaType: { + unique: item.mediaType.id, + icon: item.mediaType.icon, + hasListView: item.mediaType.hasListView, + }, + variants: item.variants.map((variant) => { + return { + culture: variant.culture || null, + name: variant.name, + }; + }), + name: item.variants[0]?.name, // TODO: get correct variant name + }; +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/media-item.store.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/media-item.store.ts new file mode 100644 index 0000000000..9d99038df8 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/media-item.store.ts @@ -0,0 +1,24 @@ +import type { UmbMediaDetailModel } from '../../types.js'; +import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbItemStoreBase } from '@umbraco-cms/backoffice/store'; + +/** + * @export + * @class UmbMediaItemStore + * @extends {UmbStoreBase} + * @description - Data Store for Media items + */ + +export class UmbMediaItemStore extends UmbItemStoreBase { + /** + * Creates an instance of UmbMediaItemStore. + * @param {UmbControllerHost} host + * @memberof UmbMediaItemStore + */ + constructor(host: UmbControllerHost) { + super(host, UMB_MEDIA_ITEM_STORE_CONTEXT.toString()); + } +} + +export const UMB_MEDIA_ITEM_STORE_CONTEXT = new UmbContextToken('UmbMediaItemStore'); diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/types.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/types.ts new file mode 100644 index 0000000000..5fdb7f35ba --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/types.ts @@ -0,0 +1,16 @@ +export interface UmbMediaItemModel { + unique: string; + isTrashed: boolean; + mediaType: { + unique: string; + icon: string; + hasListView: boolean; + }; + variants: Array; + name: string; // TODO: get correct variant name +} + +export interface UmbMediaItemVariantModel { + name: string; + culture: string | null; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/manifests.ts index eaf907ef47..bb35952020 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/manifests.ts @@ -1,32 +1,4 @@ -import { UmbMediaItemStore } from './media-item.store.js'; -import { UmbMediaRepository } from './media.repository.js'; -import { UmbMediaStore } from './media.store.js'; -import type { ManifestStore, ManifestRepository, ManifestItemStore } from '@umbraco-cms/backoffice/extension-registry'; +import { manifests as detailManifests } from './detail/manifests.js'; +import { manifests as itemManifests } from './item/manifests.js'; -export const UMB_MEDIA_REPOSITORY_ALIAS = 'Umb.Repository.Media'; - -const repository: ManifestRepository = { - type: 'repository', - alias: UMB_MEDIA_REPOSITORY_ALIAS, - name: 'Media Repository', - api: UmbMediaRepository, -}; - -export const UMB_MEDIA_STORE_ALIAS = 'Umb.Store.Media'; -export const UMB_MEDIA_ITEM_STORE_ALIAS = 'Umb.Store.MediaItem'; - -const store: ManifestStore = { - type: 'store', - alias: UMB_MEDIA_STORE_ALIAS, - name: 'Media Store', - api: UmbMediaStore, -}; - -const itemStore: ManifestItemStore = { - type: 'itemStore', - alias: UMB_MEDIA_ITEM_STORE_ALIAS, - name: 'Media Item Store', - api: UmbMediaItemStore, -}; - -export const manifests = [store, itemStore, repository]; +export const manifests = [...detailManifests, ...itemManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/media-item.store.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/media-item.store.ts deleted file mode 100644 index 5f1d36dc0e..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/media-item.store.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; -import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; -import { UmbEntityItemStore } from '@umbraco-cms/backoffice/store'; -import type { MediaItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; - -/** - * @export - * @class UmbMediaItemStore - * @extends {UmbEntityItemStore} - * @description - Data Store for Media items - */ - -export class UmbMediaItemStore extends UmbEntityItemStore { - /** - * Creates an instance of UmbMediaItemStore. - * @param {UmbControllerHostElement} host - * @memberof UmbMediaItemStore - */ - constructor(host: UmbControllerHostElement) { - super(host, UMB_MEDIA_ITEM_STORE_CONTEXT.toString()); - } -} - -export const UMB_MEDIA_ITEM_STORE_CONTEXT = new UmbContextToken('UmbMediaItemStore'); diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/media.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/media.repository.ts deleted file mode 100644 index 76862033c2..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/media.repository.ts +++ /dev/null @@ -1,196 +0,0 @@ -import { UMB_MEDIA_TREE_STORE_CONTEXT, type UmbMediaTreeStore } from '../tree/index.js'; -import type { UmbMediaStore } from './media.store.js'; -import { UMB_MEDIA_STORE_CONTEXT } from './media.store.js'; -import { UmbMediaDetailServerDataSource } from './sources/media-detail.server.data-source.js'; -import { UmbMediaItemServerDataSource } from './sources/media-item.server.data-source.js'; -import type { UmbMediaItemStore } from './media-item.store.js'; -import { UMB_MEDIA_ITEM_STORE_CONTEXT } from './media-item.store.js'; -import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; -import type { CreateMediaRequestModel, UpdateMediaRequestModel } from '@umbraco-cms/backoffice/backend-api'; -import type { UmbNotificationContext} from '@umbraco-cms/backoffice/notification'; -import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification'; -import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; - -export class UmbMediaRepository extends UmbBaseController implements UmbApi { - #init; - - #treeStore?: UmbMediaTreeStore; - - #detailDataSource: UmbMediaDetailServerDataSource; - #store?: UmbMediaStore; - - #itemSource: UmbMediaItemServerDataSource; - #itemStore?: UmbMediaItemStore; - - #notificationContext?: UmbNotificationContext; - - constructor(host: UmbControllerHost) { - super(host); - - // TODO: figure out how spin up get the correct data source - this.#detailDataSource = new UmbMediaDetailServerDataSource(this); - this.#itemSource = new UmbMediaItemServerDataSource(this); - - this.#init = Promise.all([ - this.consumeContext(UMB_MEDIA_TREE_STORE_CONTEXT, (instance) => { - this.#treeStore = instance; - }).asPromise(), - - this.consumeContext(UMB_MEDIA_STORE_CONTEXT, (instance) => { - this.#store = instance; - }).asPromise(), - - this.consumeContext(UMB_MEDIA_ITEM_STORE_CONTEXT, (instance) => { - this.#itemStore = instance; - }).asPromise(), - - this.consumeContext(UMB_NOTIFICATION_CONTEXT, (instance) => { - this.#notificationContext = instance; - }).asPromise(), - ]); - } - - // ITEMS: - async requestItems(ids: Array) { - if (!ids) throw new Error('Keys are missing'); - await this.#init; - - const { data, error } = await this.#itemSource.getItems(ids); - - if (data) { - this.#itemStore?.appendItems(data); - } - - return { data, error, asObservable: () => this.#itemStore!.items(ids) }; - } - - async items(ids: Array) { - await this.#init; - return this.#itemStore!.items(ids); - } - - // DETAILS: - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - async createScaffold(parentId: string | null) { - if (parentId === undefined) throw new Error('Parent id is missing'); - await this.#init; - return this.#detailDataSource.createScaffold(parentId); - } - - async requestById(id: string) { - if (!id) throw new Error('Id is missing'); - await this.#init; - - const { data, error } = await this.#detailDataSource.read(id); - - if (data) { - this.#store?.append(data); - } - - return { data, error }; - } - - async byId(id: string) { - if (!id) throw new Error('Id is missing'); - await this.#init; - return this.#store!.byId(id); - } - - // Could potentially be general methods: - - async create(media: CreateMediaRequestModel) { - if (!media) throw new Error('Media is missing'); - - await this.#init; - - const { error } = await this.#detailDataSource.create(media); - - if (!error) { - // TODO: we currently don't use the detail store for anything. - // Consider to look up the data before fetching from the server - // TODO: Update tree store with the new item? or ask tree to request the new item? - //this.#store?.append(media); - - const notification = { data: { message: `Media created` } }; - this.#notificationContext?.peek('positive', notification); - } - - return { error }; - } - - async save(id: string, updatedItem: UpdateMediaRequestModel) { - if (!id) throw new Error('Id is missing'); - if (!updatedItem) throw new Error('Updated media item is missing'); - - await this.#init; - - const { error } = await this.#detailDataSource.update(id, updatedItem); - - if (!error) { - // TODO: we currently don't use the detail store for anything. - // Consider to look up the data before fetching from the server - // Consider notify a workspace if a template is updated in the store while someone is editing it. - // this.#store?.append(updatedMediaItem); - // this.#treeStore?.updateItem(id, updatedItem); - - const notification = { data: { message: `Media saved` } }; - this.#notificationContext?.peek('positive', notification); - } - - return { error }; - } - - // General: - async delete(id: string) { - await this.#init; - - if (!id) { - throw new Error('Document id is missing'); - } - - const { error } = await this.#detailDataSource.delete(id); - - if (!error) { - const notification = { data: { message: `Document deleted` } }; - this.#notificationContext?.peek('positive', notification); - } - - // TODO: we currently don't use the detail store for anything. - // Consider to look up the data before fetching from the server. - // Consider notify a workspace if a template is deleted from the store while someone is editing it. - this.#store?.removeItem(id); - this.#treeStore?.removeItem(id); - - return { error }; - } - - async trash(ids: Array) { - console.log('media trash: ' + ids); - alert('implement trash'); - } - - async move(ids: Array, destination: string | null) { - // TODO: use backend cli when available. - const res = await fetch('/umbraco/management/api/v1/media/move', { - method: 'POST', - body: JSON.stringify({ ids, destination }), - headers: { - 'Content-Type': 'application/json', - }, - }); - const data = await res.json(); - this.#treeStore?.appendItems(data); - } - - async copy(uniques: Array, destination: string) { - console.log(`copy: ${uniques} to ${destination}`); - alert('copy'); - } - - async sortChildrenOf() { - alert('sort'); - } -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/media.store.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/media.store.ts deleted file mode 100644 index 87f634ed49..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/media.store.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type { UmbMediaDetailModel } from '../index.js'; -import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; -import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api'; -import { UmbStoreBase } from '@umbraco-cms/backoffice/store'; -import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; - -/** - * @export - * @class UmbMediaStore - * @extends {UmbStoreBase} - * @description - Data Store for Template Details - */ -export class UmbMediaStore extends UmbStoreBase { - /** - * Creates an instance of UmbMediaStore. - * @param {UmbControllerHostElement} host - * @memberof UmbMediaStore - */ - constructor(host: UmbControllerHostElement) { - super(host, UMB_MEDIA_STORE_CONTEXT.toString(), new UmbArrayState([], (x) => x.id)); - } - - /** - * Retrieve a media from the store - * @param {string} id - * @memberof UmbMediaStore - */ - byId(id: UmbMediaDetailModel['id']) { - return this._data.asObservablePart((x) => x.find((y) => y.id === id)); - } -} - -export const UMB_MEDIA_STORE_CONTEXT = new UmbContextToken('UmbMediaStore'); diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/sources/media-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/sources/media-detail.server.data-source.ts deleted file mode 100644 index 7f4fd828c6..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/sources/media-detail.server.data-source.ts +++ /dev/null @@ -1,168 +0,0 @@ -import type { UmbMediaDetailModel } from '../../index.js'; -import type { UmbDataSource } from '@umbraco-cms/backoffice/repository'; -import type { CreateMediaRequestModel, UpdateMediaRequestModel } from '@umbraco-cms/backoffice/backend-api'; -import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; - -/** - * A data source for the Template detail that fetches data from the server - * @export - * @class UmbTemplateDetailServerDataSource - * @implements {TemplateDetailDataSource} - */ -export class UmbMediaDetailServerDataSource - implements UmbDataSource -{ - #host: UmbControllerHost; - - /** - * Creates an instance of UmbMediaDetailServerDataSource. - * @param {UmbControllerHost} host - * @memberof UmbMediaDetailServerDataSource - */ - constructor(host: UmbControllerHost) { - this.#host = host; - } - - /** - * Fetches a Media with the given id from the server - * @param {string} id - * @return {*} - * @memberof UmbMediaDetailServerDataSource - */ - async read(id: string) { - if (!id) { - throw new Error('Id is missing'); - } - - return tryExecuteAndNotify( - this.#host, - // TODO: use backend cli when available. - fetch(`/umbraco/management/api/v1/media/details/${id}`) - .then((res) => res.json()) - .then((res) => res[0] || undefined), - ); - } - - /** - * Creates a new Media scaffold - * @param {(string | null)} parentId - * @return {*} - * @memberof UmbMediaDetailServerDataSource - */ - async createScaffold(parentId: string | null) { - const data = { - id: '', - name: '', - icon: '', - parentId, - contentTypeId: '', - properties: [], - data: [], - variants: [], - }; - - return { data }; - } - - /** - * Inserts a new Media on the server - * @param {Media} media - * @return {*} - * @memberof UmbMediaDetailServerDataSource - */ - async create(media: CreateMediaRequestModel) { - if (!media) throw new Error('Media is missing'); - - let body: string; - - try { - body = JSON.stringify(media); - } catch (error) { - console.error(error); - return Promise.reject(); - } - //return tryExecuteAndNotify(this.#host, MediaResource.postMedia(payload)); - return tryExecuteAndNotify( - this.#host, - fetch('/umbraco/management/api/v1/media/save', { - method: 'POST', - body: body, - headers: { - 'Content-Type': 'application/json', - }, - }).then((res) => res.json()), - ); - } - - /** - * Updates a Media on the server - * @param {Media} Media - * @return {*} - * @memberof UmbMediaDetailServerDataSource - */ - // TODO: Error mistake in this: - async update(id: string, media: UpdateMediaRequestModel) { - if (!id) throw new Error('Key is missing'); - if (!media) throw new Error('Media is missing'); - - const body = JSON.stringify(media); - - return tryExecuteAndNotify( - this.#host, - fetch('/umbraco/management/api/v1/media/save', { - method: 'POST', - body: body, - headers: { - 'Content-Type': 'application/json', - }, - }).then((res) => res.json()), - ); - } - - /** - * Trash a Media on the server - * @param {Media} Media - * @return {*} - * @memberof UmbMediaDetailServerDataSource - */ - async trash(id: string) { - if (!id) { - throw new Error('Id is missing'); - } - - return tryExecuteAndNotify( - this.#host, - fetch('/umbraco/management/api/v1/media/trash', { - method: 'POST', - body: JSON.stringify([id]), - headers: { - 'Content-Type': 'application/json', - }, - }).then((res) => res.json()), - ); - } - - /** - * Deletes a Template on the server - * @param {string} id - * @return {*} - * @memberof UmbTemplateDetailServerDataSource - */ - async delete(id: string) { - if (!id) { - throw new Error('Key is missing'); - } - - return tryExecuteAndNotify( - this.#host, - fetch('/umbraco/management/api/v1/media/delete', { - method: 'POST', - body: JSON.stringify([id]), - headers: { - 'Content-Type': 'application/json', - }, - }).then((res) => res.json()), - ); - } -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/sources/media-item.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/sources/media-item.server.data-source.ts deleted file mode 100644 index f635ef0033..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/sources/media-item.server.data-source.ts +++ /dev/null @@ -1,39 +0,0 @@ -import type { UmbItemDataSource } from '@umbraco-cms/backoffice/repository'; -import type { MediaItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; -import { MediaResource } from '@umbraco-cms/backoffice/backend-api'; -import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; - -/** - * A data source for Media items that fetches data from the server - * @export - * @class UmbMediaItemServerDataSource - * @implements {MediaItemDataSource} - */ -export class UmbMediaItemServerDataSource implements UmbItemDataSource { - #host: UmbControllerHost; - - /** - * Creates an instance of UmbMediaItemServerDataSource. - * @param {UmbControllerHost} host - * @memberof UmbMediaItemServerDataSource - */ - constructor(host: UmbControllerHost) { - this.#host = host; - } - - /** - * Fetches the items for the given ids from the server - * @param {Array} ids - * @memberof UmbMediaItemServerDataSource - */ - async getItems(ids: Array) { - if (!ids) throw new Error('Ids are missing'); - return tryExecuteAndNotify( - this.#host, - MediaResource.getMediaItem({ - id: ids, - }), - ); - } -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/manifests.ts index b6334b0d88..ab1a2aabee 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/manifests.ts @@ -38,7 +38,7 @@ const tree: ManifestTree = { const treeItem: ManifestTreeItem = { type: 'treeItem', - kind: 'entity', + kind: 'unique', alias: 'Umb.TreeItem.Media', name: 'Media Tree Item', meta: { diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.repository.ts index 29d534bf1a..2d52d72430 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.repository.ts @@ -15,13 +15,11 @@ export class UmbMediaTreeRepository } async requestTreeRoot() { - const data = { - id: null, + const data: UmbMediaTreeRootModel = { + unique: null, entityType: UMB_MEDIA_ROOT_ENTITY_TYPE, - name: 'Medias', - icon: 'icon-folder', + name: 'Media', hasChildren: true, - isContainer: false, isFolder: true, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.server.data-source.ts index ea9fb31c1a..6ea46cd90b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.server.data-source.ts @@ -1,3 +1,4 @@ +import { UMB_MEDIA_ENTITY_TYPE } from '../entity.js'; import type { UmbMediaTreeItemModel } from './types.js'; import { UmbTreeServerDataSourceBase } from '@umbraco-cms/backoffice/tree'; import { MediaResource, type MediaTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; @@ -43,14 +44,24 @@ const getChildrenOf = (parentUnique: string | null) => { const mapper = (item: MediaTreeItemResponseModel): UmbMediaTreeItemModel => { return { - id: item.id, - parentId: item.parentId || null, - name: item.name, - entityType: 'media', + unique: item.id, + parentUnique: item.parent ? item.parent.id : null, + entityType: UMB_MEDIA_ENTITY_TYPE, hasChildren: item.hasChildren, - isContainer: item.isContainer, noAccess: item.noAccess, isTrashed: item.isTrashed, isFolder: false, + mediaType: { + unique: item.mediaType.id, + icon: item.mediaType.icon, + hasListView: item.mediaType.hasListView, + }, + name: item.variants[0]?.name, // TODO: this is not correct. We need to get it from the variants. This is a temp solution. + variants: item.variants.map((variant) => { + return { + name: variant.name, + culture: variant.culture || null, + }; + }), }; }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.store.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.store.ts index adb3d58556..47170ec9d1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.store.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.store.ts @@ -1,14 +1,14 @@ import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; -import { UmbEntityTreeStore } from '@umbraco-cms/backoffice/tree'; +import { UmbUniqueTreeStore } from '@umbraco-cms/backoffice/tree'; /** * @export * @class UmbMediaTreeStore - * @extends {UmbStoreBase} + * @extends {UmbUniqueTreeStore} * @description - Tree Data Store for Media Items */ -export class UmbMediaTreeStore extends UmbEntityTreeStore { +export class UmbMediaTreeStore extends UmbUniqueTreeStore { /** * Creates an instance of UmbMediaTreeStore. * @param {UmbControllerHostElement} host diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/types.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/types.ts index 51a8377f29..b4d3707aa3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/types.ts @@ -1,9 +1,24 @@ -import type { UmbEntityTreeItemModel, UmbEntityTreeRootModel } from '@umbraco-cms/backoffice/tree'; +import type { UmbMediaEntityType, UmbMediaRootEntityType } from '../entity.js'; +import type { ContentStateModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbUniqueTreeItemModel, UmbUniqueTreeRootModel } from '@umbraco-cms/backoffice/tree'; -export interface UmbMediaTreeItemModel extends UmbEntityTreeItemModel { +export interface UmbMediaTreeItemModel extends UmbUniqueTreeItemModel { + entityType: UmbMediaEntityType; noAccess: boolean; isTrashed: boolean; + mediaType: { + unique: string; + icon: string; + hasListView: boolean; + }; + variants: Array; } -// TODO: TREE STORE TYPE PROBLEM: -export interface UmbMediaTreeRootModel extends UmbEntityTreeRootModel {} +export interface UmbMediaTreeRootModel extends UmbUniqueTreeRootModel { + entityType: UmbMediaRootEntityType; +} + +export interface UmbMediaTreeItemVariantModel { + name: string; + culture: string | null; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/types.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/types.ts new file mode 100644 index 0000000000..bbe3569beb --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/types.ts @@ -0,0 +1,14 @@ +import type { UmbMediaEntityType } from './entity.js'; +import type { UmbVariantModel } from '@umbraco-cms/backoffice/variant'; +import type { ContentUrlInfoModel, MediaValueModel } from '@umbraco-cms/backoffice/backend-api'; + +export interface UmbMediaDetailModel { + mediaType: { unique: string }; + entityType: UmbMediaEntityType; + isTrashed: boolean; + unique: string; + parentUnique: string | null; + urls: Array; + values: Array; + variants: Array; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/manifests.ts index 522437690c..7c50664107 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/manifests.ts @@ -1,4 +1,4 @@ -import { UMB_MEDIA_REPOSITORY_ALIAS } from '../repository/manifests.js'; +import { UMB_MEDIA_DETAIL_REPOSITORY_ALIAS } from '../repository/index.js'; import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; import type { ManifestWorkspace, @@ -68,7 +68,7 @@ const workspaceViewCollections: Array = [ pathname: 'collection', icon: 'icon-grid', entityType: 'media', - repositoryAlias: UMB_MEDIA_REPOSITORY_ALIAS, + repositoryAlias: UMB_MEDIA_DETAIL_REPOSITORY_ALIAS, }, conditions: [ { diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace-editor.element.ts index 8fa512cfde..5dba697b66 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace-editor.element.ts @@ -5,7 +5,7 @@ import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @customElement('umb-media-workspace-editor') export class UmbMediaWorkspaceEditorElement extends UmbLitElement { @state() - _id?: string; + _unique?: string; #umbWorkspaceContext?: typeof UMB_MEDIA_WORKSPACE_CONTEXT.TYPE; @@ -14,23 +14,23 @@ export class UmbMediaWorkspaceEditorElement extends UmbLitElement { this.consumeContext(UMB_MEDIA_WORKSPACE_CONTEXT, (instance) => { this.#umbWorkspaceContext = instance; - this.#observeId(); + this.#observeUnique(); }); } - #observeId() { + #observeUnique() { if (!this.#umbWorkspaceContext) return; - this.observe(this.#umbWorkspaceContext.data, (data) => (this._id = data?.id)); + this.observe(this.#umbWorkspaceContext.data, (data) => (this._unique = data?.unique)); } render() { - if (!this._id) return nothing; + if (!this._unique) return nothing; return html` + unique="${this._unique}"> `; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts index 92663a2ff7..93d54fe875 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts @@ -1,10 +1,7 @@ -import { UmbMediaRepository } from '../repository/media.repository.js'; +import { UmbMediaDetailRepository } from '../repository/detail/index.js'; import type { UmbMediaDetailModel } from '../index.js'; -import type { - UmbSaveableWorkspaceContextInterface} from '@umbraco-cms/backoffice/workspace'; -import { - UmbEditableWorkspaceContextBase, -} from '@umbraco-cms/backoffice/workspace'; +import type { UmbSaveableWorkspaceContextInterface } from '@umbraco-cms/backoffice/workspace'; +import { UmbEditableWorkspaceContextBase } from '@umbraco-cms/backoffice/workspace'; import { appendToFrozenArray, UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; @@ -16,11 +13,12 @@ export class UmbMediaWorkspaceContext implements UmbSaveableWorkspaceContextInterface, UmbApi { // - public readonly repository: UmbMediaRepository = new UmbMediaRepository(this); + public readonly repository = new UmbMediaDetailRepository(this); #data = new UmbObjectState(undefined); data = this.#data.asObservable(); - name = this.#data.asObservablePart((data) => data?.name); + // TODO: get correct variant name + name = this.#data.asObservablePart((data) => data?.variants[0].name); constructor(host: UmbControllerHost) { super(host, 'Umb.Workspace.Media'); @@ -32,38 +30,34 @@ export class UmbMediaWorkspaceContext // TODO: this should be async because it can only return the id if the data is loaded. getEntityId() { - return this.getData()?.id || ''; + return this.getData()?.unique; } getEntityType() { return 'media'; } - setName(name: string) { - this.#data.update({ name }); - } - setPropertyValue(alias: string, value: unknown) { const entry = { alias: alias, value: value }; const currentData = this.#data.value; if (currentData) { - const newDataSet = appendToFrozenArray(currentData.data, entry, (x) => x.alias); + const newDataSet = appendToFrozenArray(currentData.values, entry, (x) => x.alias); - this.#data.update({ data: newDataSet }); + this.#data.update({ values: newDataSet }); } } - async load(entityId: string) { - const { data } = await this.repository.requestById(entityId); + async load(unique: string) { + const { data } = await this.repository.requestByUnique(unique); if (data) { this.setIsNew(false); this.#data.setValue(data); } } - async create(parentId: string | null) { - const { data } = await this.repository.createScaffold(parentId); + async create(parentUnique: string | null) { + const { data } = await this.repository.createScaffold(parentUnique); if (!data) return; this.setIsNew(true); // TODO: This is a hack to get around the fact that the data is not typed correctly. diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.stories.ts index ab3e2d7050..277e9fd974 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.stories.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.stories.ts @@ -1,6 +1,6 @@ import './media-workspace.element.js'; import type { Meta, Story } from '@storybook/web-components'; -import { data as mediaNodes } from '../../../../mocks/data/media.data.js'; +import { data as mediaNodes } from '../../../../mocks/data/media/media.data.js'; import type { UmbMediaWorkspaceElement } from './media-workspace.element.js'; import { html, ifDefined } from '@umbraco-cms/backoffice/external/lit'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/section.manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/section.manifests.ts index fc97241312..0baeeb6770 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/section.manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/section.manifests.ts @@ -1,4 +1,4 @@ -import { UMB_MEDIA_REPOSITORY_ALIAS } from './media/repository/manifests.js'; +import { UMB_MEDIA_DETAIL_REPOSITORY_ALIAS } from './media/repository/index.js'; import type { ManifestDashboardCollection, ManifestSection, @@ -28,7 +28,7 @@ const dashboards: Array = [ meta: { label: 'Media', pathname: 'media-management', - repositoryAlias: UMB_MEDIA_REPOSITORY_ALIAS, + repositoryAlias: UMB_MEDIA_DETAIL_REPOSITORY_ALIAS, }, conditions: { sections: [sectionAlias], diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-groups/menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-groups/menu-item/manifests.ts index e8ab53dda4..08e280055b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-groups/menu-item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-groups/menu-item/manifests.ts @@ -10,7 +10,6 @@ const menuItem: ManifestTypes = { weight: 400, meta: { label: 'Member Groups', - icon: 'icon-folder', treeAlias: UMB_MEMBER_GROUP_TREE_ALIAS, menus: [UMB_MEMBER_MENU_ALIAS], }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-groups/tree/member-group-tree.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-groups/tree/member-group-tree.repository.ts index 4308b6e75d..4b84824491 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-groups/tree/member-group-tree.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-groups/tree/member-group-tree.repository.ts @@ -19,7 +19,6 @@ export class UmbMemberGroupTreeRepository id: null, entityType: UMB_MEMBER_GROUP_ROOT_ENTITY_TYPE, name: 'Member Groups', - icon: 'icon-folder', hasChildren: true, isContainer: false, isFolder: true, diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-groups/tree/member-group-tree.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-groups/tree/member-group-tree.server.data-source.ts index 2fd8663d41..31bc04f6e2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-groups/tree/member-group-tree.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-groups/tree/member-group-tree.server.data-source.ts @@ -1,6 +1,6 @@ import type { UmbMemberGroupTreeItemModel } from './types.js'; import { UmbTreeServerDataSourceBase } from '@umbraco-cms/backoffice/tree'; -import type { EntityTreeItemResponseModel} from '@umbraco-cms/backoffice/backend-api'; +import type { NamedEntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; import { MemberGroupResource } from '@umbraco-cms/backoffice/backend-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; @@ -11,7 +11,7 @@ import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; * @implements {UmbTreeDataSource} */ export class UmbMemberGroupTreeServerDataSource extends UmbTreeServerDataSourceBase< - EntityTreeItemResponseModel, + NamedEntityTreeItemResponseModel, UmbMemberGroupTreeItemModel > { /** @@ -39,13 +39,12 @@ const getChildrenOf = (parentUnique: string | null) => { } }; -const mapper = (item: EntityTreeItemResponseModel): UmbMemberGroupTreeItemModel => { +const mapper = (item: NamedEntityTreeItemResponseModel): UmbMemberGroupTreeItemModel => { return { id: item.id, - parentId: item.parentId || null, + parentId: item.parent ? item.parent.id : null, name: item.name, entityType: 'member-group', - isContainer: item.isContainer, hasChildren: item.hasChildren, isFolder: false, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-types/menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-types/menu-item/manifests.ts index 0dc324dc93..ddf86d8d68 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-types/menu-item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-types/menu-item/manifests.ts @@ -9,7 +9,6 @@ const menuItem: ManifestTypes = { weight: 700, meta: { label: 'Member Types', - icon: 'icon-folder', treeAlias: UMB_MEMBER_TYPE_TREE_ALIAS, menus: ['Umb.Menu.Settings'], }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-types/tree/member-type-tree.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-types/tree/member-type-tree.repository.ts index a630ebdd9b..561a6e6367 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-types/tree/member-type-tree.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-types/tree/member-type-tree.repository.ts @@ -19,7 +19,6 @@ export class UmbMemberTypeTreeRepository id: null, entityType: UMB_MEMBER_TYPE_ROOT_ENTITY_TYPE, name: 'Member Types', - icon: 'icon-folder', hasChildren: true, isContainer: false, isFolder: true, diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-types/tree/member-type-tree.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-types/tree/member-type-tree.server.data-source.ts index 81bde60878..8fd06852c1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-types/tree/member-type-tree.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-types/tree/member-type-tree.server.data-source.ts @@ -1,6 +1,6 @@ import type { UmbMemberTypeTreeItemModel } from './types.js'; import { UmbTreeServerDataSourceBase } from '@umbraco-cms/backoffice/tree'; -import type { EntityTreeItemResponseModel} from '@umbraco-cms/backoffice/backend-api'; +import type { NamedEntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; import { MemberTypeResource } from '@umbraco-cms/backoffice/backend-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; @@ -11,7 +11,7 @@ import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; * @implements {UmbTreeDataSource} */ export class UmbMemberTypeTreeServerDataSource extends UmbTreeServerDataSourceBase< - EntityTreeItemResponseModel, + NamedEntityTreeItemResponseModel, UmbMemberTypeTreeItemModel > { /** @@ -39,14 +39,13 @@ const getChildrenOf = (parentUnique: string | null) => { } }; -const mapper = (item: EntityTreeItemResponseModel): UmbMemberTypeTreeItemModel => { +const mapper = (item: NamedEntityTreeItemResponseModel): UmbMemberTypeTreeItemModel => { return { id: item.id, - parentId: item.parentId || null, + parentId: item.parent ? item.parent.id : null, name: item.name, entityType: 'member-type', hasChildren: item.hasChildren, - isContainer: item.isContainer, isFolder: false, }; }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/members/menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/members/menu-item/manifests.ts index 144b72ffdb..2a24e8be7f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/members/menu-item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/members/menu-item/manifests.ts @@ -10,7 +10,6 @@ const menuItem: ManifestTypes = { weight: 400, meta: { label: 'Members', - icon: 'icon-folder', treeAlias: UMB_MEMBER_TREE_ALIAS, menus: [UMB_MEMBER_MENU_ALIAS], }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/members/tree/member-tree.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/members/members/tree/member-tree.repository.ts index bd82e58686..ae2871e922 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/members/tree/member-tree.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/members/tree/member-tree.repository.ts @@ -19,7 +19,6 @@ export class UmbMemberTreeRepository id: null, entityType: UMB_MEMBER_ROOT_ENTITY_TYPE, name: 'Members', - icon: 'icon-folder', hasChildren: true, isContainer: false, isFolder: true, diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/members/tree/member-tree.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/members/members/tree/member-tree.server.data-source.ts index 65bf625a5f..27c2775808 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/members/tree/member-tree.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/members/tree/member-tree.server.data-source.ts @@ -1,5 +1,5 @@ import type { UmbMemberTreeItemModel } from './types.js'; -import type { EntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { NamedEntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbTreeServerDataSourceBase } from '@umbraco-cms/backoffice/tree'; @@ -10,7 +10,7 @@ import { UmbTreeServerDataSourceBase } from '@umbraco-cms/backoffice/tree'; * @extends {UmbTreeServerDataSourceBase} */ export class UmbMemberTreeServerDataSource extends UmbTreeServerDataSourceBase< - EntityTreeItemResponseModel, + NamedEntityTreeItemResponseModel, UmbMemberTreeItemModel > { /** @@ -33,14 +33,13 @@ const getChildrenOf = (parentUnique: string | null): any => { alert('not implemented'); }; -const mapper = (item: EntityTreeItemResponseModel): UmbMemberTreeItemModel => { +const mapper = (item: NamedEntityTreeItemResponseModel): UmbMemberTreeItemModel => { return { id: item.id, - parentId: item.parentId || null, + parentId: item.parent ? item.parent.id : null, name: item.name, entityType: 'member', hasChildren: item.hasChildren, - isContainer: item.isContainer, isFolder: false, }; }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/menu-item/manifests.ts index 8a2e111758..ef111632a2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/menu-item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/menu-item/manifests.ts @@ -10,7 +10,6 @@ const menuItem: ManifestTypes = { meta: { treeAlias: UMB_RELATION_TYPE_TREE_ALIAS, label: 'Relation Types', - icon: 'icon-folder', menus: ['Umb.Menu.Settings'], }, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/tree/relation-type-tree.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/tree/relation-type-tree.repository.ts index 166b8b8eda..b91d9590ea 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/tree/relation-type-tree.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/tree/relation-type-tree.repository.ts @@ -19,7 +19,6 @@ export class UmbRelationTypeTreeRepository id: null, entityType: UMB_RELATION_TYPE_ROOT_ENTITY_TYPE, name: 'Relation Types', - icon: 'icon-folder', hasChildren: true, isContainer: false, isFolder: true, diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/tree/relation-type-tree.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/tree/relation-type-tree.server.data-source.ts index e631086f63..226eb46321 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/tree/relation-type-tree.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/tree/relation-type-tree.server.data-source.ts @@ -1,5 +1,5 @@ import type { UmbRelationTypeTreeItemModel } from './types.js'; -import type { EntityTreeItemResponseModel} from '@umbraco-cms/backoffice/backend-api'; +import type { NamedEntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; import { RelationTypeResource } from '@umbraco-cms/backoffice/backend-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbTreeServerDataSourceBase } from '@umbraco-cms/backoffice/tree'; @@ -11,7 +11,7 @@ import { UmbTreeServerDataSourceBase } from '@umbraco-cms/backoffice/tree'; * @implements {UmbTreeDataSource} */ export class UmbRelationTypeTreeServerDataSource extends UmbTreeServerDataSourceBase< - EntityTreeItemResponseModel, + NamedEntityTreeItemResponseModel, UmbRelationTypeTreeItemModel > { /** @@ -39,14 +39,13 @@ const getChildrenOf = (parentUnique: string | null) => { } }; -const mapper = (item: EntityTreeItemResponseModel): UmbRelationTypeTreeItemModel => { +const mapper = (item: NamedEntityTreeItemResponseModel): UmbRelationTypeTreeItemModel => { return { id: item.id, - parentId: item.parentId || null, + parentId: item.parent ? item.parent.id : null, name: item.name, entityType: 'relation-type', hasChildren: item.hasChildren, - isContainer: item.isContainer, isFolder: false, }; }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/static-file/tree/static-file-tree.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/static-file/tree/static-file-tree.repository.ts index 805634d1ba..f08a2287f5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/static-file/tree/static-file-tree.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/static-file/tree/static-file-tree.repository.ts @@ -19,9 +19,7 @@ export class UmbStaticFileTreeRepository unique: null, entityType: UMB_STATIC_FILE_ROOT_ENTITY_TYPE, name: 'Static Files', - icon: 'icon-folder', hasChildren: true, - isContainer: false, isFolder: true, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/static-file/tree/static-file-tree.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/static-file/tree/static-file-tree.server.data-source.ts index 9ca8904269..69181dffef 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/static-file/tree/static-file-tree.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/static-file/tree/static-file-tree.server.data-source.ts @@ -55,6 +55,5 @@ const mapper = (item: FileSystemTreeItemPresentationModel): UmbStaticFileTreeIte name: item.name, isFolder: item.isFolder, hasChildren: item.hasChildren, - isContainer: false, }; }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/components/insert-menu/templating-insert-menu.element.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/components/insert-menu/templating-insert-menu.element.ts index 996bbfe530..41756614ce 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/components/insert-menu/templating-insert-menu.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/components/insert-menu/templating-insert-menu.element.ts @@ -1,6 +1,6 @@ import { UMB_MODAL_TEMPLATING_INSERT_CHOOSE_TYPE_SIDEBAR_ALIAS } from '../../modals/manifests.js'; import { getInsertDictionarySnippet, getInsertPartialSnippet } from '../../utils/index.js'; -import type { UmbChooseInsertTypeModalValue} from '../../modals/insert-choose-type-sidebar.element.js'; +import type { UmbChooseInsertTypeModalValue } from '../../modals/insert-choose-type-sidebar.element.js'; import { CodeSnippetType } from '../../modals/insert-choose-type-sidebar.element.js'; import { UmbDictionaryRepository } from '@umbraco-cms/backoffice/dictionary'; import { customElement, property, css, html } from '@umbraco-cms/backoffice/external/lit'; @@ -9,12 +9,13 @@ import type { UmbDictionaryItemPickerModalValue, UmbModalManagerContext, UmbModalContext, - UmbPartialViewPickerModalValue} from '@umbraco-cms/backoffice/modal'; + UmbPartialViewPickerModalValue, +} from '@umbraco-cms/backoffice/modal'; import { UMB_DICTIONARY_ITEM_PICKER_MODAL, UMB_MODAL_MANAGER_CONTEXT, UMB_PARTIAL_VIEW_PICKER_MODAL, - UmbModalToken + UmbModalToken, } from '@umbraco-cms/backoffice/modal'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @@ -60,9 +61,6 @@ export class UmbTemplatingInsertMenuElement extends UmbLitElement { break; } - case CodeSnippetType.macro: { - throw new Error('Not implemented'); - } } } @@ -130,10 +128,6 @@ export class UmbTemplatingInsertMenuElement extends UmbLitElement { title="Dictionary item" @click=${this.#openInsertDictionaryItemModal}> - - `; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/modals/insert-choose-type-sidebar.element.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/modals/insert-choose-type-sidebar.element.ts index 4da80658ee..07589ef9f6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/modals/insert-choose-type-sidebar.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/modals/insert-choose-type-sidebar.element.ts @@ -3,7 +3,8 @@ import { css, html, customElement } from '@umbraco-cms/backoffice/external/lit'; import type { UmbModalManagerContext, UmbModalContext, - UmbDictionaryItemPickerModalValue} from '@umbraco-cms/backoffice/modal'; + UmbDictionaryItemPickerModalValue, +} from '@umbraco-cms/backoffice/modal'; import { UMB_MODAL_MANAGER_CONTEXT, UMB_PARTIAL_VIEW_PICKER_MODAL, @@ -18,7 +19,6 @@ export interface ChooseInsertTypeModalData { export enum CodeSnippetType { partialView = 'partialView', dictionaryItem = 'dictionaryItem', - macro = 'macro', } export interface UmbChooseInsertTypeModalValue { value: string | UmbDictionaryItemPickerModalValue; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/menu-item/manifests.ts index c603d57548..00b7384a60 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/menu-item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/menu-item/manifests.ts @@ -9,7 +9,6 @@ const menuItem: ManifestTypes = { weight: 40, meta: { label: 'Partial Views', - icon: 'icon-folder', treeAlias: UMB_PARTIAL_VIEW_TREE_ALIAS, menus: ['Umb.Menu.Templating'], }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/folder/partial-view-folder.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/folder/partial-view-folder.repository.ts index ec895cd630..1f64e5cb9e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/folder/partial-view-folder.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/folder/partial-view-folder.repository.ts @@ -2,7 +2,7 @@ import { UMB_PARTIAL_VIEW_FOLDER_ENTITY_TYPE } from '../../entity.js'; import type { UmbPartialViewTreeItemModel } from '../types.js'; import { UMB_PARTIAL_VIEW_TREE_STORE_CONTEXT } from '../partial-view-tree.store.js'; import { UmbPartialViewFolderServerDataSource } from './partial-view-folder.server.data-source.js'; -import type { UmbFolderModel} from '@umbraco-cms/backoffice/tree'; +import type { UmbFolderModel } from '@umbraco-cms/backoffice/tree'; import { UmbFolderRepositoryBase } from '@umbraco-cms/backoffice/tree'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; @@ -24,7 +24,6 @@ const folderToPartialViewTreeItemFolder = (folder: UmbFolderModel): UmbPartialVi name: folder.name, entityType: UMB_PARTIAL_VIEW_FOLDER_ENTITY_TYPE, isFolder: true, - isContainer: false, hasChildren: false, }; }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/partial-view-tree.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/partial-view-tree.repository.ts index 129d387c8d..b29bc29b00 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/partial-view-tree.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/partial-view-tree.repository.ts @@ -6,7 +6,6 @@ import { UmbTreeRepositoryBase } from '@umbraco-cms/backoffice/tree'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; -// TODO: TREE STORE TYPE PROBLEM: export class UmbPartialViewTreeRepository extends UmbTreeRepositoryBase implements UmbApi @@ -20,9 +19,7 @@ export class UmbPartialViewTreeRepository unique: null, entityType: UMB_PARTIAL_VIEW_ROOT_ENTITY_TYPE, name: 'Partial Views', - icon: 'icon-folder', hasChildren: true, - isContainer: false, isFolder: true, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/partial-view-tree.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/partial-view-tree.server.data-source.ts index 3bdf84386f..518a8cbdf7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/partial-view-tree.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/partial-view-tree.server.data-source.ts @@ -2,7 +2,7 @@ import { UMB_PARTIAL_VIEW_ENTITY_TYPE, UMB_PARTIAL_VIEW_FOLDER_ENTITY_TYPE } fro import type { UmbPartialViewTreeItemModel } from './types.js'; import { UmbServerFilePathUniqueSerializer } from '@umbraco-cms/backoffice/server-file-system'; import { UmbTreeServerDataSourceBase } from '@umbraco-cms/backoffice/tree'; -import type { FileSystemTreeItemPresentationModel} from '@umbraco-cms/backoffice/backend-api'; +import type { FileSystemTreeItemPresentationModel } from '@umbraco-cms/backoffice/backend-api'; import { PartialViewResource } from '@umbraco-cms/backoffice/backend-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; @@ -56,6 +56,5 @@ const mapper = (item: FileSystemTreeItemPresentationModel): UmbPartialViewTreeIt name: item.name, isFolder: item.isFolder, hasChildren: item.hasChildren, - isContainer: false, }; }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/partial-view-tree.store.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/partial-view-tree.store.ts index b07f03c206..9420d28760 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/partial-view-tree.store.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/partial-view-tree.store.ts @@ -39,7 +39,6 @@ export class UmbPartialViewTreeStore extends UmbUniqueTreeStore { entityType: UMB_PARTIAL_VIEW_ENTITY_TYPE, name: item.name, hasChildren: false, - isContainer: false, isFolder: false, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/menu-item/manifests.ts index 50e0ac613e..bf12d94dc7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/menu-item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/menu-item/manifests.ts @@ -11,7 +11,6 @@ const menuItem: ManifestTypes = { weight: 10, meta: { label: 'Scripts', - icon: 'icon-folder', treeAlias: UMB_SCRIPT_TREE_ALIAS, menus: ['Umb.Menu.Templating'], }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/tree/folder/script-folder.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/tree/folder/script-folder.repository.ts index c9e7d86bdc..ef1399d613 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/tree/folder/script-folder.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/tree/folder/script-folder.repository.ts @@ -2,7 +2,7 @@ import { UMB_SCRIPT_FOLDER_ENTITY_TYPE } from '../../entity.js'; import type { UmbScriptTreeItemModel } from '../index.js'; import { UMB_SCRIPT_TREE_STORE_CONTEXT } from '../index.js'; import { UmbScriptFolderServerDataSource } from './script-folder.server.data-source.js'; -import type { UmbFolderModel} from '@umbraco-cms/backoffice/tree'; +import type { UmbFolderModel } from '@umbraco-cms/backoffice/tree'; import { UmbFolderRepositoryBase } from '@umbraco-cms/backoffice/tree'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; @@ -19,7 +19,6 @@ const folderToScriptTreeItemFolder = (folder: UmbFolderModel): UmbScriptTreeItem name: folder.name, entityType: UMB_SCRIPT_FOLDER_ENTITY_TYPE, isFolder: true, - isContainer: false, hasChildren: false, }; }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/tree/script-tree.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/tree/script-tree.repository.ts index c3340d49ea..2ba5f051fb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/tree/script-tree.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/tree/script-tree.repository.ts @@ -16,9 +16,7 @@ export class UmbScriptTreeRepository extends UmbTreeRepositoryBase { this.#modalManagerContext = instance; @@ -127,9 +126,10 @@ export default class UmbChooseInsertTypeModalElement extends UmbModalBaseElement }; async #getDocumentItem(ids: string[]) { - const { data, error } = await this.#documentRepository.requestItems(ids); + const { data, error } = await this.#documentItemRepository.requestItems(ids); if (data) { - this._selectedRootContentName = data[0].name; + // TODO: get correct variant name + this._selectedRootContentName = data[0].variants[0].name; } } @@ -260,12 +260,15 @@ export default class UmbChooseInsertTypeModalElement extends UmbModalBaseElement ` : ''}
-
+
${this._templateQuery?.resultCount ?? 0} items returned, in ${this._templateQuery?.executionTime ?? 0} ms + ${this._templateQuery?.sampleResults.map( + (sample) => html`${sample.name}`, + ) ?? ''}
${this._templateQuery?.queryExpression ?? ''} @@ -322,6 +325,16 @@ export default class UmbChooseInsertTypeModalElement extends UmbModalBaseElement #results-count { font-weight: bold; } + .query-results { + flex-direction: column; + align-items: flex-start; + gap: 0; + } + .query-results span { + display: flex; + align-items: center; + gap: var(--uui-size-1); + } `, ]; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/sources/index.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/sources/index.ts index f13fa00fab..9d339c4fda 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/sources/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/sources/index.ts @@ -1,9 +1,9 @@ -import type { DataSourceResponse, UmbPagedData } from '@umbraco-cms/backoffice/repository'; +import type { DataSourceResponse, UmbPagedModel } from '@umbraco-cms/backoffice/repository'; import type { ItemResponseModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; import type { UmbEntityTreeItemModel } from '@umbraco-cms/backoffice/tree'; export interface TemplateTreeDataSource { - getRootItems(): Promise>>; - getChildrenOf(parentId: string): Promise>>; + getRootItems(): Promise>>; + getChildrenOf(parentId: string): Promise>>; getItems(ids: Array): Promise>; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/tree/template-tree.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/tree/template-tree.repository.ts index 6909401eb6..4fa3640b12 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/tree/template-tree.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/tree/template-tree.repository.ts @@ -19,9 +19,7 @@ export class UmbTemplateTreeRepository id: null, entityType: UMB_TEMPLATE_ROOT_ENTITY_TYPE, name: 'Templates', - icon: 'icon-folder', hasChildren: true, - isContainer: false, isFolder: true, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/tree/template-tree.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/tree/template-tree.server.data-source.ts index 4437c8f203..6988211379 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/tree/template-tree.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/tree/template-tree.server.data-source.ts @@ -1,6 +1,9 @@ import type { UmbTemplateTreeItemModel } from './types.js'; import { UmbTreeServerDataSourceBase } from '@umbraco-cms/backoffice/tree'; -import type { EntityTreeItemResponseModel} from '@umbraco-cms/backoffice/backend-api'; +import type { + EntityTreeItemResponseModel, + NamedEntityTreeItemResponseModel, +} from '@umbraco-cms/backoffice/backend-api'; import { TemplateResource } from '@umbraco-cms/backoffice/backend-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; @@ -11,7 +14,7 @@ import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; * @implements {UmbTreeDataSource} */ export class UmbTemplateTreeServerDataSource extends UmbTreeServerDataSourceBase< - EntityTreeItemResponseModel, + NamedEntityTreeItemResponseModel, UmbTemplateTreeItemModel > { /** @@ -42,13 +45,12 @@ const getChildrenOf = (parentUnique: string | null) => { } }; -const mapper = (item: EntityTreeItemResponseModel): UmbTemplateTreeItemModel => { +const mapper = (item: NamedEntityTreeItemResponseModel): UmbTemplateTreeItemModel => { return { id: item.id, - parentId: item.parentId || null, + parentId: item.parent ? item.parent.id : null, name: item.name, entityType: 'template', - isContainer: item.isContainer, hasChildren: item.hasChildren, isFolder: false, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-document-start-node/user-document-start-node.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-document-start-node/user-document-start-node.element.ts index 80461c338f..9916243141 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-document-start-node/user-document-start-node.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-document-start-node/user-document-start-node.element.ts @@ -1,27 +1,27 @@ -import { css, html, customElement, property, repeat, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; +import { css, html, customElement, property, repeat, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { UmbDocumentRepository } from '@umbraco-cms/backoffice/document'; -import type { DocumentItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbDocumentItemModel } from '@umbraco-cms/backoffice/document'; +import { UmbDocumentItemRepository } from '@umbraco-cms/backoffice/document'; @customElement('umb-user-document-start-node') export class UmbUserDocumentStartNodeElement extends UmbLitElement { @property({ type: Array, attribute: false }) - ids: Array = []; + uniques: Array = []; @state() - _displayValue: Array = []; + _displayValue: Array = []; - #itemRepository = new UmbDocumentRepository(this); + #itemRepository = new UmbDocumentItemRepository(this); protected async firstUpdated(): Promise { - if (this.ids.length === 0) return; - const { data } = await this.#itemRepository.requestItems(this.ids); + if (this.uniques.length === 0) return; + const { data } = await this.#itemRepository.requestItems(this.uniques); this._displayValue = data || []; } render() { - if (this.ids.length < 1) { + if (this.uniques.length < 1) { return html` @@ -31,10 +31,11 @@ export class UmbUserDocumentStartNodeElement extends UmbLitElement { return repeat( this._displayValue, - (item) => item.id, + (item) => item.unique, (item) => { return html` - + + `; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-media-start-node/user-media-start-node.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-media-start-node/user-media-start-node.element.ts index ad1b7bc408..bf74902080 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-media-start-node/user-media-start-node.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-media-start-node/user-media-start-node.element.ts @@ -1,27 +1,27 @@ import { css, html, customElement, property, repeat, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import type { MediaItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; -import { UmbMediaRepository } from '@umbraco-cms/backoffice/media'; +import type { UmbMediaItemModel } from '@umbraco-cms/backoffice/media'; +import { UmbMediaItemRepository } from '@umbraco-cms/backoffice/media'; @customElement('umb-user-media-start-node') export class UmbUserMediaStartNodeElement extends UmbLitElement { @property({ type: Array, attribute: false }) - ids: Array = []; + uniques: Array = []; @state() - _displayValue: Array = []; + _displayValue: Array = []; - #itemRepository = new UmbMediaRepository(this); + #itemRepository = new UmbMediaItemRepository(this); protected async firstUpdated(): Promise { - if (this.ids.length === 0) return; - const { data } = await this.#itemRepository.requestItems(this.ids); + if (this.uniques.length === 0) return; + const { data } = await this.#itemRepository.requestItems(this.uniques); this._displayValue = data || []; } render() { - if (this.ids.length < 1) { + if (this.uniques.length < 1) { return html` @@ -31,10 +31,11 @@ export class UmbUserMediaStartNodeElement extends UmbLitElement { return repeat( this._displayValue, - (item) => item.id, + (item) => item.unique, (item) => { return html` - + + `; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/create/user-create-success-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/create/user-create-success-modal.element.ts index 6e0a626157..4c3ee3f279 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/create/user-create-success-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/create/user-create-success-modal.element.ts @@ -1,20 +1,12 @@ import { UmbUserItemRepository } from '../../repository/item/user-item.repository.js'; +import type { UmbUserItemModel } from '../../repository/item/types.js'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import type { UUIInputPasswordElement } from '@umbraco-cms/backoffice/external/uui'; -import type { - UmbNotificationDefaultData, - UmbNotificationContext} from '@umbraco-cms/backoffice/notification'; -import { - UMB_NOTIFICATION_CONTEXT, -} from '@umbraco-cms/backoffice/notification'; -import type { - UmbCreateUserSuccessModalData, - UmbCreateUserSuccessModalValue} from '@umbraco-cms/backoffice/modal'; -import { - UmbModalBaseElement, -} from '@umbraco-cms/backoffice/modal'; -import type { UserItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbNotificationDefaultData, UmbNotificationContext } from '@umbraco-cms/backoffice/notification'; +import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification'; +import type { UmbCreateUserSuccessModalData, UmbCreateUserSuccessModalValue } from '@umbraco-cms/backoffice/modal'; +import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; @customElement('umb-user-create-success-modal') export class UmbUserCreateSuccessModalElement extends UmbModalBaseElement< @@ -22,7 +14,7 @@ export class UmbUserCreateSuccessModalElement extends UmbModalBaseElement< UmbCreateUserSuccessModalValue > { @state() - _userItem?: UserItemResponseModel; + _userItem?: UmbUserItemModel; #userItemRepository = new UmbUserItemRepository(this); #notificationContext?: UmbNotificationContext; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/types.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/types.ts new file mode 100644 index 0000000000..d2811e5d91 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/types.ts @@ -0,0 +1,4 @@ +export interface UmbUserItemModel { + unique: string; + name: string; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/user-item.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/user-item.repository.ts index 3f15eaaa15..dfc603a51b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/user-item.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/user-item.repository.ts @@ -1,10 +1,10 @@ import { UmbUserItemServerDataSource } from './user-item.server.data-source.js'; import { UMB_USER_ITEM_STORE_CONTEXT } from './user-item.store.js'; +import type { UmbUserItemModel } from './types.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbItemRepositoryBase } from '@umbraco-cms/backoffice/repository'; -import type { UserItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; -export class UmbUserItemRepository extends UmbItemRepositoryBase { +export class UmbUserItemRepository extends UmbItemRepositoryBase { constructor(host: UmbControllerHost) { super(host, UmbUserItemServerDataSource, UMB_USER_ITEM_STORE_CONTEXT); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/user-item.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/user-item.server.data-source.ts index 3087588765..119067b248 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/user-item.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/user-item.server.data-source.ts @@ -1,8 +1,8 @@ -import type { UmbItemDataSource } from '@umbraco-cms/backoffice/repository'; +import type { UmbUserItemModel } from './types.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; -import type { UserItemResponseModel} from '@umbraco-cms/backoffice/backend-api'; +import type { UserItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; import { UserResource } from '@umbraco-cms/backoffice/backend-api'; +import { UmbItemServerDataSourceBase } from '@umbraco-cms/backoffice/repository'; /** * A data source for user items that fetches data from the server @@ -10,32 +10,26 @@ import { UserResource } from '@umbraco-cms/backoffice/backend-api'; * @class UmbUserItemServerDataSource * @implements {UmbItemDataSource} */ -export class UmbUserItemServerDataSource implements UmbItemDataSource { - #host: UmbControllerHost; - +export class UmbUserItemServerDataSource extends UmbItemServerDataSourceBase { /** * Creates an instance of UmbUserItemServerDataSource. * @param {UmbControllerHost} host * @memberof UmbUserItemServerDataSource */ constructor(host: UmbControllerHost) { - this.#host = host; - } - - /** - * Fetches the items for the given ids from the server - * @param {Array} ids - * @return {*} - * @memberof UmbUserItemServerDataSource - */ - async getItems(ids: Array) { - if (!ids) throw new Error('Ids are missing'); - - return tryExecuteAndNotify( - this.#host, - UserResource.getUserItem({ - id: ids, - }), - ); + super(host, { + getItems, + mapper, + }); } } + +/* eslint-disable local-rules/no-direct-api-import */ +const getItems = (uniques: Array) => UserResource.getUserItem({ id: uniques }); + +const mapper = (item: UserItemResponseModel): UmbUserItemModel => { + return { + unique: item.id, + name: item.name, + }; +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/user-item.store.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/user-item.store.ts index 8b8a1131eb..00c8d2fabb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/user-item.store.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/user-item.store.ts @@ -1,17 +1,17 @@ -import type { UserItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbUserItemModel } from './types.js'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; -import { UmbEntityItemStore } from '@umbraco-cms/backoffice/store'; +import { UmbItemStoreBase } from '@umbraco-cms/backoffice/store'; /** * @export * @class UmbUserItemStore - * @extends {UmbEntityItemStore} + * @extends {UmbItemStoreBase} * @description - Data Store for user items */ // TODO: add UmbItemStoreInterface when changed to uniques -export class UmbUserItemStore extends UmbEntityItemStore { +export class UmbUserItemStore extends UmbItemStoreBase { /** * Creates an instance of UmbUserItemStore. * @param {UmbControllerHostElement} host diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/components/user-workspace-access-settings/user-workspace-access-settings.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/components/user-workspace-access-settings/user-workspace-access-settings.element.ts index 5860dca7d7..6de90ad2e7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/components/user-workspace-access-settings/user-workspace-access-settings.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/components/user-workspace-access-settings/user-workspace-access-settings.element.ts @@ -1,5 +1,5 @@ import { UMB_USER_WORKSPACE_CONTEXT } from '../../user-workspace.context.js'; -import { html, customElement, state, css, repeat } from '@umbraco-cms/backoffice/external/lit'; +import { html, customElement, state, css } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import type { UserResponseModel } from '@umbraco-cms/backoffice/backend-api'; @@ -85,12 +85,12 @@ export class UmbUserWorkspaceAccessSettingsElement extends UmbLitElement { #renderDocumentStartNodes() { return html` Content - `; + `; } #renderMediaStartNodes() { return html` Media - `; + `; } static styles = [ diff --git a/src/Umbraco.Web.UI.Client/tsconfig.json b/src/Umbraco.Web.UI.Client/tsconfig.json index de24c48990..ae72aacad7 100644 --- a/src/Umbraco.Web.UI.Client/tsconfig.json +++ b/src/Umbraco.Web.UI.Client/tsconfig.json @@ -72,7 +72,6 @@ "@umbraco-cms/backoffice/server-file-system": ["src/packages/core/server-file-system"], "@umbraco-cms/backoffice/id": ["src/packages/core/id"], "@umbraco-cms/backoffice/localization": ["src/packages/core/localization"], - "@umbraco-cms/backoffice/macro": ["src/packages/core/macro"], "@umbraco-cms/backoffice/menu": ["src/packages/core/menu"], "@umbraco-cms/backoffice/modal": ["src/packages/core/modal"], "@umbraco-cms/backoffice/notification": ["src/packages/core/notification"], diff --git a/src/Umbraco.Web.UI.Client/web-test-runner.config.mjs b/src/Umbraco.Web.UI.Client/web-test-runner.config.mjs index 7a0d981ce5..8a5784bf6c 100644 --- a/src/Umbraco.Web.UI.Client/web-test-runner.config.mjs +++ b/src/Umbraco.Web.UI.Client/web-test-runner.config.mjs @@ -72,7 +72,6 @@ export default { '@umbraco-cms/backoffice/server-file-system': './src/packages/core/server-file-system/index.ts', '@umbraco-cms/backoffice/id': './src/packages/core/id/index.ts', '@umbraco-cms/backoffice/localization': './src/packages/core/localization/index.ts', - '@umbraco-cms/backoffice/macro': './src/packages/core/macro/index.ts', '@umbraco-cms/backoffice/menu': './src/packages/core/menu/index.ts', '@umbraco-cms/backoffice/modal': './src/packages/core/modal/index.ts', '@umbraco-cms/backoffice/notification': './src/packages/core/notification/index.ts',