View | Details | Raw Unified | Return to bug 33484
Collapse All | Expand All

(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/columns_settings.inc (-59 / +19 lines)
Lines 15-45 function KohaTable(id_selector, dt_parameters, table_settings, add_filters) { Link Here
15
        let columns_settings = table_settings["columns"];
15
        let columns_settings = table_settings["columns"];
16
16
17
        let table_key = 'DataTables_%s_%s_%s'.format(
17
        let table_key = 'DataTables_%s_%s_%s'.format(
18
            table_settings["module"],
18
            table_settings.module,
19
            table_settings["page"],
19
            table_settings.page,
20
            table_settings["table"]);
20
            table_settings.table);
21
21
22
        let default_save_state        = table_settings.default_save_state;
22
        let default_save_state        = table_settings.default_save_state;
23
        let default_save_state_search = table_settings.default_save_state_search;
23
        let default_save_state_search = table_settings.default_save_state_search;
24
24
25
        if ( default_save_state ) {
25
        dt_parameters.stateSave = true;
26
            dt_parameters["stateSave"] = true;
26
        dt_parameters.stateSaveCallback = function( settings, data ) {
27
            dt_parameters["stateSaveCallback"] = function( settings, data ) {
27
            localStorage.setItem( table_key, JSON.stringify(data) )
28
                if (!default_save_state_search ) {
29
                    delete data.search;
30
                    data.columns.forEach(c => delete c.search );
31
                }
32
                localStorage.setItem( table_key, JSON.stringify(data) )
33
            }
34
            dt_parameters["stateLoadCallback"] = function(settings) {
35
                return JSON.parse( localStorage.getItem(table_key) )
36
            }
37
            let local_settings = localStorage.getItem(table_key);
38
            columns_settings = get_columns_saved_state(local_settings, columns_settings);
39
        } else {
40
            localStorage.removeItem(table_key);
41
        }
28
        }
29
        dt_parameters.stateLoadCallback = function(settings) {
30
            if (!default_save_state) return {};
31
32
            let state = localStorage.getItem(table_key);
33
            if (!state) return {};
42
34
35
            state = JSON.parse(state);
36
37
            if (!default_save_state_search ) {
38
                delete state.search;
39
                state.columns.forEach(c => delete c.search );
40
            }
41
            return state;
42
        }
43
43
44
        $(columns_settings).each( function() {
44
        $(columns_settings).each( function() {
45
            var named_id = $( 'thead th[data-colname="' + this.columnname + '"]', selector ).index( selector + ' th' );
45
            var named_id = $( 'thead th[data-colname="' + this.columnname + '"]', selector ).index( selector + ' th' );
Lines 264-308 function KohaTable(id_selector, dt_parameters, table_settings, add_filters) { Link Here
264
264
265
    return table;
265
    return table;
266
}
266
}
267
268
269
/* get_columns_saved_state checks for a DataTables configuration saved
270
* in the browser's local storage. If it is present, the columns
271
* configuration supplied by Koha is overwritten
272
*
273
* It takes two parameters:
274
*  - localstorage_config, the DataTables saved state object from local storage
275
*  - columns_settings, the columns settings object supplied by the template
276
*
277
* An example:
278
*
279
*    var columns_settings = [% ColumnsSettings.GetColumns( 'module', 'page', 'table', 'json' ) | $raw %];
280
*    var saved_table = localStorage.getItem("DataTables_TABLE_ID_/cgi-bin/koha/PATH/TO/SCRIPT.pl");
281
*    var updated_settings = get_columns_saved_state( saved_table, columns_settings );
282
*
283
*    KohaTable("TABLE_ID", {
284
*        "stateSave": true
285
*    }, updated_settings);
286
*/
287
288
function get_columns_saved_state( localstorage_config, columns_settings ){
289
    var tables = JSON.parse( localstorage_config );
290
    // if a table configuration was found in local storage, parse it
291
    if( tables ){
292
        var stateSave_column_visibility = [];
293
        $(tables.columns).each(function(){
294
            stateSave_column_visibility.push( this.visible === true ? 0 : 1 );
295
        });
296
        $.each( columns_settings, function( index, key ){
297
            if( stateSave_column_visibility[ index ] !== columns_settings[key] ){
298
                columns_settings[ index ].is_hidden = stateSave_column_visibility[ index ];
299
            }
300
        });
301
        return columns_settings;
302
    } else {
303
        return columns_settings;
304
    }
305
}
306
307
</script>
267
</script>
308
<!-- / columns_settings.inc -->
268
<!-- / columns_settings.inc -->
(-)a/koha-tmpl/intranet-tmpl/prog/js/datatables.js (-41 / +30 lines)
Lines 938-958 function _dt_add_delay(table_dt, table_node, delay_ms) { Link Here
938
    });
938
    });
939
}
939
}
940
940
941
function _dt_get_saved_state( localstorage_config, columns_settings ){
941
function _dt_save_restore_state(table_settings){
942
    var tables = JSON.parse( localstorage_config );
942
943
    // if a table configuration was found in local storage, parse it
943
    let table_key = 'DataTables_%s_%s_%s'.format(
944
    if( tables ){
944
        table_settings.module,
945
        var stateSave_column_visibility = [];
945
        table_settings.page,
946
        $(tables.columns).each(function(){
946
        table_settings.table);
947
            stateSave_column_visibility.push( this.visible === true ? 0 : 1 );
947
948
        });
948
    let default_save_state        = table_settings.default_save_state;
949
        $.each( columns_settings, function( index, key ){
949
    let default_save_state_search = table_settings.default_save_state_search;
950
            if( stateSave_column_visibility[ index ] !== columns_settings[key] ){
950
951
                columns_settings[ index ].is_hidden = stateSave_column_visibility[ index ];
951
    let stateSaveCallback = function( settings, data ) {
952
            }
952
        localStorage.setItem( table_key, JSON.stringify(data) )
953
        });
953
    }
954
    let stateLoadCallback = function(settings) {
955
        if (!default_save_state) return {};
956
957
        let state = localStorage.getItem(table_key);
958
        if (!state) return {};
959
960
        state = JSON.parse(state);
961
962
        if (!default_save_state_search ) {
963
            delete state.search;
964
            state.columns.forEach(c => delete c.search );
965
        }
966
        return state;
954
    }
967
    }
955
    return columns_settings;
968
969
    return {stateSave: true, stateSaveCallback, stateLoadCallback};
956
}
970
}
957
971
958
(function($) {
972
(function($) {
Lines 1009-1041 function _dt_get_saved_state( localstorage_config, columns_settings ){ Link Here
1009
        }
1023
        }
1010
1024
1011
        if ( table_settings ) {
1025
        if ( table_settings ) {
1012
1026
            let state_settings = _dt_save_restore_state(table_settings);
1013
            let columns_settings = table_settings["columns"];
1027
            settings = {...settings, ...state_settings};
1014
            let table_key = 'DataTables_%s_%s_%s'.format(
1015
                table_settings["module"],
1016
                table_settings["page"],
1017
                table_settings["table"]);
1018
1019
            let default_save_state        = table_settings.default_save_state;
1020
            let default_save_state_search = table_settings.default_save_state_search;
1021
1022
            if ( default_save_state ) {
1023
                settings["stateSave"] = true;
1024
                settings["stateSaveCallback"] = function( settings, data ) {
1025
                    if (!default_save_state_search ) {
1026
                        delete data.search;
1027
                        data.columns.forEach(c => delete c.search );
1028
                    }
1029
                    localStorage.setItem( table_key, JSON.stringify(data) )
1030
                }
1031
                settings["stateLoadCallback"] = function(settings) {
1032
                    return JSON.parse( localStorage.getItem(table_key) )
1033
                }
1034
                let local_settings = localStorage.getItem(table_key);
1035
                columns_settings = _dt_get_saved_state(local_settings, columns_settings);
1036
            } else {
1037
                localStorage.removeItem(table_key);
1038
            }
1039
1028
1040
            if ( table_settings.hasOwnProperty('default_display_length') && table_settings['default_display_length'] != null ) {
1029
            if ( table_settings.hasOwnProperty('default_display_length') && table_settings['default_display_length'] != null ) {
1041
                settings["pageLength"] = table_settings['default_display_length'];
1030
                settings["pageLength"] = table_settings['default_display_length'];
(-)a/koha-tmpl/intranet-tmpl/prog/js/vue/components/KohaTable.vue (-32 / +4 lines)
Lines 37-73 export default { Link Here
37
        }
37
        }
38
38
39
        if (this.table_settings) {
39
        if (this.table_settings) {
40
            let columns_settings = this.table_settings["columns"]
40
            let state_settings = _dt_save_restore_state(this.table_settings)
41
            let table_key = "DataTables_%s_%s_%s".format(
41
            this.options.stateSave = state_settings.stateSave
42
                this.table_settings.module,
42
            this.options.stateSaveCallback = state_settings.stateSaveCallback
43
                this.table_settings.page,
43
            this.options.stateLoadCallback = state_settings.stateLoadCallback
44
                this.table_settings.table
45
            )
46
47
            let default_save_state = this.table_settings.default_save_state
48
            let default_save_state_search =
49
                this.table_settings.default_save_state_search
50
51
            if (default_save_state) {
52
                this.options.stateSave = true
53
                this.options.stateSaveCallback = function (settings, data) {
54
                    if (!default_save_state_search) {
55
                        delete data.search
56
                        data.columns.forEach(c => delete c.search)
57
                    }
58
                    localStorage.setItem(table_key, JSON.stringify(data))
59
                }
60
                this.options.stateLoadCallback = function (settings) {
61
                    return JSON.parse(localStorage.getItem(table_key))
62
                }
63
                let local_settings = localStorage.getItem(table_key)
64
                columns_settings = _dt_get_saved_state(
65
                    local_settings,
66
                    columns_settings
67
                )
68
            } else {
69
                localStorage.removeItem(table_key)
70
            }
71
44
72
            if (
45
            if (
73
                this.table_settings.hasOwnProperty("default_display_length") &&
46
                this.table_settings.hasOwnProperty("default_display_length") &&
74
- 

Return to bug 33484