diff --git a/adminforth/documentation/docs/tutorial/001-gettingStarted.md b/adminforth/documentation/docs/tutorial/001-gettingStarted.md index f569d5cc..4becad31 100644 --- a/adminforth/documentation/docs/tutorial/001-gettingStarted.md +++ b/adminforth/documentation/docs/tutorial/001-gettingStarted.md @@ -3,7 +3,7 @@ This page provides a step-by-step guide to quickly get started with AdminForth using the `adminforth` CLI. You will learn how to set up a new project using the `adminforth create-app` command and explore AdminForth’s fundamentals. -> 👆 For Hello world example without CLI check out [Hello World without CLI](./01-helloWorld.md) +> 👆 For setup example without CLI check out [Hello World without CLI](./01-helloWorld.md) ## Prerequisites @@ -19,8 +19,6 @@ nvm use 20 The recommended way to get started with AdminForth is via the **`create-app`** CLI, which scaffolds a basic fully functional back-office application. Apart boilerplate it creates one resource for users management. -### Create a fresh directory - First, create and enter a directory where you want your AdminForth project to live. For instance: ```bash @@ -28,8 +26,6 @@ mkdir myadmin cd myadmin ``` -### Run the CLI - You can provide options directorly: ```bash diff --git a/adminforth/spa/package-lock.json b/adminforth/spa/package-lock.json index 2183558e..a8720f27 100644 --- a/adminforth/spa/package-lock.json +++ b/adminforth/spa/package-lock.json @@ -11,7 +11,7 @@ "@iconify-prerendered/vue-flowbite": "^0.23.1714023977", "@unhead/vue": "^1.9.12", "@vueuse/core": "^10.10.0", - "apexcharts": "^4.3.0", + "apexcharts": "^3.52.0", "dayjs": "^1.11.11", "debounce": "^2.1.0", "flowbite": "^2.3.0", @@ -1025,62 +1025,6 @@ "integrity": "sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==", "dev": true }, - "node_modules/@svgdotjs/svg.draggable.js": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.4.tgz", - "integrity": "sha512-vWi/Col5Szo74HJVBgMHz23kLVljt3jvngmh0DzST45iO2ubIZ487uUAHIxSZH2tVRyiaaTL+Phaasgp4gUD2g==", - "license": "MIT", - "peerDependencies": { - "@svgdotjs/svg.js": "^3.2.4" - } - }, - "node_modules/@svgdotjs/svg.filter.js": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@svgdotjs/svg.filter.js/-/svg.filter.js-3.0.8.tgz", - "integrity": "sha512-YshF2YDaeRA2StyzAs5nUPrev7npQ38oWD0eTRwnsciSL2KrRPMoUw8BzjIXItb3+dccKGTX3IQOd2NFzmHkog==", - "license": "MIT", - "dependencies": { - "@svgdotjs/svg.js": "^3.1.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/@svgdotjs/svg.js": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@svgdotjs/svg.js/-/svg.js-3.2.4.tgz", - "integrity": "sha512-BjJ/7vWNowlX3Z8O4ywT58DqbNRyYlkk6Yz/D13aB7hGmfQTvGX4Tkgtm/ApYlu9M7lCQi15xUEidqMUmdMYwg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Fuzzyma" - } - }, - "node_modules/@svgdotjs/svg.resize.js": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@svgdotjs/svg.resize.js/-/svg.resize.js-2.0.5.tgz", - "integrity": "sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA==", - "license": "MIT", - "engines": { - "node": ">= 14.18" - }, - "peerDependencies": { - "@svgdotjs/svg.js": "^3.2.4", - "@svgdotjs/svg.select.js": "^4.0.1" - } - }, - "node_modules/@svgdotjs/svg.select.js": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@svgdotjs/svg.select.js/-/svg.select.js-4.0.2.tgz", - "integrity": "sha512-5gWdrvoQX3keo03SCmgaBbD+kFftq0F/f2bzCbNnpkkvW6tk4rl4MakORzFuNjvXPWwB4az9GwuvVxQVnjaK2g==", - "license": "MIT", - "engines": { - "node": ">= 14.18" - }, - "peerDependencies": { - "@svgdotjs/svg.js": "^3.2.4" - } - }, "node_modules/@tsconfig/node20": { "version": "20.1.4", "resolved": "https://registry.npmjs.org/@tsconfig/node20/-/node20-20.1.4.tgz", @@ -1719,17 +1663,18 @@ } }, "node_modules/apexcharts": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-4.3.0.tgz", - "integrity": "sha512-PfvZQpv91T68hzry9l5zP3Gip7sQvF0nFK91uCBrswIKX7rbIdbVNS4fOks9m9yP3Ppgs6LHgU2M/mjoG4NM0A==", + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.52.0.tgz", + "integrity": "sha512-7dg0ADKs8AA89iYMZMe2sFDG0XK5PfqllKV9N+i3hKHm3vEtdhwz8AlXGm+/b0nJ6jKiaXsqci5LfVxNhtB+dA==", "license": "MIT", "dependencies": { - "@svgdotjs/svg.draggable.js": "^3.0.4", - "@svgdotjs/svg.filter.js": "^3.0.8", - "@svgdotjs/svg.js": "^3.2.4", - "@svgdotjs/svg.resize.js": "^2.0.2", - "@svgdotjs/svg.select.js": "^4.0.1", - "@yr/monotone-cubic-spline": "^1.0.3" + "@yr/monotone-cubic-spline": "^1.0.3", + "svg.draggable.js": "^2.2.2", + "svg.easing.js": "^2.0.0", + "svg.filter.js": "^2.0.2", + "svg.pathmorphing.js": "^0.1.3", + "svg.resize.js": "^1.4.3", + "svg.select.js": "^3.0.1" } }, "node_modules/arg": { @@ -4315,6 +4260,97 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svg.draggable.js": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz", + "integrity": "sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==", + "license": "MIT", + "dependencies": { + "svg.js": "^2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.easing.js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/svg.easing.js/-/svg.easing.js-2.0.0.tgz", + "integrity": "sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==", + "license": "MIT", + "dependencies": { + "svg.js": ">=2.3.x" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.filter.js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/svg.filter.js/-/svg.filter.js-2.0.2.tgz", + "integrity": "sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==", + "license": "MIT", + "dependencies": { + "svg.js": "^2.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.js": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz", + "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==", + "license": "MIT" + }, + "node_modules/svg.pathmorphing.js": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz", + "integrity": "sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==", + "license": "MIT", + "dependencies": { + "svg.js": "^2.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.resize.js": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz", + "integrity": "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==", + "license": "MIT", + "dependencies": { + "svg.js": "^2.6.5", + "svg.select.js": "^2.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.resize.js/node_modules/svg.select.js": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz", + "integrity": "sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==", + "license": "MIT", + "dependencies": { + "svg.js": "^2.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.select.js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-3.0.1.tgz", + "integrity": "sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==", + "license": "MIT", + "dependencies": { + "svg.js": "^2.6.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/tailwindcss": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", diff --git a/adminforth/spa/package.json b/adminforth/spa/package.json index ad2eb403..6079922c 100644 --- a/adminforth/spa/package.json +++ b/adminforth/spa/package.json @@ -16,7 +16,7 @@ "@iconify-prerendered/vue-flowbite": "^0.23.1714023977", "@unhead/vue": "^1.9.12", "@vueuse/core": "^10.10.0", - "apexcharts": "^4.3.0", + "apexcharts": "^3.52.0", "dayjs": "^1.11.11", "debounce": "^2.1.0", "flowbite": "^2.3.0", diff --git a/adminforth/spa/src/afcl/AreaChart.vue b/adminforth/spa/src/afcl/AreaChart.vue index 3f1eb604..6d1d8ddd 100644 --- a/adminforth/spa/src/afcl/AreaChart.vue +++ b/adminforth/spa/src/afcl/AreaChart.vue @@ -138,6 +138,7 @@ watch(() => [options.value, chart.value], (value) => { if (!value || !chart.value) { return; } + console.log('options changed', options.value); if (apexChart) { apexChart.updateOptions(options.value); } else { diff --git a/dev-demo/custom/Dash.vue b/dev-demo/custom/Dash.vue index bd690f78..83ba3ca8 100644 --- a/dev-demo/custom/Dash.vue +++ b/dev-demo/custom/Dash.vue @@ -228,13 +228,175 @@ const topCountries = computed(() => { onMounted(async () => { // Fetch data from the API - try { - data.value = await callApi({path: '/api/dashboard/', method: 'GET'}); - } catch (error) { - adminforth.alert({ - message: `Error fetching data: ${error.message}`, - variant: 'danger', - }); - } + // try { + // data.value = await callApi({path: '/api/dashboard/', method: 'GET'}); + // } catch (error) { + // adminforth.alert({ + // message: `Error fetching data: ${error.message}`, + // variant: 'danger', + // }); + // } + + data.value = { + "apartsByDays": [ + { + "day": "2024-12-25", + "count": 1 + }, + { + "day": "2024-12-24", + "count": 6 + }, + { + "day": "2024-12-23", + "count": 6 + }, + { + "day": "2024-12-22", + "count": 2 + }, + { + "day": "2024-12-21", + "count": 2 + }, + { + "day": "2024-12-20", + "count": 6 + }, + { + "day": "2024-12-19", + "count": 6 + } + ], + "totalAparts": 29, + "listedVsUnlistedByDays": [ + { + "day": "2024-12-25", + "listed": 0, + "unlisted": 1, + "listedPrice": 0, + "unlistedPrice": 6238.88 + }, + { + "day": "2024-12-24", + "listed": 4, + "unlisted": 2, + "listedPrice": 19840.010000000002, + "unlistedPrice": 18313.239999999998 + }, + { + "day": "2024-12-23", + "listed": 2, + "unlisted": 4, + "listedPrice": 14833.51, + "unlistedPrice": 20200.58 + }, + { + "day": "2024-12-22", + "listed": 2, + "unlisted": 0, + "listedPrice": 7787.889999999999, + "unlistedPrice": 0 + }, + { + "day": "2024-12-21", + "listed": 0, + "unlisted": 2, + "listedPrice": 0, + "unlistedPrice": 5809.91 + }, + { + "day": "2024-12-20", + "listed": 2, + "unlisted": 4, + "listedPrice": 10943.170000000002, + "unlistedPrice": 31365.19 + }, + { + "day": "2024-12-19", + "listed": 3, + "unlisted": 3, + "listedPrice": 24221.16, + "unlistedPrice": 4273.2300000000005 + } + ], + "apartsCountsByRooms": [ + { + "number_of_rooms": 1, + "count": 12 + }, + { + "number_of_rooms": 2, + "count": 17 + }, + { + "number_of_rooms": 3, + "count": 7 + }, + { + "number_of_rooms": 4, + "count": 15 + } + ], + "topCountries": [ + { + "country": "PL", + "count": 9 + }, + { + "country": "IT", + "count": 6 + }, + { + "country": "FR", + "count": 6 + }, + { + "country": "DE", + "count": 6 + } + ], + "totalSquareMeters": 2423.6, + "totalListedPrice": 77626, + "totalUnlistedPrice": 86201, + "listedVsUnlistedPriceByDays": [ + { + "day": "2024-12-25", + "listedPrice": 0, + "unlistedPrice": 6238.88 + }, + { + "day": "2024-12-24", + "listedPrice": 19840.010000000002, + "unlistedPrice": 18313.239999999998 + }, + { + "day": "2024-12-23", + "listedPrice": 14833.51, + "unlistedPrice": 20200.58 + }, + { + "day": "2024-12-22", + "listedPrice": 7787.889999999999, + "unlistedPrice": 0 + }, + { + "day": "2024-12-21", + "listedPrice": 0, + "unlistedPrice": 5809.91 + }, + { + "day": "2024-12-20", + "listedPrice": 10943.170000000002, + "unlistedPrice": 31365.19 + }, + { + "day": "2024-12-19", + "listedPrice": 24221.16, + "unlistedPrice": 4273.2300000000005 + } + ] +} + }) \ No newline at end of file diff --git a/dev-demo/custom/package-lock.json b/dev-demo/custom/package-lock.json index 29230c14..64529761 100644 --- a/dev-demo/custom/package-lock.json +++ b/dev-demo/custom/package-lock.json @@ -9,8 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@iconify-prerendered/vue-mdi": "^0.25.1718880438", - "apexcharts": "^3.52.0" + "@iconify-prerendered/vue-mdi": "^0.25.1718880438" }, "devDependencies": { "highcharts-vue": "^2.0.1", @@ -135,25 +134,6 @@ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.31.tgz", "integrity": "sha512-Yp3wtJk//8cO4NItOPpi3QkLExAr/aLBGZMmTtW9WpdwBCJpRM6zj9WgWktXAl8IDIozwNMByT45JP3tO3ACWA==" }, - "node_modules/@yr/monotone-cubic-spline": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz", - "integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==" - }, - "node_modules/apexcharts": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.52.0.tgz", - "integrity": "sha512-7dg0ADKs8AA89iYMZMe2sFDG0XK5PfqllKV9N+i3hKHm3vEtdhwz8AlXGm+/b0nJ6jKiaXsqci5LfVxNhtB+dA==", - "dependencies": { - "@yr/monotone-cubic-spline": "^1.0.3", - "svg.draggable.js": "^2.2.2", - "svg.easing.js": "^2.0.0", - "svg.filter.js": "^2.0.2", - "svg.pathmorphing.js": "^0.1.3", - "svg.resize.js": "^1.4.3", - "svg.select.js": "^3.0.1" - } - }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", @@ -322,89 +302,6 @@ "node": ">=0.10.0" } }, - "node_modules/svg.draggable.js": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz", - "integrity": "sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==", - "dependencies": { - "svg.js": "^2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/svg.easing.js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/svg.easing.js/-/svg.easing.js-2.0.0.tgz", - "integrity": "sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==", - "dependencies": { - "svg.js": ">=2.3.x" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/svg.filter.js": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/svg.filter.js/-/svg.filter.js-2.0.2.tgz", - "integrity": "sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==", - "dependencies": { - "svg.js": "^2.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/svg.js": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz", - "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==" - }, - "node_modules/svg.pathmorphing.js": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz", - "integrity": "sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==", - "dependencies": { - "svg.js": "^2.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/svg.resize.js": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz", - "integrity": "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==", - "dependencies": { - "svg.js": "^2.6.5", - "svg.select.js": "^2.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/svg.resize.js/node_modules/svg.select.js": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz", - "integrity": "sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==", - "dependencies": { - "svg.js": "^2.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/svg.select.js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-3.0.1.tgz", - "integrity": "sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==", - "dependencies": { - "svg.js": "^2.6.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/vue": { "version": "3.4.31", "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.31.tgz", diff --git a/dev-demo/custom/package.json b/dev-demo/custom/package.json index 13ece733..b82c7b6b 100644 --- a/dev-demo/custom/package.json +++ b/dev-demo/custom/package.json @@ -14,7 +14,6 @@ "vue-suggestion-input": "^0.0.12" }, "dependencies": { - "@iconify-prerendered/vue-mdi": "^0.25.1718880438", - "apexcharts": "^3.52.0" + "@iconify-prerendered/vue-mdi": "^0.25.1718880438" } }