show filtered channels, locales and customer groups by name

This commit is contained in:
Annika Wolff 2020-07-24 15:04:20 +02:00
parent c4ecf0b29b
commit 8dec3cdd14
9 changed files with 122 additions and 121 deletions

View File

@ -16,7 +16,7 @@
"cross-env": "^5.1",
"jquery": "^3.2",
"laravel-mix": "^5.0.1",
"lodash": "^4.17.4",
"lodash": "^4.17.19",
"popper.js": "^1.12",
"resolve-url-loader": "^3.1.0",
"sass": "^1.24.5",

View File

@ -15,6 +15,12 @@ class CartRuleDataGrid extends DataGrid
protected $channel = 'all';
/** @var string[] contains the keys for which extra filters to show */
protected $extraFilters = [
'channels',
'customer_groups',
];
public function __construct()
{
parent::__construct();

View File

@ -17,6 +17,12 @@ class ProductDataGrid extends DataGrid
protected $channel = 'all';
/** @var string[] contains the keys for which extra filters to render */
protected $extraFilters = [
'channels',
'locales',
];
public function __construct()
{
parent::__construct();
@ -44,15 +50,11 @@ class ProductDataGrid extends DataGrid
);
if ($this->locale !== 'all') {
$queryBuilder->where('locale', $this->locale);
$queryBuilder->where('product_flat.locale', $this->locale);
}
if ($this->channel !== 'all') {
$queryBuilder->where('channel', $this->channel);
}
if ($currentLocale = app()->getLocale()) {
$queryBuilder->where('product_flat.locale', $currentLocale);
$queryBuilder->where('product_flat.channel', $this->channel);
}
$queryBuilder->groupBy('product_flat.product_id');

View File

@ -15,6 +15,12 @@ class SliderDataGrid extends DataGrid
protected $channel = 'all';
/** @var string[] contains the keys for which extra filters to render */
protected $extraFilters = [
'channels',
'locales',
];
public function __construct()
{
parent::__construct();

View File

@ -11,39 +11,6 @@
<div class="page-header">
<div class="page-title">
<h1>{{ __('admin::app.catalog.products.title') }}</h1>
<div class="control-group">
<select class="control" id="channel-switcher" name="channel" onchange="reloadPage('channel', this.value)" >
<option value="all" {{ ! isset($channel) ? 'selected' : '' }}>
{{ __('admin::app.admin.system.all-channels') }}
</option>
@foreach (core()->getAllChannels() as $channelModel)
<option
value="{{ $channelModel->code }}" {{ (isset($channel) && ($channelModel->code) == $channel) ? 'selected' : '' }}>
{{ $channelModel->name }}
</option>
@endforeach
</select>
</div>
<div class="control-group">
<select class="control" id="locale-switcher" name="locale" onchange="reloadPage('locale', this.value)" >
<option value="all" {{ ! isset($locale) ? 'selected' : '' }}>
{{ __('admin::app.admin.system.all-locales') }}
</option>
@foreach (core()->getAllLocales() as $localeModel)
<option
value="{{ $localeModel->code }}" {{ (isset($locale) && ($localeModel->code) == $locale) ? 'selected' : '' }}>
{{ $localeModel->name }}
</option>
@endforeach
</select>
</div>
</div>
<div class="page-action">

View File

@ -14,38 +14,6 @@
</div>
<div class="page-action">
<div class="control-group">
<select class="control" id="channel-switcher" name="channel" onchange="reloadPage('channel', this.value)" >
<option value="all" {{ ! isset($channel) ? 'selected' : '' }}>
{{ __('admin::app.admin.system.all-channels') }}
</option>
@foreach (core()->getAllChannels() as $channelModel)
<option
value="{{ $channelModel->id }}" {{ (isset($channel) && ($channelModel->id) == $channel) ? 'selected' : '' }}>
{{ $channelModel->name }}
</option>
@endforeach
</select>
</div>
<div class="control-group">
<select class="control" id="customer-group-switcher" name="customer_group" onchange="reloadPage('customer_group', this.value)" >
<option value="all" {{ ! isset($locale) ? 'selected' : '' }}>
{{ __('admin::app.admin.system.all-customer-groups') }}
</option>
@foreach (core()->getAllCustomerGroups() as $customerGroupModel)
<option
value="{{ $customerGroupModel->id }}" {{ (isset($customerGroupModel) && ($customerGroupModel->id) == $customer_group) ? 'selected' : '' }}>
{{ $customerGroupModel->name }}
</option>
@endforeach
</select>
</div>
<a href="{{ route('admin.cart-rules.create') }}" class="btn btn-lg btn-primary">
{{ __('admin::app.promotions.cart-rules.add-title') }}
</a>

View File

@ -14,41 +14,6 @@
<div class="page-header">
<div class="page-title">
<h1>{{ __('admin::app.settings.sliders.title') }}</h1>
<div class="control-group">
<select class="control" id="channel-switcher" name="channel" onchange="reloadPage('channel', this.value)" >
<option value="all" {{ ! isset($channel) ? 'selected' : '' }}>
{{ __('admin::app.admin.system.all-channels') }}
</option>
@foreach (core()->getAllChannels() as $channelModel)
<option
value="{{ $channelModel->code }}" {{ (isset($channel) && ($channelModel->code) == $channel) ? 'selected' : '' }}>
{{ $channelModel->name }}
</option>
@endforeach
</select>
</div>
<div class="control-group">
<select class="control" id="locale-switcher" name="locale" onchange="reloadPage('locale', this.value)" >
<option value="all" {{ ! isset($locale) ? 'selected' : '' }}>
{{ __('admin::app.admin.system.all-locales') }}
</option>
@foreach (core()->getAllLocales() as $localeModel)
<option
value="{{ $localeModel->code }}" {{ (isset($locale) && ($localeModel->code) == $locale) ? 'selected' : '' }}>
{{ $localeModel->name }}
</option>
@endforeach
</select>
</div>
</div>
<div class="page-action">

View File

@ -11,7 +11,7 @@ abstract class DataGrid
*
* @var int
*/
protected $index = null;
protected $index;
/**
* Default sort order of datagrid
@ -164,6 +164,9 @@ abstract class DataGrid
10 => "lock",
];
/** @var string[] contains the keys for which extra filters to show */
protected $extraFilters = [];
abstract public function prepareQueryBuilder();
abstract public function addColumns();
@ -230,7 +233,7 @@ abstract class DataGrid
{
$this->fireEvent('add.column.before.' . $column['index']);
array_push($this->columns, $column);
$this->columns[] = $column;
$this->setCompleteColumnDetails($column);
@ -244,7 +247,7 @@ abstract class DataGrid
*/
public function setCompleteColumnDetails($column)
{
array_push($this->completeColumnDetails, $column);
$this->completeColumnDetails[] = $column;
}
/**
@ -298,7 +301,7 @@ abstract class DataGrid
$this->fireEvent('mass.action.before.' . $eventName);
array_push($this->massActions, $massAction);
$this->massActions[] = $massAction;
$this->enableMassAction = true;
@ -313,7 +316,7 @@ abstract class DataGrid
$parsedUrl = $this->parseUrl();
foreach ($parsedUrl as $key => $value) {
if ($key == 'locale') {
if ($key === 'locale') {
if (! is_array($value)) {
unset($parsedUrl[$key]);
}
@ -376,7 +379,7 @@ abstract class DataGrid
$columnType = $this->findColumnType($key)[0] ?? null;
$columnName = $this->findColumnType($key)[1] ?? null;
if ($key == "sort") {
if ($key === "sort") {
$count_keys = count(array_keys($info));
if ($count_keys > 1) {
@ -389,7 +392,7 @@ abstract class DataGrid
$columnName[1],
array_values($info)[0]
);
} elseif ($key == "search") {
} elseif ($key === "search") {
$count_keys = count(array_keys($info));
if ($count_keys > 1) {
@ -544,6 +547,17 @@ abstract class DataGrid
$this->prepareQueryBuilder();
$necessaryExtraFilters = [];
if (in_array('channels', $this->extraFilters)) {
$necessaryExtraFilters['channels'] = core()->getAllChannels();
}
if (in_array('locales', $this->extraFilters)) {
$necessaryExtraFilters['locales'] = core()->getAllLocales();
}
if (in_array('customer_groups', $this->extraFilters)) {
$necessaryExtraFilters['customer_groups'] = core()->getAllCustomerGroups();
}
return view('ui::datagrid.table')->with('results', [
'records' => $this->getCollection(),
'columns' => $this->completeColumnDetails,
@ -553,7 +567,8 @@ abstract class DataGrid
'enableMassActions' => $this->enableMassAction,
'enableActions' => $this->enableAction,
'paginated' => $this->paginate,
'norecords' => trans('ui::app.datagrid.no-records'),
'norecords' => __('ui::app.datagrid.no-records'),
'extraFilters' => $necessaryExtraFilters
]);
}

View File

@ -24,6 +24,65 @@
</div>
<div class="filter-right">
@if (isset($results['extraFilters']['channels']))
<div class="dropdown-filters per-page">
<div class="control-group">
<select class="control" id="channel-switcher" name="channel"
onchange="reloadPage('channel', this.value)">
<option value="all" {{ ! isset($channel) ? 'selected' : '' }}>
{{ __('admin::app.admin.system.all-channels') }}
</option>
@foreach ($results['extraFilters']['channels'] as $channelModel)
<option
value="{{ $channelModel->code }}"
{{ (isset($channel) && ($channelModel->code) == $channel) ? 'selected' : '' }}>
{{ $channelModel->name }}
</option>
@endforeach
</select>
</div>
</div>
@endif
@if (isset($results['extraFilters']['locales']))
<div class="dropdown-filters per-page">
<div class="control-group">
<select class="control" id="locale-switcher" name="locale"
onchange="reloadPage('locale', this.value)">
<option value="all" {{ ! isset($locale) ? 'selected' : '' }}>
{{ __('admin::app.admin.system.all-locales') }}
</option>
@foreach ($results['extraFilters']['locales'] as $localeModel)
<option
value="{{ $localeModel->code }}" {{ (isset($locale) && ($localeModel->code) == $locale) ? 'selected' : '' }}>
{{ $localeModel->name }}
</option>
@endforeach
</select>
</div>
</div>
@endif
@if (isset($results['extraFilters']['customer_groups']))
<div class="dropdown-filters per-page">
<div class="control-group">
<select class="control" id="customer-group-switcher" name="customer_group"
onchange="reloadPage('customer_group', this.value)">
<option value="all" {{ ! isset($customer_group) ? 'selected' : '' }}>
{{ __('admin::app.admin.system.all-customer-groups') }}
</option>
@foreach ($results['extraFilters']['customer_groups'] as $customerGroupModel)
<option
value="{{ $customerGroupModel->id }}"
{{ (isset($customer_group) && ($customerGroupModel->id) == $customer_group) ? 'selected' : '' }}>
{{ $customerGroupModel->name }}
</option>
@endforeach
</select>
</div>
</div>
@endif
<div class="dropdown-filters per-page">
<div class="control-group">
<label class="per-page-label" for="perPage">
@ -170,12 +229,14 @@
<div class="filtered-tags">
<span class="filter-tag" v-if="filters.length > 0" v-for="filter in filters"
style="text-transform: capitalize;">
<span v-if="filter.column == 'sort'">@{{ filter.label }}</span>
<span v-else-if="filter.column == 'search'">Search</span>
<span v-else-if="filter.column == 'perPage'">perPage</span>
<span v-if="filter.column == 'perPage'">perPage</span>
<span v-else>@{{ filter.label }}</span>
<span class="wrapper">
<span class="wrapper" v-if="filter.prettyValue">
@{{ filter.prettyValue }}
<span class="icon cross-icon" v-on:click="removeFilter(filter)"></span>
</span>
<span class="wrapper" v-else>
@{{ decodeURIComponent(filter.val) }}
<span class="icon cross-icon" v-on:click="removeFilter(filter)"></span>
</span>
@ -237,6 +298,7 @@
numberConditionSelect: false,
datetimeConditionSelect: false,
perPage: 10,
extraFilters: @json($results['extraFilters']),
}
},
@ -332,7 +394,7 @@
if (this.type === 'string' && this.stringValue !== null) {
this.formURL(this.columnOrAlias, this.stringCondition, encodeURIComponent(this.stringValue), label)
} else if (this.type == 'number') {
} else if (this.type === 'number') {
indexConditions = true;
if (this.filterIndex === this.columnOrAlias
@ -636,12 +698,21 @@
break;
case "channel":
obj.label = "Channel";
if ('channels' in this.extraFilters) {
obj.prettyValue = this.extraFilters['channels'].find(channel => channel.code === obj.val).name
}
break;
case "locale":
obj.label = "Locale";
if ('locales' in this.extraFilters) {
obj.prettyValue = this.extraFilters['locales'].find(locale => locale.code === obj.val).name
}
break;
case "customer_group":
obj.label = "Customer Group";
if ('customer_groups' in this.extraFilters) {
obj.prettyValue = this.extraFilters['customer_groups'].find(customer_group => customer_group.id === parseInt(obj.val, 10)).name
}
break;
case "sort":
for (let colIndex in this.columns) {
@ -657,7 +728,7 @@
obj.label = this.columns[colIndex].label;
if (this.columns[colIndex].type === 'boolean') {
console.log('obj.val',obj.val);
console.log('obj.val', obj.val);
if (obj.val === '1') {
obj.val = '{{ __('ui::app.datagrid.true') }}';
} else {
@ -671,6 +742,7 @@
if (obj.column !== undefined && obj.val !== undefined) {
this.filters.push(obj);
console.log('pushed');
}
obj = {};