Compare commits

...

26 Commits

Author SHA1 Message Date
Ronald A. Richardson
4a4dc76e60 Added scheduler feature, scope/live map drawer feature, and bug fixes and dependency upgrades 2023-11-09 17:04:10 +08:00
Ron
a52af94b00 Merge pull request #154 from fleetbase/dev-v0.2.8
v0.2.8
2023-11-06 20:12:39 +08:00
Ronald A. Richardson
9c4daf7a68 fix dependencies 2023-11-06 19:55:42 +08:00
Ronald A. Richardson
a8904ba112 Full refactor of management section, upgrade of dependencies 2023-11-06 19:39:11 +08:00
Ronald A. Richardson
6880664d9e update packages to latest commits 2023-10-30 19:57:33 +08:00
Ron
99b30d7f58 Merge pull request #148 from fleetbase/feature-notifications
Feature notifications
2023-10-30 19:56:10 +08:00
Ronald A. Richardson
c8539fd2a0 merged with main 2023-10-30 19:41:23 +08:00
Ronald A. Richardson
cb1aec40fd ready for new release with notification tray and settings 2023-10-30 19:37:37 +08:00
Ronald A. Richardson
b728b366a0 patch notification settings in admin 2023-10-30 19:17:01 +08:00
Ronald A. Richardson
5cfc3f1cc7 add back package.json 2023-10-30 14:58:54 +08:00
Ronald A. Richardson
e7b5282aa3 updated notificaiton setting structure to be more robust 2023-10-30 14:53:19 +08:00
Ronald A. Richardson
7ffb7ac24a Latest updates, moved save buttons to subheader for easy access to save 2023-10-30 12:40:39 +08:00
Ron
6e4a9edd7d Merge pull request #146 from fleetbase/add-notification-settings
Add notification settings to Admin
2023-10-30 11:55:57 +08:00
Ron
d9d01c8bbc Merge branch 'feature-notifications' into add-notification-settings 2023-10-30 11:55:12 +08:00
Ronald A. Richardson
c54d75fa0f hotfix notification read event trigger 2023-10-27 17:50:35 +08:00
Ronald A. Richardson
91904c3836 Patches and improved styling for notification page 2023-10-27 17:35:31 +08:00
Ronald A. Richardson
0e075e3b24 dont check in dependency mgmt files 2023-10-27 15:24:58 +08:00
Ron
c56bea95d0 Merge pull request #140 from fleetbase/dev-v0.2.6
v0.2.6
2023-10-27 10:33:17 +08:00
Ronald A. Richardson
f1cec329bc add back environment files 2023-10-27 10:15:40 +08:00
Ronald A. Richardson
34dc365dd2 Preparing release with latest dependencies 2023-10-27 10:11:33 +08:00
TemuulenBM
74a782f4ea WIP: Notification Settings interface on Admin 2023-10-26 17:54:29 +08:00
TemuulenBM
a8b2042d85 Latest updates for notification tray and page 2023-10-26 11:32:54 +08:00
Temuulen Bayanmunkh
cc52a40660 Almost completed the notifications route, <NotificationTray /> component responds with notifications route changes 2023-10-24 17:58:52 +08:00
Temuulen Bayanmunkh
4fb2dec8c3 Added notification tray component 2023-10-20 18:06:43 +08:00
Ronald A. Richardson
0db3634ab3 checkin environments directory and update API_SECURE to be casted to boolean 2023-10-18 16:34:09 +08:00
Ronald A. Richardson
1c0d324ba9 Fix reset of branding settings 2023-10-14 13:48:21 +08:00
53 changed files with 2204 additions and 1387 deletions

View File

