UX improvements in table editor
This commit is contained in:
@@ -123,20 +123,36 @@ class TableEditController extends Controller
|
||||
|
||||
$input = objBag($request->all(), false);
|
||||
|
||||
$resp = null;
|
||||
$code = 200;
|
||||
|
||||
try {
|
||||
$code = 200;
|
||||
switch ($input->action) {
|
||||
case 'row.update':
|
||||
$data = (object)$input->data;
|
||||
$resp = $changeset->rowUpdate($data);
|
||||
break;
|
||||
|
||||
case 'row.update-many':
|
||||
$newVals = $input->data;
|
||||
$updated = [];
|
||||
foreach ($newVals as $rowUpdate) {
|
||||
$r = $changeset->rowUpdate($rowUpdate);
|
||||
$updated[$r->_id] = $r;
|
||||
}
|
||||
$resp = $updated;
|
||||
break;
|
||||
|
||||
case 'row.remove':
|
||||
$isNew = $changeset->isNewRow($input->id);
|
||||
$changeset->rowRemove($input->id);
|
||||
$resp = $isNew ? null : $changeset->fetchAndTransformRow($input->id);
|
||||
break;
|
||||
|
||||
case 'rows.remove-empty-new':
|
||||
$changeset->removeEmptyNewRows();
|
||||
break;
|
||||
|
||||
case 'row.restore':
|
||||
$changeset->rowRestore($input->id);
|
||||
$resp = $changeset->fetchAndTransformRow($input->id);
|
||||
@@ -144,13 +160,6 @@ class TableEditController extends Controller
|
||||
|
||||
case 'rows.add':
|
||||
$changeset->addBlankRows($input->count);
|
||||
|
||||
// rows.add is sent via a form
|
||||
if ($input->has('redirect')) {
|
||||
return redirect($input->redirect);
|
||||
} else {
|
||||
$resp = null;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'rows.add-csv':
|
||||
@@ -159,13 +168,6 @@ class TableEditController extends Controller
|
||||
} catch (\Exception $e) {
|
||||
return $this->backWithErrors(['data' => $e->getMessage()]);
|
||||
}
|
||||
|
||||
// rows.add-csv is sent via a form
|
||||
if ($input->has('redirect')) {
|
||||
return redirect($input->redirect);
|
||||
} else {
|
||||
$resp = null;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'col.update':
|
||||
@@ -190,7 +192,6 @@ class TableEditController extends Controller
|
||||
|
||||
case 'col.sort':
|
||||
$changeset->setColOrder($input->order);
|
||||
$resp = null;
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -204,6 +205,11 @@ class TableEditController extends Controller
|
||||
|
||||
$this->storeChangeset($changeset);
|
||||
|
||||
// Redirect requested via form
|
||||
if ($code == 200 && $input->has('redirect')) {
|
||||
return redirect($input->redirect);
|
||||
}
|
||||
|
||||
return $this->jsonResponse($resp, $code);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -191,6 +191,13 @@ class Changeset
|
||||
if ($this->isNewRow($row->_id)) {
|
||||
if ($decorate) {
|
||||
$row->_new = true;
|
||||
$row->_orig = array_diff((array)$row, []);
|
||||
// remove junk
|
||||
unset($row->_orig['_id']);
|
||||
unset($row->_orig['_new']);
|
||||
unset($row->_orig['_remove']);
|
||||
unset($row->_orig['_changed']);
|
||||
unset($row->_orig['_orig']);
|
||||
}
|
||||
return $row;
|
||||
}
|
||||
@@ -359,7 +366,9 @@ class Changeset
|
||||
public function fetchRow(int $id)
|
||||
{
|
||||
if ($this->isNewRow($id)) {
|
||||
return (object)$this->newRows[$id];
|
||||
$nr = (object)$this->newRows[$id];
|
||||
$nr->_new = true;
|
||||
return $nr;
|
||||
}
|
||||
|
||||
$r = $this->revision->rowsData($this->fetchColumns(), true, false)
|
||||
@@ -557,7 +566,8 @@ class Changeset
|
||||
$rows = self::csvToRowsArray($columns, $csvArray, false)
|
||||
->keyBy('_id');
|
||||
|
||||
$this->newRows = array_merge($this->newRows, $rows->all());
|
||||
// using '+' to avoid renumbering
|
||||
$this->newRows = $this->newRows + $rows->toArray();
|
||||
}
|
||||
|
||||
public function addBlankCol()
|
||||
@@ -587,4 +597,17 @@ class Changeset
|
||||
|
||||
$this->columnOrder = array_merge($order, $missing);
|
||||
}
|
||||
|
||||
public function removeEmptyNewRows()
|
||||
{
|
||||
$cols = $this->fetchColumns();
|
||||
$emptyTpl = collect($cols)->keyBy('id')->map(function(Column $c) {
|
||||
return $c->cast(null);
|
||||
})->all();
|
||||
|
||||
$this->newRows = array_filter($this->newRows, function ($r) use ($emptyTpl) {
|
||||
$emptyTpl['_id'] = $r['_id'];
|
||||
return $emptyTpl != $r;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -126,6 +126,11 @@ function collection_paginate($items, $per_page, $mapFn = null)
|
||||
$page = Request::get('page', 1);
|
||||
|
||||
$pageItems = $items->forPage($page, $per_page)->values();
|
||||
if (count($pageItems) == 0 && $page > 1) {
|
||||
$page = 1;
|
||||
Request::replace(['page' => $page]);
|
||||
$pageItems = $items->forPage($page, $per_page)->values();
|
||||
}
|
||||
|
||||
return new Illuminate\Pagination\LengthAwarePaginator(
|
||||
$mapFn ? $pageItems->map($mapFn) : $pageItems,
|
||||
|
||||
Reference in New Issue
Block a user