From 9f55877f9a4fcc9a8617009c17746995bd01d853 Mon Sep 17 00:00:00 2001 From: devansh bawari Date: Thu, 3 Jun 2021 14:35:47 +0530 Subject: [PATCH] Some More Refinement To Datagrid --- packages/Webkul/Ui/src/DataGrid/DataGrid.php | 7 +- .../Traits/ProvideExceptionHandler.php | 65 +++++++++++++++++++ .../Ui/src/Exceptions/ActionKeyException.php | 9 +++ .../Ui/src/Exceptions/ColumnKeyException.php | 9 +++ 4 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 packages/Webkul/Ui/src/DataGrid/Traits/ProvideExceptionHandler.php create mode 100755 packages/Webkul/Ui/src/Exceptions/ActionKeyException.php create mode 100755 packages/Webkul/Ui/src/Exceptions/ColumnKeyException.php diff --git a/packages/Webkul/Ui/src/DataGrid/DataGrid.php b/packages/Webkul/Ui/src/DataGrid/DataGrid.php index 7176503a8..99f98857c 100644 --- a/packages/Webkul/Ui/src/DataGrid/DataGrid.php +++ b/packages/Webkul/Ui/src/DataGrid/DataGrid.php @@ -6,10 +6,11 @@ use Illuminate\Support\Str; use Illuminate\Support\Facades\Event; use Webkul\Ui\DataGrid\Traits\ProvideBouncer; use Webkul\Ui\DataGrid\Traits\ProvideCollection; +use Webkul\Ui\DataGrid\Traits\ProvideExceptionHandler; abstract class DataGrid { - use ProvideBouncer, ProvideCollection; + use ProvideBouncer, ProvideCollection, ProvideExceptionHandler; /** * Set index columns, ex: id. @@ -237,6 +238,8 @@ abstract class DataGrid */ public function addColumn($column) { + $this->checkRequiredColumnKeys($column); + $this->fireEvent('add.column.before.' . $column['index']); $this->columns[] = $column; @@ -281,6 +284,8 @@ abstract class DataGrid */ public function addAction($action, $specialPermission = false) { + $this->checkRequiredActionKeys($action); + $this->checkPermissions($action, $specialPermission, function ($action, $eventName) { $this->fireEvent('action.before.' . $eventName); diff --git a/packages/Webkul/Ui/src/DataGrid/Traits/ProvideExceptionHandler.php b/packages/Webkul/Ui/src/DataGrid/Traits/ProvideExceptionHandler.php new file mode 100644 index 000000000..2c2dbcbdf --- /dev/null +++ b/packages/Webkul/Ui/src/DataGrid/Traits/ProvideExceptionHandler.php @@ -0,0 +1,65 @@ +checkRequiredKeys($this->requiredColumnKeys, $column, function ($missingKeys) { + $message = 'Missing Keys: ' . implode(', ', $missingKeys); + + throw new \Webkul\Ui\Exceptions\ColumnKeyException($message); + }); + } + + /** + * This will check the keys which are needed for action. + * + * @param array $action + * @return void|\Webkul\Ui\Exceptions\ActionKeyException + */ + public function checkRequiredActionKeys($action) + { + $this->checkRequiredKeys($this->requiredActionKeys, $action, function ($missingKeys) { + $message = 'Missing Keys: ' . implode(', ', $missingKeys); + + throw new \Webkul\Ui\Exceptions\ActionKeyException($message); + }); + } + + /** + * Check required keys. + * + * @param array $requiredKeys + * @return void|\Closure + */ + public function checkRequiredKeys($requiredKeys, $actualKeys, $operation) + { + $requiredKeys = array_flip($requiredKeys); + + $missingKeys = array_flip(array_diff_key($requiredKeys, $actualKeys)); + + return ! empty($missingKeys) ? $operation($missingKeys) : null; + } +} diff --git a/packages/Webkul/Ui/src/Exceptions/ActionKeyException.php b/packages/Webkul/Ui/src/Exceptions/ActionKeyException.php new file mode 100755 index 000000000..eb5627bf4 --- /dev/null +++ b/packages/Webkul/Ui/src/Exceptions/ActionKeyException.php @@ -0,0 +1,9 @@ +