@@ -9,9 +9,9 @@
"license": "MIT",
"require": {
"php": "^7.3|^8.0",
"fleetbase/core-api": "^1.3.1",
"fleetbase/fleetops-api": "^0.2.9",
"fleetbase/storefront-api": "^0.2.0",
"fleetbase/core-api": "^1.3.2",
"fleetbase/fleetops-api": "^0.3.3",
"fleetbase/storefront-api": "^0.2.4",
"fruitcake/laravel-cors": "^2.0",
"guzzlehttp/guzzle": "^7.0.1",
"laravel/framework": "^8.75",

362
api/composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "265e49a3b34040f5a2056d4674b0ca83",
"content-hash": "faa6338e3534fb28d5e024130c9c7da9",
"packages": [
{
"name": "aloha/twilio",
@@ -138,16 +138,16 @@
},
{
"name": "aws/aws-crt-php",
"version": "v1.2.2",
"version": "v1.2.3",
"source": {
"type": "git",
"url": "https://github.com/awslabs/aws-crt-php.git",
"reference": "2f1dc7b7eda080498be96a4a6d683a41583030e9"
"reference": "5545a4fa310aec39f54279fdacebcce33b3ff382"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/2f1dc7b7eda080498be96a4a6d683a41583030e9",
"reference": "2f1dc7b7eda080498be96a4a6d683a41583030e9",
"url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/5545a4fa310aec39f54279fdacebcce33b3ff382",
"reference": "5545a4fa310aec39f54279fdacebcce33b3ff382",
"shasum": ""
},
"require": {
@@ -186,26 +186,26 @@
],
"support": {
"issues": "https://github.com/awslabs/aws-crt-php/issues",
"source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.2"
"source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.3"
},
"time": "2023-07-20T16:49:55+00:00"
"time": "2023-10-16T20:10:06+00:00"
},
{
"name": "aws/aws-sdk-php",
"version": "3.283.3",
"version": "3.285.2",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
"reference": "4cc8d6c7e856de80d9316f659c4c626d3713f6c1"
"reference": "93165f8e241678b17f15212523dfe96f50307af1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/4cc8d6c7e856de80d9316f659c4c626d3713f6c1",
"reference": "4cc8d6c7e856de80d9316f659c4c626d3713f6c1",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/93165f8e241678b17f15212523dfe96f50307af1",
"reference": "93165f8e241678b17f15212523dfe96f50307af1",
"shasum": ""
},
"require": {
"aws/aws-crt-php": "^1.0.4",
"aws/aws-crt-php": "^1.2.3",
"ext-json": "*",
"ext-pcre": "*",
"ext-simplexml": "*",
@@ -281,9 +281,9 @@
"support": {
"forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
"issues": "https://github.com/aws/aws-sdk-php/issues",
"source": "https://github.com/aws/aws-sdk-php/tree/3.283.3"
"source": "https://github.com/aws/aws-sdk-php/tree/3.285.2"
},
"time": "2023-10-12T18:14:56+00:00"
"time": "2023-11-09T01:20:37+00:00"
},
{
"name": "aws/aws-sdk-php-laravel",
@@ -2002,16 +2002,16 @@
},
{
"name": "fleetbase/core-api",
"version": "1.3.1",
"version": "1.3.2",
"source": {
"type": "git",
"url": "https://github.com/fleetbase/core-api.git",
"reference": "0b0fb9cde5e82caaf2b51f68960908f3c9a35a82"
"reference": "e10f6e69d1604a4fa58257017d845e0d9b72e1c6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/fleetbase/core-api/zipball/0b0fb9cde5e82caaf2b51f68960908f3c9a35a82",
"reference": "0b0fb9cde5e82caaf2b51f68960908f3c9a35a82",
"url": "https://api.github.com/repos/fleetbase/core-api/zipball/e10f6e69d1604a4fa58257017d845e0d9b72e1c6",
"reference": "e10f6e69d1604a4fa58257017d845e0d9b72e1c6",
"shasum": ""
},
"require": {
@@ -2086,29 +2086,29 @@
],
"support": {
"issues": "https://github.com/fleetbase/core-api/issues",
"source": "https://github.com/fleetbase/core-api/tree/v1.3.1"
"source": "https://github.com/fleetbase/core-api/tree/v1.3.2"
},
"time": "2023-10-10T12:35:05+00:00"
"time": "2023-10-30T10:40:02+00:00"
},
{
"name": "fleetbase/fleetops-api",
"version": "0.2.9",
"version": "0.3.3",
"source": {
"type": "git",
"url": "https://github.com/fleetbase/fleetops.git",
"reference": "49cbcd58ad141ac778bdd20af4b28732abef57d2"
"reference": "5ce11e275d87d7a318cd0713f72be1b385621ed9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/fleetbase/fleetops/zipball/49cbcd58ad141ac778bdd20af4b28732abef57d2",
"reference": "49cbcd58ad141ac778bdd20af4b28732abef57d2",
"url": "https://api.github.com/repos/fleetbase/fleetops/zipball/5ce11e275d87d7a318cd0713f72be1b385621ed9",
"reference": "5ce11e275d87d7a318cd0713f72be1b385621ed9",
"shasum": ""
},
"require": {
"barryvdh/laravel-dompdf": "^2.0",
"brick/geo": "0.7.2",
"cknow/laravel-money": "^7.1",
"fleetbase/core-api": "^1.3.1",
"fleetbase/core-api": "^1.3.2",
"geocoder-php/google-maps-places-provider": "^1.4",
"giggsey/libphonenumber-for-php": "^8.13",
"league/geotools": "^1.1.0",
@@ -2174,27 +2174,27 @@
],
"support": {
"issues": "https://github.com/fleetbase/fleetops/issues",
"source": "https://github.com/fleetbase/fleetops/tree/v0.2.9"
"source": "https://github.com/fleetbase/fleetops/tree/v0.3.3"
},
"time": "2023-10-13T09:16:35+00:00"
"time": "2023-11-09T08:42:31+00:00"
},
{
"name": "fleetbase/storefront-api",
"version": "0.2.0",
"version": "0.2.4",
"source": {
"type": "git",
"url": "https://github.com/fleetbase/storefront.git",
"reference": "cbc8c467f4a1934bbf61b02125e00eb999308659"
"reference": "df155f5b3e04f73087899c85208d8b3f5de5d466"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/fleetbase/storefront/zipball/cbc8c467f4a1934bbf61b02125e00eb999308659",
"reference": "cbc8c467f4a1934bbf61b02125e00eb999308659",
"url": "https://api.github.com/repos/fleetbase/storefront/zipball/df155f5b3e04f73087899c85208d8b3f5de5d466",
"reference": "df155f5b3e04f73087899c85208d8b3f5de5d466",
"shasum": ""
},
"require": {
"fleetbase/core-api": "^1.3.1",
"fleetbase/fleetops-api": "^0.2.8",
"fleetbase/core-api": "^1.3.2",
"fleetbase/fleetops-api": "^0.3.2",
"geocoder-php/google-maps-places-provider": "^1.4",
"laravel-notification-channels/apn": "^3.8",
"laravel-notification-channels/fcm": "^2.7",
@@ -2255,9 +2255,9 @@
],
"support": {
"issues": "https://github.com/fleetbase/storefront/issues",
"source": "https://github.com/fleetbase/storefront/tree/v0.2.0"
"source": "https://github.com/fleetbase/storefront/tree/v0.2.4"
},
"time": "2023-10-10T13:07:00+00:00"
"time": "2023-11-09T08:50:52+00:00"
},
{
"name": "fruitcake/laravel-cors",
@@ -2739,16 +2739,16 @@
},
{
"name": "giggsey/libphonenumber-for-php",
"version": "8.13.23",
"version": "8.13.24",
"source": {
"type": "git",
"url": "https://github.com/giggsey/libphonenumber-for-php.git",
"reference": "b2dff83693cb46eb4478b193e9d94e2ff6258480"
"reference": "746ca6a565b9d4167c94c80824f43fa6fb463fd1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/b2dff83693cb46eb4478b193e9d94e2ff6258480",
"reference": "b2dff83693cb46eb4478b193e9d94e2ff6258480",
"url": "https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/746ca6a565b9d4167c94c80824f43fa6fb463fd1",
"reference": "746ca6a565b9d4167c94c80824f43fa6fb463fd1",
"shasum": ""
},
"require": {
@@ -2807,20 +2807,20 @@
"issues": "https://github.com/giggsey/libphonenumber-for-php/issues",
"source": "https://github.com/giggsey/libphonenumber-for-php"
},
"time": "2023-10-11T07:12:56+00:00"
"time": "2023-10-31T08:12:54+00:00"
},
{
"name": "giggsey/locale",
"version": "2.4",
"version": "2.5",
"source": {
"type": "git",
"url": "https://github.com/giggsey/Locale.git",
"reference": "a6b33dfc9e8949b7e28133c4628b29cd9f1850bb"
"reference": "e6d4540109a01dd2bc7334cdc842d6a6a67cf239"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/giggsey/Locale/zipball/a6b33dfc9e8949b7e28133c4628b29cd9f1850bb",
"reference": "a6b33dfc9e8949b7e28133c4628b29cd9f1850bb",
"url": "https://api.github.com/repos/giggsey/Locale/zipball/e6d4540109a01dd2bc7334cdc842d6a6a67cf239",
"reference": "e6d4540109a01dd2bc7334cdc842d6a6a67cf239",
"shasum": ""
},
"require": {
@@ -2859,22 +2859,22 @@
"description": "Locale functions required by libphonenumber-for-php",
"support": {
"issues": "https://github.com/giggsey/Locale/issues",
"source": "https://github.com/giggsey/Locale/tree/2.4"
"source": "https://github.com/giggsey/Locale/tree/2.5"
},
"time": "2023-04-13T07:40:58+00:00"
"time": "2023-11-01T17:19:48+00:00"
},
{
"name": "google/auth",
"version": "v1.31.0",
"version": "v1.32.1",
"source": {
"type": "git",
"url": "https://github.com/googleapis/google-auth-library-php.git",
"reference": "22209fddd0c06f3f8e3cb4aade0b352aa00f9888"
"reference": "999e9ce8b9d17914f04e1718271a0a46da4de2f3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/22209fddd0c06f3f8e3cb4aade0b352aa00f9888",
"reference": "22209fddd0c06f3f8e3cb4aade0b352aa00f9888",
"url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/999e9ce8b9d17914f04e1718271a0a46da4de2f3",
"reference": "999e9ce8b9d17914f04e1718271a0a46da4de2f3",
"shasum": ""
},
"require": {
@@ -2917,22 +2917,22 @@
"support": {
"docs": "https://googleapis.github.io/google-auth-library-php/main/",
"issues": "https://github.com/googleapis/google-auth-library-php/issues",
"source": "https://github.com/googleapis/google-auth-library-php/tree/v1.31.0"
"source": "https://github.com/googleapis/google-auth-library-php/tree/v1.32.1"
},
"time": "2023-10-05T20:39:00+00:00"
"time": "2023-10-17T21:13:22+00:00"
},
{
"name": "google/cloud-core",
"version": "v1.52.6",
"version": "v1.52.8",
"source": {
"type": "git",
"url": "https://github.com/googleapis/google-cloud-php-core.git",
"reference": "71f092f4dab880515917da64423656ed3d6aefc2"
"reference": "2ebcaa410f7e92dca5677dd9cc4ec1f9f315e83c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/googleapis/google-cloud-php-core/zipball/71f092f4dab880515917da64423656ed3d6aefc2",
"reference": "71f092f4dab880515917da64423656ed3d6aefc2",
"url": "https://api.github.com/repos/googleapis/google-cloud-php-core/zipball/2ebcaa410f7e92dca5677dd9cc4ec1f9f315e83c",
"reference": "2ebcaa410f7e92dca5677dd9cc4ec1f9f315e83c",
"shasum": ""
},
"require": {
@@ -2948,7 +2948,7 @@
"require-dev": {
"erusev/parsedown": "^1.6",
"google/cloud-common-protos": "^0.4",
"google/gax": "^1.19.1",
"google/gax": "^1.24.0",
"opis/closure": "^3",
"phpdocumentor/reflection": "^5.0",
"phpspec/prophecy-phpunit": "^2.0",
@@ -2982,26 +2982,26 @@
],
"description": "Google Cloud PHP shared dependency, providing functionality useful to all components.",
"support": {
"source": "https://github.com/googleapis/google-cloud-php-core/tree/v1.52.6"
"source": "https://github.com/googleapis/google-cloud-php-core/tree/v1.52.8"
},
"time": "2023-10-06T21:49:26+00:00"
"time": "2023-11-02T19:15:44+00:00"
},
{
"name": "google/cloud-storage",
"version": "v1.33.3",
"version": "v1.34.0",
"source": {
"type": "git",
"url": "https://github.com/googleapis/google-cloud-php-storage.git",
"reference": "e22877e96c3f5c4f53b0fb2077834fb6d64d0fca"
"reference": "4589dd3c8f4171db4ce3eb335fc7d894661ca0e9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/googleapis/google-cloud-php-storage/zipball/e22877e96c3f5c4f53b0fb2077834fb6d64d0fca",
"reference": "e22877e96c3f5c4f53b0fb2077834fb6d64d0fca",
"url": "https://api.github.com/repos/googleapis/google-cloud-php-storage/zipball/4589dd3c8f4171db4ce3eb335fc7d894661ca0e9",
"reference": "4589dd3c8f4171db4ce3eb335fc7d894661ca0e9",
"shasum": ""
},
"require": {
"google/cloud-core": "^1.51.3",
"google/cloud-core": "^1.52.7",
"php": ">=7.4",
"ramsey/uuid": "^4.2.3"
},
@@ -3038,9 +3038,9 @@
],
"description": "Cloud Storage Client for PHP",
"support": {
"source": "https://github.com/googleapis/google-cloud-php-storage/tree/v1.33.3"
"source": "https://github.com/googleapis/google-cloud-php-storage/tree/v1.34.0"
},
"time": "2023-09-30T16:50:41+00:00"
"time": "2023-11-02T19:15:44+00:00"
},
{
"name": "graham-campbell/manager",
@@ -4604,16 +4604,16 @@
},
{
"name": "laravel/serializable-closure",
"version": "v1.3.1",
"version": "v1.3.2",
"source": {
"type": "git",
"url": "https://github.com/laravel/serializable-closure.git",
"reference": "e5a3057a5591e1cfe8183034b0203921abe2c902"
"reference": "076fe2cf128bd54b4341cdc6d49b95b34e101e4c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/serializable-closure/zipball/e5a3057a5591e1cfe8183034b0203921abe2c902",
"reference": "e5a3057a5591e1cfe8183034b0203921abe2c902",
"url": "https://api.github.com/repos/laravel/serializable-closure/zipball/076fe2cf128bd54b4341cdc6d49b95b34e101e4c",
"reference": "076fe2cf128bd54b4341cdc6d49b95b34e101e4c",
"shasum": ""
},
"require": {
@@ -4660,7 +4660,7 @@
"issues": "https://github.com/laravel/serializable-closure/issues",
"source": "https://github.com/laravel/serializable-closure"
},
"time": "2023-07-14T13:56:28+00:00"
"time": "2023-10-17T13:38:16+00:00"
},
{
"name": "laravel/tinker",
@@ -5294,16 +5294,16 @@
},
{
"name": "league/mime-type-detection",
"version": "1.13.0",
"version": "1.14.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/mime-type-detection.git",
"reference": "a6dfb1194a2946fcdc1f38219445234f65b35c96"
"reference": "b6a5854368533df0295c5761a0253656a2e52d9e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/a6dfb1194a2946fcdc1f38219445234f65b35c96",
"reference": "a6dfb1194a2946fcdc1f38219445234f65b35c96",
"url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/b6a5854368533df0295c5761a0253656a2e52d9e",
"reference": "b6a5854368533df0295c5761a0253656a2e52d9e",
"shasum": ""
},
"require": {
@@ -5334,7 +5334,7 @@
"description": "Mime-type detection for Flysystem",
"support": {
"issues": "https://github.com/thephpleague/mime-type-detection/issues",
"source": "https://github.com/thephpleague/mime-type-detection/tree/1.13.0"
"source": "https://github.com/thephpleague/mime-type-detection/tree/1.14.0"
},
"funding": [
{
@@ -5346,32 +5346,32 @@
"type": "tidelift"
}
],
"time": "2023-08-05T12:09:49+00:00"
"time": "2023-10-17T14:13:20+00:00"
},
{
"name": "maatwebsite/excel",
"version": "3.1.48",
"version": "3.1.50",
"source": {
"type": "git",
"url": "https://github.com/SpartnerNL/Laravel-Excel.git",
"reference": "6d0fe2a1d195960c7af7bf0de760582da02a34b9"
"reference": "d79e66391aa306983bb7e234503f5605c3e33348"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/SpartnerNL/Laravel-Excel/zipball/6d0fe2a1d195960c7af7bf0de760582da02a34b9",
"reference": "6d0fe2a1d195960c7af7bf0de760582da02a34b9",
"url": "https://api.github.com/repos/SpartnerNL/Laravel-Excel/zipball/d79e66391aa306983bb7e234503f5605c3e33348",
"reference": "d79e66391aa306983bb7e234503f5605c3e33348",
"shasum": ""
},
"require": {
"composer/semver": "^3.3",
"ext-json": "*",
"illuminate/support": "5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0",
"php": "^7.0|^8.0",
"illuminate/support": "5.8.*||^6.0||^7.0||^8.0||^9.0||^10.0",
"php": "^7.0||^8.0",
"phpoffice/phpspreadsheet": "^1.18",
"psr/simple-cache": "^1.0|^2.0|^3.0"
"psr/simple-cache": "^1.0||^2.0||^3.0"
},
"require-dev": {
"orchestra/testbench": "^6.0|^7.0|^8.0",
"orchestra/testbench": "^6.0||^7.0||^8.0",
"predis/predis": "^1.1"
},
"type": "library",
@@ -5414,7 +5414,7 @@
],
"support": {
"issues": "https://github.com/SpartnerNL/Laravel-Excel/issues",
"source": "https://github.com/SpartnerNL/Laravel-Excel/tree/3.1.48"
"source": "https://github.com/SpartnerNL/Laravel-Excel/tree/3.1.50"
},
"funding": [
{
@@ -5426,7 +5426,7 @@
"type": "github"
}
],
"time": "2023-02-22T21:01:38+00:00"
"time": "2023-11-06T11:29:48+00:00"
},
{
"name": "maennchen/zipstream-php",
@@ -5842,16 +5842,16 @@
},
{
"name": "monolog/monolog",
"version": "2.9.1",
"version": "2.9.2",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
"reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1"
"reference": "437cb3628f4cf6042cc10ae97fc2b8472e48ca1f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/f259e2b15fb95494c83f52d3caad003bbf5ffaa1",
"reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/437cb3628f4cf6042cc10ae97fc2b8472e48ca1f",
"reference": "437cb3628f4cf6042cc10ae97fc2b8472e48ca1f",
"shasum": ""
},
"require": {
@@ -5928,7 +5928,7 @@
],
"support": {
"issues": "https://github.com/Seldaek/monolog/issues",
"source": "https://github.com/Seldaek/monolog/tree/2.9.1"
"source": "https://github.com/Seldaek/monolog/tree/2.9.2"
},
"funding": [
{
@@ -5940,7 +5940,7 @@
"type": "tidelift"
}
],
"time": "2023-02-06T13:44:46+00:00"
"time": "2023-10-27T15:25:26+00:00"
},
{
"name": "mtdowling/jmespath.php",
@@ -6823,16 +6823,16 @@
},
{
"name": "php-http/curl-client",
"version": "2.3.0",
"version": "2.3.1",
"source": {
"type": "git",
"url": "https://github.com/php-http/curl-client.git",
"reference": "f7352c0796549949900d28fe991e19c90572386a"
"reference": "085570be588f7cbdc4601e78886eea5b7051ad71"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/curl-client/zipball/f7352c0796549949900d28fe991e19c90572386a",
"reference": "f7352c0796549949900d28fe991e19c90572386a",
"url": "https://api.github.com/repos/php-http/curl-client/zipball/085570be588f7cbdc4601e78886eea5b7051ad71",
"reference": "085570be588f7cbdc4601e78886eea5b7051ad71",
"shasum": ""
},
"require": {
@@ -6843,7 +6843,7 @@
"php-http/message": "^1.2",
"psr/http-client": "^1.0",
"psr/http-factory-implementation": "^1.0",
"symfony/options-resolver": "^3.4 || ^4.0 || ^5.0 || ^6.0"
"symfony/options-resolver": "^3.4 || ^4.0 || ^5.0 || ^6.0 || ^7.0"
},
"provide": {
"php-http/async-client-implementation": "1.0",
@@ -6854,6 +6854,7 @@
"guzzlehttp/psr7": "^1.0",
"laminas/laminas-diactoros": "^2.0",
"php-http/client-integration-tests": "^3.0",
"php-http/message-factory": "^1.1",
"phpunit/phpunit": "^7.5 || ^9.4"
},
"type": "library",
@@ -6881,9 +6882,9 @@
],
"support": {
"issues": "https://github.com/php-http/curl-client/issues",
"source": "https://github.com/php-http/curl-client/tree/2.3.0"
"source": "https://github.com/php-http/curl-client/tree/2.3.1"
},
"time": "2023-04-28T14:56:41+00:00"
"time": "2023-11-03T15:32:00+00:00"
},
{
"name": "php-http/discovery",
@@ -7204,31 +7205,26 @@
},
{
"name": "php-http/promise",
"version": "1.1.0",
"version": "1.2.1",
"source": {
"type": "git",
"url": "https://github.com/php-http/promise.git",
"reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88"
"reference": "44a67cb59f708f826f3bec35f22030b3edb90119"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/promise/zipball/4c4c1f9b7289a2ec57cde7f1e9762a5789506f88",
"reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88",
"url": "https://api.github.com/repos/php-http/promise/zipball/44a67cb59f708f826f3bec35f22030b3edb90119",
"reference": "44a67cb59f708f826f3bec35f22030b3edb90119",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
"friends-of-phpspec/phpspec-code-coverage": "^4.3.2",
"phpspec/phpspec": "^5.1.2 || ^6.2"
"friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3",
"phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Promise\\": "src/"
@@ -7255,9 +7251,9 @@
],
"support": {
"issues": "https://github.com/php-http/promise/issues",
"source": "https://github.com/php-http/promise/tree/1.1.0"
"source": "https://github.com/php-http/promise/tree/1.2.1"
},
"time": "2020-07-07T09:29:14+00:00"
"time": "2023-11-08T12:57:08+00:00"
},
{
"name": "phpoffice/phpspreadsheet",
@@ -7441,16 +7437,16 @@
},
{
"name": "phrity/net-stream",
"version": "1.2.0",
"version": "1.3.0",
"source": {
"type": "git",
"url": "https://github.com/sirn-se/phrity-net-stream.git",
"reference": "83435f3103016dfd45ded39040190a7f505ea264"
"reference": "9105931b65ad90c75f4885a40b268b0f65802e3e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sirn-se/phrity-net-stream/zipball/83435f3103016dfd45ded39040190a7f505ea264",
"reference": "83435f3103016dfd45ded39040190a7f505ea264",
"url": "https://api.github.com/repos/sirn-se/phrity-net-stream/zipball/9105931b65ad90c75f4885a40b268b0f65802e3e",
"reference": "9105931b65ad90c75f4885a40b268b0f65802e3e",
"shasum": ""
},
"require": {
@@ -7495,9 +7491,9 @@
],
"support": {
"issues": "https://github.com/sirn-se/phrity-net-stream/issues",
"source": "https://github.com/sirn-se/phrity-net-stream/tree/1.2.0"
"source": "https://github.com/sirn-se/phrity-net-stream/tree/1.3.0"
},
"time": "2023-07-05T13:31:05+00:00"
"time": "2023-10-22T10:47:03+00:00"
},
{
"name": "phrity/net-uri",
@@ -7607,16 +7603,16 @@
},
{
"name": "phrity/websocket",
"version": "1.7.0",
"version": "1.7.2",
"source": {
"type": "git",
"url": "https://github.com/sirn-se/websocket-php.git",
"reference": "d6dd8337e1ac13c08e0be25e168ad907300da955"
"reference": "7349a37c5a853ff0ae12c03fa59e8879e9dda486"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sirn-se/websocket-php/zipball/d6dd8337e1ac13c08e0be25e168ad907300da955",
"reference": "d6dd8337e1ac13c08e0be25e168ad907300da955",
"url": "https://api.github.com/repos/sirn-se/websocket-php/zipball/7349a37c5a853ff0ae12c03fa59e8879e9dda486",
"reference": "7349a37c5a853ff0ae12c03fa59e8879e9dda486",
"shasum": ""
},
"require": {
@@ -7630,7 +7626,7 @@
"require-dev": {
"php-coveralls/php-coveralls": "^2.0",
"phpunit/phpunit": "^9.0 | ^10.0",
"phrity/net-mock": "^1.2",
"phrity/net-mock": "^1.3",
"squizlabs/php_codesniffer": "^3.5"
},
"type": "library",
@@ -7662,9 +7658,9 @@
],
"support": {
"issues": "https://github.com/sirn-se/websocket-php/issues",
"source": "https://github.com/sirn-se/websocket-php/tree/1.7.0"
"source": "https://github.com/sirn-se/websocket-php/tree/1.7.2"
},
"time": "2023-07-14T05:44:18+00:00"
"time": "2023-11-04T12:09:42+00:00"
},
{
"name": "pragmarx/coollection",
@@ -8535,16 +8531,16 @@
},
{
"name": "psy/psysh",
"version": "v0.11.21",
"version": "v0.11.22",
"source": {
"type": "git",
"url": "https://github.com/bobthecow/psysh.git",
"reference": "bcb22101107f3bf770523b65630c9d547f60c540"
"reference": "128fa1b608be651999ed9789c95e6e2a31b5802b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/bobthecow/psysh/zipball/bcb22101107f3bf770523b65630c9d547f60c540",
"reference": "bcb22101107f3bf770523b65630c9d547f60c540",
"url": "https://api.github.com/repos/bobthecow/psysh/zipball/128fa1b608be651999ed9789c95e6e2a31b5802b",
"reference": "128fa1b608be651999ed9789c95e6e2a31b5802b",
"shasum": ""
},
"require": {
@@ -8573,7 +8569,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "0.11.x-dev"
"dev-0.11": "0.11.x-dev"
},
"bamarni-bin": {
"bin-links": false,
@@ -8609,9 +8605,9 @@
],
"support": {
"issues": "https://github.com/bobthecow/psysh/issues",
"source": "https://github.com/bobthecow/psysh/tree/v0.11.21"
"source": "https://github.com/bobthecow/psysh/tree/v0.11.22"
},
"time": "2023-09-17T21:15:54+00:00"
"time": "2023-10-14T21:56:36+00:00"
},
{
"name": "ralouphie/getallheaders",
@@ -9219,16 +9215,16 @@
},
{
"name": "sentry/sentry",
"version": "3.21.0",
"version": "3.22.0",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-php.git",
"reference": "624aafc22b84b089ffa43b71fb01e0096505ec4f"
"reference": "c0e3df5a5c1d133cd9461e7672568ff07042c19d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/getsentry/sentry-php/zipball/624aafc22b84b089ffa43b71fb01e0096505ec4f",
"reference": "624aafc22b84b089ffa43b71fb01e0096505ec4f",
"url": "https://api.github.com/repos/getsentry/sentry-php/zipball/c0e3df5a5c1d133cd9461e7672568ff07042c19d",
"reference": "c0e3df5a5c1d133cd9461e7672568ff07042c19d",
"shasum": ""
},
"require": {
@@ -9246,7 +9242,7 @@
"psr/http-factory": "^1.0",
"psr/http-factory-implementation": "^1.0",
"psr/log": "^1.0|^2.0|^3.0",
"symfony/options-resolver": "^3.4.43|^4.4.30|^5.0.11|^6.0",
"symfony/options-resolver": "^3.4.43|^4.4.30|^5.0.11|^6.0|^7.0",
"symfony/polyfill-php80": "^1.17"
},
"conflict": {
@@ -9303,7 +9299,7 @@
],
"support": {
"issues": "https://github.com/getsentry/sentry-php/issues",
"source": "https://github.com/getsentry/sentry-php/tree/3.21.0"
"source": "https://github.com/getsentry/sentry-php/tree/3.22.0"
},
"funding": [
{
@@ -9315,7 +9311,7 @@
"type": "custom"
}
],
"time": "2023-07-31T15:31:24+00:00"
"time": "2023-10-23T20:34:53+00:00"
},
{
"name": "sentry/sentry-laravel",
@@ -9636,16 +9632,16 @@
},
{
"name": "spatie/laravel-permission",
"version": "5.11.0",
"version": "5.11.1",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-permission.git",
"reference": "0a35e99da4cb6f85b07b3b58b718ff659c39a009"
"reference": "7090824cca57e693b880ce3aaf7ef78362e28bbd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/spatie/laravel-permission/zipball/0a35e99da4cb6f85b07b3b58b718ff659c39a009",
"reference": "0a35e99da4cb6f85b07b3b58b718ff659c39a009",
"url": "https://api.github.com/repos/spatie/laravel-permission/zipball/7090824cca57e693b880ce3aaf7ef78362e28bbd",
"reference": "7090824cca57e693b880ce3aaf7ef78362e28bbd",
"shasum": ""
},
"require": {
@@ -9706,7 +9702,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-permission/issues",
"source": "https://github.com/spatie/laravel-permission/tree/5.11.0"
"source": "https://github.com/spatie/laravel-permission/tree/5.11.1"
},
"funding": [
{
@@ -9714,7 +9710,7 @@
"type": "github"
}
],
"time": "2023-08-30T23:41:24+00:00"
"time": "2023-10-25T05:12:01+00:00"
},
{
"name": "spatie/laravel-responsecache",
@@ -10047,16 +10043,16 @@
},
{
"name": "symfony/cache",
"version": "v5.4.29",
"version": "v5.4.30",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache.git",
"reference": "e29c5a97bc2d81269973c3e1d7ceb9d48b4d5151"
"reference": "2742d1b595927210546bb7a0887094cf1494de21"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/cache/zipball/e29c5a97bc2d81269973c3e1d7ceb9d48b4d5151",
"reference": "e29c5a97bc2d81269973c3e1d7ceb9d48b4d5151",
"url": "https://api.github.com/repos/symfony/cache/zipball/2742d1b595927210546bb7a0887094cf1494de21",
"reference": "2742d1b595927210546bb7a0887094cf1494de21",
"shasum": ""
},
"require": {
@@ -10084,7 +10080,7 @@
"require-dev": {
"cache/integration-tests": "dev-master",
"doctrine/cache": "^1.6|^2.0",
"doctrine/dbal": "^2.13.1|^3.0",
"doctrine/dbal": "^2.13.1|^3|^4",
"predis/predis": "^1.1",
"psr/simple-cache": "^1.0|^2.0",
"symfony/config": "^4.4|^5.0|^6.0",
@@ -10124,7 +10120,7 @@
"psr6"
],
"support": {
"source": "https://github.com/symfony/cache/tree/v5.4.29"
"source": "https://github.com/symfony/cache/tree/v5.4.30"
},
"funding": [
{
@@ -10140,7 +10136,7 @@
"type": "tidelift"
}
],
"time": "2023-09-19T13:25:51+00:00"
"time": "2023-10-17T14:17:25+00:00"
},
{
"name": "symfony/cache-contracts",
@@ -10922,16 +10918,16 @@
},
{
"name": "symfony/http-foundation",
"version": "v5.4.28",
"version": "v5.4.30",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "365992c83a836dfe635f1e903ccca43ee03d3dd2"
"reference": "671769f79de0532da1478c60968b42506e185d2e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/365992c83a836dfe635f1e903ccca43ee03d3dd2",
"reference": "365992c83a836dfe635f1e903ccca43ee03d3dd2",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/671769f79de0532da1478c60968b42506e185d2e",
"reference": "671769f79de0532da1478c60968b42506e185d2e",
"shasum": ""
},
"require": {
@@ -10978,7 +10974,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-foundation/tree/v5.4.28"
"source": "https://github.com/symfony/http-foundation/tree/v5.4.30"
},
"funding": [
{
@@ -10994,20 +10990,20 @@
"type": "tidelift"
}
],
"time": "2023-08-21T07:23:18+00:00"
"time": "2023-10-28T23:35:12+00:00"
},
{
"name": "symfony/http-kernel",
"version": "v5.4.29",
"version": "v5.4.30",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "f53265fc6bd2a7f3a4ed4e443b76e750348ac3f7"
"reference": "16b9b36f81631155546d9f05271dd027c83c3dd4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/f53265fc6bd2a7f3a4ed4e443b76e750348ac3f7",
"reference": "f53265fc6bd2a7f3a4ed4e443b76e750348ac3f7",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/16b9b36f81631155546d9f05271dd027c83c3dd4",
"reference": "16b9b36f81631155546d9f05271dd027c83c3dd4",
"shasum": ""
},
"require": {
@@ -11090,7 +11086,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-kernel/tree/v5.4.29"
"source": "https://github.com/symfony/http-kernel/tree/v5.4.30"
},
"funding": [
{
@@ -11106,7 +11102,7 @@
"type": "tidelift"
}
],
"time": "2023-09-30T06:31:17+00:00"
"time": "2023-10-29T00:07:40+00:00"
},
{
"name": "symfony/mime",
@@ -12493,16 +12489,16 @@
},
{
"name": "symfony/serializer",
"version": "v5.4.29",
"version": "v5.4.30",
"source": {
"type": "git",
"url": "https://github.com/symfony/serializer.git",
"reference": "b893175000155839170d589f3a3593f2ce601829"
"reference": "ceadb4e08830e69738d313b667cfb426269f67f6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/serializer/zipball/b893175000155839170d589f3a3593f2ce601829",
"reference": "b893175000155839170d589f3a3593f2ce601829",
"url": "https://api.github.com/repos/symfony/serializer/zipball/ceadb4e08830e69738d313b667cfb426269f67f6",
"reference": "ceadb4e08830e69738d313b667cfb426269f67f6",
"shasum": ""
},
"require": {
@@ -12576,7 +12572,7 @@
"description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/serializer/tree/v5.4.29"
"source": "https://github.com/symfony/serializer/tree/v5.4.30"
},
"funding": [
{
@@ -12592,7 +12588,7 @@
"type": "tidelift"
}
],
"time": "2023-09-20T07:40:46+00:00"
"time": "2023-10-25T18:53:19+00:00"
},
{
"name": "symfony/service-contracts",
@@ -12765,16 +12761,16 @@
},
{
"name": "symfony/translation",
"version": "v5.4.24",
"version": "v5.4.30",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
"reference": "de237e59c5833422342be67402d487fbf50334ff"
"reference": "8560dc532e4e48d331937532a7cbfd2a9f9f53ce"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/de237e59c5833422342be67402d487fbf50334ff",
"reference": "de237e59c5833422342be67402d487fbf50334ff",
"url": "https://api.github.com/repos/symfony/translation/zipball/8560dc532e4e48d331937532a7cbfd2a9f9f53ce",
"reference": "8560dc532e4e48d331937532a7cbfd2a9f9f53ce",
"shasum": ""
},
"require": {
@@ -12842,7 +12838,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/translation/tree/v5.4.24"
"source": "https://github.com/symfony/translation/tree/v5.4.30"
},
"funding": [
{
@@ -12858,7 +12854,7 @@
"type": "tidelift"
}
],
"time": "2023-05-19T12:34:17+00:00"
"time": "2023-10-28T09:19:54+00:00"
},
{
"name": "symfony/translation-contracts",
@@ -14702,16 +14698,16 @@
},
{
"name": "filp/whoops",
"version": "2.15.3",
"version": "2.15.4",
"source": {
"type": "git",
"url": "https://github.com/filp/whoops.git",
"reference": "c83e88a30524f9360b11f585f71e6b17313b7187"
"reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/filp/whoops/zipball/c83e88a30524f9360b11f585f71e6b17313b7187",
"reference": "c83e88a30524f9360b11f585f71e6b17313b7187",
"url": "https://api.github.com/repos/filp/whoops/zipball/a139776fa3f5985a50b509f2a02ff0f709d2a546",
"reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546",
"shasum": ""
},
"require": {
@@ -14761,7 +14757,7 @@
],
"support": {
"issues": "https://github.com/filp/whoops/issues",
"source": "https://github.com/filp/whoops/tree/2.15.3"
"source": "https://github.com/filp/whoops/tree/2.15.4"
},
"funding": [
{
@@ -14769,7 +14765,7 @@
"type": "github"
}
],
"time": "2023-07-13T12:00:00+00:00"
"time": "2023-11-03T12:00:00+00:00"
},
{
"name": "hamcrest/hamcrest-php",

View File

@@ -16,6 +16,6 @@
<Button @wrapperClass="mt-3" @icon="plug" @text="Test Config" @onClick={{this.test}} @isLoading={{this.isLoading}} />
</ContentPanel>
<div class="mt-3 flex items-center justify-end">
<Button @type="primary" @size="lg" @icon="save" @text="Save Changes" @onClick={{this.save}} @disabled={{this.isLoading}} @isLoading={{this.isLoading}} />
</div>
<EmberWormhole @to="next-view-section-subheader-actions">
<Button @type="primary" @size="sm" @icon="save" @text="Save Changes" @onClick={{this.save}} @disabled={{this.isLoading}} @isLoading={{this.isLoading}} />
</EmberWormhole>

View File

@@ -22,6 +22,6 @@
<Button @wrapperClass="mt-3" @icon="plug" @text="Test Config" @onClick={{this.test}} @isLoading={{this.isLoading}} />
</ContentPanel>
<div class="mt-3 flex items-center justify-end">
<Button @type="primary" @size="lg" @icon="save" @text="Save Changes" @onClick={{this.save}} @disabled={{this.isLoading}} @isLoading={{this.isLoading}} />
</div>
<EmberWormhole @to="next-view-section-subheader-actions">
<Button @type="primary" @size="sm" @icon="save" @text="Save Changes" @onClick={{this.save}} @disabled={{this.isLoading}} @isLoading={{this.isLoading}} />
</EmberWormhole>

View File

@@ -47,6 +47,6 @@
</div>
</ContentPanel>
<div class="mt-3 flex items-center justify-end">
<Button @type="primary" @size="lg" @icon="save" @text="Save Changes" @onClick={{this.save}} @disabled={{this.isLoading}} @isLoading={{this.isLoading}} />
</div>
<EmberWormhole @to="next-view-section-subheader-actions">
<Button @type="primary" @size="sm" @icon="save" @text="Save Changes" @onClick={{this.save}} @disabled={{this.isLoading}} @isLoading={{this.isLoading}} />
</EmberWormhole>

View File

@@ -20,6 +20,6 @@
<Button @wrapperClass="mt-3" @icon="plug" @text="Test Config" @onClick={{this.test}} @isLoading={{this.isLoading}} />
</ContentPanel>
<div class="mt-3 flex items-center justify-end">
<Button @type="primary" @size="lg" @icon="save" @text="Save Changes" @onClick={{this.save}} @disabled={{this.isLoading}} @isLoading={{this.isLoading}} />
</div>
<EmberWormhole @to="next-view-section-subheader-actions">
<Button @type="primary" @size="sm" @icon="save" @text="Save Changes" @onClick={{this.save}} @disabled={{this.isLoading}} @isLoading={{this.isLoading}} />
</EmberWormhole>

View File

@@ -40,6 +40,6 @@
<InputGroup @name="IP Info API Key" @value={{this.ipinfoApiKey}} disabled={{this.isLoading}} />
</ContentPanel>
<div class="mt-3 flex items-center justify-end">
<Button @type="primary" @size="lg" @icon="save" @text="Save Changes" @onClick={{this.save}} @disabled={{this.isLoading}} @isLoading={{this.isLoading}} />
</div>
<EmberWormhole @to="next-view-section-subheader-actions">
<Button @type="primary" @size="sm" @icon="save" @text="Save Changes" @onClick={{this.save}} @disabled={{this.isLoading}} @isLoading={{this.isLoading}} />
</EmberWormhole>

View File

@@ -65,13 +65,6 @@ export default class ConsoleController extends Controller {
*/
@tracked organizations = [];
/**
* Whether or not to hide the sidebar.
*
* @var {Boolean}
*/
@tracked hideSidebar = true;
/**
* Sidebar Context Controls
*
@@ -79,6 +72,13 @@ export default class ConsoleController extends Controller {
*/
@tracked sidebarContext;
/**
* Routes which should hide the sidebar menu.
*
* @var {Array}
*/
@tracked hiddenSidebarRoutes = ['console.home', 'console.extensions', 'console.notifications'];
/**
* Installed extensions.
*
@@ -104,7 +104,7 @@ export default class ConsoleController extends Controller {
this.router.on('routeDidChange', (transition) => {
if (this.sidebarContext) {
if (transition.to.name === 'console.home' || transition.to.name === 'console.extensions') {
if (this.hiddenSidebarRoutes.includes(transition.to.name)) {
this.sidebarContext.hideNow();
} else {
this.sidebarContext.show();
@@ -123,7 +123,7 @@ export default class ConsoleController extends Controller {
this.sidebarContext = sidebarContext;
this.universe.sidebarContext = sidebarContext;
if (this.router.currentRouteName === 'console.home' || this.router.currentRouteName === 'console.extensions') {
if (this.hiddenSidebarRoutes.includes(this.router.currentRouteName)) {
this.sidebarContext.hideNow();
}
}

View File

@@ -2,5 +2,10 @@ import Controller from '@ember/controller';
import { inject as service } from '@ember/service';
export default class ConsoleAccountController extends Controller {
/**
* Inject the `universe` service.
*
* @memberof ConsoleAdminController
*/
@service universe;
}

View File

@@ -2,5 +2,10 @@ import Controller from '@ember/controller';
import { inject as service } from '@ember/service';
export default class ConsoleAdminController extends Controller {
/**
* Inject the `universe` service.
*
* @memberof ConsoleAdminController
*/
@service universe;
}

View File

@@ -2,6 +2,7 @@ import Controller from '@ember/controller';
import { tracked } from '@glimmer/tracking';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import { isArray } from '@ember/array';
export default class ConsoleAdminBrandingController extends Controller {
/**
@@ -51,13 +52,43 @@ export default class ConsoleAdminBrandingController extends Controller {
}
/**
* Unset a branding settings
* Unsets the value of a given key or array of keys on the model.
*
* @param {String} key
* @action
* @param {string | string[]} key - The key or keys to unset on the model.
* @param {*} [newValue=null] - The new value to set for the given key or keys. Defaults to null.
* @memberof ConsoleAdminBrandingController
*/
@action unset(key, newValue = null) {
this.model[key] = newValue;
if (isArray(key)) {
return key.forEach((k) => this.unset(k, undefined));
}
this.model.set(key, newValue);
}
/**
* Unsets the icon properties on the model.
*
* @action
* @returns {void} - No return value.
* @memberof ConsoleAdminBrandingController
*/
@action unsetIcon() {
this.unset(['icon_uuid', 'icon_url']);
this.model.set('icon_url', '/images/icon.png');
}
/**
* Unsets the logo properties on the model.
*
* @action
* @returns {void} - No return value.
* @memberof ConsoleAdminBrandingController
*/
@action unsetLogo() {
this.unset(['logo_uuid', 'logo_url']);
this.model.set('logo_url', '/images/fleetbase-logo-svg.svg');
}
/**

View File

@@ -0,0 +1,136 @@
import Controller from '@ember/controller';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
import { inject as service } from '@ember/service';
import createNotificationKey from '../../../utils/create-notification-key';
export default class ConsoleAdminNotificationsController extends Controller {
/**
* Inject the notifications service.
*
* @memberof ConsoleAdminNotificationsController
*/
@service notifications;
/**
* Inject the fetch service.
*
* @memberof ConsoleAdminNotificationsController
*/
@service fetch;
/**
* The notification settings value JSON.
*
* @memberof ConsoleAdminNotificationsController
* @var {Object}
*/
@tracked notificationSettings = {};
/**
* Notification transport methods enabled.
*
* @memberof ConsoleAdminNotificationsController
* @var {Array}
*/
@tracked notificationTransportMethods = ['email', 'sms'];
/**
* Tracked property for the loading state
*
* @memberof ConsoleAdminNotificationsController
* @var {Boolean}
*/
@tracked isLoading = false;
/**
* Creates an instance of ConsoleAdminNotificationsController.
* @memberof ConsoleAdminNotificationsController
*/
constructor() {
super(...arguments);
this.getSettings();
}
/**
* Selectes notifiables for settings.
*
* @param {Object} notification
* @param {Array} notifiables
* @memberof ConsoleAdminNotificationsController
*/
@action onSelectNotifiable(notification, notifiables) {
const notificationKey = createNotificationKey(notification.definition, notification.name);
const _notificationSettings = { ...this.notificationSettings };
if (!_notificationSettings[notificationKey]) {
_notificationSettings[notificationKey] = {};
}
_notificationSettings[notificationKey].notifiables = notifiables;
_notificationSettings[notificationKey].definition = notification.definition;
_notificationSettings[notificationKey].via = notifiables.map((notifiable) => {
return {
identifier: notifiable.value,
methods: this.notificationTransportMethods,
};
});
this.mutateNotificationSettings(_notificationSettings);
}
/**
* Mutates the notification settings property.
*
* @param {Object} [_notificationSettings={}]
* @memberof ConsoleAdminNotificationsController
*/
mutateNotificationSettings(_notificationSettings = {}) {
this.notificationSettings = {
...this.notificationSettings,
..._notificationSettings,
};
}
/**
* Save notification settings to the server.
*
* @action
* @method saveSettings
* @returns {Promise}
* @memberof ConsoleAdminNotificationsController
*/
@action saveSettings() {
const { notificationSettings } = this;
this.isLoading = true;
return this.fetch
.post('notifications/save-settings', { notificationSettings })
.then(() => {
this.notifications.success('Notification settings successfully saved.');
})
.catch((error) => {
this.notifications.serverError(error);
})
.finally(() => {
this.isLoading = false;
});
}
/**
* Fetches and updates notification settings asynchronously.
*
* @returns {Promise<void>} A promise for successful retrieval and update, or an error on failure.
*/
getSettings() {
return this.fetch
.get('notifications/get-settings')
.then(({ notificationSettings }) => {
this.notificationSettings = notificationSettings;
})
.catch((error) => {
this.notifications.serverError(error);
});
}
}

View File

@@ -0,0 +1,188 @@
import Controller from '@ember/controller';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
import { inject as service } from '@ember/service';
/**
* Controller for managing notifications.
*/
export default class NotificationsController extends Controller {
/**
* Inject the `socket` service
*
* @memberof NotificationsController
*/
@service socket;
/**
* Inject the `store` service
*
* @memberof NotificationsController
*/
@service store;
/**
* Inject the `fetch` service
*
* @memberof NotificationsController
*/
@service fetch;
/**
* Inject the `notifications` service
*
* @memberof NotificationsController
*/
@service notifications;
/**
* Inject the `universe` service
*
* @memberof NotificationsController
*/
@service universe;
/**
* Inject the `router` service
*
* @memberof NotificationsController
*/
@service router;
/**
* Queryable parameters for this controller's model
*
* @var {Array}
*/
queryParams = ['page', 'limit', 'sort', 'query', 'created_at'];
/**
* The current page of data being viewed
*
* @var {Integer}
*/
@tracked page = 1;
/**
* The maximum number of items to show per page
*
* @var {Integer}
*/
@tracked limit = 20;
/**
* The param to sort the data on, the param with prepended `-` is descending
*
* @var {String}
*/
@tracked sort = '-created_at';
/**
* The selected notifications.
*
* @tracked
* @var {Array}
* @memberof NotificationsController
*/
@tracked selected = [];
/**
* Creates an instance of NotificationsController.
* @memberof NotificationsController
*/
constructor() {
super(...arguments);
// listen for received notifications
this.universe.on('notification.received', () => {
this.router.refresh();
});
}
/**
* Action to select or deselect a notification.
*
* @param {NotificationModel} notification - The notification to select or deselect.
* @memberof NotificationsController
*/
@action selectNotification(notification) {
if (this.selected.includes(notification)) {
this.selected.removeObject(notification);
} else {
this.selected.pushObject(notification);
}
}
/**
* Action to delete selected notifications.
*
* @memberof NotificationsController
*/
@action delete() {
return this.fetch
.delete('notifications/bulk-delete', {
notifications: this.selected.map(({ id }) => id),
})
.then(() => {
this.notifications.success(`${this.selected.length} notifications deleted`);
this.universe.trigger('notifications.deleted', [...this.selected]);
this.selected.clear();
return this.router.refresh();
})
.catch((error) => {
this.notifications.serverError(error);
});
}
/**
* Action to mark selected notifications as read.
*
* @memberof NotificationsController
*/
@action read() {
const unreadSelectedNotifications = this.selected.filter((notification) => notification.unread);
return this.fetch
.put('notifications/mark-as-read', {
notifications: unreadSelectedNotifications.map(({ id }) => id),
})
.then(() => {
this.notifications.success(`${unreadSelectedNotifications.length} notifications marked as read`);
this.universe.trigger('notifications.read', [...unreadSelectedNotifications]);
this.selected.clear();
return this.router.refresh();
})
.catch((error) => {
this.notifications.serverError(error);
});
}
/**
* Action to select all notifications.
*
* @memberof NotificationsController
*/
@action selectAll() {
if (this.selected.length === this.model.length) {
this.selected.clear();
} else {
this.selected = this.model.toArray();
}
}
/**
* Action to mark a notification as read.
*
* @param {NotificationModel} notification
* @return {Promise}
* @memberof NotificationsController
*/
@action markNotificationAsRead(notification) {
return notification.markAsRead().then(() => {
this.notifications.info('Notification marked as read.');
this.universe.trigger('notifications.read', [notification]);
});
}
}

View File

@@ -2,5 +2,10 @@ import Controller from '@ember/controller';
import { inject as service } from '@ember/service';
export default class ConsoleSettingsController extends Controller {
/**
* INject the `universe` service
*
* @memberof ConsoleSettingsController
*/
@service universe;
}

View File

@@ -0,0 +1,6 @@
import { helper } from '@ember/component/helper';
import createNotificationKey from '../utils/create-notification-key';
export default helper(function getNotificationKey([definition, name]) {
return createNotificationKey(definition, name);
});

View File

@@ -10,7 +10,7 @@ export default class Company extends Model {
@attr('string') owner_uuid;
@attr('string') logo_uuid;
@attr('string') backdrop_uuid;
@attr('string') address_uuid;
@attr('string') place_uuid;
/** @relationships */
@belongsTo('file') logo;

View File

@@ -0,0 +1,53 @@
import Model, { attr } from '@ember-data/model';
import { computed } from '@ember/object';
import { format, formatDistanceToNow } from 'date-fns';
export default class NotificationModel extends Model {
@attr('string') notifiable_id;
@attr('string') notifiable_type;
/** @attributes */
@attr('string') type;
@attr('raw') data;
@attr('raw') meta;
/** @dates */
@attr('date') read_at;
@attr('date') created_at;
/** @computed */
@computed('created_at') get createdAgo() {
return formatDistanceToNow(this.created_at);
}
@computed('created_at') get createdAt() {
return format(this.created_at, 'PPP p');
}
@computed('read_at') get readAt() {
return format(this.read_at, 'PPP p');
}
@computed('read_at') get isRead() {
return this.read_at instanceof Date;
}
@computed('read_at') get read() {
return this.read_at instanceof Date;
}
@computed('isRead') get unread() {
return !this.get('isRead');
}
/** @actions */
markAsRead() {
if (this.isRead) {
return;
}
this.set('read_at', new Date());
return this.save();
}
}

View File

@@ -22,6 +22,7 @@ Router.map(function () {
this.route('console', { path: '/' }, function () {
this.route('home', { path: '/' });
this.route('extensions');
this.route('notifications');
this.route('account', function () {
this.route('virtual', { path: '/:slug/:view' });
});
@@ -41,28 +42,9 @@ Router.map(function () {
this.route('socket');
});
this.route('branding');
this.route('notifications');
this.route('virtual', { path: '/:slug/:view' });
});
this.mount('@fleetbase/dev-engine', {
as: 'developers',
path: 'developers'
});
this.mount('@fleetbase/fleetops-engine', {
as: 'fleet-ops',
path: 'fleet-ops'
});
this.mount('@fleetbase/iam-engine', {
as: 'iam',
path: 'iam'
});
this.mount('@fleetbase/storefront-engine', {
as: 'storefront',
path: 'storefront'
});
});
this.route('install');
});

