Skip to content

Commit ddb1823

Browse files
committed
Implement persist_state setting
1 parent 5916c91 commit ddb1823

File tree

6 files changed

+35
-5
lines changed

6 files changed

+35
-5
lines changed

docs/source/index.html.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ datatables:
128128
option: value
129129

130130
# Where to persist the current table state automatically
131-
persist_state: fragment # One of "query"; "fragment"; "local"; "session"
131+
persist_state: fragment # One of "none"; "query"; "fragment"; "local"; "session"
132132

133133
# Default service used to render templates, built-in TwigRenderer uses global Twig environment
134134
renderer: Omines\DataTablesBundle\Twig\TwigRenderer

src/DataTable.php

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ class DataTable
7373
/** @var string */
7474
protected $name = 'dt';
7575

76+
/** @var string */
77+
protected $persistState = 'fragment';
78+
7679
/** @var string */
7780
protected $template = self::DEFAULT_TEMPLATE;
7881

@@ -229,9 +232,9 @@ public function getName(): string
229232
/**
230233
* @return string
231234
*/
232-
public function getTranslationDomain(): string
235+
public function getPersistState(): string
233236
{
234-
return $this->translationDomain;
237+
return $this->persistState;
235238
}
236239

237240
/**
@@ -242,6 +245,14 @@ public function getState()
242245
return $this->state;
243246
}
244247

248+
/**
249+
* @return string
250+
*/
251+
public function getTranslationDomain(): string
252+
{
253+
return $this->translationDomain;
254+
}
255+
245256
/**
246257
* @return bool
247258
*/
@@ -391,6 +402,16 @@ public function setMethod(string $method): self
391402
return $this;
392403
}
393404

405+
/**
406+
* @param string $persistState
407+
* @return self
408+
*/
409+
public function setPersistState(string $persistState): DataTable
410+
{
411+
$this->persistState = $persistState;
412+
return $this;
413+
}
414+
394415
/**
395416
* @param DataTableRendererInterface $renderer
396417
* @return self

src/DataTableFactory.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public function create(array $options = [])
6060
return (new DataTable(array_merge($config['options'] ?? [], $options), $this->instantiator))
6161
->setRenderer($this->renderer)
6262
->setMethod($config['method'] ?? Request::METHOD_POST)
63+
->setPersistState($config['persist_state'] ?? 'fragment')
6364
->setTranslationDomain($config['translation_domain'] ?? 'messages')
6465
->setLanguageFromCDN($config['language_from_cdn'] ?? true)
6566
->setTemplate($config['template'] ?? DataTable::DEFAULT_TEMPLATE, $config['template_parameters'] ?? [])

src/DependencyInjection/Configuration.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public function getConfigTreeBuilder()
3636
->end()
3737
->enumNode('persist_state')
3838
->info('Where to persist the current table state automatically')
39-
->values(['query', 'fragment', 'local', 'session'])
39+
->values(['none', 'query', 'fragment', 'local', 'session'])
4040
->defaultValue('fragment')
4141
->end()
4242
->enumNode('method')

src/Resources/assets/js/datatables.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@
2828
break;
2929
}
3030
state = (state.length > 1 ? deparam(state.substr(1)) : {});
31+
var persistOptions = config.state === 'none' ? {} : {
32+
stateSave: true,
33+
stateLoadCallback: function(settings) {
34+
state.time = Date.now();
35+
return state;
36+
}
37+
};
3138

3239
return new Promise((fulfill, reject) => {
3340
// Perform initial load
@@ -40,7 +47,7 @@
4047
}).done(function(data) {
4148
var rebuild = true, cached;
4249

43-
var dtOpts = $.extend({}, data.options, config.options, options, {
50+
var dtOpts = $.extend({}, data.options, config.options, options, persistOptions, {
4451
ajax: function (request, drawCallback, settings) {
4552
if (rebuild) {
4653
data.draw = request.draw;

src/Twig/DataTablesExtension.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public function getFunctions()
4040
return json_encode([
4141
'name' => $dataTable->getName(),
4242
'method' => $dataTable->getMethod(),
43+
'state' => $dataTable->getPersistState(),
4344
'options' => [
4445
'language' => $this->getLanguageSettings($dataTable),
4546
],

0 commit comments

Comments
 (0)