starred in list
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
/**LICENSE**/
|
||||
|
||||
namespace Espo\Core\Select\Applier\AdditionalAppliers;
|
||||
|
||||
use Espo\Core\Select\Applier\AdditionalApplier;
|
||||
use Espo\Core\Select\SearchParams;
|
||||
use Espo\Core\Utils\Metadata;
|
||||
use Espo\Entities\StarSubscription;
|
||||
use Espo\Entities\User;
|
||||
use Espo\ORM\Query\Part\Expression as Expr;
|
||||
use Espo\ORM\Query\SelectBuilder;
|
||||
|
||||
/**
|
||||
* @noinspection PhpUnused
|
||||
*/
|
||||
class IsStarred implements AdditionalApplier
|
||||
{
|
||||
public function __construct(
|
||||
private string $entityType,
|
||||
private User $user,
|
||||
private Metadata $metadata,
|
||||
) {}
|
||||
|
||||
public function apply(SelectBuilder $queryBuilder, SearchParams $searchParams): void
|
||||
{
|
||||
if (!$this->metadata->get("scopes.$this->entityType.stars")) {
|
||||
return;
|
||||
}
|
||||
|
||||
$queryBuilder
|
||||
->select(Expr::isNotNull(Expr::column('starSubscription.id')), 'isStarred')
|
||||
->leftJoin(StarSubscription::ENTITY_TYPE, 'starSubscription', [
|
||||
'userId' => $this->user->getId(),
|
||||
'entityType' => $this->entityType,
|
||||
'entityId:' => 'id',
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"selectApplierClassNameList": [
|
||||
"Espo\\Core\\Select\\Applier\\AdditionalAppliers\\IsStarred"
|
||||
]
|
||||
}
|
||||
@@ -51,10 +51,11 @@
|
||||
|
||||
<div class="list list-expanded">
|
||||
<ul class="list-group">
|
||||
{{#each rowList}}
|
||||
<li data-id="{{./this}}" class="list-group-item list-row">
|
||||
{{{var this ../this}}}
|
||||
</li>
|
||||
{{#each rowDataList}}
|
||||
<li
|
||||
data-id="{{id}}"
|
||||
class="list-group-item list-row"
|
||||
>{{{var id ../this}}}</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
||||
|
||||
@@ -211,10 +211,11 @@
|
||||
</thead>
|
||||
{{/if}}
|
||||
<tbody>
|
||||
{{#each rowList}}
|
||||
<tr data-id="{{./this}}" class="list-row">
|
||||
{{{var this ../this}}}
|
||||
</tr>
|
||||
{{#each rowDataList}}
|
||||
<tr
|
||||
data-id="{{id}}"
|
||||
class="list-row{{#if isStarred}} starred{{/if}}"
|
||||
>{{{var id ../this}}}</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@@ -84,7 +84,7 @@ class ListTreeRecordView extends ListRecordView {
|
||||
data.showRootMenu = false;
|
||||
}
|
||||
|
||||
data.noData = data.createDisabled && !data.rowList.length && !data.showRoot;
|
||||
data.noData = data.createDisabled && !data.rowDataList.length && !data.showRoot;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
@@ -1000,6 +1000,16 @@ class ListRecordView extends View {
|
||||
|
||||
const noDataDisabled = this.noDataDisabled || this._renderEmpty;
|
||||
|
||||
const rowDataList = this.rowList ?
|
||||
this.rowList.map(id => {
|
||||
return {
|
||||
id: id,
|
||||
isStarred: this.hasStars && this.collection.get(id) ?
|
||||
this.collection.get(id).attributes.isStarred :
|
||||
false,
|
||||
};
|
||||
}) : [];
|
||||
|
||||
return {
|
||||
scope: this.scope,
|
||||
collectionLength: this.collection.models.length,
|
||||
@@ -1013,7 +1023,8 @@ class ListRecordView extends View {
|
||||
moreCount: moreCount,
|
||||
checkboxes: this.checkboxes,
|
||||
massActionDataList: this.getMassActionDataList(),
|
||||
rowList: this.rowList,
|
||||
rowList: this.rowList, // For bc.
|
||||
rowDataList: rowDataList,
|
||||
topBar: topBar,
|
||||
checkAllResultDisabled: checkAllResultDisabled,
|
||||
buttonList: this.buttonList,
|
||||
@@ -2019,6 +2030,12 @@ class ListRecordView extends View {
|
||||
this.checkboxes = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {boolean}
|
||||
*/
|
||||
this.hasStars = this.getMetadata().get(`scopes.${this.entityType}.stars`) || false;
|
||||
|
||||
if (
|
||||
this.getUser().isPortal() &&
|
||||
!this.portalLayoutDisabled &&
|
||||
@@ -2951,6 +2968,11 @@ class ListRecordView extends View {
|
||||
buildRows(callback) {
|
||||
this.checkedList = [];
|
||||
|
||||
/**
|
||||
* @internal
|
||||
* @type {string[]}
|
||||
* @private
|
||||
*/
|
||||
this.rowList = [];
|
||||
|
||||
if (this.collection.length <= 0) {
|
||||
|
||||
@@ -1247,6 +1247,32 @@ section {
|
||||
}
|
||||
}
|
||||
|
||||
.list > {
|
||||
table > tbody {
|
||||
> tr.list-row.starred {
|
||||
td {
|
||||
//background-color: var(--warning-bg);
|
||||
}
|
||||
|
||||
.cell[data-name="name"] {
|
||||
&:has(> a.link) {
|
||||
&::before {
|
||||
font-family: 'Font Awesome 5 Free';
|
||||
font-weight: 900;
|
||||
content: "\f005";
|
||||
font-size: 10px;
|
||||
padding-right: 4px;
|
||||
top: 3px;
|
||||
position: relative;
|
||||
color: var(--state-warning-text);
|
||||
float: left;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.panel.dashlet > .panel-body > .list-container > .list > .list-group {
|
||||
> li.list-group-item:last-child {
|
||||
border-bottom-width: 1px;
|
||||
|
||||
Reference in New Issue
Block a user