View File

@@ -0,0 +1,20 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import { hash } from 'rsvp';
import groupBy from '@fleetbase/ember-core/utils/group-by';
export default class ConsoleAdminNotificationsRoute extends Route {
@service fetch;
model() {
return hash({
registry: this.fetch.get('notifications/registry'),
notifiables: this.fetch.get('notifications/notifiables'),
});
}
setupController(controller, { registry, notifiables }) {
controller.groupedNotifications = groupBy(registry, 'package');
controller.notifiables = notifiables;
}
}

View File

@@ -0,0 +1,27 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
/**
* Route for managing console notifications.
*/
export default class ConsoleNotificationsRoute extends Route {
@service store;
queryParams = {
page: { refreshModel: true },
limit: { refreshModel: true },
sort: { refreshModel: true },
query: { refreshModel: true },
created_at: { refreshModel: true },
};
/**
* Fetch the model data based on the specified parameters.
*
* @param {Object} params - Query parameters for fetching notifications.
* @returns {Promise} - A promise that resolves with the notification data.
*/
model(params = {}) {
return this.store.query('notification', params);
}
}

View File

@@ -0,0 +1,5 @@
import ApplicationSerializer from '@fleetbase/ember-core/serializers/application';
export default class NotificationSerializer extends ApplicationSerializer {
primaryKey = 'id';
}

