Skip to content

Commit

Permalink
Merge branch 'dev' of https://github.com/microweber/microweber into dev
Browse files Browse the repository at this point in the history
# Conflicts:
#	src/MicroweberPackages/Product/resources/views/admin/product/livewire/table-filters/tags.blade.php
  • Loading branch information
raikov committed Sep 20, 2022
2 parents 63d3b7a + 3377673 commit bfe67e8
Show file tree
Hide file tree
Showing 90 changed files with 2,162 additions and 945 deletions.
10 changes: 7 additions & 3 deletions src/MicroweberPackages/Admin/AdminServiceProvider.php
Expand Up @@ -13,19 +13,23 @@

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
use Livewire\Livewire;
use MicroweberPackages\Admin\Http\Livewire\ProductsAutoComplete;
use MicroweberPackages\Admin\Http\Livewire\UsersAutoComplete;
use MicroweberPackages\Livewire\Http\Livewire\Admin\AutoCompleteComponent;

class AdminServiceProvider extends ServiceProvider
{
public function register()
{
View::addNamespace('admin', __DIR__.'/resources/views');

$this->loadRoutesFrom(__DIR__ . '/routes/admin.php');
// $this->loadMigrationsFrom(__DIR__ . '/database/');
}

public function boot()
{
View::addNamespace('admin', __DIR__ . '/resources/views');
Livewire::component('admin-auto-complete', AutoCompleteComponent::class);
Livewire::component('admin-users-autocomplete', UsersAutoComplete::class);
Livewire::component('admin-tags-autocomplete', ProductsAutoComplete::class);
}
}
139 changes: 139 additions & 0 deletions src/MicroweberPackages/Admin/Http/Livewire/AutoCompleteComponent.php
@@ -0,0 +1,139 @@
<?php

namespace MicroweberPackages\Admin\Http\Livewire;

use Livewire\Component;

class AutoCompleteComponent extends Component
{
/**
* The eloquent laravel model
* @var
*/
public $model;

/**
* Selected item when we have single selection autocomplete
* @var string
*/
public $selectedItem;

/**
* Selected item key when we fire a event with key and value
* @var string
*/
public $selectedItemKey = 'auto_complete_id';

/**
* The model query
* @var
*/
public $query;

/**
* Sended data to view
* @var
*/
public $data;

/**
* Show/Hide dropdown on view
* @var bool
*/
public $showDropdown = false;


/**
* Default view of single selection autocomplete
* @var string
*/
public string $view = 'admin::livewire.auto-complete';


/**
* Placeholder text on ui
* @var string
*/
public string $placeholder = 'Type to search...';

/**
* Searching text on ui
* @var string
*/
public string $searchingText = 'Searching...';

/**
* @return void
*/
public function mount()
{
if ($this->selectedItem) {
$this->refreshQueryData();
}
}

/**
* @return void
*/
public function updatedQuery()
{
$this->selectedItem = false;
$this->refreshQueryData();
}

/**
* Set your model query logic to search results
* @return void
*/
public function refreshQueryData()
{
//
}

/**
* @return void
*/
public function closeDropdown()
{
$this->showDropdown = false;
}

/**
* @return void
*/
public function showDropdown()
{
$this->showDropdown = true;
}

/**
* @return void
*/
public function resetProperties()
{
$this->query = '';
$this->data = false;
}

/**
* When we apply a one selection item
* @param string $item
* @return void
*/
public function selectItem(string $item)
{
$this->selectedItem = $item;
$this->refreshQueryData();
$this->emitSelf('$refresh');

$this->emit('autoCompleteSelectItem', $this->selectedItemKey, $this->selectedItem);
}

/**
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
*/
public function render()
{
return view($this->view);
}
}
@@ -0,0 +1,33 @@
<?php

namespace MicroweberPackages\Admin\Http\Livewire;


class AutoCompleteMultipleItemsComponent extends AutoCompleteComponent
{
/**
* Array of multiple selected items
* @var array
*/
public $selectedItems = [];

/**
* Default view of multiple selection autocomplete
* @var string
*/
public string $view = 'admin::livewire.auto-complete-multiple-items';

/**
* When we apply a multiple selections
* @param $items
* @return void
*/
public function updatedSelectedItems($items)
{
$this->refreshQueryData();
$this->emitSelf('$refresh');
$this->emit('autoCompleteSelectItem', $this->selectedItemKey, $this->selectedItems);
$this->closeDropdown();
}

}
38 changes: 38 additions & 0 deletions src/MicroweberPackages/Admin/Http/Livewire/TagsAutoComplete.php
@@ -0,0 +1,38 @@
<?php

namespace MicroweberPackages\Admin\Http\Livewire;

use MicroweberPackages\Tag\Model\Tag;

