mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	Using sortablejs library, allow admin to modify custom fields order in admin settings using drag and drop of custom field list element. Fixes #9351
		
			
				
	
	
		
			111 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
zrequire('settings_profile_fields');
 | 
						|
 | 
						|
set_global('$', global.make_zjquery());
 | 
						|
set_global('templates', {});
 | 
						|
set_global('page_params', {});
 | 
						|
set_global('loading', {});
 | 
						|
set_global('Sortable', {create: () => {}});
 | 
						|
 | 
						|
 | 
						|
const SHORT_TEXT = 1;
 | 
						|
const CHOICE = 3;
 | 
						|
 | 
						|
page_params.custom_profile_field_types = [
 | 
						|
    [SHORT_TEXT, 'short_text'],
 | 
						|
    [CHOICE, 'choice'],
 | 
						|
];
 | 
						|
 | 
						|
function test_populate(opts) {
 | 
						|
    const fields_data = opts.fields_data;
 | 
						|
 | 
						|
    page_params.is_admin = opts.is_admin;
 | 
						|
    const table = $('#admin_profile_fields_table');
 | 
						|
    const rows = $.create('rows');
 | 
						|
    const form = $.create('forms');
 | 
						|
    table.set_find_results('tr.profile-field-row', rows);
 | 
						|
    table.set_find_results('tr.profile-field-form', form);
 | 
						|
 | 
						|
    var num_appends = 0;
 | 
						|
    table.append = () => {
 | 
						|
        num_appends += 1;
 | 
						|
    };
 | 
						|
 | 
						|
    loading.destroy_indicator = () => {};
 | 
						|
 | 
						|
    const template_data = [];
 | 
						|
    templates.render = (fn, data) => {
 | 
						|
        assert.equal(fn, 'admin_profile_field_list');
 | 
						|
        template_data.push(data);
 | 
						|
        return 'whatever';
 | 
						|
    };
 | 
						|
 | 
						|
    settings_profile_fields.do_populate_profile_fields(fields_data);
 | 
						|
 | 
						|
    assert.deepEqual(template_data, opts.expected_template_data);
 | 
						|
    assert.equal(num_appends, fields_data.length);
 | 
						|
}
 | 
						|
 | 
						|
run_test('populate_profile_fields', () => {
 | 
						|
    const fields_data = [
 | 
						|
        {
 | 
						|
            type: SHORT_TEXT,
 | 
						|
            id: 10,
 | 
						|
            name: 'favorite color',
 | 
						|
            hint: 'blue?',
 | 
						|
            field_data: '',
 | 
						|
        },
 | 
						|
        {
 | 
						|
            type: CHOICE,
 | 
						|
            id: 30,
 | 
						|
            name: 'meal',
 | 
						|
            hint: 'lunch',
 | 
						|
            field_data: JSON.stringify([
 | 
						|
                {
 | 
						|
                    text: 'lunch',
 | 
						|
                    order: 0,
 | 
						|
                },
 | 
						|
                {
 | 
						|
                    text: 'dinner',
 | 
						|
                    order: 1,
 | 
						|
                },
 | 
						|
            ]),
 | 
						|
        },
 | 
						|
    ];
 | 
						|
    const expected_template_data = [
 | 
						|
        {
 | 
						|
            profile_field: {
 | 
						|
                id: 10,
 | 
						|
                name: 'favorite color',
 | 
						|
                hint: 'blue?',
 | 
						|
                type: 'short_text',
 | 
						|
                choices: [],
 | 
						|
                is_choice_field: false,
 | 
						|
            },
 | 
						|
            can_modify: true,
 | 
						|
        },
 | 
						|
        {
 | 
						|
            profile_field: {
 | 
						|
                id: 30,
 | 
						|
                name: 'meal',
 | 
						|
                hint: 'lunch',
 | 
						|
                type: 'choice',
 | 
						|
                choices: [
 | 
						|
                    {order: 0, value: 0, text: 'lunch', add_delete_button: false},
 | 
						|
                    {order: 1, value: 1, text: 'dinner', add_delete_button: true},
 | 
						|
                ],
 | 
						|
                is_choice_field: true,
 | 
						|
            },
 | 
						|
            can_modify: true,
 | 
						|
        },
 | 
						|
    ];
 | 
						|
 | 
						|
    test_populate({
 | 
						|
        fields_data: fields_data,
 | 
						|
        expected_template_data: expected_template_data,
 | 
						|
        is_admin: true,
 | 
						|
    });
 | 
						|
});
 | 
						|
 | 
						|
 | 
						|
 |