View File

@@ -3,6 +3,7 @@
<EmberWormhole @to="sidebar-menu-items">
<Layout::Sidebar::Item @route="console.admin.index" @icon="rectangle-list">Overview</Layout::Sidebar::Item>
<Layout::Sidebar::Item @route="console.admin.branding" @icon="palette">Branding</Layout::Sidebar::Item>
<Layout::Sidebar::Item @route="console.admin.notifications" @icon="bell">Notifications</Layout::Sidebar::Item>
{{#each this.universe.adminMenuItems as |menuItem|}}
<Layout::Sidebar::Item @onClick={{fn this.universe.transitionMenuItem "console.admin.virtual" menuItem}} @item={{menuItem}} @icon={{menuItem.icon}}>{{menuItem.title}}</Layout::Sidebar::Item>
{{/each}}

View File

@@ -1,5 +1,7 @@
{{page-title "Branding"}}
<Layout::Section::Header @title="Branding" />
<Layout::Section::Header @title="Branding">
<Button @type="primary" @size="sm" @icon="save" @text="Save Changes" @onClick={{this.save}} @disabled={{this.isLoading}} @isLoading={{this.isLoading}} />
</Layout::Section::Header>
<Layout::Section::Body class="overflow-y-scroll h-full">
<div class="container mx-auto h-screen" {{increase-height-by 300}}>
@@ -28,7 +30,7 @@
</a>
</FileUpload>
</div>
<a href="javascript:;" class="text-danger text-xs mt-1" {{on "click" (fn this.unset "icon_url" "/images/icon.png")}}>Reset to default</a>
<a href="javascript:;" class="text-danger text-xs mt-1" {{on "click" this.unsetIcon}}>Reset to default</a>
</div>
<div class="input-group">
<label>Logo</label>
@@ -52,17 +54,13 @@
</a>
</FileUpload>
</div>
<a href="javascript:;" class="text-danger text-xs mt-1" {{on "click" (fn this.unset "logo_url" "/images/fleetbase-logo-svg.svg")}}>Reset to default</a>
<a href="javascript:;" class="text-danger text-xs mt-1" {{on "click" this.unsetLogo}}>Reset to default</a>
</div>
<InputGroup @name="Default Theme">
<Select @value={{@model.default_theme}} @onSelect={{this.setTheme}} @options={{this.themeOptions}} />
</InputGroup>
</form>
</ContentPanel>
<div class="mt-3 flex items-center justify-end">
<Button @type="primary" @size="lg" @icon="save" @text="Save Changes" @onClick={{this.save}} @disabled={{this.isLoading}} @isLoading={{this.isLoading}} />
</div>
</div>
</div>
</Layout::Section::Body>

View File

@@ -0,0 +1,32 @@
{{page-title "Notifications"}}
<Layout::Section::Header @title="Notifications">
<Button @type="primary" @size="sm" @icon="save" @text="Save Changes" @onClick={{this.saveSettings}} @disabled={{this.isLoading}} @isLoading={{this.isLoading}} />
</Layout::Section::Header>
<Layout::Section::Body class="overflow-y-scroll h-full">
<div class="container mx-auto h-screen" {{increase-height-by 1200}}>
<div class="max-w-3xl my-10 mx-auto space-y-4">
{{#each-in this.groupedNotifications as |groupName notifications|}}
<ContentPanel @title={{concat (smart-humanize groupName) " Notification Settings"}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
{{#each notifications as |notification|}}
<InputGroup @name={{notification.name}} @helpText={{notification.description}}>
<div class="fleetbase-model-select fleetbase-power-select ember-model-select">
<PowerSelectMultiple
@searchEnabled={{true}}
@options={{this.notifiables}}
@selected={{get this.notificationSettings (concat (get-notification-key notification.definition notification.name) ".notifiables")}}
@onChange={{fn this.onSelectNotifiable notification}}
@placeholder="Select notifiables..."
@triggerClass="form-select form-input form-input-sm flex-1"
as |notifiable|
>
{{notifiable.label}}
</PowerSelectMultiple>
</div>
</InputGroup>
{{/each}}
</ContentPanel>
{{/each-in}}
</div>
</div>
</Layout::Section::Body>

View File

@@ -0,0 +1,51 @@
<Layout::Section::Header @title="Notifications">
<Button @icon="check-square" @type="default" @text="Select All" {{on "click" this.selectAll}} class="mr-2" />
<Button @icon="envelope" @type="primary" @text="Mark as Read" {{on "click" this.read}} class="mr-2" />
<Button @icon="trash" @type="danger" @text="Delete" {{on "click" this.delete}} />
</Layout::Section::Header>
<Layout::Section::Body class="h-full w-full">
<div class="max-h-[calc(100vh-10rem)] h-full w-full overflow-y-scroll">
<div class="h-full w-full">
{{#each @model as |notification|}}
<div class="flex flex-row justify-between px-4 py-3 text-black dark:text-white border-b dark:border-gray-800 border-gray-200 text-sm hover:opacity-60 {{if notification.read_at 'bg-gray-100 dark:bg-gray-900' 'bg-white dark:bg-gray-800'}}">
<div class="flex flex-row flex-1">
<div class="flex items-center justify-center mr-6">
<Checkbox @value={{includes notification this.selected}} @onToggle={{fn this.selectNotification notification}} />
</div>
<a href="javascript:;" class="flex-1 flex flex-row" {{on "click" (fn this.markNotificationAsRead notification)}}>
<div class="mr-4 flex items-center justify-center">
{{#if notification.read_at}}
<FaIcon @icon="envelope-open" class="text-gray-200" />
{{else}}
<FaIcon @icon="envelope" class="text-gray-200" />
{{/if}}
</div>
<div class="flex flex-col">
<div class="flex flex-row space-x-2">
<h1 class="text-sm font-semibold antialiased leading-4">{{notification.data.subject}}</h1>
<div class="text-xs antialiased text-gray-900 dark:text-gray-200">- {{notification.data.message}}</div>
</div>
<div class="text-gray-300 text-xs antialiased mt-1">Received: {{notification.createdAgo}}</div>
</div>
</a>
<div>
<FaIcon @icon="clock" class="text-gray-400 dark:text-gray-700" @size="sm" />
<span class="text-gray-400 dark:text-gray-600 text-xs">{{notification.createdAt}}</span>
</div>
</div>
</div>
{{else}}
<div class="flex items-center justify-center h-full w-full">
<p class="text-base text-gray-800 dark:text-gray-300 italic">No notifications to display.</p>
</div>
{{/each}}
</div>
</div>
</Layout::Section::Body>
<div class="fixed bottom-0 w-full">
<Layout::Section::Footer>
<Pagination @meta={{@model.meta}} @currentPage={{this.page}} @onPageChange={{fn (mut this.page)}} @tfootVerticalOffset="53" @tfootVerticalOffsetElements=".next-view-section-subheader" />
</Layout::Section::Footer>
</div>

View File

@@ -0,0 +1,8 @@
import { camelize } from '@ember/string';
export default function createNotificationKey(definition, name) {
const withoutSlashes = definition.replace(/[\W_]+/g, '');
const key = `${camelize(withoutSlashes)}__${camelize(name)}`;
return key;
}

View File

@@ -21,7 +21,7 @@ module.exports = function (environment) {
},
API: {
host: fixApiHost(getenv('API_HOST'), getenv('API_SECURE')),
host: fixApiHost(getenv('API_HOST'), toBoolean(getenv('API_SECURE'))),
namespace: getenv('API_NAMESPACE', 'int/v1'),
},
@@ -43,7 +43,8 @@ module.exports = function (environment) {
driverImage: getenv('DEFAULT_DRIVER_IMAGE', 'https://s3.ap-southeast-1.amazonaws.com/flb-assets/static/no-avatar.png'),
userImage: getenv('DEFAULT_USER_IMAGE', 'https://s3.ap-southeast-1.amazonaws.com/flb-assets/static/no-avatar.png'),
contactImage: getenv('DEFAULT_CONTACT_IMAGE', 'https://s3.ap-southeast-1.amazonaws.com/flb-assets/static/no-avatar.png'),
vehicleImage: getenv('DEFAULT_VEHICLE_IMAGE', 'https://flb-assets.s3.ap-southeast-1.amazonaws.com/static/vehicle-icons/light_commercial_van.svg'),
vendorImage: getenv('DEFAULT_VENDOR_IMAGE', 'https://s3.ap-southeast-1.amazonaws.com/flb-assets/static/no-avatar.png'),
vehicleImage: getenv('DEFAULT_VEHICLE_IMAGE', 'https://s3.ap-southeast-1.amazonaws.com/flb-assets/static/vehicle-placeholder.png'),
vehicleAvatar: getenv('DEFAUL_VEHICLE_AVATAR', 'https://flb-assets.s3-ap-southeast-1.amazonaws.com/static/vehicle-icons/mini_bus.svg'),
},

View File

@@ -43,7 +43,7 @@ module.exports = function (defaults) {
postcssMixins,
postcssPresetEnv({ stage: 1 }),
postcssEach,
tailwind('./tailwind.js'),
tailwind('./tailwind.config.js'),
autoprefixer,
],
},

View File

@@ -0,0 +1,8 @@
API_HOST=http://localhost:8000
API_NAMESPACE=int/v1
SOCKETCLUSTER_PATH=/socketcluster/
SOCKETCLUSTER_HOST=localhost
SOCKETCLUSTER_SECURE=false
SOCKETCLUSTER_PORT=38000
OSRM_HOST=https://bundle.routing.fleetbase.io
OSRM_SERVERS=https://canada.routing.fleetbase.io,https://us.routing.fleetbase.io

View File

@@ -0,0 +1,9 @@
API_HOST=
API_NAMESPACE=int/v1
API_SECURE=true
SOCKETCLUSTER_PATH=/socketcluster/
SOCKETCLUSTER_HOST=
SOCKETCLUSTER_SECURE=true
SOCKETCLUSTER_PORT=38000
OSRM_HOST=https://bundle.routing.fleetbase.io
OSRM_SERVERS=https://canada.routing.fleetbase.io,https://us.routing.fleetbase.io

View File

View File

@@ -1,6 +1,6 @@
{
"name": "@fleetbase/console",
"version": "0.2.6",
"version": "0.2.9",
"private": true,
"description": "Fleetbase Console",
"repository": "",
@@ -25,13 +25,13 @@
},
"dependencies": {
"@ember/legacy-built-in-components": "^0.4.1",
"@fleetbase/ember-core": "^0.1.5",
"@fleetbase/ember-ui": "^0.2.0",
"@fleetbase/dev-engine": "^0.1.8",
"@fleetbase/iam-engine": "^0.0.6",
"@fleetbase/fleetops-engine": "^0.2.9",
"@fleetbase/fleetops-data": "^0.1.1",
"@fleetbase/storefront-engine": "^0.2.0",
"@fleetbase/ember-core": "^0.1.7",
"@fleetbase/ember-ui": "^0.2.4",
"@fleetbase/dev-engine": "^0.1.9",
"@fleetbase/iam-engine": "^0.0.7",
"@fleetbase/fleetops-engine": "^0.3.3",
"@fleetbase/fleetops-data": "^0.1.3",
"@fleetbase/storefront-engine": "^0.2.4",
"@fleetbase/leaflet-routing-machine": "^3.2.16",
"@fortawesome/ember-fontawesome": "^0.4.1",
"ember-intl": "^6.0.0-beta.6",
@@ -67,7 +67,7 @@
"dragula": "^3.7.3",
"ember-auto-import": "^2.4.2",
"ember-cli": "~4.6.0",
"ember-cli-app-version": "^5.0.0",
"ember-cli-app-version": "^6.0.1",
"ember-cli-babel": "^7.26.11",
"ember-cli-dependency-checker": "^3.3.1",
"ember-cli-dotenv": "^3.1.0",
@@ -125,9 +125,9 @@
},
"pnpm": {
"overrides": {
"@fleetbase/fleetops-data": "^0.1.1",
"@fleetbase/ember-core": "^0.1.5",
"@fleetbase/ember-ui": "^0.2.0"
"@fleetbase/fleetops-data": "^0.1.3",
"@fleetbase/ember-core": "^0.1.7",
"@fleetbase/ember-ui": "^0.2.4"
}
},
"prettier": {

2331
console/pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -22,6 +22,7 @@ Router.map(function () {
this.route('console', { path: '/' }, function () {
this.route('home', { path: '/' });
this.route('extensions');
this.route('notifications');
this.route('account', function () {
this.route('virtual', { path: '/:slug/:view' });
});
@@ -41,6 +42,7 @@ Router.map(function () {
this.route('socket');
});
this.route('branding');
this.route('notifications');
this.route('virtual', { path: '/:slug/:view' });
});
});

View File

@@ -0,0 +1,26 @@
import { module, test } from 'qunit';
import { setupRenderingTest } from '@fleetbase/console/tests/helpers';
import { render } from '@ember/test-helpers';
import { hbs } from 'ember-cli-htmlbars';
module('Integration | Component | notification-list', function (hooks) {
setupRenderingTest(hooks);
test('it renders', async function (assert) {
// Set any properties with this.set('myProperty', 'value');
// Handle any actions with this.set('myAction', function(val) { ... });
await render(hbs`<NotificationList />`);
assert.dom(this.element).hasText('');
// Template block usage:
await render(hbs`
<NotificationList>
template block text
</NotificationList>
`);
assert.dom(this.element).hasText('template block text');
});
});

View File

@@ -0,0 +1,26 @@
import { module, test } from 'qunit';
import { setupRenderingTest } from '@fleetbase/console/tests/helpers';
import { render } from '@ember/test-helpers';
import { hbs } from 'ember-cli-htmlbars';
module('Integration | Component | notifications-list', function (hooks) {
setupRenderingTest(hooks);
test('it renders', async function (assert) {
// Set any properties with this.set('myProperty', 'value');
// Handle any actions with this.set('myAction', function(val) { ... });
await render(hbs`<NotificationsList />`);
assert.dom(this.element).hasText('');
// Template block usage:
await render(hbs`
<NotificationsList>
template block text
</NotificationsList>
`);
assert.dom(this.element).hasText('template block text');
});
});

View File

@@ -0,0 +1,17 @@
import { module, test } from 'qunit';
import { setupRenderingTest } from '@fleetbase/console/tests/helpers';
import { render } from '@ember/test-helpers';
import { hbs } from 'ember-cli-htmlbars';
module('Integration | Helper | get-notification-key', function (hooks) {
setupRenderingTest(hooks);
// TODO: Replace this with your real tests.
test('it renders', async function (assert) {
this.set('inputValue', '1234');
await render(hbs`{{get-notification-key this.inputValue}}`);
assert.dom(this.element).hasText('1234');
});
});

View File

@@ -0,0 +1,12 @@
import { module, test } from 'qunit';
import { setupTest } from '@fleetbase/console/tests/helpers';
module('Unit | Controller | console/admin/notifications', function (hooks) {
setupTest(hooks);
// TODO: Replace this with your real tests.
test('it exists', function (assert) {
let controller = this.owner.lookup('controller:console/admin/notifications');
assert.ok(controller);
});
});

View File

@@ -0,0 +1,12 @@
import { module, test } from 'qunit';
import { setupTest } from '@fleetbase/console/tests/helpers';
module('Unit | Controller | console/notifications', function (hooks) {
setupTest(hooks);
// TODO: Replace this with your real tests.
test('it exists', function (assert) {
let controller = this.owner.lookup('controller:console/notifications');
assert.ok(controller);
});
});

View File

@@ -0,0 +1,14 @@
import { module, test } from 'qunit';
import { setupTest } from '@fleetbase/console/tests/helpers';
module('Unit | Model | notification', function (hooks) {
setupTest(hooks);
// Replace this with your real tests.
test('it exists', function (assert) {
let store = this.owner.lookup('service:store');
let model = store.createRecord('notification', {});
assert.ok(model);
});
});

View File

@@ -0,0 +1,11 @@
import { module, test } from 'qunit';
import { setupTest } from '@fleetbase/console/tests/helpers';
module('Unit | Route | console/admin/notifications', function (hooks) {
setupTest(hooks);
test('it exists', function (assert) {
let route = this.owner.lookup('route:console/admin/notifications');
assert.ok(route);
});
});

View File

@@ -0,0 +1,11 @@
import { module, test } from 'qunit';
import { setupTest } from '@fleetbase/console/tests/helpers';
module('Unit | Route | console/notifications', function (hooks) {
setupTest(hooks);
test('it exists', function (assert) {
let route = this.owner.lookup('route:console/notifications');
assert.ok(route);
});
});

View File

@@ -0,0 +1,24 @@
import { module, test } from 'qunit';
import { setupTest } from '@fleetbase/console/tests/helpers';
module('Unit | Serializer | notification', function (hooks) {
setupTest(hooks);
// Replace this with your real tests.
test('it exists', function (assert) {
let store = this.owner.lookup('service:store');
let serializer = store.serializerFor('notification');
assert.ok(serializer);
});
test('it serializes records', function (assert) {
let store = this.owner.lookup('service:store');
let record = store.createRecord('notification', {});
let serializedRecord = record.serialize();
assert.ok(serializedRecord);
});
});

View File

@@ -0,0 +1,10 @@
import createNotificationKey from '@fleetbase/console/utils/create-notification-key';
import { module, test } from 'qunit';
module('Unit | Utility | create-notification-key', function () {
// TODO: Replace this with your real tests.
test('it works', function (assert) {
let result = createNotificationKey();
assert.ok(result);
});
});