class TagsAutoComplete extends AutoCompleteMultipleItemsComponent
{
public $model = Tag::class;
public $selectedItemKey = 'tags';
public string $placeholder = 'Type to search tags...';

public function refreshQueryData()
{
$this->closeDropdown();

$query = $this->model::query();

$keyword = trim($this->query);

if (!empty($keyword)) {
$query->where('slug', 'like', '%' . $keyword . '%');
$query->orWhere('name', 'like', '%' . $keyword . '%');
}

$query->limit(30);

$get = $query->get();

if ($get != null) {
$this->showDropdown();
$this->data = [];
foreach ($get as $item) {
$this->data[] = ['key'=>$item->slug, 'value'=>$item->name];
}
}
}
}
51 changes: 51 additions & 0 deletions src/MicroweberPackages/Admin/Http/Livewire/UsersAutoComplete.php
@@ -0,0 +1,51 @@
<?php

namespace MicroweberPackages\Admin\Http\Livewire;

use MicroweberPackages\User\Models\User;

class UsersAutoComplete extends AutoCompleteComponent
{
public $model = User::class;
public $selectedItemKey = 'userId';
public string $placeholder = 'Type to search users...';

public function refreshQueryData()
{
$this->closeDropdown();

$query = $this->model::query();

if ($this->selectedItem > 0) {
$query->where('id', $this->selectedItem);
$query->limit(1);
$get = $query->first();
if ($get != null) {
$this->data = [];
$this->showDropdown = true;
$this->query = $get->displayName() . ' (#'.$get->id.')';
}
return;
}

$keyword = trim($this->query);

if (!empty($keyword)) {
$query->where('first_name', 'like', '%' . $keyword . '%');
$query->orWhere('last_name', 'like', '%' . $keyword . '%');
$query->orWhere('email', 'like', '%' . $keyword . '%');
}

$query->limit(200);

$get = $query->get();

if ($get != null) {
$this->showDropdown();
$this->data = [];
foreach ($get as $item) {
$this->data[] = ['key'=>$item->id, 'value'=>$item->displayName() . ' (#'.$item->id.')'];
}
}
}
}
@@ -0,0 +1,29 @@
<div class="">
<input class="form-control"
type="search"
wire:model.debounce.500ms="query"
wire:keydown.escape="resetProperties"
wire:keydown.enter="refreshQueryData"
wire:click="refreshQueryData"
wire:blur="closeDropdown"

placeholder="{{$placeholder}}">

<div wire:loading wire:target="query">
{{$searchingText}}
</div>

@if($showDropdown)
<ul class="list-group position-absolute" style="z-index: 200;max-height: 300px;overflow-x:hidden; overflow-y: scroll;">
@if(!empty($data))
@foreach($data as $item)
<li class="list-group-item list-group-item-action cursor-pointer">
<input class="form-check-input me-1" type="checkbox" wire:model="selectedItems" value="{{ $item['key'] }}" id="checkbox-{{ $item['key'] }}">
<label class="form-check-label stretched-link" for="checkbox-{{ $item['key'] }}">{{ $item['value'] }}</label>
</li>
@endforeach
@endif
</ul>
@endif

</div>
@@ -0,0 +1,28 @@
<div class="">
<input class="form-control"
type="search"
wire:model.debounce.500ms="query"
wire:keydown.escape="resetProperties"
wire:keydown.enter="refreshQueryData"
wire:click="refreshQueryData"
wire:blur="closeDropdown"

placeholder="{{$placeholder}}">

<div wire:loading wire:target="query">
{{$searchingText}}
</div>

@if($showDropdown)
<ul class="list-group position-absolute" style="z-index: 200;max-height: 300px;overflow-x:hidden; overflow-y: scroll;">
@if(!empty($data))
@foreach($data as $item)
<li class="list-group-item list-group-item-action cursor-pointer" wire:click="selectItem('{{$item['key']}}')">
{{ $item['value'] }}
</li>
@endforeach
@endif
</ul>
@endif

</div>
3 changes: 3 additions & 0 deletions src/MicroweberPackages/Content/ContentServiceProvider.php
Expand Up @@ -4,9 +4,11 @@

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
use Livewire\Livewire;
use MicroweberPackages\Content\TranslateTables\TranslateContent;
use MicroweberPackages\Content\TranslateTables\TranslateContentFields;
use MicroweberPackages\Database\Observers\BaseModelObserver;
use MicroweberPackages\Content\Http\Livewire\ContentBulkOptions;

/**
* Class ConfigSaveServiceProvider
Expand All @@ -27,6 +29,7 @@ public function boot()
Content::observe(BaseModelObserver::class);
// Content::observe(CreatedByObserver::class);

Livewire::component('admin-content-bulk-options', ContentBulkOptions::class);
View::addNamespace('content', __DIR__ . DS . 'resources' . DS . 'views');

$this->loadMigrationsFrom(__DIR__ . DS . 'migrations');
Expand Down
@@ -1,6 +1,6 @@
<?php

namespace MicroweberPackages\Product\Http\Livewire\Admin;
namespace MicroweberPackages\Content\Http\Livewire;

use Livewire\Component;
use MicroweberPackages\Content\Content;
Expand Down Expand Up @@ -117,7 +117,7 @@ public function multipleDeleteExecute()

public function render()
{
return view('livewire::livewire.content-bulk-options');
return view('content::admin.livewire.content-bulk-options');
}
}

0 comments on commit bfe67e8

Please sign in to comment.