Skip to content

Commit c999123

Browse files
committed
Allow for bookmarks of non-bookmark entities
1 parent 2abe0e1 commit c999123

4 files changed

Lines changed: 34 additions & 2 deletions

File tree

Component/Grid/GridViewModel.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,13 @@ public function getJsData(): array
153153
$columns = $this->getColumns();
154154
$stateData = $this->getState()->toArray();
155155
if (empty($stateData['activeColumns'])) {
156+
$columnsData = [];
156157
foreach ($columns as $column) {
158+
$columnsData[$column->getCode()] = ['visible' => 1];
157159
$stateData['activeColumns'][] = $column->getCode();
158160
}
161+
162+
$this->getState()->saveBookmarkData(['columns' => $columnsData]);
159163
}
160164

161165
return [

Grid/BookmarkLoader.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,19 @@
66
use Magento\Framework\Serialize\SerializerInterface;
77
use Magento\Ui\Api\BookmarkManagementInterface;
88
use Magento\Ui\Api\BookmarkRepositoryInterface;
9+
use Magento\Ui\Api\Data\BookmarkInterfaceFactory as BookmarkFactory;
910
use Magento\Ui\Api\Data\BookmarkInterface;
1011
use Magento\Ui\Api\Data\BookmarkSearchResultsInterface;
12+
use Magento\Backend\Model\Auth\Session as AdminSession;
1113

1214
class BookmarkLoader
1315
{
1416
public function __construct(
1517
private BookmarkManagementInterface $bookmarkManagement,
1618
private BookmarkRepositoryInterface $bookmarkRepository,
19+
private BookmarkFactory $bookmarkFactory,
1720
private SerializerInterface $serializer,
21+
private AdminSession $adminSession,
1822
) {
1923
}
2024

@@ -57,4 +61,24 @@ public function saveBookmark(BookmarkInterface $bookmark, array $data, string $i
5761
$bookmark->setConfig($this->serializer->serialize($config));
5862
$this->bookmarkRepository->save($bookmark);
5963
}
64+
65+
public function createBookmark(string $namespace, array $data, string $identifier = 'default'): void
66+
{
67+
$config = [
68+
'views' => [
69+
$identifier => [
70+
'data' => $data,
71+
]
72+
]
73+
];
74+
75+
$bookmark = $this->bookmarkFactory->create();
76+
$bookmark->setIdentifier($identifier);
77+
$bookmark->setNamespace($namespace);
78+
$bookmark->setCurrent(true);
79+
$bookmark->setTitle('Default');
80+
$bookmark->setUserId($this->adminSession->getUser()->getId());
81+
$bookmark->setConfig($this->serializer->serialize($config));
82+
$this->bookmarkRepository->save($bookmark);
83+
}
6084
}

Grid/ColumnLoader.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,7 @@ public function getColumnsFromNamespace(string $namespace): array
7272
return [];
7373
}
7474

75-
$positions = $currentBookmark['data']['positions'];
76-
75+
$positions = $currentBookmark['data']['positions'] ?? [];
7776

7877
$columns = [];
7978
foreach ($currentBookmark['data']['columns'] as $columnName => $columnData) {

Grid/State.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,10 @@ public function setActiveColumns(array $columns): void
245245
$columnData['visible'] = (int)in_array($columnName, $columns);
246246
$columnsData[$columnName] = $columnData;
247247
}
248+
} else {
249+
foreach ($columns as $columnName => $columnData) {
250+
$columnsData[$columnName] = ['visible' => true];
251+
}
248252
}
249253

250254
$this->saveBookmarkData(['columns' => $columnsData]);
@@ -284,6 +288,7 @@ public function saveBookmarkData(array $bookmarkData): void
284288
try {
285289
$this->bookmarkLoader->saveBookmark($this->getBookmark(), $bookmarkData);
286290
} catch (NoSuchEntityException $e) {
291+
$this->bookmarkLoader->createBookmark($this->namespace, $bookmarkData);
287292
}
288293
}
289294

0 commit comments

Comments
 (0)