diff --git a/composer.lock b/composer.lock index 9874d45a..9135cff8 100644 --- a/composer.lock +++ b/composer.lock @@ -280,16 +280,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.211.1", + "version": "3.212.5", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "fa6b2cc2df7563b775b346d60da4d36c06062ce1" + "reference": "ed69594b385233bb895342e18008cd811e8225e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/fa6b2cc2df7563b775b346d60da4d36c06062ce1", - "reference": "fa6b2cc2df7563b775b346d60da4d36c06062ce1", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/ed69594b385233bb895342e18008cd811e8225e7", + "reference": "ed69594b385233bb895342e18008cd811e8225e7", "shasum": "" }, "require": { @@ -365,9 +365,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.211.1" + "source": "https://github.com/aws/aws-sdk-php/tree/3.212.5" }, - "time": "2022-03-01T19:17:13+00:00" + "time": "2022-03-09T19:19:58+00:00" }, { "name": "bacon/bacon-qr-code", @@ -1413,16 +1413,16 @@ }, { "name": "doctrine/dbal", - "version": "2.13.7", + "version": "2.13.8", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "6e22f6012b42d7932674857989fcf184e9e9b1c3" + "reference": "dc9b3c3c8592c935a6e590441f9abc0f9eba335b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/6e22f6012b42d7932674857989fcf184e9e9b1c3", - "reference": "6e22f6012b42d7932674857989fcf184e9e9b1c3", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/dc9b3c3c8592c935a6e590441f9abc0f9eba335b", + "reference": "dc9b3c3c8592c935a6e590441f9abc0f9eba335b", "shasum": "" }, "require": { @@ -1435,13 +1435,13 @@ "require-dev": { "doctrine/coding-standard": "9.0.0", "jetbrains/phpstorm-stubs": "2021.1", - "phpstan/phpstan": "1.3.0", - "phpunit/phpunit": "^7.5.20|^8.5|9.5.11", + "phpstan/phpstan": "1.4.6", + "phpunit/phpunit": "^7.5.20|^8.5|9.5.16", "psalm/plugin-phpunit": "0.16.1", "squizlabs/php_codesniffer": "3.6.2", "symfony/cache": "^4.4", "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", - "vimeo/psalm": "4.16.1" + "vimeo/psalm": "4.22.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -1502,7 +1502,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/2.13.7" + "source": "https://github.com/doctrine/dbal/tree/2.13.8" }, "funding": [ { @@ -1518,7 +1518,7 @@ "type": "tidelift" } ], - "time": "2022-01-06T09:08:04+00:00" + "time": "2022-03-09T15:25:46+00:00" }, { "name": "doctrine/deprecations", @@ -1750,29 +1750,30 @@ }, { "name": "doctrine/instantiator", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.0", + "doctrine/coding-standard": "^9", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" }, "type": "library", "autoload": { @@ -1799,7 +1800,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + "source": "https://github.com/doctrine/instantiator/tree/1.4.1" }, "funding": [ { @@ -1815,7 +1816,7 @@ "type": "tidelift" } ], - "time": "2020-11-10T18:47:58+00:00" + "time": "2022-03-03T08:28:38+00:00" }, { "name": "doctrine/lexer", @@ -2281,21 +2282,21 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.6.0", + "version": "v3.7.0", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "1975e4453eb2726d1f50da0ce7fa91295029a4fa" + "reference": "7705d5a985132a40282d18a176eb9a4a0497747c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/1975e4453eb2726d1f50da0ce7fa91295029a4fa", - "reference": "1975e4453eb2726d1f50da0ce7fa91295029a4fa", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/7705d5a985132a40282d18a176eb9a4a0497747c", + "reference": "7705d5a985132a40282d18a176eb9a4a0497747c", "shasum": "" }, "require": { "composer/semver": "^3.2", - "composer/xdebug-handler": "^3.0", + "composer/xdebug-handler": "^3.0.3", "doctrine/annotations": "^1.13", "ext-json": "*", "ext-tokenizer": "*", @@ -2307,8 +2308,8 @@ "symfony/finder": "^5.4 || ^6.0", "symfony/options-resolver": "^5.4 || ^6.0", "symfony/polyfill-mbstring": "^1.23", - "symfony/polyfill-php80": "^1.23", - "symfony/polyfill-php81": "^1.23", + "symfony/polyfill-php80": "^1.25", + "symfony/polyfill-php81": "^1.25", "symfony/process": "^5.4 || ^6.0", "symfony/stopwatch": "^5.4 || ^6.0" }, @@ -2358,7 +2359,7 @@ "description": "A tool to automatically fix PHP code style", "support": { "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", - "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.6.0" + "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.7.0" }, "funding": [ { @@ -2366,7 +2367,7 @@ "type": "github" } ], - "time": "2022-02-07T18:02:40+00:00" + "time": "2022-03-07T16:59:59+00:00" }, { "name": "fruitcake/laravel-cors", @@ -3226,16 +3227,16 @@ }, { "name": "laravel/fortify", - "version": "v1.11.1", + "version": "v1.11.2", "source": { "type": "git", "url": "https://github.com/laravel/fortify.git", - "reference": "eb1d07c849fee750e4cacba969490a72e88211ae" + "reference": "35c44f36f2a93fb7d3d8b38d6b7794913c69d414" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/fortify/zipball/eb1d07c849fee750e4cacba969490a72e88211ae", - "reference": "eb1d07c849fee750e4cacba969490a72e88211ae", + "url": "https://api.github.com/repos/laravel/fortify/zipball/35c44f36f2a93fb7d3d8b38d6b7794913c69d414", + "reference": "35c44f36f2a93fb7d3d8b38d6b7794913c69d414", "shasum": "" }, "require": { @@ -3285,20 +3286,20 @@ "issues": "https://github.com/laravel/fortify/issues", "source": "https://github.com/laravel/fortify" }, - "time": "2022-02-23T15:04:40+00:00" + "time": "2022-03-04T20:27:28+00:00" }, { "name": "laravel/framework", - "version": "v9.2.0", + "version": "v9.4.1", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "13372872bed31ae75df8709b9de5cde01d50646e" + "reference": "29f0aaade82eadd20ef881b4efb88b0dad4e9a5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/13372872bed31ae75df8709b9de5cde01d50646e", - "reference": "13372872bed31ae75df8709b9de5cde01d50646e", + "url": "https://api.github.com/repos/laravel/framework/zipball/29f0aaade82eadd20ef881b4efb88b0dad4e9a5b", + "reference": "29f0aaade82eadd20ef881b4efb88b0dad4e9a5b", "shasum": "" }, "require": { @@ -3384,7 +3385,7 @@ "mockery/mockery": "^1.4.4", "orchestra/testbench-core": "^7.1", "pda/pheanstalk": "^4.0", - "phpstan/phpstan": "^1.0", + "phpstan/phpstan": "^1.4.7", "phpunit/phpunit": "^9.5.8", "predis/predis": "^1.1.9", "symfony/cache": "^6.0" @@ -3464,7 +3465,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-02-22T15:30:23+00:00" + "time": "2022-03-08T16:17:00+00:00" }, { "name": "laravel/sanctum", @@ -4047,16 +4048,16 @@ }, { "name": "league/flysystem", - "version": "3.0.10", + "version": "3.0.11", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "bbc5026adb5a423dfcdcecec74c7e15943ff6115" + "reference": "1ca148713c23cadeb9d7526973f81fb4a04090a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/bbc5026adb5a423dfcdcecec74c7e15943ff6115", - "reference": "bbc5026adb5a423dfcdcecec74c7e15943ff6115", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/1ca148713c23cadeb9d7526973f81fb4a04090a3", + "reference": "1ca148713c23cadeb9d7526973f81fb4a04090a3", "shasum": "" }, "require": { @@ -4117,7 +4118,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.0.10" + "source": "https://github.com/thephpleague/flysystem/tree/3.0.11" }, "funding": [ { @@ -4133,20 +4134,20 @@ "type": "tidelift" } ], - "time": "2022-02-26T11:09:13+00:00" + "time": "2022-03-04T16:40:17+00:00" }, { "name": "league/flysystem-aws-s3-v3", - "version": "3.0.10", + "version": "3.0.11", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "79c63dc761b6a389a38bd409c2bf8ced73c29261" + "reference": "6f78e668ee70c69dd43830ebb21b41ec11f648fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/79c63dc761b6a389a38bd409c2bf8ced73c29261", - "reference": "79c63dc761b6a389a38bd409c2bf8ced73c29261", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/6f78e668ee70c69dd43830ebb21b41ec11f648fc", + "reference": "6f78e668ee70c69dd43830ebb21b41ec11f648fc", "shasum": "" }, "require": { @@ -4187,9 +4188,9 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem-aws-s3-v3/issues", - "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.0.10" + "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.0.11" }, - "time": "2022-02-26T10:59:05+00:00" + "time": "2022-03-04T16:39:25+00:00" }, { "name": "league/mime-type-detection", @@ -4739,28 +4740,29 @@ }, { "name": "myclabs/deep-copy", - "version": "1.10.2", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, - "replace": { - "myclabs/deep-copy": "self.version" + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { @@ -4785,7 +4787,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" }, "funding": [ { @@ -4793,7 +4795,7 @@ "type": "tidelift" } ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2022-03-03T13:19:32+00:00" }, { "name": "myclabs/php-enum", @@ -5924,16 +5926,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.14", + "version": "9.2.15", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "9f4d60b6afe5546421462b76cd4e633ebc364ab4" + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/9f4d60b6afe5546421462b76cd4e633ebc364ab4", - "reference": "9f4d60b6afe5546421462b76cd4e633ebc364ab4", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", "shasum": "" }, "require": { @@ -5989,7 +5991,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.14" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" }, "funding": [ { @@ -5997,7 +5999,7 @@ "type": "github" } ], - "time": "2022-02-28T12:38:02+00:00" + "time": "2022-03-07T09:28:20+00:00" }, { "name": "phpunit/php-file-iterator", @@ -6242,16 +6244,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.16", + "version": "9.5.18", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "5ff8c545a50226c569310a35f4fa89d79f1ddfdc" + "reference": "1b5856028273bfd855e60a887278857d872ec67a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/5ff8c545a50226c569310a35f4fa89d79f1ddfdc", - "reference": "5ff8c545a50226c569310a35f4fa89d79f1ddfdc", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1b5856028273bfd855e60a887278857d872ec67a", + "reference": "1b5856028273bfd855e60a887278857d872ec67a", "shasum": "" }, "require": { @@ -6329,7 +6331,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.16" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.18" }, "funding": [ { @@ -6341,7 +6343,7 @@ "type": "github" } ], - "time": "2022-02-23T17:10:58+00:00" + "time": "2022-03-08T06:52:28+00:00" }, { "name": "pragmarx/google2fa", @@ -9119,16 +9121,16 @@ }, { "name": "spatie/laravel-backup", - "version": "8.0.8", + "version": "8.1.1", "source": { "type": "git", "url": "https://github.com/spatie/laravel-backup.git", - "reference": "1e6e06cf75f6df21311a96fa99d767ff2c50078c" + "reference": "1a546127205b9afcb8e0dee6de7f2ff93f927ea4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-backup/zipball/1e6e06cf75f6df21311a96fa99d767ff2c50078c", - "reference": "1e6e06cf75f6df21311a96fa99d767ff2c50078c", + "url": "https://api.github.com/repos/spatie/laravel-backup/zipball/1a546127205b9afcb8e0dee6de7f2ff93f927ea4", + "reference": "1a546127205b9afcb8e0dee6de7f2ff93f927ea4", "shasum": "" }, "require": { @@ -9155,7 +9157,7 @@ "league/flysystem-aws-s3-v3": "^2.0|^3.0", "mockery/mockery": "^1.4", "orchestra/testbench": "^7.0", - "phpunit/phpunit": "^9.5.4" + "pestphp/pest": "^1.20" }, "suggest": { "laravel/slack-notification-channel": "Required for sending notifications via Slack" @@ -9198,7 +9200,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-backup/issues", - "source": "https://github.com/spatie/laravel-backup/tree/8.0.8" + "source": "https://github.com/spatie/laravel-backup/tree/8.1.1" }, "funding": [ { @@ -9210,7 +9212,7 @@ "type": "other" } ], - "time": "2022-02-23T18:35:41+00:00" + "time": "2022-03-08T10:23:50+00:00" }, { "name": "spatie/laravel-package-tools", @@ -9756,16 +9758,16 @@ }, { "name": "stripe/stripe-php", - "version": "v7.115.0", + "version": "v7.116.0", "source": { "type": "git", "url": "https://github.com/stripe/stripe-php.git", - "reference": "a1c528a5076b80dc156601505994870d23313a73" + "reference": "7a39f594f213ed3f443a95adf769d1ecbc8393e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/stripe/stripe-php/zipball/a1c528a5076b80dc156601505994870d23313a73", - "reference": "a1c528a5076b80dc156601505994870d23313a73", + "url": "https://api.github.com/repos/stripe/stripe-php/zipball/7a39f594f213ed3f443a95adf769d1ecbc8393e7", + "reference": "7a39f594f213ed3f443a95adf769d1ecbc8393e7", "shasum": "" }, "require": { @@ -9810,9 +9812,9 @@ ], "support": { "issues": "https://github.com/stripe/stripe-php/issues", - "source": "https://github.com/stripe/stripe-php/tree/v7.115.0" + "source": "https://github.com/stripe/stripe-php/tree/v7.116.0" }, - "time": "2022-03-01T22:45:01+00:00" + "time": "2022-03-02T15:51:15+00:00" }, { "name": "symfony/console", @@ -10276,16 +10278,16 @@ }, { "name": "symfony/filesystem", - "version": "v6.0.5", + "version": "v6.0.6", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "6646c13f787057d64701a3a0235cf9567c6ccbbd" + "reference": "52b888523545b0b4049ab9ce48766802484d7046" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/6646c13f787057d64701a3a0235cf9567c6ccbbd", - "reference": "6646c13f787057d64701a3a0235cf9567c6ccbbd", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/52b888523545b0b4049ab9ce48766802484d7046", + "reference": "52b888523545b0b4049ab9ce48766802484d7046", "shasum": "" }, "require": { @@ -10319,7 +10321,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.0.5" + "source": "https://github.com/symfony/filesystem/tree/v6.0.6" }, "funding": [ { @@ -10335,7 +10337,7 @@ "type": "tidelift" } ], - "time": "2022-02-28T07:42:30+00:00" + "time": "2022-03-02T12:58:14+00:00" }, { "name": "symfony/finder", @@ -10562,16 +10564,16 @@ }, { "name": "symfony/http-foundation", - "version": "v6.0.5", + "version": "v6.0.6", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "b460fb15905eef449c4c43a4f0c113eccee103b9" + "reference": "a000fcf2298a1bc79a1dcff22608792506534719" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b460fb15905eef449c4c43a4f0c113eccee103b9", - "reference": "b460fb15905eef449c4c43a4f0c113eccee103b9", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/a000fcf2298a1bc79a1dcff22608792506534719", + "reference": "a000fcf2298a1bc79a1dcff22608792506534719", "shasum": "" }, "require": { @@ -10614,7 +10616,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.0.5" + "source": "https://github.com/symfony/http-foundation/tree/v6.0.6" }, "funding": [ { @@ -10630,20 +10632,20 @@ "type": "tidelift" } ], - "time": "2022-02-21T17:15:17+00:00" + "time": "2022-03-05T21:04:00+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.0.5", + "version": "v6.0.6", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "5ad3f5e5fa772a8b5c6bb217f8379b533afac2ba" + "reference": "f9e49ad9fe16895b24cd7a09dc28d3364282e21a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/5ad3f5e5fa772a8b5c6bb217f8379b533afac2ba", - "reference": "5ad3f5e5fa772a8b5c6bb217f8379b533afac2ba", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f9e49ad9fe16895b24cd7a09dc28d3364282e21a", + "reference": "f9e49ad9fe16895b24cd7a09dc28d3364282e21a", "shasum": "" }, "require": { @@ -10723,7 +10725,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/v6.0.5" + "source": "https://github.com/symfony/http-kernel/tree/v6.0.6" }, "funding": [ { @@ -10739,7 +10741,7 @@ "type": "tidelift" } ], - "time": "2022-02-28T08:05:03+00:00" + "time": "2022-03-05T21:19:20+00:00" }, { "name": "symfony/mailer", @@ -11030,7 +11032,7 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.24.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -11092,7 +11094,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0" }, "funding": [ { @@ -11112,7 +11114,7 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.24.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", @@ -11173,7 +11175,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0" }, "funding": [ { @@ -11193,7 +11195,7 @@ }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.24.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", @@ -11260,7 +11262,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.25.0" }, "funding": [ { @@ -11280,7 +11282,7 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.24.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -11344,7 +11346,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0" }, "funding": [ { @@ -11364,7 +11366,7 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.24.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", @@ -11427,7 +11429,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0" }, "funding": [ { @@ -11447,7 +11449,7 @@ }, { "name": "symfony/polyfill-php72", - "version": "v1.24.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", @@ -11503,7 +11505,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.25.0" }, "funding": [ { @@ -11523,16 +11525,16 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.24.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c", "shasum": "" }, "require": { @@ -11586,7 +11588,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0" }, "funding": [ { @@ -11602,11 +11604,11 @@ "type": "tidelift" } ], - "time": "2021-09-13T13:58:33+00:00" + "time": "2022-03-04T08:16:47+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.24.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", @@ -11665,7 +11667,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.25.0" }, "funding": [ { @@ -12216,16 +12218,16 @@ }, { "name": "symfony/translation", - "version": "v6.0.5", + "version": "v6.0.6", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "e69501c71107cc3146b32aaa45f4edd0c3427875" + "reference": "f6639cb9b5e0c57fe31e3263b900a77eedb0c908" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/e69501c71107cc3146b32aaa45f4edd0c3427875", - "reference": "e69501c71107cc3146b32aaa45f4edd0c3427875", + "url": "https://api.github.com/repos/symfony/translation/zipball/f6639cb9b5e0c57fe31e3263b900a77eedb0c908", + "reference": "f6639cb9b5e0c57fe31e3263b900a77eedb0c908", "shasum": "" }, "require": { @@ -12291,7 +12293,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.0.5" + "source": "https://github.com/symfony/translation/tree/v6.0.6" }, "funding": [ { @@ -12307,7 +12309,7 @@ "type": "tidelift" } ], - "time": "2022-02-09T15:52:48+00:00" + "time": "2022-03-02T12:58:14+00:00" }, { "name": "symfony/translation-contracts", @@ -12389,16 +12391,16 @@ }, { "name": "symfony/var-dumper", - "version": "v6.0.5", + "version": "v6.0.6", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "60d6a756d5f485df5e6e40b337334848f79f61ce" + "reference": "38358405ae948963c50a3aae3dfea598223ba15e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/60d6a756d5f485df5e6e40b337334848f79f61ce", - "reference": "60d6a756d5f485df5e6e40b337334848f79f61ce", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/38358405ae948963c50a3aae3dfea598223ba15e", + "reference": "38358405ae948963c50a3aae3dfea598223ba15e", "shasum": "" }, "require": { @@ -12457,7 +12459,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.0.5" + "source": "https://github.com/symfony/var-dumper/tree/v6.0.6" }, "funding": [ { @@ -12473,7 +12475,7 @@ "type": "tidelift" } ], - "time": "2022-02-21T17:15:17+00:00" + "time": "2022-03-02T12:58:14+00:00" }, { "name": "teamtnt/tntsearch", @@ -12844,16 +12846,16 @@ }, { "name": "voku/portable-ascii", - "version": "2.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "9bd89e83cecdf8c37b64909454249eaed98b2c89" + "reference": "b56450eed252f6801410d810c8e1727224ae0743" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/9bd89e83cecdf8c37b64909454249eaed98b2c89", - "reference": "9bd89e83cecdf8c37b64909454249eaed98b2c89", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", + "reference": "b56450eed252f6801410d810c8e1727224ae0743", "shasum": "" }, "require": { @@ -12890,7 +12892,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.0" + "source": "https://github.com/voku/portable-ascii/tree/2.0.1" }, "funding": [ { @@ -12914,7 +12916,7 @@ "type": "tidelift" } ], - "time": "2022-01-24T18:59:03+00:00" + "time": "2022-03-08T17:03:00+00:00" }, { "name": "webmozart/assert", @@ -13029,21 +13031,21 @@ "packages-dev": [ { "name": "barryvdh/laravel-ide-helper", - "version": "v2.12.1", + "version": "v2.12.3", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-ide-helper.git", - "reference": "999167d4c21e2ae748847f7c0e4565ae45f5c9f9" + "reference": "3ba1e2573b38f72107b8aacc4ee177fcab30a550" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/999167d4c21e2ae748847f7c0e4565ae45f5c9f9", - "reference": "999167d4c21e2ae748847f7c0e4565ae45f5c9f9", + "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/3ba1e2573b38f72107b8aacc4ee177fcab30a550", + "reference": "3ba1e2573b38f72107b8aacc4ee177fcab30a550", "shasum": "" }, "require": { "barryvdh/reflection-docblock": "^2.0.6", - "composer/composer": "^1.10.23 || ^2.1.9", + "composer/pcre": "^1 || ^2 || ^3", "doctrine/dbal": "^2.6 || ^3", "ext-json": "*", "illuminate/console": "^8 || ^9", @@ -13107,7 +13109,7 @@ ], "support": { "issues": "https://github.com/barryvdh/laravel-ide-helper/issues", - "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v2.12.1" + "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v2.12.3" }, "funding": [ { @@ -13119,7 +13121,7 @@ "type": "github" } ], - "time": "2022-01-24T21:36:43+00:00" + "time": "2022-03-06T14:33:42+00:00" }, { "name": "barryvdh/reflection-docblock", @@ -13255,12 +13257,12 @@ "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "575fbfb53fcc2388916d554271c99c8281fea782" + "reference": "ae23647f07932754dc9d7fd1d15657273301a009" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/575fbfb53fcc2388916d554271c99c8281fea782", - "reference": "575fbfb53fcc2388916d554271c99c8281fea782", + "url": "https://api.github.com/repos/composer/composer/zipball/ae23647f07932754dc9d7fd1d15657273301a009", + "reference": "ae23647f07932754dc9d7fd1d15657273301a009", "shasum": "" }, "require": { @@ -13353,7 +13355,7 @@ "type": "tidelift" } ], - "time": "2022-02-26T13:12:30+00:00" + "time": "2022-03-09T19:45:19+00:00" }, { "name": "composer/metadata-minifier", @@ -14323,16 +14325,16 @@ }, { "name": "spatie/ignition", - "version": "1.1.0", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/spatie/ignition.git", - "reference": "8ecde033600064e3ffdbf804deec0dcb05004387" + "reference": "ab8d1f938d3ffd20af25ad788a9d019e1123068c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/8ecde033600064e3ffdbf804deec0dcb05004387", - "reference": "8ecde033600064e3ffdbf804deec0dcb05004387", + "url": "https://api.github.com/repos/spatie/ignition/zipball/ab8d1f938d3ffd20af25ad788a9d019e1123068c", + "reference": "ab8d1f938d3ffd20af25ad788a9d019e1123068c", "shasum": "" }, "require": { @@ -14390,7 +14392,7 @@ "type": "github" } ], - "time": "2022-03-01T17:01:33+00:00" + "time": "2022-03-08T15:12:58+00:00" }, { "name": "spatie/laravel-ignition", @@ -14481,7 +14483,7 @@ }, { "name": "symfony/polyfill-php73", - "version": "v1.24.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", @@ -14540,7 +14542,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.25.0" }, "funding": [ { diff --git a/package-lock.json b/package-lock.json index 2eb747f3..e701184e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6657,9 +6657,9 @@ } }, "postcss": { - "version": "8.4.7", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.7.tgz", - "integrity": "sha512-L9Ye3r6hkkCeOETQX6iOaWZgjp3LL6Lpqm6EtgbKrgqGGteRMNb9vzBfRL96YOSu8o7x3MfIH9Mo5cPJFGrW6A==", + "version": "8.4.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.8.tgz", + "integrity": "sha512-2tXEqGxrjvAO6U+CJzDL2Fk2kPHTv1jQsYkSoMeOis2SsYaXRO2COxTdQp99cYvif9JTXaAk9lYGc3VhJt7JPQ==", "dev": true, "requires": { "nanoid": "^3.3.1", diff --git a/package.json b/package.json index d80b68b1..cd6d542f 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "cross-env": "^5.1", "laravel-echo": "^1.11.3", "laravel-mix": "^6.0.43", - "postcss": "^8.4.7", + "postcss": "^8.4.8", "prettier": "^2.5.1", "prettier-plugin-import-sort": "0.0.7", "prettier-plugin-tailwindcss": "^0.1.8", diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 00f5097d..4abd01ca 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -1,7 +1,7 @@ { "/js/main.js": "/js/main.js", - "/chunks/request.js": "/chunks/request.js?id=3c8d8ec8f0f51d19", - "/chunks/request-upload.js": "/chunks/request-upload.js?id=12dcae76203db76f", + "/chunks/request.js": "/chunks/request.js?id=001f737452e0d25a", + "/chunks/request-upload.js": "/chunks/request-upload.js?id=f50a50d2aa741c81", "/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=19a0784e59d768ec", "/chunks/status-check.js": "/chunks/status-check.js?id=6bae83a7e38d3b1c", "/chunks/purchase-code.js": "/chunks/purchase-code.js?id=0d001d4505d2f5e9", @@ -9,13 +9,13 @@ "/chunks/environment-setup.js": "/chunks/environment-setup.js?id=c58071cb9d14e595", "/chunks/app-setup.js": "/chunks/app-setup.js?id=ad92e971daa0f86d", "/chunks/admin-account.js": "/chunks/admin-account.js?id=286b9872565b5e96", - "/chunks/shared.js": "/chunks/shared.js?id=e777e8e40fdc11a0", - "/chunks/shared/browser.js": "/chunks/shared/browser.js?id=ca4620238e883070", - "/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=3af02b5d9d4da341", + "/chunks/shared.js": "/chunks/shared.js?id=584d7de11142b545", + "/chunks/shared/browser.js": "/chunks/shared/browser.js?id=4722af71c3c7bba6", + "/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=f60d6a95bc180df2", "/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=92c75a6c77689046", "/chunks/not-found.js": "/chunks/not-found.js?id=36763aa314e00327", "/chunks/temporary-unavailable.js": "/chunks/temporary-unavailable.js?id=a3906226272982b1", - "/chunks/admin.js": "/chunks/admin.js?id=dfda0fb3e01450de", + "/chunks/admin.js": "/chunks/admin.js?id=920613c2b7236639", "/chunks/dashboard.js": "/chunks/dashboard.js?id=e7c6001687e641eb", "/chunks/invoices.js": "/chunks/invoices.js?id=85fd4514d3d85a71", "/chunks/subscriptions.js": "/chunks/subscriptions.js?id=9f970bdfc7583080", @@ -57,18 +57,18 @@ "/chunks/sign-up.js": "/chunks/sign-up.js?id=098d7f41b85066bf", "/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=d6193ed0b07e7957", "/chunks/create-new-password.js": "/chunks/create-new-password.js?id=d00212636148a14b", - "/chunks/settings.js": "/chunks/settings.js?id=fa7076424e651555", + "/chunks/settings.js": "/chunks/settings.js?id=f4a7bce3ff4c61a9", "/chunks/profile.js": "/chunks/profile.js?id=1217f457145491ec", "/chunks/settings-password.js": "/chunks/settings-password.js?id=b6704f4cbf14c67d", "/chunks/settings-storage.js": "/chunks/settings-storage.js?id=90ba712f3728443b", "/chunks/billing.js": "/chunks/billing.js?id=27957f2477fdd121", - "/chunks/platform.js": "/chunks/platform.js?id=863924b804b662c2", - "/chunks/files.js": "/chunks/files.js?id=823d196884eda435", - "/chunks/recent-uploads.js": "/chunks/recent-uploads.js?id=72d3b7d6c875f671", - "/chunks/my-shared-items.js": "/chunks/my-shared-items.js?id=19b49de44403b4be", - "/chunks/trash.js": "/chunks/trash.js?id=2a7999f7c6ba14cd", - "/chunks/team-folders.js": "/chunks/team-folders.js?id=b8c53410effac0d0", - "/chunks/shared-with-me.js": "/chunks/shared-with-me.js?id=47b3d9874299d8cb", + "/chunks/platform.js": "/chunks/platform.js?id=85ee6709fe4e3b7e", + "/chunks/files.js": "/chunks/files.js?id=0d4e7a1330328eae", + "/chunks/recent-uploads.js": "/chunks/recent-uploads.js?id=2362f8fa4e3392e9", + "/chunks/my-shared-items.js": "/chunks/my-shared-items.js?id=25e9d29dd3c29338", + "/chunks/trash.js": "/chunks/trash.js?id=5bc0e04ada660232", + "/chunks/team-folders.js": "/chunks/team-folders.js?id=cf60b121819ca1a5", + "/chunks/shared-with-me.js": "/chunks/shared-with-me.js?id=bdbbd7e2225a6db9", "/chunks/invitation.js": "/chunks/invitation.js?id=e3f3c2e3501c5a63", "/css/tailwind.css": "/css/tailwind.css", "/css/app.css": "/css/app.css" diff --git a/resources/js/components/Notifications/Notification.vue b/resources/js/components/Notifications/Notification.vue index 14821006..ac475417 100644 --- a/resources/js/components/Notifications/Notification.vue +++ b/resources/js/components/Notifications/Notification.vue @@ -1,69 +1,106 @@ \ No newline at end of file diff --git a/resources/js/components/Notifications/NotificationCenter.vue b/resources/js/components/Notifications/NotificationCenter.vue index 152d515c..96039ba0 100644 --- a/resources/js/components/Notifications/NotificationCenter.vue +++ b/resources/js/components/Notifications/NotificationCenter.vue @@ -3,7 +3,7 @@ @@ -39,6 +43,7 @@ diff --git a/resources/js/components/Sidebar/SidebarNavigation.vue b/resources/js/components/Sidebar/SidebarNavigation.vue index aa33004e..75aaf759 100644 --- a/resources/js/components/Sidebar/SidebarNavigation.vue +++ b/resources/js/components/Sidebar/SidebarNavigation.vue @@ -22,7 +22,7 @@
-
+
{{ notificationCount }} @@ -31,7 +31,7 @@
- +
@@ -97,7 +97,7 @@ export default { SunIcon, }, computed: { - ...mapGetters(['isVisibleNavigationBars', 'isDarkMode', 'config', 'user']), + ...mapGetters(['isVisibleNavigationBars', 'isDarkMode', 'config', 'user', 'isVisibleNotificationCenter', 'notificationCount']), navigation() { if (this.user.data.attributes.role === 'admin') { return [ @@ -140,15 +140,10 @@ export default { }, data() { return { - notificationCount: 2, isNotificationCenter: false, } }, methods: { - toggleNotificationCenter() { - this.notificationCount = 0 - this.isNotificationCenter = ! this.isNotificationCenter - }, isSection(section) { return this.$route.matched[0].name === section }, diff --git a/resources/js/store/modules/app.js b/resources/js/store/modules/app.js index 7f2665ac..1f0f3bb3 100644 --- a/resources/js/store/modules/app.js +++ b/resources/js/store/modules/app.js @@ -5,6 +5,8 @@ import router from '../../router' const defaultState = { isVisibleNavigationBars: localStorage.getItem('is_navigation_bars') !== 'false', + isVisibleNotificationCenter: false, + notificationCount: 0, isDarkMode: false, isVisibleSidebar: localStorage.getItem('file_info_visibility') === 'true' || false, itemViewType: localStorage.getItem('preview_type') || 'list', @@ -167,10 +169,18 @@ const mutations = { UPDATE_DARK_MODE_STATUS(state, val) { state.isDarkMode = val }, + UPDATE_NOTIFICATION_COUNT(state, val) { + state.notificationCount = val + }, + TOGGLE_NOTIFICATION_CENTER(state) { + state.isVisibleNotificationCenter = !state.isVisibleNotificationCenter + }, } const getters = { + isVisibleNotificationCenter: (state) => state.isVisibleNotificationCenter, isVisibleNavigationBars: (state) => state.isVisibleNavigationBars, + notificationCount: (state) => state.notificationCount, isVisibleSidebar: (state) => state.isVisibleSidebar, itemViewType: (state) => state.itemViewType, requestedPlan: (state) => state.requestedPlan, diff --git a/resources/js/store/modules/broadcasting.js b/resources/js/store/modules/broadcasting.js index d3382e8c..fe3dccd8 100644 --- a/resources/js/store/modules/broadcasting.js +++ b/resources/js/store/modules/broadcasting.js @@ -3,14 +3,15 @@ const defaultState = { } const actions = { - runConnection: ({ commit, getters }) => { + runConnection: ({ commit, getters, dispatch }) => { commit('SET_RUNNING_COMMUNICATION') - Echo.private(`test.${getters.user.data.id}`) - .listen('.Domain\\Notifications\\Events\\TestUpdate', (e) => { - console.log(e); - }); + Echo.private(`App.Users.Models.User.${getters.user.data.id}`) + .notification(() => { + // TODO: call sound + dispatch('getAppData') + }); }, } diff --git a/resources/js/store/modules/userAuth.js b/resources/js/store/modules/userAuth.js index 604c9dc7..36dd5868 100644 --- a/resources/js/store/modules/userAuth.js +++ b/resources/js/store/modules/userAuth.js @@ -18,6 +18,7 @@ const actions = { resolve(response) commit('RETRIEVE_USER', response.data) + commit('UPDATE_NOTIFICATION_COUNT', response.data.data.relationships.unreadNotifications.data.length) if (! getters.isRunningConnection) { dispatch('runConnection') @@ -172,6 +173,13 @@ const mutations = { } }) }, + PUSH_NEW_NOTIFICATION(state, notification) { + state.user.data.relationships.unreadNotifications.data.push(notification) + }, + FLUSH_NOTIFICATIONS(state) { + state.user.data.relationships.readNotifications.data = [] + state.user.data.relationships.unreadNotifications.data = [] + }, } const getters = { diff --git a/routes/channels.php b/routes/channels.php index e84d59b3..74cedfb7 100644 --- a/routes/channels.php +++ b/routes/channels.php @@ -11,8 +11,4 @@ | */ -//Broadcast::channel('App.User.{id}', fn ($user, $id) => (int) $user->id === (int) $id); - -Broadcast::channel('test.{id}', function ($user, $id) { - return true; -}); +Broadcast::channel('App.Users.Models.User.{id}', fn ($user, $id) => $user->id === $id); diff --git a/routes/user.php b/routes/user.php index 64eba556..0e8fed92 100644 --- a/routes/user.php +++ b/routes/user.php @@ -4,6 +4,9 @@ use App\Users\Controllers\Account\AccountDetailsController; use App\Users\Controllers\Account\UpdatePasswordController; use App\Users\Controllers\Account\StorageCapacityController; use App\Users\Controllers\Verification\VerifyEmailController; +use Domain\Notifications\Controllers\FlushUserNotificationsController; +use Domain\Notifications\Controllers\GetUserNotificationsController; +use Domain\Notifications\Controllers\MarkUserNotificationsAsReadController; use Domain\Transactions\Controllers\GetTransactionsController; use App\Users\Controllers\Verification\ResendVerificationEmail; use App\Users\Controllers\Authentication\CheckAccountController; @@ -22,7 +25,12 @@ Route::post('/email/verify/resend', ResendVerificationEmail::class) Route::group(['middleware' => ['auth:sanctum']], function () { // User Access Token Route::apiResource('/tokens', AccountAccessTokenController::class); - + + // Notifications + Route::post('/notifications/read', MarkUserNotificationsAsReadController::class); + Route::delete('/notifications', FlushUserNotificationsController::class); + Route::get('/notifications', GetUserNotificationsController::class); + // Account Route::patch('/settings', UpdateProfileSettingsController::class); Route::get('/transactions', GetTransactionsController::class); diff --git a/src/App/Users/Resources/UserResource.php b/src/App/Users/Resources/UserResource.php index 86e05593..c336b001 100644 --- a/src/App/Users/Resources/UserResource.php +++ b/src/App/Users/Resources/UserResource.php @@ -2,6 +2,7 @@ namespace App\Users\Resources; +use Domain\Notifications\Resources\NotificationCollection; use Domain\Folders\Resources\FolderCollection; use Illuminate\Http\Resources\Json\JsonResource; use App\Users\Actions\FormatUsageEstimatesAction; @@ -43,9 +44,11 @@ class UserResource extends JsonResource 'updated_at' => format_date($this->updated_at, 'd. M. Y'), ], 'relationships' => [ - 'settings' => new SettingsResource($this->settings), - 'favourites' => new FolderCollection($this->favouriteFolders), - 'creditCards' => new CreditCardCollection($this->creditCards), + 'readNotifications' => new NotificationCollection($this->readNotifications), + 'unreadNotifications' => new NotificationCollection($this->unreadNotifications), + 'settings' => new SettingsResource($this->settings), + 'favourites' => new FolderCollection($this->favouriteFolders), + 'creditCards' => new CreditCardCollection($this->creditCards), $this->mergeWhen($this->hasSubscription(), fn() => [ 'subscription' => new SubscriptionResource($this->subscription), ]), diff --git a/src/Domain/Notifications/Controllers/FlushUserNotificationsController.php b/src/Domain/Notifications/Controllers/FlushUserNotificationsController.php new file mode 100644 index 00000000..ba787b80 --- /dev/null +++ b/src/Domain/Notifications/Controllers/FlushUserNotificationsController.php @@ -0,0 +1,23 @@ +user()->notifications()->delete(); + + return response('Done', 204); + } +} \ No newline at end of file diff --git a/src/Domain/Notifications/Controllers/GetUserNotificationsController.php b/src/Domain/Notifications/Controllers/GetUserNotificationsController.php new file mode 100644 index 00000000..bd1f49d0 --- /dev/null +++ b/src/Domain/Notifications/Controllers/GetUserNotificationsController.php @@ -0,0 +1,16 @@ +user()->notifications + ); + } +} \ No newline at end of file diff --git a/src/Domain/Notifications/Controllers/MarkUserNotificationsAsReadController.php b/src/Domain/Notifications/Controllers/MarkUserNotificationsAsReadController.php new file mode 100644 index 00000000..b06bb832 --- /dev/null +++ b/src/Domain/Notifications/Controllers/MarkUserNotificationsAsReadController.php @@ -0,0 +1,23 @@ +user()->unreadNotifications()->update(['read_at' => now()]); + + return response('Done', 204); + } +} \ No newline at end of file diff --git a/src/Domain/Notifications/Resources/NotificationCollection.php b/src/Domain/Notifications/Resources/NotificationCollection.php new file mode 100644 index 00000000..0fc61583 --- /dev/null +++ b/src/Domain/Notifications/Resources/NotificationCollection.php @@ -0,0 +1,16 @@ + $this->collection, + ]; + } +} diff --git a/src/Domain/Notifications/Resources/NotificationResource.php b/src/Domain/Notifications/Resources/NotificationResource.php new file mode 100644 index 00000000..f95d9018 --- /dev/null +++ b/src/Domain/Notifications/Resources/NotificationResource.php @@ -0,0 +1,32 @@ + [ + 'id' => $this->id, + 'type' => $this->type, + 'attributes' => [ + 'type' => $this->data['type'], + 'title' => $this->data['title'], + 'description' => $this->data['description'], + 'action' => $this->data['action'] ?? null, + 'created_at' => format_date($this->created_at, 'd. M. Y h:i'), + 'read_at' => $this->read_at ? format_date($this->read_at, 'd. M. Y h:i') : null, + ], + ], + ]; + } +} diff --git a/src/Domain/UploadRequest/Notifications/UploadRequestFulfilledNotification.php b/src/Domain/UploadRequest/Notifications/UploadRequestFulfilledNotification.php index afafe0e8..9aae3c77 100644 --- a/src/Domain/UploadRequest/Notifications/UploadRequestFulfilledNotification.php +++ b/src/Domain/UploadRequest/Notifications/UploadRequestFulfilledNotification.php @@ -23,22 +23,16 @@ class UploadRequestFulfilledNotification extends Notification implements ShouldQ /** * Get the notification's delivery channels. - * - * @param mixed $notifiable - * @return array */ - public function via($notifiable) + public function via(mixed $notifiable): array { - return ['mail', 'database']; + return ['mail', 'database', 'broadcast']; } /** * Get the mail representation of the notification. - * - * @param mixed $notifiable - * @return \Illuminate\Notifications\Messages\MailMessage */ - public function toMail($notifiable) + public function toMail(mixed $notifiable): MailMessage { // TODO: add to language strings return (new MailMessage) @@ -59,7 +53,12 @@ class UploadRequestFulfilledNotification extends Notification implements ShouldQ 'title' => 'File Request Filled', 'description' => "Your file request for '{$this->uploadRequest->parent->name}' folder was filled successfully.", 'action' => [ - 'id' => $this->uploadRequest->id, + 'type' => 'route', + 'params' => [ + 'route' => 'Files', + 'button' => 'Show Files', + 'id' => $this->uploadRequest->id, + ], ], ]; } diff --git a/tests/Domain/Notifications/NotificationsTest.php b/tests/Domain/Notifications/NotificationsTest.php new file mode 100644 index 00000000..0f1fb42e --- /dev/null +++ b/tests/Domain/Notifications/NotificationsTest.php @@ -0,0 +1,134 @@ +hasSettings() + ->create(); + + DB::table('notifications') + ->insert([ + 'id' => Str::uuid(), + 'type' => 'Domain\UploadRequest\Notifications\UploadRequestFulfilledNotification', + 'notifiable_type' => 'App\Users\Models\User', + 'notifiable_id' => $user->id, + 'data' => json_encode([ + 'type' => 'file-request', + 'title' => 'File Request Filled', + 'description' => "Your file request for 'Documents' folder was filled successfully.", + 'action' => [ + 'type' => 'route', + 'params' => [ + 'route' => 'Files', + 'button' => 'Show Files', + 'id' => Str::uuid(), + ], + ], + ]), + 'created_at' => now(), + 'updated_at' => now(), + ]); + + $this + ->actingAs($user) + ->getJson('/api/user/notifications') + ->assertJsonFragment([ + 'type' => 'file-request', + ]) + ->assertStatus(200); + } + + /** + * @test + */ + public function it_mark_as_read_notifications() + { + $user = User::factory() + ->hasSettings() + ->create(); + + DB::table('notifications') + ->insert([ + 'id' => Str::uuid(), + 'type' => 'Domain\UploadRequest\Notifications\UploadRequestFulfilledNotification', + 'notifiable_type' => 'App\Users\Models\User', + 'notifiable_id' => $user->id, + 'data' => json_encode([ + 'type' => 'file-request', + 'title' => 'File Request Filled', + 'description' => "Your file request for 'Documents' folder was filled successfully.", + 'action' => [ + 'type' => 'route', + 'params' => [ + 'route' => 'Files', + 'button' => 'Show Files', + 'id' => Str::uuid(), + ], + ], + ]), + 'created_at' => now(), + 'updated_at' => now(), + ]); + + $this + ->actingAs($user) + ->postJson('/api/user/notifications/read') + ->assertStatus(204); + + $this->assertDatabaseHas('notifications', [ + 'read_at' => now(), + ]); + } + + /** + * @test + */ + public function it_delete_all_notifications() + { + $user = User::factory() + ->hasSettings() + ->create(); + + DB::table('notifications') + ->insert([ + 'id' => Str::uuid(), + 'type' => 'Domain\UploadRequest\Notifications\UploadRequestFulfilledNotification', + 'notifiable_type' => 'App\Users\Models\User', + 'notifiable_id' => $user->id, + 'data' => json_encode([ + 'type' => 'file-request', + 'title' => 'File Request Filled', + 'description' => "Your file request for 'Documents' folder was filled successfully.", + 'action' => [ + 'type' => 'route', + 'params' => [ + 'route' => 'Files', + 'button' => 'Show Files', + 'id' => Str::uuid(), + ], + ], + ]), + 'created_at' => now(), + 'updated_at' => now(), + ]); + + $this + ->actingAs($user) + ->deleteJson('/api/user/notifications') + ->assertStatus(204); + + $this->assertDatabaseCount('notifications', 0); + } +} \ No newline at end of file